Invoicing

account
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/account
VERSION
VERSION 1.4
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Fabien Pinckaers, Thibault Delavallée, Josse Colpaert, Alexis de Lattre, Xavier ALT, Christophe Simonis, Xavier Morel, Joren Van Onder, Nicolas Lempereur, Thibault Francois, qdp-odoo, Géry Debongnie, Aaron Bohy, Damien Bouvy, Laurent Smet, Christophe Monniez, Jorge Pinna Puissant, Arnold Moyaux, Julien Castiaux, Denis Roussel, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Sébastien Theys, oco-odoo, Julien Mougenot, Anh Thao Pham (pta), svs-odoo, Alvaro Fuentes, Achraf (abz), Brice bib Bartoletti, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Yenthe666, William Braeckman, odoo, Florent Xicluna, roen-odoo, Benoit Socias, Jigar Vaghela, william-andre, Florian Charlier, Louis Baudoux, Abdelouahab (abla), John Laterre (jol), Florian Gilbert, Ruben Gomes, Thomas Beckers, assellalou, Aurelien van Delft (avd), Hubert Van De Walle, luvi, Florian(flg), Valentin Chevalier, Renaud Thiry, Julien Banken, Pierrot (prro), jbw-odoo, Iván Todorovich, Habib (ayh), alsh-odoo, François Honoré, Pedram (PEBR), Louis Wicket (wil), Mylyna Hy, Adrien Widart (awt), Maximilien (malb), Victor Piryns (pivi), Mahamadasif Ansari, Thomas Becquevort (thbe), Gauthier Wala (gawa), Ali Alfie (alal), Pierre-Yves Dufays, Andrew Gavgavian, Claire Bretton (clbr), Yosua Nicolaus, Robin Lejeune (role), Levi Siuzdak (sile), Naman Shah, Antoine Dupuis (andu), Carsten Wolff (cawo), Antoine Boonen, Dylan Kiss (dyki), Jinane Maksoud, hupo-odoo, Paolo Gatti, Julien Alardot (jual), Chong Wang (cwg), Odoo, Vivek Pathak, Brieuc-brd, Nguyễn Đại Dương, Harsh Modi, Zeel Patel, Sarah Bellefroid, adda-odoo, Arnaud Sibille, omra-odoo, Joris Makauskis, Nicolas Viseur (vin), sesn-odoo, guva-odoo, kdeb@odoo.com, Paul Stroobant, maad-odoo, Jay Savaliya, Ethan Vincent, Aurelien MARIE (auma), Maryam Kia, Louis (loti), jorv-odoo, reka-odoo, Sven Fuehr, AMZIL Ayoub, Seif (segn), yosa-odoo, Mohamed GadAlrab, vava-odoo, jobl, Bastien Fafchamps (bafa), Julien Carion (juca), kcv-odoo, odoostan, mega, SaddemAmine, Martin Trigaux (mat), Louis Gobert, Agustin Castro Bugallo, Chrysanthe (chgo), Rodolpho Lima, asno-odoo, mano-odoo, Harsh Shah, dijo-odoo, Joseph (jcb), aamo-odoo, Hussein Ebrahim(hyhe), Victorien (viso), manv-afk, thle-odoo, Mathieu Coutant, Khumam Alzagim, guce, yagp-odoo, Ahmad (alah), Sanchit Gupta, Stéphane Diez, Ryan Cen, komugi-al, casp-odoo, Claire (clbr), gteboul, Rocío Vega, Antoine (anso), Abdo Mongy, unka-odoo, Hammad Arif, prep-odoo, Antoine Dupuis, Léo Gizard, Hesham Saleh, Julien Schwanen, Saif (segn), Ian, Victor Miguel Armenta Carrillo, dija-odoo, aizu-odoo, AhmedElemary57, sben-odoo, Ricardo Gomes Rodrigues, gvar-odoo, Smit Patel, Logan Staelens, Trinh Ngoc Hung, Emeka Ubakanma, roto-odoo, Maira Salazar (srma), Ezzuldin Zaky (ezza), st-yes, Kawtar Drissi El Bouzaidi (kdeb), Arthur Nanson, Ahmed Abdelaziz Hasaneen, Cuong, Nguyen Minh Tran Manh, elhayyany, pkgu-odoo, Mohammad Abdulmoneim (abdu), khsr-odoo, Pierre Lamotte (pila), Michaël Mattiello, nikj-odoo, Pierre Pulinckx, Bastien PIERRE, Anton Romanova (roan), masm-odoo, Corentin Heinix (cohe), Corentin Lombard, Allesio, ppat-odoo, Carmine, Shrey Mehta, Sherif Gabr, pish-odoo, Panagiotis Kyriakou, MaximeNoirhomme, bona-odoo, plha-odoo, Thomas Josse (THJO), Krzysztof Magusiak (krma), Mahdi Alijani (malj), nape-odoo, devp-odoo, Omar (OSAH), Ajit Singh, Akash Pandey, Nils Coenen, Andrii Kompaniiets, dvsh-odoo, AllePilli, krip-odoo, Hazem Ibrahim, hatr-odoo, Basioni (basm), utma-odoo, Robin Engels (roen), rida, sagu-odoo, Ester Andreetto, nsirjacobs, bhra-odoo, ijja-odoo, Earth Patel, pajo, bhna-odoo, mojem, Dirk Douglas, MAGREMENT, thha-odoo, rare-odoo, sawer, agbr-odoo, aksi-odoo, mohannedah, Junqi, Lulu Grimalkin (lugr), Yassien Ghoniem, Jugurtha, igbe, Lancelot Semal, Mongy (abmn), Jeanne Delneste, hisi-odoo, Laurent Smet (LAS), aans-odoo, adip-odoo, macs-odoo, shka-odoo, Jérôme Belpaire, suju-odoo, malb, josv-odoo, h4818, path-odoo, krge-odoo, Orrin Zhong, Ashish Nirmal, leclerc-leo, Ayush Modi, Manav Shah, Martin Doyen, Jacob Was (jacw), Karna, Saurabh, Amr Elkhatieb, jond-odoo, Nisarg (nipl), Robert Smith (rosm), assh-odoo, Elliot ELCO, Felipe Garcia Suez, Lionel Piraux (lipi), suma-odoo, Kevin Gerard (kege), hossamelgendy1, Waleed Elgamal, matd-odoo, rapa, Merlin Guillaume, YoussefM890, Leonardo Medina, saurabh, rugot-odoo, Camila Vives, pkri-odoo, steji, Nguyen Nguyen (ngtpn), Eve Lin (evlin), jand-odoo, Stephane Vanmeerhaeghe (stva), Léo Gizard (legi), shzi-odoo, Romain (roto), Yosua Nicolaus (yoni), smjo-odoo, Kadam Darji, Zachary (zavan), Abo Taha, Mauricio Rubio Haro, Suresh Badikala, abmn-odoo, FWA-Amri.WICAHYO, Rebeca Ramírez (lare), soza-odoo, Akash, baje-odoo, Farah (ahmfa), ELCO, chpa-odoo, 3amo-magdy, Adham Abdeltawab, Romain ROSANO (rros), Dhrumit Parmar, Luigys Toro, metu-odoo, Quách Thế Hào, Wajih-Wanis, jeanschoenlaub
WEBSITE
WEBSITEhttps://www.odoo.com/app/invoicing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 20:50:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (178)
XML IDNameModelTypeStatus
account.account_terms_conditions_setting_banner Account Terms and Conditions Setting Banner ir.ui.view qweb New
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account div Inherits analytic.view_account_analytic_account_form
account_analytic_account_view_list_inherit account.analytic.account.list.inherit account.analytic.account field Inherits analytic.view_account_analytic_account_list
account_analytic_distribution_model_form_inherit account.analytic.distribution.model.inherit.form account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_form_view
account_analytic_distribution_model_tree_inherit account.analytic.distribution.model.inherit.list account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_tree_view
account_analytic_plan_form_view_inherit_account account.analytic.plan.inherit.form account.analytic.plan data Inherits analytic.account_analytic_plan_form_view
account_automatic_entry_wizard_form account.automatic.entry.wizard.form account.automatic.entry.wizard form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_default_terms_and_conditions account_default_terms_and_conditions ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_report_view_tree account.invoice.report.view.list account.invoice.report list New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_merge_wizard_form account.merge.wizard.form account.merge.wizard form New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_move_line_view_kanban_mobile account.move.line.kanban.mobile account.move.line xpath Inherits account_move_line_view_kanban
account_move_send_batch_wizard_form account.move.send.batch.wizard.form account.move.send.batch.wizard form New
account_move_send_wizard_form account.move.send.wizard.form account.move.send.wizard form New
account_move_view_activity account.move.view.activity account.move activity New
account_resequence_view Re-sequence Journal Entries account.resequence.wizard form New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag list New
account_tax_fiscal_position_view_tree account.fiscal.position.tax.list account.tax field Inherits account.account_tax_view_tree
account_tax_group_view_search account.tax.group.search.filters account.tax.group search New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax list New
account_terms_conditions_page Terms & Conditions ir.ui.view qweb New
autopost_bills_wizard Autopost Bills account.autopost.bills.wizard form New
bill_preview bill_preview ir.ui.view qweb New
country_group_form_inherit_account res.country.group.form.inherit.account res.country.group field Inherits base.view_country_group_form
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
document_tax_totals document_tax_totals ir.ui.view qweb Inherits account.document_tax_totals_template
document_tax_totals_company_currency_template document_tax_totals_company_currency_template ir.ui.view qweb New
document_tax_totals_template document_tax_totals_template ir.ui.view qweb New
email_template_mail_gateway_failed email_template_mail_gateway_failed ir.ui.view qweb New
init_accounts_tree account.setup.opening.move.line.list account.account list New
ir_actions_report_form_inherit_account ir.actions.report.form.inherit.account ir.actions.report field Inherits base.act_report_xml_view
partner_missing_account_list_view res.partner.list res.partner list New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice/Bill ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_required_fields_form portal_invoice_required_fields_form ir.ui.view qweb New
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb Inherits portal.portal_my_details
portal_my_home_invoice Invoices / Bills ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
portal_my_journal_mail_notifications My journal email notification settings ir.ui.view qweb New
product_product_view_form_normalized_account product.product.view.form.normalized.account.inherit product.product field Inherits product.product_product_view_form_normalized
product_template_form_view product.template.form.inherit product.template div Inherits product.product_template_form_view
product_template_list_view_purchasable_inherit product.template.list.purchasable.inherit product.template xpath Inherits product.product_template_list_view_purchasable
product_template_list_view_sellable_inherit product.template.list.sellable.inherit product.template xpath Inherits product.product_template_list_view_sellable
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
product_view_search_catalog product.view.search.catalog.inherit.account product.product xpath Inherits product.product_view_search_catalog
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_document_preview report_invoice_document_preview ir.ui.view qweb Inherits account.report_invoice_document
report_invoice_qr_code_preview report_invoice_qr_code_preview ir.ui.view qweb New
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_invoice_wizard_iframe report_invoice_wizard_iframe ir.ui.view qweb New
report_invoice_wizard_preview_inherit_account report_invoice_wizard_preview_inherit_account ir.ui.view qweb Inherits web.report_invoice_wizard_preview
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
report_statement_internal_layout report_statement_internal_layout ir.ui.view qweb Inherits web.internal_layout
res_company_form_view_onboarding res.company.form.view.onboarding res.company form New
res_company_form_view_onboarding_sale_tax res.company.form.view.onboarding.sale.tax res.company form New
res_company_view_form_terms res.company.view.form.terms res.company form New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_config_settings_view_form_base_setup res.config.settings.view.form.inherit.base_setup res.config.settings xpath Inherits base_setup.res_config_settings_view_form
res_currency_form_inherit res.currency.form.inherit res.currency form Inherits base.view_currency_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
res_partner_view_tree res.partner.list.inherit.account res.partner xpath Inherits base.view_partner_tree
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.list account.cash.rounding list New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_credit_card_account_wizard account.online.sync.res.partner.credit.card.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_repartition_line_tree account.tax.repartition.line.list account.tax.repartition.line list New
tests_shared_js_python tests_shared_js_python ir.ui.view qweb New
validate_account_move_view Confirm Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_accrued_orders_wizard account.accrued.orders.wizard.view account.accrued.orders.wizard form New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.list.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bill_filter account.invoice.select account.move field Inherits account.view_account_invoice_filter
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.list account.group list New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.list account.journal.group list New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.list account.journal list New
view_account_list account.account.list account.account list New
view_account_lock_exception_form account.lock_exception.form account.lock_exception form New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_line_payment_filter account.move.line.payment.search account.move.line search New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_move_with_gaps_in_sequence_filter account.move.with.gaps.in.sequence.filter account.move filter Inherits account.view_account_invoice_filter
view_account_payment_form account.payment.form account.payment form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_method_line_kanban_mobile account.payment.method.line.kanban account.payment.method.line kanban New
view_account_payment_method_line_tree account.payment.method.line.list account.payment.method.line list New
view_account_payment_register_form account.payment.register.form account.payment.register form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.list account.payment list New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_tree account.fiscal.position.list account.fiscal.position list New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.list account.reconcile.model list New
view_account_search account.account.search account.account search New
view_account_secure_entries_wizard account.secure.entries.wizard.form account.secure.entries.wizard form New
view_account_supplier_payment_tree account.supplier.payment.list account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_various_payment_tree account.supplier.payment.list account.payment field Inherits account.view_account_payment_tree
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.list account.bank.statement list New
view_base_document_layout Document Layout base.document.layout xpath Inherits web.view_base_document_layout
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_form res.company.form.inherit.account res.company xpath Inherits base.view_company_form
view_duplicated_moves_tree_js account.duplicated.moves.list.js account.move xpath Inherits account.view_invoice_tree
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_in_invoice_bill_tree account.out.invoice.list account.move field Inherits account.view_in_invoice_tree
view_in_invoice_refund_tree account.out.invoice.list account.move field Inherits account.view_in_invoice_tree
view_in_invoice_tree account.out.invoice.list account.move xpath Inherits account.view_invoice_tree
view_incoterms_tree account.incoterms.list account.incoterms list New
view_invoice_tree account.invoice.list account.move list New
view_message_tree_audit_log mail.message.list.inherit.audit.log mail.message list New
view_message_tree_audit_log_search mail.message.search mail.message search New
view_module_filter_inherit_account ir.module.module.list.inherit.account ir.module.module xpath Inherits base.view_module_filter
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_payment_tree account.move.line.payment.list account.move.line list New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.list account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.list account.move.line list New
view_move_line_tree_grouped_bank_cash account.move.line.list.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_general account.move.line.list.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_misc account.move.line.list.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_partner account.move.line.list.grouped.partner account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_sales_purchases account.move.line.list.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree
view_move_tree account.move.list account.move list New
view_move_tree_multi_edit account.move.list.multi.edit account.move xpath Inherits account.view_move_tree
view_onboarding_tax_tree account.onboarding.tax.list account.tax xpath Inherits account.view_tax_tree
view_out_credit_note_tree account.out.invoice.list account.move button Inherits account.view_invoice_tree
view_out_invoice_tree account.out.invoice.list account.move button Inherits account.view_invoice_tree
view_partner_bank_form_inherit_account res.partner.bank.form.inherit.account res.partner.bank xpath Inherits base.view_partner_bank_form
view_partner_bank_search_inherit res.partner.bank.search.inherit res.partner.bank xpath Inherits base.view_partner_bank_search
view_partner_property_form res.partner.property.form.inherit res.partner xpath Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.list account.payment.term list New
view_tax_form account.tax.form account.tax form New
view_tax_group_form account.tax.group.form account.tax.group form New
view_tax_group_tree account.tax.group.list account.tax.group list New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.list account.tax list New
Models touched (92)

New fields (28)
  • account_type Selection
    compute='_compute_account_type' help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' index=True precompute=True readonly=False required=True selection=[('asset_receivable', 'Receivable'), ('asset_cash', 'Bank and Cash'), ('asset_current', 'Current Assets'), ('asset_non_current', 'Non-current Assets'), ('asset_prepayments', 'Prepayments'), ('asset_fixed', 'Fixed Assets'), ('liability_payable', 'Payable'), ('liability_credit_card', 'Credit Card'), ('liability_current', 'Current Liabilities'), ('liability_non_current', 'Non-current Liabilities'), ('equity', 'Equity'), ('equity_unaffected', 'Current Year Earnings'), ('income', 'Income'), ('income_other', 'Other Income'), ('expense', 'Expenses'), ('expense_other', 'Other Expenses'), ('expense_depreciation', 'Depreciation'), ('expense_direct_cost', 'Cost of Revenue'), ('off_balance', 'Off-Balance Sheet')] store=True string='Type' tracking=True
  • active Boolean
    default=True tracking=True
  • code Char
    compute='_compute_code' inverse='_inverse_code' search='_search_code' size=64 string='Code' tracking=True
  • code_mapping_ids One2many → account.code.mapping
    comodel_name='account.code.mapping' inverse_name='account_id'
  • code_store Char
    company_dependent=True
  • company_currency_id Many2one → res.currency
    compute='_compute_company_currency_id' args: 'res.currency'
  • company_fiscal_country_code Char
    compute='_compute_company_fiscal_country_code'
  • company_ids Many2many → res.company
    default=<expr> depends_context=('uid') readonly=False required=True string='Companies' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all journal items in this account to have a specific currency (i.e. bank journals). If no currency is set, entries can use any currency.' string='Account Currency' tracking=True args: 'res.currency'
  • current_balance Float
    compute='_compute_current_balance'
  • description Text
    translate=True
  • display_mapping_tab Boolean
    default=<expr> store=False
  • group_id Many2one → account.group
    compute='_compute_account_group' help='Account prefixes can determine account groups.' args: 'account.group'
  • include_initial_balance Boolean
    compute='_compute_include_initial_balance' help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' search='_search_include_initial_balance' string='Bring Accounts Balance Forward'
  • internal_group Selection
    compute='_compute_internal_group' search='_search_internal_group' selection=[('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off', 'Off Balance')] string='Internal Group'
  • name Char
    index='trigram' required=True string='Account Name' tracking=True translate=True
  • non_trade Boolean
    default=False help='If set, this account will belong to Non Trade Receivable/Payable in reports and filters.\nIf not, this account will belong to Trade Receivable/Payable in reports and filters.'
  • note Text
    tracking=True args: 'Internal Notes'
  • opening_balance Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_balance' string='Opening Balance'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_credit' string='Opening Credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_debit' string='Opening Debit'
  • placeholder_code Char
    compute='_compute_placeholder_code' search='_search_placeholder_code' string='Display code'
  • reconcile Boolean
    compute='_compute_reconcile' help='Check this box if this account allows invoices & payments matching of journal items.' precompute=True readonly=False store=True string='Allow Reconciliation' tracking=True
  • related_taxes_amount Integer
    compute='_compute_related_taxes_amount'
  • root_id Many2one → account.root
    compute='_compute_account_root' search='_search_account_root' args: 'account.root'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' compute='_compute_account_tags' help='Optional tags you may want to assign for custom reporting' ondelete='restrict' precompute=True readonly=False relation='account_account_account_tag' store=True string='Tags' tracking=True
  • tax_ids Many2many → account.tax
    check_company=True context={'append_fields': ['type_tax_use', 'company_id']} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
Public methods (10)
  • action_open_related_taxes(self)
  • action_unmerge(self)
    Split the account `self` into several accounts, one per company. The original account's codes are assigned respectively to the account created in each company. From an accounting perspective, this does not change anything to the journal items, since their account codes will remain unchanged.
  • copy_data(self, default=None)
  • copy_translations(self, new, excluded=())
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
    Split the account name into account code and account name in import. When importing a file with accounts, the account code and name may be both entered in the name column. In this case, the name will be split into code and name.
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model@api.readonly
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes'), ('products', 'Products')]
  • balance_negate Boolean
    compute='_compute_report_expression_id'
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True translate=True args: 'Tag Name'
  • report_expression_id Many2one → account.report.expression
    compute='_compute_report_expression_id' args: 'account.report.expression'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', '=', 'liability_current')] if context.get('active_model') in ['purchase.order', 'purchase.order.line'] else [('account_type', '=', 'asset_current')]" required=True string='Accrual Account'
  • amount Monetary
    help='Specify an arbitrary value that will be accrued on a default account for the entire order, regardless of the products on the different lines.' string='Amount'
  • company_id Many2one → res.company
    default=_get_default_company args: 'res.company'
  • currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • date Date
    default=_get_default_date required=True
  • display_amount Boolean
    compute='_compute_display_amount'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' domain="[('type', '=', 'general')]" precompute=True readonly=False required=True store=True string='Journal'
  • preview_data Text
    compute='_compute_preview_data'
  • reversal_date Date
    compute='_compute_reversal_date' precompute=True readonly=False required=True store=True
Public methods (1)
  • create_entries(self)

New fields (2)
  • invoice_count Integer
    compute='_compute_invoice_count' args: 'Invoice Count'
  • vendor_bill_count Integer
    compute='_compute_vendor_bill_count' args: 'Vendor Bill Count'
Public methods (2)
  • action_view_invoice(self)
  • action_view_vendor_bill(self)

New fields (5)
  • account_prefix Char
    help='Prefix that defines which accounts from the financial accounting this applicability should apply on.' string='Financial Accounts Prefixes'
  • account_prefix_placeholder Char
    compute='_compute_prefix_placeholder'
  • business_domain Selection
    ondelete={'invoice': 'cascade', 'bill': 'cascade'} selection_add=[('invoice', 'Invoice'), ('bill', 'Vendor Bill')]
  • display_account_prefix Boolean
    compute='_compute_display_account_prefix' help='Defines if the field account prefix should be displayed'
  • product_categ_id Many2one → product.category
    string='Product Category' args: 'product.category'
Public methods (0)

No public methods.

New fields (4)
  • account_prefix Char
    help='This analytic distribution will apply to all financial accounts sharing the prefix specified.' string='Accounts Prefix'
  • prefix_placeholder Char
    compute='_compute_prefix_placeholder'
  • product_categ_id Many2one → product.category
    help='Select a product category which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    check_company=True help='Select a product for which the analytic distribution will be used (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (10)
  • analytic_profitability Selection
    compute='_compute_analytic_profitability' search='_search_analytic_profitability' selection=[('uncategorized', 'Uncategorized'), ('revenue', 'Revenue'), ('loss', 'Loss')] string='Profitability'
  • category Selection
    selection_add=[('invoice', 'Customer Invoice'), ('vendor_bill', 'Vendor Bill')]
  • code Char
    size=8
  • general_account_id Many2one → account.account
    check_company=True compute='_compute_general_account_id' ondelete='restrict' readonly=False store=True string='Financial Account' args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True readonly=True related='move_line_id.journal_id' store=True string='Financial Journal' args: 'account.journal'
  • move_line_id Many2one → account.move.line
    check_company=True index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • product_category Many2one
    related='product_id.categ_id'
  • product_id Many2one → product.product
    check_company=True index='btree_not_null' string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • unlink(self)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (16)
  • account_type Selection
    compute='_compute_account_type' store=True args: [('income', 'Revenue'), ('expense', 'Expense')]
  • action Selection
    required=True args: [('change_period', 'Change Period'), ('change_account', 'Change Account')]
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • date Date
    default=<expr> required=True
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Account to transfer to.' string='To'
  • display_currency_helper Boolean
    compute='_compute_display_currency_helper' string='Currency Conversion Helper'
  • expense_accrual_account Many2one → account.account
    check_company=True compute='_compute_expense_accrual_account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" inverse='_inverse_expense_accrual_account' readonly=False args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('type', '=', 'general')]" help='Journal where to create the entry.' inverse='_inverse_journal_id' readonly=False required=True string='Journal' args: 'account.journal'
  • lock_date_message Char
    compute='_compute_lock_date_message' string='Lock Date Message'
  • move_data Text
    compute='_compute_move_data'
  • move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • percentage Float
    compute='_compute_percentage' help='Percentage of each line to execute the action on.' readonly=False store=True args: 'Percentage'
  • preview_move_data Text
    compute='_compute_preview_move_data'
  • revenue_accrual_account Many2one → account.account
    check_company=True compute='_compute_revenue_accrual_account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" inverse='_inverse_revenue_accrual_account' readonly=False args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id' help='Total amount impacted by the automatic entry.' readonly=False store=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • do_action(self)

New fields (3)
  • nb_unmodified_bills Integer
    args: 'Number of bills previously unmodified from this partner'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • partner_name Char
    related='partner_id.name'
Public methods (3)
  • action_ask_later(self)
  • action_automate_partner(self)
  • action_never_automate_partner(self)

New fields (16)
  • attachment_ids Many2many → ir.attachment
    bypass_search_access=True comodel_name='ir.attachment' string='Attachments'
  • balance_end Monetary
    compute='_compute_balance_end' store=True string='Computed Balance'
  • balance_end_real Monetary
    compute='_compute_balance_end_real' readonly=False store=True string='Ending Balance'
  • balance_start Monetary
    compute='_compute_balance_start' readonly=False store=True string='Starting Balance'
  • company_id Many2one → res.company
    comodel_name='res.company' related='journal_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' store=True
  • date Date
    compute='_compute_date' index=True readonly=False store=True
  • first_line_index Char → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_first_line_index' store=True
  • is_complete Boolean
    compute='_compute_is_complete' store=True
  • is_valid Boolean
    compute='_compute_is_valid' search='_search_is_valid'
  • journal_has_invalid_statements Boolean
    related='journal_id.has_invalid_statements'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' store=True
  • line_ids One2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' inverse_name='statement_id' string='Statement lines'
  • name Char
    compute='_compute_name' copy=False readonly=False store=True string='Reference'
  • problem_description Text
    compute='_compute_problem_description'
  • reference Char
    copy=False string='External Reference'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, vals)

New fields (25)
  • account_number Char
    string='Bank Account Number'
  • amount Monetary
  • amount_currency Monetary
    compute='_compute_amount_currency' currency_field='foreign_currency_id' help='The amount expressed in an optional other currency if it is a multi-currency entry.' readonly=False store=True string='Amount in Currency'
  • amount_residual Float
    compute='_compute_is_reconciled' store=True string='Residual Amount'
  • company_id Many2one → res.company
    comodel_name='res.company' index=False inherited=True precompute=True readonly=False related='move_id.company_id' required=True store=True
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' store=True string='Journal Currency'
  • foreign_currency_id Many2one → res.currency
    comodel_name='res.currency' help='The optional other currency if it is a multi-currency entry.' string='Foreign Currency'
  • internal_index Char
    compute='_compute_internal_index' store=True string='Internal Reference'
  • is_reconciled Boolean
    compute='_compute_is_reconciled' store=True string='Is Reconciled'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' index=False inherited=True precompute=True readonly=False related='move_id.journal_id' required=True store=True
  • move_id Many2one → account.move
    bypass_search_access=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=',True)]" ondelete='restrict' string='Partner'
  • partner_name Char
    index='btree_not_null'
  • payment_ids Many2many → account.payment
    comodel_name='account.payment' relation='account_payment_account_bank_statement_line_rel' string='Auto-generated Payments'
  • payment_ref Char
    index='trigram' string='Label'
  • running_balance Monetary
    compute='_compute_running_balance'
  • sequence Integer
    default=1
  • statement_balance_end_real Monetary
    related='statement_id.balance_end_real'
  • statement_complete Boolean
    related='statement_id.is_complete'
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' index=True string='Statement'
  • statement_name Char
    related='statement_id.name' string='Statement Name'
  • statement_valid Boolean
    related='statement_id.is_valid'
  • transaction_details Json
    readonly=True
  • transaction_type Char
Public methods (7)
  • action_undo_reconciliation(self)
    Undo the reconciliation made on the statement line and reset their journal items to their original states.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • formatted_read_group(self, domain, groupby=(), aggregates=(), having=(), offset=0, limit=None, order=None) -> <expr>
    @api.model
  • new(self, values=None, origin=None, ref=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (6)
  • loss_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" ondelete='restrict' string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • profit_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" ondelete='restrict' string='Profit Account' args: 'account.account'
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'Up'), ('DOWN', 'Down'), ('HALF-UP', 'Nearest')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • company_xmlid(self, xmlid, company=None)
  • ref(self, xmlid, raise_if_not_found=True)
  • try_loading(self, template_code, company, install_demo=False, force_create=True)
    Check if the chart template can be loaded then proceeds installing it. :param template_code: code of the chart template to be loaded. :type template_code: str :param company: the company we try to load the chart template on. If not provided, it is retrieved from the context. :type company: int, Model<res.company> :param install_demo: whether or not we should load demo data right after loading the chart template. :type install_demo: bool :param force_create: Determines the loading behavior. If True, forces the creation of new entries; if False, prevents new creations and performs updates on existing data where applicable. :type force_create: bool

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • account_id Many2one → account.account
    comodel_name='account.account' compute='_compute_account_id' search=True string='Account'
  • code Char
    compute='_compute_code' inverse='_inverse_code' string='Code'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False string='Company'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (3)
  • action_save_onboarding_fiscal_year(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (22)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • account_map Binary
    compute='_compute_account_map'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply tax & account mappings on invoices automatically if the matching criterias (VAT/Country) are met.' string='Detect Automatically'
  • company_country_id Many2one
    related='company_id.account_fiscal_country_id' string='Company Country'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True readonly=True required=True string='Company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' inverse='_inverse_foreign_vat' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' inverse='_inverse_foreign_vat' string='Country' args: 'res.country'
  • fiscal_country_codes Char
    related='company_country_id.code' string='Company Fiscal Country Code'
  • foreign_vat Char
    help='The tax ID of your company in the region mapped by this fiscal position.' inverse='_inverse_foreign_vat' string='Foreign Tax ID'
  • foreign_vat_header_mode Selection
    compute='_compute_foreign_vat_header_mode' selection=[('templates_found', 'Templates Found'), ('no_template', 'No Template')]
  • is_domestic Boolean
    compute='_compute_is_domestic' store=True
  • name Char
    required=True string='Fiscal Position' translate=True
  • note Html
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids Many2many → account.tax
    column1='account_fiscal_position_id' column2='account_tax_id' comodel_name='account.tax' relation='account_fiscal_position_account_tax_rel' string='Taxes'
  • tax_map Binary
    compute='_compute_tax_map'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (6)
  • action_create_foreign_taxes(self)
  • action_open_related_taxes(self)
  • create(self, vals_list)
    @api.model_create_multi
  • map_account(self, account)
  • map_tax(self, taxes)
  • write(self, vals)

New fields (4)
  • account_dest_id Many2one → account.account
    check_company=True required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    check_company=True required=True string='Account on Product' args: 'account.account'
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (2)
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (5)
  • code_prefix_end Char
    compute='_compute_code_prefix_end' precompute=True readonly=False store=True
  • code_prefix_start Char
    compute='_compute_code_prefix_start' precompute=True readonly=False store=True
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • name Char
    required=True translate=True
  • parent_id Many2one → account.group
    check_company=True index=True ondelete='cascade' readonly=True args: 'account.group'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (27)
  • account_id Many2one → account.account
    readonly=True string='Revenue/Expense Account' args: 'account.account'
  • commercial_partner_id Many2one → res.partner
    string='Main Partner' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • inventory_value Float
    readonly=True string='Inventory Value'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • move_type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_state Selection
    readonly=True selection=PAYMENT_STATE_SELECTION string='Payment Status'
  • price_average Float
    aggregator='avg' readonly=True string='Average Price'
  • price_margin Float
    readonly=True string='Margin'
  • price_subtotal Float
    readonly=True string='Untaxed Amount'
  • price_subtotal_currency Float
    readonly=True string='Untaxed Amount in Currency'
  • price_total Float
    readonly=True string='Total'
  • price_total_currency Float
    readonly=True string='Total in Currency'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
Public methods (0)

No public methods.

New fields (43)
  • account_fiscal_country_group_codes Json
    related='company_id.account_fiscal_country_group_codes'
  • accounting_date Date
    compute='_compute_accounting_date'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_name Char
    help='Send one separate email for each invoice.\nAny file extension will be accepted.\nOnly PDF and XML files will be interpreted by Odoo'
  • available_invoice_template_pdf_report_ids One2many → ir.actions.report
    comodel_name='ir.actions.report' compute='_compute_available_invoice_template_pdf_report_ids'
  • available_payment_method_ids Many2many → account.payment.method
    comodel_name='account.payment.method' compute='_compute_available_payment_method_ids'
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    check_company=True copy=False domain="[('partner_id','=', company_partner_id)]" index='btree_not_null' ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    compute='_compute_code' help='Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.' precompute=True readonly=False required=True size=5 store=True string='Sequence Prefix'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True readonly=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=_get_default_account_domain ondelete='restrict' string='Default Account'
  • default_account_type Char
    compute='_compute_default_account_type' string='Default Account Type'
  • display_alias_fields Boolean
    compute='_compute_display_alias_fields'
  • display_invoice_template_pdf_report_id Boolean
    default=_default_display_invoice_template_pdf_report_id store=False
  • has_invalid_statements Boolean
    compute='_compute_has_invalid_statements'
  • inbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_inbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Inbound Payment Methods'
  • incoming_einvoice_notification_email Char
    help="Email addresses that will receive copy for sent and received invoices. Separate entries with ';'." string='Send Copy To'
  • invoice_reference_model Selection
    default=_default_invoice_reference_model help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Full Reference (INV/2024/00001)'), ('euro', 'European (RF83INV202400001)'), ('number', 'Numbers only (202400001)')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • invoice_template_pdf_report_id Many2one → ir.actions.report
    comodel_name='ir.actions.report' domain="[('id', 'in', available_invoice_template_pdf_report_ids)]" readonly=False string='Invoice report'
  • is_self_billing Boolean
    help='This journal is for self-billing invoices. Invoices will be created using a different sequence per partner.' string='Self Billing'
  • journal_group_ids Many2many → account.journal.group
    check_company=True string='Ledger Group' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', '=', 'expense')]" help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account'
  • name Char
    required=True string='Journal Name' translate=True
  • name_placeholder Char
    compute='_compute_name_placeholder'
  • non_deductible_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Account used to register the private part of mixed expenses.' readonly=False store=True string='Private Share Account'
  • outbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_outbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'outbound')] help='Manual: Pay by any method outside of Odoo.\nCheck: Pay bills by check and print it from Odoo.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Outbound Payment Methods'
  • payment_sequence Boolean
    compute='_compute_payment_sequence' help="Check this box if you don't want to share the same sequence on payments and bank transactions posted on this journal" precompute=True readonly=False store=True string='Dedicated Payment Sequence'
  • profit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'in', ('income', 'income_other'))]" help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account'
  • refund_sequence Boolean
    compute='_compute_refund_sequence' help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" readonly=False store=True string='Dedicated Credit Note Sequence'
  • restrict_mode_hash_table Boolean
    help='If ticked, when an entry is posted, we retroactively hash all moves in the sequence from the entry back to the last hashed entry. The hash can also be performed on demand by the Secure Entries wizard.' string='Secure Posted Entries with Hash'
  • selected_payment_method_codes Char
    compute='_compute_selected_payment_method_codes'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_override_regex Text
    help='Technical field used to enforce complex sequence composition that the system would normally misunderstand.\nThis is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.\nThe prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).\ne.g: ^(?P<prefix1>.*?)(?P<year>\\d{4})(?P<prefix2>\\D*?)(?P<month>\\d{2})(?P<prefix3>\\D+?)(?P<seq>\\d+)(?P<suffix>\\D*?)$'
  • show_fetch_in_einvoices_button Boolean
    compute='_compute_show_fetch_in_einvoices_button' string='Show E-Invoice Buttons'
  • show_refresh_out_einvoices_status_button Boolean
    compute='_compute_show_refresh_out_einvoices_status_button' string='Show E-Invoice Status Buttons'
  • suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_suspense_account_id' domain="[('account_type', '=', 'asset_current')]" help='Bank statements transactions will be posted on the suspense account until the final reconciliation allowing finding the right account.' ondelete='restrict' readonly=False store=True string='Suspense Account'
  • type Selection
    help="\n Select 'Sale' for customer invoices journals.\n Select 'Purchase' for vendor bills journals.\n Select 'Cash', 'Bank' or 'Credit Card' for journals that are used in customer or vendor payments.\n Select 'General' for miscellaneous operations journals.\n " required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('credit', 'Credit Card'), ('general', 'Miscellaneous')]
Public methods (10)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • button_fetch_in_einvoices(self)
    Abstract method to fetch e-invoices. Should fetch vendor bill invoices synchronously and doesn't return anything.
  • button_refresh_out_einvoices_status(self)
    Abstract method to fetch e-invoice statuses. Should fetch customer invoices statuses synchronously and doesn't return anything.
  • button_unsubscribe_from_invoice_notifications(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_document_from_attachment(self, attachment_ids)
    Create the invoices from files. :return: A action redirecting to account.move list/form view.
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (13)
  • color Integer
    default=0 args: 'Color Index'
  • current_statement_balance Monetary
    compute='_compute_current_statement_balance'
  • entries_count Integer
    compute='_compute_entries_count'
  • has_entries Boolean
    compute='_compute_has_entries'
  • has_posted_entries Boolean
    compute='_compute_has_entries'
  • has_sequence_holes Boolean
    compute='_compute_has_sequence_holes'
  • has_statement_lines Boolean
    compute='_compute_current_statement_balance'
  • has_unhashed_entries Boolean
    compute='_compute_has_unhashed_entries' string='Unhashed Entries'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • last_statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' compute='_compute_last_bank_statement'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (15)
  • action_create_new(self)
  • action_create_vendor_bill(self)
    This function is called by the "try our sample" button of Vendor Bills, visible on dashboard if no bill has been created yet.
  • action_post_all_entries(self)
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_customer_payment(self)
    return action to create a customer payment
  • create_supplier_payment(self)
    return action to create a supplier payment
  • is_sample_action_available(self)
    @api.model
    Used to hide 'try our sample' when demo data is not installed.
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_bank_difference_action(self)
  • open_invalid_statements_action(self)
  • open_payments_action(self, payment_type=False, mode='list')
  • show_sequence_holes(self)
  • show_unhashed_entries(self)
  • to_check_ids(self)

New fields (4)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> help='Define which company can select the multi-ledger in report filters. If none is provided, available for all companies'
  • excluded_journal_ids Many2many → account.journal
    comodel_name='account.journal' context={'active_test': False} domain='company_id and [("company_id", "parent_of", company_id)] or []' string='Excluded Journals'
  • name Char
    required=True translate=True args: 'Ledger group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True string='Active'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • company_lock_date Date
    copy=False help='Technical field giving the date the company lock date at the time the exception was created.' string='Original Lock Date'
  • end_datetime Datetime
    string='End Date'
  • fiscalyear_lock_date Date
    compute='_compute_lock_dates' help='The date the Global Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_fiscalyear_lock_date' string='Global Lock Date'
  • lock_date Date
    help='Technical field giving the date the lock date was changed to.' string='Changed Lock Date'
  • lock_date_field Selection
    help='Technical field identifying the changed lock date' required=True selection=[('fiscalyear_lock_date', 'Global Lock Date'), ('tax_lock_date', 'Tax Return Lock Date'), ('sale_lock_date', 'Sales Lock Date'), ('purchase_lock_date', 'Purchase Lock Date')] string='Lock Date Field'
  • purchase_lock_date Date
    compute='_compute_lock_dates' help='The date the Purchase Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_purchase_lock_date' string='Purchase Lock Date'
  • reason Char
    string='Reason'
  • sale_lock_date Date
    compute='_compute_lock_dates' help='The date the Sale Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_sale_lock_date' string='Sales Lock Date'
  • state Selection
    compute='_compute_state' search='_search_state' selection=[('active', 'Active'), ('revoked', 'Revoked'), ('expired', 'Expired')] string='State'
  • tax_lock_date Date
    compute='_compute_lock_dates' help='The date the Tax Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_tax_lock_date' string='Tax Return Lock Date'
  • user_id Many2one → res.users
    default=<expr> string='User' args: 'res.users'
Public methods (4)
  • action_revoke(self)
    Revokes an active exception.
  • action_show_audit_trail_during_exception(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • account_ids Many2many → account.account
    args: 'account.account'
  • disable_merge_button Boolean
    compute='_compute_disable_merge_button'
  • is_group_by_name Boolean
    default=False help='Tick this checkbox if you want accounts to be grouped by name for merging.' string='Group by name?'
  • wizard_line_ids One2many → account.merge.wizard.line
    comodel_name='account.merge.wizard.line' compute='_compute_wizard_line_ids' inverse_name='wizard_id' readonly=False store=True
Public methods (2)
  • action_merge(self)
    Merge each group of accounts in `self.wizard_line_ids`.
  • default_get(self, fields)
    @api.model

New fields (9)
  • account_has_hashed_entries Boolean
    compute='_compute_account_has_hashed_entries'
  • account_id Many2one → account.account
    comodel_name='account.account' ondelete='cascade' readonly=True string='Account'
  • company_ids Many2many
    related='account_id.company_ids' string='Companies'
  • display_type Selection
    required=True selection=[('line_section', 'Section'), ('line_subsection', 'Subsection'), ('account', 'Account')]
  • grouping_key Char
  • info Char
    compute='_compute_info' help='Contains either the section name or error message, depending on the line type.' string='Info'
  • is_selected Boolean
  • sequence Integer
  • wizard_id Many2one → account.merge.wizard
    comodel_name='account.merge.wizard' ondelete='cascade' required=True
Public methods (0)

No public methods.

New fields (1)
  • statement_line_ids One2many → account.bank.statement.line
    string='Statements' args: 'account.bank.statement.line', 'move_id'
Public methods (0)

No public methods.

New fields (1)
  • payment_ids One2many → account.payment
    string='Payments' args: 'account.payment', 'move_id'
Public methods (0)

No public methods.

New fields (142)
  • abnormal_amount_warning Text
    compute='_compute_abnormal_warnings'
  • abnormal_date_warning Text
    compute='_compute_abnormal_warnings'
  • account_fiscal_country_group_codes Json
    related='company_id.account_fiscal_country_group_codes'
  • adjusting_entries_count Integer
    compute='_compute_adjusting_entries_count' string='Adjusting Entries Count'
  • adjusting_entries_move_ids Many2many → account.move
    column1='adjusting_entry_move_id' column2='move_id' comodel_name='account.move' relation='adjusting_entries__account_move' string='Created Adjusting Entries'
  • adjusting_entry_origin_label Char
    compute='_compute_adjusting_entry_origin_label'
  • adjusting_entry_origin_move_ids Many2many → account.move
    column1='move_id' column2='adjusting_entry_move_id' comodel_name='account.move' relation='adjusting_entries__account_move' string='Adjusting Entry Origin Moves'
  • adjusting_entry_origin_moves_count Integer
    compute='_compute_adjusting_entry_origin_moves_count' string='Adjusting Entry Origin Moves Count'
  • alerts Json
    compute='_compute_alerts'
  • always_tax_exigible Boolean
    compute='_compute_always_tax_exigible' readonly=False store=True
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Total in Currency Signed'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_total_words Char
    compute='_compute_amount_total_words' string='Amount total in words'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Untaxed Amount Signed Currency'
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • attachment_ids One2many → ir.attachment
    domain=[('res_model', '=', 'account.move')] string='Attachments' args: 'ir.attachment', 'res_id'
  • audit_trail_message_ids One2many → mail.message
    domain=[('model', '=', 'account.move'), ('message_type', '=', 'notification')] string='Audit Trail Messages' args: 'mail.message', 'res_id'
  • auto_post Selection
    copy=False default='no' help='Specify whether this entry is posted automatically on its accounting date, and any similar recurring invoices.' required=True selection=[('no', 'No'), ('at_date', 'At Date'), ('monthly', 'Monthly'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly')] string='Auto-post'
  • auto_post_origin_id Many2one → account.move
    comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='First recurring entry'
  • auto_post_until Date
    compute='_compute_auto_post_until' copy=False help='This recurring move will be posted up to and including this date.' readonly=False store=True string='Auto-post until'
  • bank_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank'
  • checked Boolean
    compute='_compute_checked' copy=False readonly=False store=True string='Reviewed' tracking=True
  • commercial_partner_id Many2one → res.partner
    check_company=True compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' index=True inverse='_inverse_company_id' precompute=True readonly=False store=True string='Company'
  • company_price_include Selection
    readonly=True related='company_id.account_price_include'
  • country_code Char
    depends=['company_id'] readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' inverse='_inverse_currency_id' precompute=True readonly=False required=True store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    compute='_compute_date' copy=False index=True precompute=True readonly=False required=True store=True string='Date' tracking=True
  • delivery_date Date
    compute='_compute_delivery_date' copy=False inverse='_inverse_delivery_date' precompute=True readonly=False store=True string='Delivery Date'
  • direction_sign Integer
    compute='_compute_direction_sign' help='Multiplicator depending on the document type, to convert a price into a balance'
  • display_inactive_currency_warning Boolean
    compute='_compute_display_inactive_currency_warning'
  • display_link_qr_code Boolean
    compute='_compute_display_link_qr_code' string='Display Link QR-code'
  • display_qr_code Boolean
    compute='_compute_display_qr_code' string='Display QR-code'
  • display_send_button Boolean
    compute='_compute_display_send_button'
  • duplicated_ref_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_duplicated_ref_ids'
  • exchange_diff_partial_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' inverse_name='exchange_move_id' string='Related reconciliation'
  • expected_currency_rate Float
    compute='_compute_expected_currency_rate' digits=0
  • fiscal_position_id Many2one → account.fiscal.position
    check_company=True compute='_compute_fiscal_position_id' help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' precompute=True readonly=False store=True string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • hide_post_button Boolean
    compute='_compute_hide_post_button' readonly=True
  • highest_name Char
    compute='_compute_highest_name'
  • highlight_send_button Boolean
    compute='_compute_highlight_send_button'
  • inalterable_hash Char
    copy=False index='btree_not_null' readonly=True string='Inalterability Hash'
  • incoterm_location Char
    compute='_compute_incoterm_location' readonly=False store=True string='Incoterm Location'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    comodel_name='account.cash.rounding' help='Defines the smallest coinage of the currency that can be used to pay by cash.' string='Cash Rounding Method'
  • invoice_currency_rate Float
    compute='_compute_invoice_currency_rate' copy=False digits=0 help='Currency rate from company currency to document currency.' precompute=True readonly=False store=True string='Currency Rate'
  • invoice_date Date
    copy=False index=True string='Invoice/Bill Date'
  • invoice_date_due Date
    compute='_compute_invoice_date_due' copy=False index=True readonly=False store=True string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain'
  • invoice_has_outstanding Boolean
    compute='_compute_invoice_has_outstanding' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' compute='_compute_incoterm' help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False store=True string='Incoterm'
  • invoice_incoterm_placeholder Char
    compute='_compute_invoice_incoterm_placeholder'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('display_type', 'in', ('product', 'line_section', 'line_subsection', 'line_note'))] string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    copy=False help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Binary
    compute='_compute_payments_widget_to_reconcile_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' compute='_compute_invoice_payment_term_id' inverse='_inverse_invoice_payment_term_id' precompute=True readonly=False store=True string='Payment Terms'
  • invoice_payments_widget Binary
    compute='_compute_payments_widget_reconciled_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_pdf_report_file Binary
    attachment=True copy=False string='PDF File'
  • invoice_pdf_report_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> depends=['invoice_pdf_report_file'] string='PDF Attachment'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_invoice_default_sale_person' copy=False readonly=False store=True string='Salesperson' tracking=True
  • invoice_vendor_bill_id Many2one → account.move
    check_company=True help='Auto-complete from a previous bill or refund.' store=False string='Vendor Bill' args: 'account.move'
  • is_being_sent Boolean
    compute='_compute_is_being_sent' help='Is the move being sent asynchronously'
  • is_draft_duplicated_ref_ids Boolean
    compute='_compute_is_draft_duplicated_ref_ids'
  • is_exact_move_duplicate Boolean
    compute='_compute_is_draft_duplicated_ref_ids'
  • is_manually_modified Boolean
  • is_move_sent Boolean
    copy=False help='It indicates that the invoice/payment has been sent or the PDF has been generated.' readonly=True
  • is_sale_installed Boolean
    compute='_compute_is_sale_installed'
  • is_storno Boolean
    compute='_compute_is_storno'
  • journal_group_id Many2one → account.journal.group
    search='_search_journal_group_id' store=False string='Ledger' args: 'account.journal.group'
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('id', 'in', suitable_journal_ids)]" inverse='_inverse_journal_id' precompute=True readonly=False required=True store=True string='Journal' args: 'account.journal'
  • journal_line_ids One2many → account.move.line
    comodel_name='account.move.line' copy=False domain=[('display_type', 'not in', ('line_section', 'line_subsection', 'line_note'))] exportable=False inverse_name='move_id' string='Journal Items (DEPRECATED)'
  • line_ids One2many → account.move.line
    copy=True string='Journal Items' args: 'account.move.line', 'move_id'
  • made_sequence_gap Boolean
  • matched_payment_ids Many2many → account.payment
    column1='invoice_id' column2='payment_id' comodel_name='account.payment' copy=False relation='account_move__account_payment' string='Matched Payments'
  • move_sent_values Selection
    compute='compute_move_sent_values' search='_search_move_sent_values' selection=[('sent', 'Sent'), ('not_sent', 'Not Sent')] string='Sent'
  • move_type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] string='Type' tracking=True
  • name Char
    compute='_compute_name' copy=False index='trigram' inverse='_inverse_name' readonly=False store=True string='Number' tracking=True
  • name_placeholder Char
    compute='_compute_name_placeholder'
  • narration Html
    compute='_compute_narration' readonly=False store=True string='Terms and Conditions'
  • need_cancel_request Boolean
    compute='_compute_need_cancel_request'
  • needed_terms Binary
    compute='_compute_needed_terms' exportable=False
  • needed_terms_dirty Boolean
    compute='_compute_needed_terms'
  • next_payment_date Date
    compute='_compute_next_payment_date' search='_search_next_payment_date' string='Next Payment Date'
  • no_followup Boolean
    compute='_compute_no_followup' help='Exclude this journal entry from follow-up reports.' inverse='_inverse_no_followup' readonly=False string='No Follow-Up'
  • origin_payment_id Many2one → account.payment
    check_company=True comodel_name='account.payment' copy=False index='btree_not_null' string='Payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' index='btree_not_null' ondelete='restrict' readonly=False store=True string='Recipient Bank' tracking=True args: 'res.partner.bank'
  • partner_credit_warning Text
    compute='_compute_partner_credit_warning' groups='account.group_account_invoice,account.group_account_readonly'
  • partner_id Many2one → res.partner
    change_default=True check_company=True index=True inverse='_inverse_partner_id' ondelete='restrict' readonly=False string='Partner' tracking=True args: 'res.partner'
  • partner_shipping_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_shipping_id' help='The delivery address will be used in the computation of the fiscal position.' precompute=True readonly=False store=True string='Delivery Address'
  • payment_count Integer
    compute='_compute_payment_count' compute_sudo=True
  • payment_reference Char
    compute='_compute_payment_reference' copy=False help='The payment reference to set on journal items.' index='trigram' inverse='_inverse_payment_reference' readonly=False store=True string='Payment Reference' tracking=True
  • payment_state Selection
    compute='_compute_payment_state' copy=False readonly=True selection=PAYMENT_STATE_SELECTION store=True string='Payment Status' tracking=True
  • payment_term_details Binary
    compute='_compute_payment_term_details' exportable=False
  • posted_before Boolean
    copy=False
  • preferred_payment_method_line_id Many2one → account.payment.method.line
    comodel_name='account.payment.method.line' compute='_compute_preferred_payment_method_line_id' readonly=False store=True string='Preferred Payment Method Line'
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for the payment of this invoice, when printing it. If left blank, the first available and usable method will be used.' selection=<expr> string='Payment QR-code'
  • quick_edit_mode Boolean
    compute='_compute_quick_edit_mode'
  • quick_edit_total_amount Monetary
    help='Use this field to encode the total amount of the invoice.\nOdoo will automatically create one invoice line with default values to match it.' string='Total (Tax inc.)'
  • quick_encoding_vals Json
    compute='_compute_quick_encoding_vals' exportable=False
  • reconciled_payment_ids Many2many → account.payment
    compute='_compute_reconciled_payment_ids' help='Payments that have been reconciled with this invoice.' search='_search_reconciled_payment_ids' string='Reconciled Payments' args: 'account.payment'
  • ref Char
    copy=False index='trigram' string='Reference' tracking=True
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_ids One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    check_company=True comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='Reversal of'
  • secure_sequence_number Integer
    copy=False index=True readonly=True string='Inalterability No Gap Sequence #'
  • secured Boolean
    compute='_compute_secured' help='The entry is secured with an inalterable hash.' search='_search_secured'
  • sending_data Json
    copy=False
  • show_delivery_date Boolean
    compute='_compute_show_delivery_date'
  • show_discount_details Boolean
    compute='_compute_show_payment_term_details'
  • show_journal Boolean
    compute='_compute_show_journal'
  • show_name_warning Boolean
    store=False
  • show_payment_term_details Boolean
    compute='_compute_show_payment_term_details'
  • show_reset_to_draft_button Boolean
    compute='_compute_show_reset_to_draft_button'
  • show_taxable_supply_date Boolean
    compute='_compute_show_taxable_supply_date'
  • show_update_fpos Boolean
    store=False string='Has Fiscal Position Changed'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_id Many2one
    related='statement_line_id.statement_id'
  • statement_line_id Many2one → account.bank.statement.line
    check_company=True comodel_name='account.bank.statement.line' copy=False index='btree_not_null' string='Statement Line'
  • status_in_payment Selection
    compute='_compute_status_in_payment' copy=False selection=<expr>
  • suitable_journal_ids Many2many → account.journal
    compute='_compute_suitable_journal_ids' args: 'account.journal'
  • tax_calculation_rounding_method Selection
    readonly=True related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_created_move_ids One2many → account.move
    comodel_name='account.move' help='The cash basis entries created from the taxes on this entry, when reconciling its lines.' inverse_name='tax_cash_basis_origin_move_id' string='Cash Basis Entries'
  • tax_cash_basis_origin_move_id Many2one → account.move
    comodel_name='account.move' help='The journal entry from which this tax cash basis journal entry has been created.' index='btree_not_null' readonly=True string='Cash Basis Origin'
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    comodel_name='account.partial.reconcile' index='btree_not_null' string='Tax Cash Basis Entry of'
  • tax_country_code Char
    compute='_compute_tax_country_code'
  • tax_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_tax_country_id'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message'
  • tax_totals Binary
    compute='_compute_tax_totals' exportable=False help='Edit Tax amounts if you encounter rounding issues.' inverse='_inverse_tax_totals' string='Invoice Totals'
  • taxable_supply_date Date
    compute='_compute_taxable_supply_date' copy=False precompute=True readonly=False store=True string='Taxable Supply Date'
  • taxable_supply_date_placeholder Char
    compute='_compute_taxable_supply_date_placeholder'
  • taxes_legal_notes Html
    compute='_compute_taxes_legal_notes' string='Taxes Legal Notes'
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    related='invoice_user_id' string='User'
Public methods (62)
  • action_activate_currency(self)
  • action_add_from_catalog(self)
  • action_delete_duplicates(self)
  • action_duplicate(self)
  • action_force_register_payment(self)
  • action_invoice_download_pdf(self, target='download')
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_move_download_all(self)
  • action_open_business_doc(self)
  • action_post(self)
  • action_print_pdf(self)
  • action_register_payment(self)
  • action_reverse(self)
  • action_send_and_print(self)
  • action_switch_move_type(self)
  • action_toggle_block_payment(self)
  • action_update_fpos_values(self)
  • action_validate_moves_with_confirmation(self)
    If 'restrict_mode_hash_table' is enabled or future-dated moves, open a confirmation wizard; otherwise, validate moves directly.
  • button_cancel(self)
  • button_draft(self)
  • button_hash(self)
  • button_request_cancel(self)
    Hook allowing the localizations to request a cancellation from the government before cancelling the invoice.
  • button_set_checked(self)
  • check_field_access_rights(self, operation, field_names)
    @api.model@api.deprecated('Override of a deprecated method')
  • check_move_sequence_chain(self)
  • check_selected_moves(self)
  • compute_move_sent_values(self)
    @api.depends('is_move_sent')
  • copy(self, default=None)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_currency_rate(self, company_id, to_currency_id, date)
  • get_extra_print_items(self)
    Helper to dynamically add items in the 'Print' menu of list and form of account.move.
  • get_import_templates(self)
    @api.model
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • is_entry(self)
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False, move_type=False)
  • is_receipt(self)
  • is_sale_document(self, include_receipts=False, move_type=False)
  • js_assign_outstanding_line(self, line_id)
    Called by the 'payment' widget to reconcile a suggested journal item to the present invoice. :param line_id: The id of the line to reconcile with the current invoice.
  • js_remove_outstanding_partial(self, partial_id)
    Called by the 'payment' widget to remove a reconciled entry to the present invoice. :param partial_id: The id of an existing partial reconciled with the current invoice.
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • onchange(self, values, field_names, fields_spec)
  • open_adjusting_entries(self)
  • open_adjusting_entry_origin_moves(self)
  • open_created_caba_entries(self)
  • open_payments(self)
  • open_reconcile_view(self)
  • preview_invoice(self)
  • read(self, fields=None, load='_classic_read')
  • refresh_invoice_currency_rate(self)
  • search_read(self, domain=None, fields=None, offset=0, limit=None, order=None, **read_kwargs)
    @api.model
  • set_moves_checked(self, is_checked=True)
  • unlink(self)
  • write(self, vals)

New fields (87)
  • account_code Char
    related='account_id.code'
  • account_id Many2one → account.account
    bypass_search_access=True check_company=True comodel_name='account.account' compute='_compute_account_id' domain="[('account_type', '!=', 'off_balance')]" index=False inverse='_inverse_account_id' ondelete='restrict' precompute=True readonly=False store=True string='Account' tracking=True
  • account_internal_group Selection
    related='account_id.internal_group'
  • account_name Char
    related='account_id.name'
  • account_root_id Many2one
    depends_context='company' related='account_id.root_id' string='Account Root'
  • account_type Selection
    related='account_id.account_type' string='Internal Type'
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • amount_currency Monetary
    compute='_compute_amount_currency' help='The amount expressed in an optional other currency if it is a multi-currency entry.' inverse='_inverse_amount_currency' precompute=True readonly=False store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_compute_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_compute_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_distribution Json
    inverse='_inverse_analytic_distribution'
  • analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='move_line_id' string='Analytic lines'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' precompute=True readonly=False store=True string='Balance' tracking=True
  • collapse_composition Boolean
    help='If checked, the lines below this section will not be displayed in reports and portal.' string='Hide Composition'
  • collapse_prices Boolean
    help='If checked, the prices of the lines below this section will not be displayed in reports and portal.' string='Hide Prices'
  • commercial_partner_country Many2one
    related='move_id.commercial_partner_id.country_id' string='Commercial Partner Country'
  • company_currency_id Many2one
    precompute=True readonly=True related='move_id.company_currency_id' store=True string='Company Currency'
  • company_id Many2one
    index=True precompute=True readonly=True related='move_id.company_id' store=True
  • credit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_credit' precompute=True store=True string='Credit'
  • cumulated_balance Monetary
    compute='_compute_cumulated_balance' currency_field='company_currency_id' exportable=False help='Cumulated balance depending on the domain and the order chosen in the view.' string='Cumulated Balance'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' precompute=True readonly=False required=True store=True string='Currency'
  • currency_rate Float
    compute='_compute_currency_rate' help='Currency rate from company currency to document currency.'
  • date Date
    aggregator='min' copy=False related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date' tracking=True
  • debit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_debit' precompute=True store=True string='Debit'
  • deductible_amount Float
    default=100 args: 'Deductibility'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • discount_allocation_dirty Boolean
    compute='_compute_discount_allocation_needed'
  • discount_allocation_key Binary
    compute='_compute_discount_allocation_key' exportable=False
  • discount_allocation_needed Binary
    compute='_compute_discount_allocation_needed' exportable=False
  • discount_amount_currency Monetary
    currency_field='currency_id' store=True string='Discount amount in Currency'
  • discount_balance Monetary
    currency_field='company_currency_id' store=True string='Discount Balance'
  • discount_date Date
    help='Last date at which the discounted amount must be paid in order for the Early Payment Discount to be granted' readonly=True store=True string='Discount Date'
  • display_type Selection
    compute='_compute_display_type' precompute=True readonly=False required=True selection=[('product', 'Product'), ('cogs', 'Cost of Goods Sold'), ('tax', 'Tax'), ('discount', 'Discount'), ('rounding', 'Rounding'), ('payment_term', 'Payment Term'), ('line_section', 'Section'), ('line_subsection', 'Subsection'), ('line_note', 'Note'), ('epd', 'Early Payment Discount'), ('non_deductible_product_total', 'Non Deductible Products Total'), ('non_deductible_product', 'Non Deductible Products'), ('non_deductible_tax', 'Non Deductible Tax')] store=True
  • epd_dirty Boolean
    compute='_compute_epd_needed'
  • epd_key Binary
    compute='_compute_epd_key' exportable=False
  • epd_needed Binary
    compute='_compute_epd_needed' exportable=False
  • extra_tax_data Json
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' readonly=True string='Matching'
  • group_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' index='btree_not_null' string='Originator Group of Taxes'
  • has_invalid_analytics Boolean
    compute='_compute_has_invalid_analytics'
  • invoice_date Date
    aggregator='min' copy=False related='move_id.invoice_date' store=True
  • is_account_reconcile Boolean
    related='account_id.reconcile' string='Account Reconcile'
  • is_imported Boolean
  • is_refund Boolean
    compute='_compute_is_refund'
  • is_same_currency Boolean
    compute='_compute_same_currency'
  • is_storno Boolean
    compute='_compute_is_storno' help='Utility field to express whether the journal item is subject to storno accounting' precompute=True readonly=False store=True string='Company Storno Accounting'
  • journal_group_id Many2one → account.journal.group
    comodel_name='account.journal.group' search='_search_journal_group_id' store=False string='Ledger'
  • journal_id Many2one
    copy=False index=True precompute=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Credit journal items that are matched with this journal item.' inverse_name='debit_move_id' readonly=True string='Matched Credits'
  • matched_debit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Debit journal items that are matched with this journal item.' inverse_name='credit_move_id' readonly=True string='Matched Debits'
  • matching_number Char
    copy=False help="Matching number for this line, 'P' if it is only partially reconcile, or the name of the full reconcile if it exists." index='btree' string='Matching #'
  • move_id Many2one → account.move
    bypass_search_access=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • move_name Char
    index='btree' related='move_id.name' store=True string='Number'
  • move_type Selection
    related='move_id.move_type'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True string='Label' tracking=True
  • no_followup Boolean
    compute='_compute_no_followup' help='Exclude this journal item from follow-up reports.' inverse='_inverse_no_followup' readonly=False store=True string='No Follow-Up'
  • parent_id Many2one → account.move.line
    compute='_compute_parent_id' compute_sudo=True string='Parent Section Line' args: 'account.move.line'
  • parent_state Selection
    related='move_id.state' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_id' inverse='_inverse_partner_id' ondelete='restrict' precompute=True readonly=False store=True string='Partner'
  • payment_date Date
    compute='_compute_payment_date' search='_search_payment_date' string='Next Payment Date'
  • payment_id Many2one → account.payment
    bypass_search_access=True comodel_name='account.payment' help='The payment that created this entry' index='btree_not_null' related='move_id.origin_payment_id' store=True string='Originator Payment'
  • price_subtotal Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Subtotal'
  • price_total Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Total'
  • price_unit Float
    compute='_compute_price_unit' min_display_digits='Product Price' precompute=True readonly=False store=True string='Unit Price'
  • product_category_id Many2one
    related='product_id.product_tmpl_id.categ_id'
  • product_id Many2one → product.product
    check_company=True comodel_name='product.product' index=True inverse='_inverse_product_id' ondelete='restrict' string='Product'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_product_uom_id' domain="[('id', 'in', allowed_uom_ids)]" ondelete='restrict' precompute=True readonly=False store=True string='Unit'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' precompute=True readonly=False store=True string='Quantity'
  • reconcile_model_id Many2one → account.reconcile.model
    check_company=True comodel_name='account.reconcile.model' copy=False readonly=True string='Reconciliation Model'
  • reconciled Boolean
    compute='_compute_amount_residual' store=True
  • reconciled_lines_excluding_exchange_diff_ids Many2many → account.move.line
    comodel_name='account.move.line' compute='_compute_reconciled_lines_excluding_exchange_diff_ids'
  • reconciled_lines_ids Many2many → account.move.line
    comodel_name='account.move.line' compute='_compute_reconciled_lines_ids' inverse='_inverse_reconciled_lines_ids'
  • ref Char
    copy=False index='trigram' related='move_id.ref' store=True
  • search_account_id Many2one → account.account
    search='_search_account_id' store=False args: 'account.account'
  • sequence Integer
    compute='_compute_sequence' precompute=True readonly=False store=True
  • statement_id Many2one
    bypass_search_access=True copy=False help='The bank statement used for bank reconciliation' index='btree_not_null' related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    bypass_search_access=True comodel_name='account.bank.statement.line' help='The statement line that created this entry' index='btree_not_null' related='move_id.statement_line_id' store=True string='Originator Statement Line'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True string='Base Amount'
  • tax_calculation_rounding_method Selection
    readonly=True related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_group_id Many2one
    precompute=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' compute='_compute_tax_ids' context={'active_test': False, 'hide_original_tax_ids': True} precompute=True readonly=False store=True string='Taxes' tracking=True
  • tax_line_id Many2one → account.tax
    comodel_name='account.tax' help='Indicates that this journal item is a tax line' ondelete='restrict' precompute=True related='tax_repartition_line_id.tax_id' store=True string='Originator Tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    check_company=True comodel_name='account.tax.repartition.line' help='Tax distribution line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Distribution Line'
  • tax_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' context={'active_test': False} help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags' tracking=True
  • term_key Binary
    compute='_compute_term_key' exportable=False
  • translated_product_name Text
    compute='_compute_translated_product_name'
Public methods (28)
  • action_add_from_catalog(self)
    Will open the catalog view
  • action_automatic_entry(self, default_action=None)
  • action_open_business_doc(self)
  • action_payment_items_register_payment(self)
  • action_register_payment(self, ctx=None)
    Open the account.payment.register wizard to pay the selected journal items. :return: An action opening the account.payment.register wizard.
  • action_unreconcile_match_entries(self)
    This method will do the unreconcile action in the list view of the moves
  • check_field_access_rights(self, operation, field_names)
    @api.model@api.deprecated('Override of a deprecated method')
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • flush_model(self, fnames=None)
  • flush_recordset(self, fnames=None)
  • get_column_to_exclude_for_colspan_calculation(self, taxes=None)
  • get_import_templates(self)
    @api.model
  • get_parent_section_line(self)
  • get_section_subtotal(self)
  • get_section_total(self)
  • get_views(self, views, options=None)
    @api.model
  • invalidate_model(self, fnames=None, flush=True)
  • invalidate_recordset(self, fnames=None, flush=True)
  • open_reconcile_view(self)
  • read(self, fields=None, load='_classic_read')
  • reconcile(self)
    Reconcile the current move lines all together.
  • remove_move_reconcile(self)
    Undo a reconciliation
  • search_fetch(self, domain, field_names=None, offset=0, limit=None, order=None)
    @api.model
  • search_read(self, domain=None, fields=None, offset=0, limit=None, order=None, **read_kwargs)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • available_journal_ids Many2many → account.journal
    compute='_compute_available_journal_ids' args: 'account.journal'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today string='Reversal date'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' help='If empty, uses the journal of the journal entry to be reversed.' readonly=False required=True store=True string='Journal'
  • move_ids Many2many → account.move
    domain=[('state', '=', 'posted')] args: 'account.move', 'account_move_reversal_move', 'reversal_id', 'move_id'
  • move_type Char
    compute='_compute_from_moves'
  • new_move_ids Many2many → account.move
    args: 'account.move', 'account_move_reversal_new_move', 'reversal_id', 'new_move_id'
  • reason Char
    string='Reason displayed on Credit Note'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (4)
  • default_get(self, fields)
    @api.model
  • modify_moves(self)
  • refund_moves(self)
  • reverse_moves(self, is_modify=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • alerts Json
    compute='_compute_alerts'
  • move_ids Many2many → account.move
    comodel_name='account.move' required=True
  • summary_data Json
    compute='_compute_summary_data'
Public methods (2)
  • action_send_and_print(self, force_synchronous=False, allow_fallback_pdf=False)
    Launch asynchronously the generation and sending of invoices.
  • default_get(self, fields)
    @api.model

New fields (20)
  • alerts Json
    compute='_compute_alerts'
  • attachments_not_supported Json
    compute='_compute_attachments_not_supported'
  • available_pdf_report_ids One2many → ir.actions.report
    comodel_name='ir.actions.report' compute='_compute_available_pdf_report_ids'
  • company_id Many2one → res.company
    comodel_name='res.company' related='move_id.company_id'
  • display_attachments_widget Boolean
    compute='_compute_display_attachments_widget'
  • display_pdf_report_id Boolean
    compute='_compute_display_pdf_report_id'
  • extra_edi_checkboxes Json
    compute='_compute_extra_edi_checkboxes' precompute=True readonly=False store=True
  • extra_edis Json
    compute='_compute_extra_edis' inverse='_inverse_extra_edis'
  • invoice_edi_format Selection
    compute='_compute_invoice_edi_format' selection=<expr>
  • lang Char
    compute='_compute_lang' compute_sudo=True precompute=False
  • mail_attachments_widget Json
    compute='_compute_mail_attachments_widget' readonly=False store=True
  • mail_partner_ids Many2many → res.partner
    comodel_name='res.partner' compute='_compute_mail_partners' readonly=False store=True string='To'
  • model Char
    compute='_compute_model' readonly=False store=True args: 'Related Document Model'
  • move_id Many2one → account.move
    comodel_name='account.move' required=True
  • pdf_report_id Many2one → ir.actions.report
    comodel_name='ir.actions.report' compute='_compute_pdf_report_id' domain="[('id', 'in', available_pdf_report_ids)]" readonly=False store=True string='Invoice report'
  • res_ids Text
    compute='_compute_res_ids' readonly=False store=True args: 'Related Document IDs'
  • sending_method_checkboxes Json
    compute='_compute_sending_method_checkboxes' precompute=True readonly=False store=True
  • sending_methods Json
    compute='_compute_sending_methods' inverse='_inverse_sending_methods'
  • template_id Many2one
    compute='_compute_template_id' compute_sudo=True domain="[('model', '=', 'account.move')]" readonly=False store=True
  • template_name Char
    args: 'Template Name'
Public methods (5)
  • action_send_and_print(self, allow_fallback_pdf=False)
    Create invoice documents and send them.
  • cancel_save_template(self)
    Restore old subject when canceling the 'save as template' action as it was erased to let user give a more custom input.
  • create_mail_template(self)
    Creates a mail template with the current mail composer's fields.
  • default_get(self, fields)
    @api.model
  • open_template_creation_wizard(self)
    Hit save as template button: opens a wizard that prompts for the template's subject. `create_mail_template` is called when saving the new wizard.

New fields (13)
  • amount Monetary
    currency_field='company_currency_id' help='Always positive amount concerned by this matching expressed in the company currency.'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' help='Utility field to express amount currency' related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' precompute=True readonly=False store=True string='Company'
  • credit_amount_currency Monetary
    currency_field='credit_currency_id' help='Always positive amount concerned by this matching expressed in the credit line foreign currency.'
  • credit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='credit_move_id.currency_id' store=True string='Currency of the credit journal item.'
  • credit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • debit_amount_currency Monetary
    currency_field='debit_currency_id' help='Always positive amount concerned by this matching expressed in the debit line foreign currency.'
  • debit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='debit_move_id.currency_id' store=True string='Currency of the debit journal item.'
  • debit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • draft_caba_move_vals Json
    string='Values that created the draft cash-basis entry'
  • exchange_move_id Many2one → account.move
    comodel_name='account.move' index='btree_not_null'
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' string='Full Reconcile'
  • max_date Date
    compute='_compute_max_date' precompute=True store=True string='Max Date of Matched Lines'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (45)
  • amount Monetary
    currency_field='currency_id'
  • amount_company_currency_signed Monetary
    compute='_compute_amount_company_currency_signed' currency_field='company_currency_id' store=True
  • amount_signed Monetary
    compute='_compute_amount_signed' currency_field='currency_id' help='Negative value of amount field if payment_type is outbound' tracking=True
  • attachment_ids One2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'res_id'
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • company_currency_id Many2one
    related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' index=False precompute=True readonly=False required=True store=True
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • date Date
    default=fields.Date.context_today required=True tracking=True
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_destination_account_id' domain="[('account_type', 'in', ('asset_receivable', 'liability_payable'))]" readonly=False store=True string='Destination Account'
  • duplicate_payment_ids Many2many → account.payment
    comodel_name='account.payment' compute='_compute_duplicate_payment_ids'
  • invoice_ids Many2many → account.move
    column1='payment_id' column2='invoice_id' comodel_name='account.move' copy=False relation='account_move__account_payment' string='Invoices'
  • is_matched Boolean
    compute='_compute_reconciliation_status' store=True string='Is Matched With a Bank Statement'
  • is_reconciled Boolean
    compute='_compute_reconciliation_status' store=True string='Is Reconciled'
  • is_sent Boolean
    copy=False readonly=True string='Is Sent'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' index=False precompute=True readonly=False required=True store=True
  • memo Char
    inverse='_inverse_memo' string='Memo' tracking=True
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' copy=False index=True string='Journal Entry'
  • name Char
    compute='_compute_name' store=True string='Number'
  • need_cancel_request Boolean
    related='move_id.need_cancel_request'
  • outstanding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_outstanding_account_id' index='btree_not_null' store=True string='Outstanding Account'
  • paired_internal_transfer_payment_id Many2one → account.payment
    copy=False help='When an internal transfer is posted, a paired payment is created. They are cross referenced through this field' index='btree_not_null' args: 'account.payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" ondelete='restrict' readonly=False store=True string='Recipient Bank Account' tracking=True args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=', True)]" ondelete='restrict' string='Customer/Vendor' tracking=True
  • partner_type Selection
    default='customer' required=True tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_method_id Many2one
    related='payment_method_line_id.payment_method_id' store=True string='Method' tracking=True
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' copy=False domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_iso20022 is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_iso20022 is necessary.\nU.S. ISO20022: Pay in the US by submitting an ISO20022 file to your bank. Module account_iso20022 is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_receipt_title Char
    compute='_compute_payment_receipt_title'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' string='Payment Reference' tracking=True
  • payment_type Selection
    default='inbound' required=True string='Payment Type' tracking=True args: [('outbound', 'Send'), ('inbound', 'Receive')]
  • qr_code Html
    compute='_compute_qr_code' string='QR Code URL'
  • reconciled_bill_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' search='_search_reconciled_invoice_ids' string='Reconciled Bills' args: 'account.move'
  • reconciled_bills_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Bills'
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' search='_search_reconciled_invoice_ids' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Invoices'
  • reconciled_invoices_type Selection
    compute='_compute_stat_buttons_from_reconciliation' args: [('credit_note', 'Credit Note'), ('invoice', 'Invoice')]
  • reconciled_statement_line_ids Many2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_stat_buttons_from_reconciliation' help='Statements lines matched to this payment' string='Reconciled Statement Lines'
  • reconciled_statement_lines_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Statement Lines'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • state Selection
    compute='_compute_state' copy=False default='draft' readonly=False required=True selection=[('draft', 'Draft'), ('in_process', 'In Process'), ('paid', 'Paid'), ('canceled', 'Canceled'), ('rejected', 'Rejected')] store=True tracking=True
Public methods (17)
  • action_cancel(self)
  • action_draft(self)
  • action_open_business_doc(self)
  • action_post(self)
    draft -> posted
  • action_reject(self)
  • action_validate(self)
  • button_open_bills(self)
    Redirect the user to the bill(s) paid by this payment. :return: An action on account.move.
  • button_open_invoices(self)
    Redirect the user to the invoice(s) paid by this payment. :return: An action on account.move.
  • button_open_journal_entry(self)
    Redirect the user to this payment journal. :return: An action on account.move.
  • button_open_statement_lines(self)
    Redirect the user to the statement line(s) reconciled to this payment. :return: An action on account.move.
  • button_request_cancel(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • mark_as_sent(self)
  • unlink(self)
  • unmark_as_sent(self)
  • write(self, vals)

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True selection=[('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (10)
  • available_payment_method_ids Many2many
    related='journal_id.available_payment_method_ids'
  • code Char
    related='payment_method_id.code'
  • company_id Many2one
    related='journal_id.company_id'
  • default_account_id Many2one
    related='journal_id.default_account_id'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' index='btree_not_null'
  • name Char
    compute='_compute_name' readonly=False store=True
  • payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="['|', ('account_type', 'in', ('asset_current', 'liability_current')), ('id', '=', default_account_id)]" ondelete='restrict'
  • payment_method_id Many2one → account.payment.method
    comodel_name='account.payment.method' domain="[('payment_type', '=?', payment_type), ('id', 'in', available_payment_method_ids)]" required=True string='Payment Method'
  • payment_type Selection
    related='payment_method_id.payment_type'
  • sequence Integer
    default=10
Public methods (1)
  • unlink(self)
    Payment method lines which are used in a payment should not be deleted from the database, only the link betweend them and the journals must be broken.

New fields (48)
  • actionable_errors Json
    compute='_compute_actionable_errors'
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False store=True
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • batches Binary
    compute='_compute_batches' export_string_translation=False
  • can_edit_wizard Boolean
    compute='_compute_from_lines' copy=False store=True
  • can_group_payments Boolean
    compute='_compute_can_group_payments' copy=False store=True
  • communication Char
    compute='_compute_communication' readonly=False store=True string='Memo'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    compute='_compute_from_lines' copy=False store=True args: 'res.company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • custom_user_amount Monetary
    currency_field='currency_id'
  • custom_user_currency_id Many2one → res.currency
    comodel_name='res.currency'
  • duplicate_payment_ids Many2many → account.payment
    comodel_name='account.payment' compute='_compute_duplicate_moves'
  • early_payment_discount_mode Boolean
    compute='_compute_early_payment_discount_mode'
  • group_payment Boolean
    compute='_compute_group_payment' help='Only one payment will be created by partner (bank), instead of one per bill.' readonly=False store=True string='Group Payments'
  • hide_writeoff_section Boolean
    compute='_compute_hide_writeoff_section'
  • installments_mode Selection
    compute='_compute_installments_mode' export_string_translation=False readonly=False selection=[('next', 'Next Installment'), ('overdue', 'Overdue Amount'), ('before_date', 'Before Next Payment Date'), ('full', 'Full Amount')] store=True
  • installments_switch_amount Monetary
    compute='_compute_installments_switch_values' currency_field='currency_id'
  • installments_switch_html Html
    compute='_compute_installments_switch_values'
  • is_register_payment_on_draft Boolean
    compute='_compute_is_register_payment_on_draft'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' domain="[('id', 'in', available_journal_ids)]" precompute=True readonly=False store=True
  • line_ids Many2many → account.move.line
    copy=False readonly=True string='Journal items' args: 'account.move.line', 'account_payment_register_move_line_rel', 'wizard_id', 'line_id'
  • missing_account_partners Many2many → res.partner
    compute='_compute_trust_values' args: 'res.partner'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account'
  • partner_id Many2one → res.partner
    compute='_compute_from_lines' copy=False ondelete='restrict' store=True string='Customer/Vendor' args: 'res.partner'
  • partner_type Selection
    compute='_compute_from_lines' copy=False store=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference'
  • payment_difference_handling Selection
    compute='_compute_payment_difference_handling' readonly=False selection=[('open', 'Keep open'), ('reconcile', 'Mark as fully paid')] store=True string='Payment Difference Handling'
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_type Selection
    compute='_compute_from_lines' copy=False store=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • qr_code Html
    compute='_compute_qr_code' string='QR Code URL'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_payment_difference Boolean
    compute='_compute_show_payment_difference'
  • source_amount Monetary
    compute='_compute_from_lines' copy=False currency_field='company_currency_id' store=True string='Amount to Pay (company currency)'
  • source_amount_currency Monetary
    compute='_compute_from_lines' copy=False currency_field='source_currency_id' store=True string='Amount to Pay (foreign currency)'
  • source_currency_id Many2one → res.currency
    compute='_compute_from_lines' copy=False store=True string='Source Currency' args: 'res.currency'
  • total_payments_amount Integer
    compute='_compute_trust_values'
  • untrusted_bank_ids Many2many → res.partner.bank
    compute='_compute_trust_values' args: 'res.partner.bank'
  • untrusted_payments_count Integer
    compute='_compute_trust_values'
  • writeoff_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False string='Difference Account'
  • writeoff_is_exchange_account Boolean
    compute='_compute_writeoff_is_exchange_account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (4)
  • action_create_payments(self)
  • action_open_missing_account_partners(self)
  • action_open_untrusted_bank_accounts(self)
  • default_get(self, fields)
    @api.model

New fields (18)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' args: 'res.currency'
  • discount_days Integer
    default=10 help='Number of days before the early payment proposition expires' string='Discount Days'
  • discount_percentage Float
    default=2.0 help='Early Payment Discount granted for this payment term' string='Discount %'
  • display_on_invoice Boolean
    default=True string='Show installment dates'
  • early_discount Boolean
    string='Early Discount'
  • early_pay_discount_computation Selection
    compute='_compute_discount_computation' readonly=False store=True string='Cash Discount Tax Reduction' args: [('included', 'On early payment'), ('excluded', 'Never'), ('mixed', 'Always (upon invoice)')]
  • example_amount Monetary
    currency_field='currency_id' default=1000 readonly=True store=False
  • example_date Date
    default=_default_example_date store=False string='Date example'
  • example_invalid Boolean
    compute='_compute_example_invalid'
  • example_preview Html
    compute='_compute_example_preview'
  • example_preview_discount Html
    compute='_compute_example_preview'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Html
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (1)
  • copy_data(self, default=None)

New fields (7)
  • days_next_month Char
    default='10' readonly=False size=2 string='Days on the next month'
  • delay_type Selection
    default='days_after' required=True args: [('days_after', 'Days after invoice date'), ('days_after_end_of_month', 'Days after end of month'), ('days_after_end_of_next_month', 'Days after end of next month'), ('days_end_of_month_on_the', 'Days end of month on the')]
  • display_days_next_month Boolean
    compute='_compute_display_days_next_month'
  • nb_days Integer
    compute='_compute_days' readonly=False store=True string='Days'
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • value Selection
    default='percent' help='Select here the kind of valuation related to this payment terms line.' required=True args: [('percent', 'Percent'), ('fixed', 'Fixed')]
  • value_amount Float
    compute='_compute_value_amount' digits='Payment Terms' help='For percent enter a ratio between 0-100.' readonly=False store=True string='Due'
Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True
  • can_be_proposed Boolean
    compute='_compute_can_be_proposed' copy=False store=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • line_ids One2many → account.reconcile.model.line
    copy=True args: 'account.reconcile.model.line', 'model_id'
  • mapped_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_mapping' copy=False store=True
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is lower than or equal to'), ('greater', 'Is greater than or equal to'), ('between', 'Is between')] string='Amount' tracking=True
  • match_amount_max Float
    string='Amount Max Parameter' tracking=True
  • match_amount_min Float
    string='Amount Min Parameter' tracking=True
  • match_journal_ids Many2many → account.journal
    check_company=True domain="[('type', 'in', ('bank', 'cash', 'credit'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when either the statement line label, the transaction details or the note matches the following:\n * Contains: The statement line must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label' tracking=True
  • match_label_param Char
    string='Label Parameter' tracking=True
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Partners' args: 'res.partner'
  • name Char
    required=True string='Name' translate=True
  • next_activity_type_id Many2one → mail.activity.type
    comodel_name='mail.activity.type' string='Next Activity'
  • sequence Integer
    default=10 required=True
  • trigger Selection
    default='manual' help='Validate the statement line automatically (reconciliation based on your rule).' required=True tracking=True args: [('manual', 'Manual'), ('auto_reconcile', 'Automated')]
Public methods (4)
  • action_reconcile_stat(self)
  • action_set_auto_reconcile(self)
  • action_set_manual(self)
  • copy_data(self, default=None)

New fields (10)
  • account_id Many2one → account.account
    check_company=True domain="[('account_type', '!=', 'off_balance')]" ondelete='cascade' string='Account' args: 'account.account'
  • amount Float
    compute='_compute_float_amount' store=True string='Float Amount'
  • amount_string Char
    default='100' help='Value for the amount of the writeoff line\n * Percentage: Percentage of the balance, between 0 and 100.\n * Fixed: The fixed value of the writeoff. The amount will count as a debit if it is negative, as a credit if it is positive.\n * From Label: There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)\n If the label is "01870912 0009065 00115" and you need the amount in decimal\n format (e.g. 90.65), you can use a regex with capturing groups, for example:\n \\s+0*(\\d+?)(\\d{2})(?=\\s)\n In this case:\n • the first group captures the integer part\n • the second group captures the decimal part (last two digits)\n ' required=True string='Amount'
  • amount_type Selection
    default='percentage' required=True selection=[('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('percentage_st_line', 'Percentage of statement line'), ('regex', 'From label')]
  • company_id Many2one
    related='model_id.company_id' store=True
  • label Char
    string='Label' translate=True
  • model_id Many2one → account.reconcile.model
    index='btree_not_null' ondelete='cascade' readonly=True args: 'account.reconcile.model'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Partner'
  • sequence Integer
    default=10 required=True
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' ondelete='restrict' string='Taxes'
Public methods (0)

No public methods.

New fields (36)
  • active Boolean
    default=True string='Active'
  • allow_foreign_vat Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Allow Foreign VAT'
  • availability_condition Selection
    compute='_compute_default_availability_condition' readonly=False selection=[('country', 'Country Matches'), ('coa', 'Chart of Accounts Matches'), ('always', 'Always')] store=True string='Availability'
  • chart_template Selection
    selection=<expr> string='Chart of Accounts'
  • column_ids One2many → account.report.column
    comodel_name='account.report.column' inverse_name='report_id' string='Columns'
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • currency_translation Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False selection=[('current', 'Use the most recent rate at the date of the report'), ('cta', 'Use CTA')] store=True string='Currency Translation'
  • default_opening_date_filter Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False selection=[('this_year', 'This Year'), ('this_quarter', 'This Quarter'), ('this_month', 'This Month'), ('today', 'Today'), ('previous_month', 'Last Month'), ('previous_quarter', 'Last Quarter'), ('previous_year', 'Last Year'), ('this_return_period', 'This Return Period'), ('previous_return_period', 'Last Return Period')] store=True string='Default Opening'
  • filter_account_type Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False selection=[('both', 'Payable and receivable'), ('payable', 'Payable'), ('receivable', 'Receivable'), ('disabled', 'Disabled')] store=True string='Account Types'
  • filter_aml_ir_filters Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] help='If activated, user-defined filters on journal items can be selected on this report' precompute=True readonly=False store=True string='Favorite Filters'
  • filter_analytic Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Analytic Filter'
  • filter_budgets Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Budgets'
  • filter_date_range Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Date Range'
  • filter_growth_comparison Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Growth Comparison'
  • filter_hide_0_lines Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Hide lines at 0'
  • filter_hierarchy Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Account Groups'
  • filter_journals Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Journals'
  • filter_multi_company Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False selection=[('selector', 'Use Company Selector'), ('tax_units', 'Use Tax Units')] store=True string='Multi-Company'
  • filter_partner Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Partners'
  • filter_period_comparison Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Period Comparison'
  • filter_show_draft Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Draft Entries'
  • filter_unfold_all Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Unfold All'
  • filter_unreconciled Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Unreconciled Entries'
  • integer_rounding Selection
    selection=[('HALF-UP', 'Nearest'), ('UP', 'Up'), ('DOWN', 'Down')] string='Integer Rounding'
  • line_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='report_id' string='Lines'
  • load_more_limit Integer
    string='Load More Limit'
  • name Char
    required=True string='Name' translate=True
  • only_tax_exigible Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] precompute=True readonly=False store=True string='Only Tax Exigible Lines'
  • prefix_groups_threshold Integer
    default=4000 string='Prefix Groups Threshold'
  • root_report_id Many2one → account.report
    comodel_name='account.report' help='The report this report is a variant of.' index='btree_not_null' string='Root Report'
  • search_bar Boolean
    string='Search Bar'
  • section_main_report_ids Many2many → account.report
    column1='sub_report_id' column2='main_report_id' comodel_name='account.report' relation='account_report_section_rel' string='Section Of'
  • section_report_ids Many2many → account.report
    column1='main_report_id' column2='sub_report_id' comodel_name='account.report' relation='account_report_section_rel' string='Sections'
  • sequence Integer
    string='Sequence'
  • use_sections Boolean
    compute='_compute_use_sections' help='Create a structured report with multiple sections for convenient navigation and simultaneous printing.' readonly=False store=True string='Composite Report'
  • variant_report_ids One2many → account.report
    comodel_name='account.report' inverse_name='root_report_id' string='Variants'
Public methods (3)
  • copy(self, default=None)
    Copy the whole financial report hierarchy by duplicating each line recursively. :param default: Default values. :return: The copied account.report record.
  • copy_data(self, default=None)
  • write(self, vals)

New fields (8)
  • blank_if_zero Boolean
    help='When checked, 0 values will not show in this column.' string='Blank if Zero'
  • custom_audit_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' string='Custom Audit Action'
  • expression_label Char
    required=True string='Expression Label'
  • figure_type Selection
    default='monetary' required=True selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • name Char
    required=True string='Name' translate=True
  • report_id Many2one → account.report
    comodel_name='account.report' index='btree_not_null' string='Report'
  • sequence Integer
    string='Sequence'
  • sortable Boolean
    string='Sortable'
Public methods (0)

No public methods.

New fields (12)
  • auditable Boolean
    compute='_compute_auditable' readonly=False store=True string='Auditable'
  • blank_if_zero Boolean
    help="When checked, 0 values will not show when displaying this expression's value." string='Blank if Zero'
  • carryover_target Char
    help='Formula in the form line_code.expression_label. This allows setting the target of the carryover for this expression (on a _carryover_*-labeled expression), in case it is different from the parent line.' string='Carry Over To'
  • date_scope Selection
    default='strict_range' required=True selection=[('from_beginning', 'From the very start'), ('from_fiscalyear', 'From the start of the fiscal year'), ('to_beginning_of_fiscalyear', 'At the beginning of the fiscal year'), ('to_beginning_of_period', 'At the beginning of the period'), ('strict_range', 'Strictly on the given dates'), ('previous_return_period', 'From previous return period')] string='Date Scope'
  • engine Selection
    required=True selection=[('domain', 'Odoo Domain'), ('tax_tags', 'Tax Tags'), ('aggregation', 'Aggregate Other Formulas'), ('account_codes', 'Prefix of Account Codes'), ('external', 'External Value'), ('custom', 'Custom Python Function')] string='Computation Engine'
  • figure_type Selection
    selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • formula Char
    required=True string='Formula'
  • green_on_positive Boolean
    default=True string='Is Growth Good when Positive'
  • label Char
    copy=True required=True string='Label'
  • report_line_id Many2one → account.report.line
    comodel_name='account.report.line' index=True ondelete='cascade' required=True string='Report Line'
  • report_line_name Char
    related='report_line_id.name' string='Report Line Name'
  • subformula Char
    string='Subformula'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (11)
  • carryover_origin_expression_label Char
    string='Origin Expression Label'
  • carryover_origin_report_line_id Many2one → account.report.line
    comodel_name='account.report.line' string='Origin Line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    required=True
  • name Char
    required=True
  • report_country_id Many2one
    related='target_report_line_id.report_id.country_id' string='Country'
  • target_report_expression_id Many2one → account.report.expression
    comodel_name='account.report.expression' ondelete='cascade' required=True string='Target Expression'
  • target_report_expression_label Char
    related='target_report_expression_id.label' string='Target Expression Label'
  • target_report_line_id Many2one
    related='target_report_expression_id.report_line_id' string='Target Line'
  • text_value Char
    string='Text Value'
  • value Float
    string='Numeric Value'
Public methods (0)

No public methods.

New fields (20)
  • account_codes_formula Char
    help='Internal field to shorten expression_ids creation for the account_codes engine' inverse='_inverse_account_codes_formula' store=False string='Account Codes Formula Shortcut'
  • action_id Many2one → ir.actions.actions
    comodel_name='ir.actions.actions' help='Setting this field will turn the line into a link, executing the action when clicked.' string='Action'
  • aggregation_formula Char
    help='Internal field to shorten expression_ids creation for the aggregation engine' inverse='_inverse_aggregation_formula' store=False string='Aggregation Formula Shortcut'
  • children_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='parent_id' string='Child Lines'
  • code Char
    help='Unique identifier for this line.' string='Code'
  • domain_formula Char
    help='Internal field to shorten expression_ids creation for the domain engine' inverse='_inverse_domain_formula' store=False string='Domain Formula Shortcut'
  • expression_ids One2many → account.report.expression
    comodel_name='account.report.expression' inverse_name='report_line_id' string='Expressions'
  • external_formula Char
    help='Internal field to shorten expression_ids creation for the external engine' inverse='_inverse_external_formula' store=False string='External Formula Shortcut'
  • foldable Boolean
    help="By default, we always unfold the lines that can be. If this is checked, the line won't be unfolded by default, and a folding button will be displayed." string='Foldable'
  • groupby Char
    help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' string='Group By'
  • hide_if_zero Boolean
    help='This line and its children will be hidden when all of their columns are 0.' string='Hide if Zero'
  • hierarchy_level Integer
    compute='_compute_hierarchy_level' precompute=True readonly=False recursive=True required=True store=True string='Level'
  • horizontal_split_side Selection
    compute='_compute_horizontal_split_side' readonly=False recursive=True selection=[('left', 'Left'), ('right', 'Right')] store=True string='Horizontal Split Side'
  • name Char
    required=True string='Name' translate=True
  • parent_id Many2one → account.report.line
    comodel_name='account.report.line' index='btree_not_null' ondelete='set null' string='Parent Line'
  • print_on_new_page Boolean
    help='When checked this line and everything after it will be printed on a new page.' args: 'Print On New Page'
  • report_id Many2one → account.report
    comodel_name='account.report' compute='_compute_report_id' index=True ondelete='cascade' precompute=True readonly=False recursive=True required=True store=True string='Parent Report'
  • sequence Integer
    string='Sequence'
  • tax_tags_formula Char
    help='Internal field to shorten expression_ids creation for the tax_tags engine' inverse='_inverse_aggregation_tax_formula' store=False string='Tax Tags Formula Shortcut'
  • user_groupby Char
    compute='_compute_user_groupby' help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' precompute=True readonly=False store=True string='User Group By'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    help='Date (inclusive) to which the numbers are resequenced. If not set, all Journal Entries up to the end of the period are resequenced.'
  • first_date Date
    help='Date (inclusive) from which the numbers are resequenced.'
  • first_name Char
    compute='_compute_first_name' readonly=False required=True store=True string='First New Sequence'
  • move_ids Many2many → account.move
    args: 'account.move'
  • new_values Text
    compute='_compute_new_values'
  • ordering Selection
    default='keep' required=True args: [('keep', 'Keep current order'), ('date', 'Reorder by accounting date')]
  • preview_moves Text
    compute='_compute_preview_moves'
  • sequence_number_reset Char
    compute='_compute_sequence_number_reset'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • resequence(self)

New fields (2)
  • name Char
    compute='_compute_root'
  • parent_id Many2one → account.root
    compute='_compute_root' args: 'account.root'
Public methods (1)
  • browse(self, ids=())
    @api.private

New fields (9)
  • chains_to_hash_with_gaps Json
    compute='_compute_data'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • hash_date Date
    compute='_compute_hash_date' help='The selected Date' readonly=False required=True store=True string='Hash All Entries'
  • max_hash_date Date
    compute='_compute_max_hash_date' help='Highest Date such that all posted journal entries prior to (including) the date are secured. Only journal entries after the hard lock date are considered.' string='Max Hash Date'
  • move_to_hash_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_data' help='All moves that will be hashed'
  • not_hashable_unlocked_move_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_data' help='All unhashable moves before the selected date that are not protected by the Hard Lock Date'
  • unreconciled_bank_statement_line_ids Many2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_data' help='All unreconciled bank statement lines before the selected date.'
  • warnings Json
    compute='_compute_warnings'
Public methods (3)
  • action_secure_entries(self)
  • action_show_draft_moves_in_hashed_period(self)
  • action_show_moves(self, moves)

New fields (7)
  • bank_bic Char
    readonly=False related='bank_id.bic' string='Bic'
  • company_id Many2one → res.company
    compute='_compute_company_id' required=True args: 'res.company'
  • linked_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_linked_journal_id' inverse='set_linked_journal_id' string='Journal'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account_bank Integer
    default=<expr>
  • num_journals_without_account_credit Integer
    default=<expr>
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self, journal_type)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (36)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0.0 digits=(16, 4) required=True tracking=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage: The tax amount is a % of the price:\n e.g 100 * (1 + 10%) = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage'), ('division', 'Percentage Tax Included')] string='Tax Computation' tracking=True
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    check_company=True string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • company_price_include Selection
    related='company_id.account_price_include'
  • country_code Char
    readonly=True related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='The country for which this tax is applicable.' precompute=True readonly=False required=True store=True string='Country'
  • description Html
    string='Description' translate=html_translate
  • display_alternative_taxes_field Boolean
    compute='_compute_display_alternative_taxes_field'
  • fiscal_position_ids Many2many → account.fiscal.position
    column1='account_tax_id' column2='account_fiscal_position_id' comodel_name='account.fiscal.position' relation='account_fiscal_position_account_tax_rel'
  • has_negative_factor Boolean
    compute='_compute_has_negative_factor'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Base of Subsequent Taxes' tracking=True
  • invoice_label Char
    string='Label on Invoices' translate=True
  • invoice_legal_notes Html
    help='Legal mentions that have to be printed on the invoices.' string='Legal Notes' translate=True
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' compute='_compute_invoice_repartition_line_ids' domain=[('document_type', '=', 'invoice')] help='Distribution when the tax is used on an invoice' inverse_name='tax_id' readonly=False store=True string='Distribution for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes' tracking=True
  • is_domestic Boolean
    compute='_compute_is_domestic' precompute=True store=True
  • is_used Boolean
    compute='_compute_is_used' string='Tax used'
  • name Char
    required=True string='Tax Name' tracking=True translate=True
  • original_tax_ids Many2many → account.tax
    column1='dest_tax_id' column2='src_tax_id' comodel_name='account.tax' domain="[\n ('type_tax_use', '=', type_tax_use),\n ('is_domestic', '=', True),\n ]" help='List of taxes to replace when applying any of the stipulated fiscal positions.' ondelete='cascade' relation='account_tax_alternatives' string='Replaces'
  • price_include Boolean
    compute='_compute_price_include' help='Determines whether the price you use on the product and invoices includes this tax.' search='_search_price_include'
  • price_include_override Selection
    help="Overrides the Company's default on whether the price you use on the product and invoices includes this tax." selection=[('tax_included', 'Tax Included'), ('tax_excluded', 'Tax Excluded')] string='Included in Price' tracking=True
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' compute='_compute_refund_repartition_line_ids' domain=[('document_type', '=', 'refund')] help='Distribution when the tax is used on a refund' inverse_name='tax_id' readonly=False store=True string='Distribution for Refund Invoices'
  • repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True inverse_name='tax_id' string='Distribution'
  • repartition_lines_str Char
    compute='_compute_repartition_lines_str' string='Repartition Lines' tracking=True
  • replacing_tax_ids Many2many → account.tax
    column1='src_tax_id' column2='dest_tax_id' comodel_name='account.tax' readonly=True relation='account_tax_alternatives' string='Replaced by'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Exigibility' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    comodel_name='account.tax.group' compute='_compute_tax_group_id' domain="[('country_id', 'in', (country_id, False))]" precompute=True readonly=False required=True store=True string='Tax Group'
  • tax_label Char
    compute='_compute_tax_label'
  • tax_scope Selection
    string='Tax Scope' args: [('service', 'Services'), ('consu', 'Goods')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note: 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Type' tracking=True args: TYPE_TAX_USE
Public methods (12)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, rounding_method=None)
    Compute all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence:: [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] :param price_unit: The unit price of the line to compute taxes on. :param currency: The optional currency in which the price_unit is expressed. :param quantity: The optional quantity of the product to compute taxes on. :param product: The optional product to compute taxes on. Used to get the tags to apply on the lines. :param partner: The optional partner compute taxes on. Used to retrieve the lang to build strings and for potential extensions. :param is_refund: The optional boolean indicating if this is a refund. :param handle_price_include: Used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. :param include_caba_tags: The optional boolean indicating if CABA tags need to be taken into account. :returns: :: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'base_tags: : list<int>, # Tags to apply on the base line 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'base': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': bool, 'price_include': bool, 'tax_exigibility': str, 'tax_repartition_line_id': int, 'group': recordset, 'tag_ids': list<int>, 'tax_ids': list<int>, }], }
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • flatten_taxes_hierarchy(self)
  • get_tax_tags(self, is_refund, repartition_type)
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model@api.readonly
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')
  • unlink_except_tax_used(self)
    @api.ondelete(at_uninstall=False)
  • validate_tax_group_id(self)
    @api.constrains('tax_group_id')
  • write(self, vals)

New fields (10)
  • advance_tax_payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Downpayments posted on this account will be considered by the Tax Closing Entry.' string='Tax Advance Account'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='The country for which this tax group is applicable.' precompute=True readonly=False store=True string='Country'
  • name Char
    required=True translate=True
  • pos_receipt_label Char
    string='PoS receipt label'
  • preceding_subtotal Char
    help="If set, this value will be used on documents as the label of a subtotal excluding this tax group before displaying it. If not set, the tax group will be displayed after the 'Untaxed amount' subtotal." string='Preceding Subtotal' translate=True
  • sequence Integer
    default=10
  • tax_payable_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the authorities.' string='Tax Payable Account'
  • tax_receivable_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the company.' string='Tax Receivable Account'
Public methods (0)

No public methods.

New fields (11)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' help='The company this distribution line belongs to.' related='tax_id.company_id' store=True string='Company'
  • document_type Selection
    required=True selection=[('invoice', 'Invoice'), ('refund', 'Refund')] string='Related to'
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this distribution line' string='Factor Ratio'
  • factor_percent Float
    default=100 digits=(16, 12) help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which distribution lines are displayed and matched. For refunds to work properly, invoice distribution lines should be arranged in the same order as the credit note distribution lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] ondelete='restrict' string='Tax Grids'
  • tag_ids_domain Binary
    compute='_compute_tag_ids_domain' help='Dynamic domain used for the tag that can be set on tax' string='tag domain'
  • tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' index='btree_not_null' ondelete='cascade'
  • use_in_tax_closing Boolean
    compute='_compute_use_in_tax_closing' precompute=True readonly=False store=True string='Tax Closing Entry'
Public methods (0)

No public methods.

New fields (4)
  • account_number Char
    compute='_compute_account_number' inverse='_inverse_account_number'
  • from_invoice Boolean
  • qr_code Boolean
    readonly=False related='company_id.qr_code'
  • vat Char
    readonly=False related='company_id.vat'
Public methods (1)
  • document_layout_save(self)
    Save layout and onboarding step progress, return super() result

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • precision_get(self, application)
    @api.model

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (0)

No public methods.

New fields (1)
  • is_invoice_report Boolean
    copy=True string='Invoice report'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • lazy_session_info(self)
    @api.model

New fields (1)
  • account_templates Binary
    compute='_compute_account_templates' exportable=False
Public methods (2)
  • module_uninstall(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • get_account_kpi_summary(self)
    @api.model
  • get_kpi_summary(self)
    @api.model

New fields (7)
  • account_audit_log_account_id Many2one → account.account
    comodel_name='account.account' compute='_compute_account_audit_log_account_id' search='_search_account_audit_log_account_id' string='Account'
  • account_audit_log_company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_account_audit_log_company_id' search='_search_account_audit_log_company_id' string='Company '
  • account_audit_log_move_id Many2one → account.move
    comodel_name='account.move' compute='_compute_account_audit_log_move_id' search='_search_account_audit_log_move_id' string='Journal Entry'
  • account_audit_log_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_account_audit_log_partner_id' search='_search_account_audit_log_partner_id' string='Partner'
  • account_audit_log_preview Text
    compute='_compute_account_audit_log_preview' search='_search_account_audit_log_preview' string='Description'
  • account_audit_log_restricted Boolean
    compute='_compute_account_audit_log_restricted' search='_search_account_audit_log_restricted' string='Protected by restricted Audit Logs'
  • account_audit_log_tax_id Many2one → account.tax
    comodel_name='account.tax' compute='_compute_account_audit_log_tax_id' search='_search_account_audit_log_tax_id' string='Tax'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • action_close_panel_account_dashboard(self)
    @api.model
  • action_close_panel_account_invoice(self)
    @api.model

New fields (0)

No new fields.

Public methods (8)
  • action_open_step_bank_account(self)
    @api.model
  • action_open_step_base_document_layout(self)
    @api.model
  • action_open_step_chart_of_accounts(self)
    @api.model
    Called by the 'Chart of Accounts' button of the dashboard onboarding panel.
  • action_open_step_company_data(self)
    @api.model
    Set company's basic information.
  • action_open_step_create_invoice(self)
    @api.model
  • action_open_step_fiscal_year(self)
    @api.model
  • action_open_step_sales_tax(self)
    @api.model
  • action_validate_step_base_document_layout(self)
    @api.model
    Set the onboarding(s) step as done only if layout is set.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' ondelete='restrict' string='Expense Account' tracking=True args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' ondelete='restrict' string='Income Account' tracking=True args: 'account.account'
Public methods (0)

No public methods.

New fields (1)
  • tax_string Char
    compute='_compute_tax_string'
Public methods (0)

No public methods.

New fields (7)
  • account_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' domain="[('applicability', '=', 'products')]" help='Tags to be set on the base and tax journal items created for this product.' string='Account Tags'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' ondelete='restrict' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category.' ondelete='restrict' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product' string='Purchase Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • tax_string Char
    compute='_compute_tax_string'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product' string='Sales Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (72)
  • account_cash_basis_base_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • account_default_pos_receivable_account_id Many2one → account.account
    check_company=True string='Default PoS Receivable Account' args: 'account.account'
  • account_discount_expense_allocation_id Many2one → account.account
    comodel_name='account.account' string='Separate account for expense discount'
  • account_discount_income_allocation_id Many2one → account.account
    comodel_name='account.account' string='Separate account for income discount'
  • account_enabled_tax_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_account_enabled_tax_country_ids' help='Technical field containing the countries for which this company is using tax-related features(hence the ones for which l10n modules need to show tax-related fields).' string='l10n-used countries'
  • account_fiscal_country_group_codes Json
    compute='_compute_account_fiscal_country_group_codes'
  • account_fiscal_country_id Many2one → res.country
    comodel_name='res.country' compute='compute_account_tax_fiscal_country' help='The country to use the tax reports from for this company' readonly=False store=True string='Fiscal Country'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Cash Discount Write-Off Gain Account'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Cash Discount Write-Off Loss Account'
  • account_journal_suspense_account_id Many2one → account.account
    check_company=True string='Journal Suspense Account' args: 'account.account'
  • account_opening_date Date
    help='That is the date of the opening entry.' string='Opening Entry'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_price_include Selection
    default='tax_excluded' help='Default on whether the sales price used on the product and invoices with this Company includes its taxes.' required=True selection=[('tax_included', 'Tax Included'), ('tax_excluded', 'Tax Excluded')] string='Default Sales Price Include'
  • account_purchase_receipt_fiscal_position_id Many2one → account.fiscal.position
    check_company=True string='Default Purchase Receipt Fiscal Position' args: 'account.fiscal.position'
  • account_purchase_tax_id Many2one → account.tax
    check_company=True string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    check_company=True string='Default Sale Tax' args: 'account.tax'
  • account_storno Boolean
    compute='_compute_account_storno' readonly=False store=True string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' string='Sales Credit Limit'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • automatic_entry_default_journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • autopost_bills Boolean
    default=True string='Auto-validate bills'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • batch_payment_sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False default=<expr> readonly=True
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template Selection
    selection='_chart_template_selection'
  • company_registry_placeholder Char
    compute='_compute_company_registry_placeholder'
  • company_vat_placeholder Char
    compute='_compute_company_vat_placeholder'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    check_company=True string='Cash Difference Expense' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    check_company=True string='Cash Difference Income' args: 'account.account'
  • display_account_storno Boolean
    compute='_compute_display_account_storno'
  • display_invoice_amount_total_words Boolean
    string='Total amount of invoice in letters'
  • display_invoice_tax_company_currency Boolean
    default=True string='Taxes in company currency'
  • domestic_fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' compute='_compute_domestic_fiscal_position_id' store=True
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_account_id Many2one → account.account
    comodel_name='account.account' domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' string='Expense Account'
  • expense_accrual_account_id Many2one → account.account
    check_company=True domain="[('internal_group', '=', 'liability'), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'in', ('expense', 'expense_other'))]" string='Loss Exchange Rate Account'
  • fiscal_position_ids One2many → account.fiscal.position
    comodel_name='account.fiscal.position' inverse_name='company_id'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help="Any entry up to and including that date will be postponed to a later time, in accordance with its journal's sequence." string='Global Lock Date' tracking=True
  • force_restrictive_audit_trail Boolean
    compute='_compute_force_restrictive_audit_trail' string='Force Audit Trail'
  • hard_lock_date Date
    help='Any entry up to and including that date will be postponed to a later time, in accordance with its journal sequence. This lock date is irreversible and does not allow any exception.' string='Hard Lock Date' tracking=True
  • income_account_id Many2one → account.account
    comodel_name='account.account' domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' string='Income Account'
  • income_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('internal_group', '=', 'income')]" string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_terms Html
    string='Default Terms and Conditions' translate=True
  • invoice_terms_html Html
    compute='_compute_invoice_terms_html' readonly=False sanitize_attributes=False store=True string='Default Terms and Conditions as a Web page' translate=True
  • link_qr_code Boolean
    string='Display Link QR-code'
  • multi_vat_foreign_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_multi_vat_foreign_country' help='Countries for which the company has a VAT number' string='Foreign VAT countries'
  • price_difference_account_id Many2one → account.account
    comodel_name='account.account' domain=ACCOUNT_DOMAIN help='During perpetual valuation, this account will hold the price difference between the standard price and the bill price.' string='Price Difference Account'
  • purchase_lock_date Date
    help="Any purchase entry prior to and including this date will be postponed to a later date, in accordance with its journal's sequence." string='Purchase Lock date' tracking=True
  • qr_code Boolean
    string='Display QR-code on invoices'
  • quick_edit_mode Selection
    selection=[('out_invoices', 'Customer Invoices'), ('in_invoices', 'Vendor Bills'), ('out_and_in_invoices', 'Customer Invoices and Vendor Bills')] string='Quick encoding'
  • restrictive_audit_trail Boolean
    help='Enable this option to prevent deletion of journal item related logs' string='Restrictive Audit Trail' tracking=True
  • revenue_accrual_account_id Many2one → account.account
    check_company=True domain="[('internal_group', '=', 'asset'), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to move the period of a revenue' args: 'account.account'
  • sale_lock_date Date
    help="Any sales entry prior to and including this date will be postponed to a later date, in accordance with its journal's sequence." string='Sales Lock Date' tracking=True
  • tax_calculation_rounding_method Selection
    default='round_globally' string='Tax Calculation Rounding Method' args: [('round_globally', 'Round per Tax'), ('round_per_line', 'Round per Line')]
  • tax_cash_basis_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' string='Cash Basis Journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help="Any entry with taxes up to and including that date will be postponed to a later time, in accordance with its journal's sequence. The tax lock date is automatically set when the tax closing entry is posted." string='Tax Return Lock Date' tracking=True
  • terms_type Selection
    default='plain' string='Terms & Conditions format' args: [('plain', 'Add a Note'), ('html', 'Add a link to a Web Page')]
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    check_company=True domain="[('reconcile', '=', True), ('account_type', '=', 'asset_current')]" help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
  • user_fiscalyear_lock_date Date
    compute='_compute_user_fiscalyear_lock_date'
  • user_hard_lock_date Date
    compute='_compute_user_hard_lock_date'
  • user_purchase_lock_date Date
    compute='_compute_user_purchase_lock_date'
  • user_sale_lock_date Date
    compute='_compute_user_sale_lock_date'
  • user_tax_lock_date Date
    compute='_compute_user_tax_lock_date'
Public methods (15)
  • action_save_onboarding_company_data(self)
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • compute_account_tax_fiscal_country(self)
    @api.depends('country_id')
  • compute_fiscalyear_dates(self, current_date)
    Returns the dates of the fiscal year containing the provided date for this company. :return: ``{'date_from': ..., 'date_to': ...}``
  • create(self, vals_list)
    @api.model_create_multi
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_next_batch_payment_communication(self)
    When in need of a batch payment communication reference (several invoices paid at the same time) use batch_payment_sequence_id to get it (eventually create it first): e.g BATCH/2024/00001
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • install_l10n_modules(self)
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar or from the Financial configuration menu.
  • setting_init_credit_card_account_action(self)
    @api.model
    Called by the Financial configuration menu 'Add a credit card account'
  • write(self, vals)

New fields (63)
  • account_cash_basis_base_account_id Many2one → account.account
    check_company=True comodel_name='account.account' readonly=False related='company_id.account_cash_basis_base_account_id' string='Base Tax Received Account'
  • account_default_credit_limit Monetary
    compute='_compute_account_default_credit_limit' help='This is the default credit limit that will be used on partners that do not have a specific limit on them.' inverse='_inverse_account_default_credit_limit' readonly=False string='Default Credit Limit'
  • account_discount_expense_allocation_id Many2one → account.account
    comodel_name='account.account' domain="[('account_type', 'in', ('income', 'income_other', 'expense', 'expense_other'))]" readonly=False related='company_id.account_discount_expense_allocation_id' string='Customer Invoices Discounts Account'
  • account_discount_income_allocation_id Many2one → account.account
    comodel_name='account.account' domain="[('account_type', 'in', ('income', 'income_other', 'expense', 'expense_other'))]" readonly=False related='company_id.account_discount_income_allocation_id' string='Vendor Bills Discounts Account'
  • account_fiscal_country_id Many2one
    readonly=False related='company_id.account_fiscal_country_id' store=False string='Fiscal Country Code'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'in', ('income', 'income_other', 'expense', 'expense_other'))]" help='Account for the difference amount after the income discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_gain_account_id' string='Early Discount Gain'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'in', ('expense', 'expense_other', 'income', 'income_other'))]" help='Account for the difference amount after the expense discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_loss_account_id' string='Early Discount Loss'
  • account_journal_suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'in', ('asset_current', 'liability_current'))]" help='Bank Transactions are posted immediately after import or synchronization. Their counterparty is the bank suspense account.\nReconciliation replaces the latter by the definitive account(s).' readonly=False related='company_id.account_journal_suspense_account_id' string='Bank Suspense'
  • account_price_include Selection
    help='Default on whether the sales price used on the product and invoices with this Company includes its taxes.' readonly=False related='company_id.account_price_include' required=True string='Default Sales Price Include'
  • account_storno Boolean
    readonly=False related='company_id.account_storno' string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' readonly=False related='company_id.account_use_credit_limit' string='Sales Credit Limit'
  • autopost_bills Boolean
    readonly=False related='company_id.autopost_bills'
  • chart_template Selection
    default=<expr> selection=<expr>
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Currency Exchange Journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • display_account_storno Boolean
    related='company_id.display_account_storno'
  • display_invoice_amount_total_words Boolean
    readonly=False related='company_id.display_invoice_amount_total_words' string='Total amount of invoice in letters'
  • display_invoice_tax_company_currency Boolean
    readonly=False related='company_id.display_invoice_tax_company_currency' string='Taxes in company currency'
  • expense_account_id Many2one
    check_company=True readonly=False related='company_id.expense_account_id'
  • expense_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', 'in', ('expense', 'expense_other'))]" readonly=False related='company_id.expense_currency_exchange_account_id' string='Loss Exchange Rate Account'
  • force_restrictive_audit_trail Boolean
    readonly=False related='company_id.force_restrictive_audit_trail' string='Forced Audit Trail'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_sale_delivery_address Boolean
    implied_group='account.group_delivery_invoice_address' args: 'Customer Addresses'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • income_account_id Many2one
    check_company=True readonly=False related='company_id.income_account_id'
  • income_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('internal_group', '=', 'income')]" readonly=False related='company_id.income_currency_exchange_account_id' string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_terms Html
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • invoice_terms_html Html
    readonly=False related='company_id.invoice_terms_html' string='Terms & Conditions as a Web page'
  • is_account_peppol_eligible Boolean
    compute='_compute_is_account_peppol_eligible' string='PEPPOL eligible'
  • link_qr_code Boolean
    readonly=False related='company_id.link_qr_code' string='Display Link QR-code'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_bank_statement_extract Boolean
    compute='_compute_module_account_bank_statement_extract' readonly=False store=True args: 'Bank Statement Digitization'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_extract Boolean
    string='Document Digitization'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    compute='_compute_module_account_invoice_extract' readonly=False store=True args: 'Invoice Digitization'
  • module_account_iso20022 Boolean
    string='SEPA Credit Transfer / ISO20022'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_peppol Boolean
    string='PEPPOL Invoicing'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • preview_ready Boolean
    compute='_compute_terms_preview' string='Display preview button'
  • purchase_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR-code'
  • quick_edit_mode Selection
    readonly=False related='company_id.quick_edit_mode' string='Quick encoding'
  • restrictive_audit_trail Boolean
    readonly=False related='company_id.restrictive_audit_trail' string='Restricted Audit Trail'
  • sale_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • show_sale_receipts Boolean
    config_parameter='account.show_sale_receipts' string='Sale Receipt'
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_journal_id Many2one → account.journal
    check_company=True readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • terms_type Selection
    readonly=False related='company_id.terms_type'
  • transfer_account_id Many2one → account.account
    check_company=True domain=[('reconcile', '=', True), ('account_type', '=', 'asset_current')] help='Intermediary account used when moving from a liquidity account to another.' readonly=False related='company_id.transfer_account_id' string='Internal Transfer' args: 'account.account'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (6)
  • action_eu_oss_tax_mapping(self)
  • action_update_terms(self)
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • reload_template(self)
  • set_values(self)

New fields (1)
  • exclude_state_ids Many2many → res.country.state
    comodel_name='res.country.state' help='Those states are ignored by the fiscal positions' string='Fiscal Exceptions'
Public methods (0)

No public methods.

New fields (2)
  • display_rounding_warning Boolean
    compute='_compute_display_rounding_warning' help="The warning informs a rounding factor change might be dangerous on res.currency's form view." string='Display Rounding Warning'
  • fiscal_country_codes Char
    default=_get_fiscal_country_codes store=False
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • get_application_groups(self, domain)
    @api.model

New fields (41)
  • account_move_count Integer
    compute='_compute_account_move_count' groups='account.group_account_invoice,account.group_account_readonly'
  • autopost_bills Selection
    default='ask' help='Automatically post bills for this trusted partner' required=True selection=[('always', 'Always'), ('ask', 'Ask after 3 validations without edits'), ('never', 'Never')] string='Auto-post bills'
  • available_invoice_template_pdf_report_ids One2many → ir.actions.report
    comodel_name='ir.actions.report' compute='_compute_available_invoice_template_pdf_report_ids'
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • credit_limit Float
    company_dependent=True copy=False groups='account.group_account_invoice,account.group_account_readonly' help='Credit limit specific to this partner.' readonly=False string='Credit Limit'
  • credit_to_invoice Monetary
    compute='_compute_credit_to_invoice' groups='account.group_account_invoice,account.group_account_readonly'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • days_sales_outstanding Float
    compute='_compute_days_sales_outstanding' help='[(Total Receivable/Total Revenue) * number of days since the first invoice] for this customer' string='Days Sales Outstanding (DSO)'
  • debit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • display_invoice_edi_format Boolean
    default=<expr> store=False
  • display_invoice_template_pdf_report_id Boolean
    default=_default_display_invoice_template_pdf_report_id store=False
  • duplicate_bank_partner_ids Many2many
    related='bank_ids.duplicate_bank_partner_ids'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • fiscal_country_group_codes Json
    compute='_compute_fiscal_country_group_codes'
  • ignore_abnormal_invoice_amount Boolean
    company_dependent=True
  • ignore_abnormal_invoice_date Boolean
    company_dependent=True
  • invoice_edi_format Selection
    compute='_compute_invoice_edi_format' compute_sudo=True inverse='_inverse_invoice_edi_format' selection=[] string='eInvoice format'
  • invoice_edi_format_store Char
    company_dependent=True
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_sending_method Selection
    company_dependent=True selection=[('manual', 'Manual'), ('email', 'by Email')] string='Invoice sending'
  • invoice_template_pdf_report_id Many2one → ir.actions.report
    comodel_name='ir.actions.report' domain="[('id', 'in', available_invoice_template_pdf_report_ids)]" readonly=False store=True string='Invoice report'
  • name Char
    tracking=True
  • partner_company_registry_placeholder Char
    compute='_compute_partner_company_registry_placeholder'
  • partner_vat_placeholder Char
    compute='_compute_partner_vat_placeholder'
  • property_account_payable_id Many2one → account.account
    check_company=True company_dependent=True domain="[('account_type', '=', 'liability_payable')]" ondelete='restrict' string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    check_company=True company_dependent=True help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    check_company=True company_dependent=True domain="[('account_type', '=', 'asset_receivable')]" ondelete='restrict' string='Account Receivable' args: 'account.account'
  • property_inbound_payment_method_line_id Many2one → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' company_dependent=True domain=<expr>
  • property_outbound_payment_method_line_id Many2one → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' company_dependent=True domain=<expr>
  • property_payment_term_id Many2one → account.payment.term
    check_company=True company_dependent=True ondelete='restrict' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    check_company=True company_dependent=True string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • show_credit_limit Boolean
    compute='_compute_show_credit_limit' groups='account.group_account_invoice,account.group_account_readonly'
  • supplier_invoice_count Integer
    compute='_compute_supplier_invoice_count' string='# Vendor Bills'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice,account.group_account_readonly' string='Total Invoiced'
  • trust Selection
    company_dependent=True string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
  • use_partner_credit_limit Boolean
    compute='_compute_use_partner_credit_limit' groups='account.group_account_invoice,account.group_account_readonly' help='Set a value greater than 0.0 to activate a credit limit check' inverse='_inverse_use_partner_credit_limit' string='Partner Limit'
Public methods (6)
  • action_open_business_doc(self)
  • action_view_partner_invoices(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • get_partner_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • write(self, vals)

New fields (19)
  • acc_holder_name Char
    tracking=True
  • acc_number Char
    tracking=True
  • active Boolean
    tracking=True
  • allow_out_payment Boolean
    help='Sending fake invoices with a fraudulent account number is a common phishing practice. To protect yourself, always verify new bank account numbers, preferably by calling the vendor, as phishing usually happens when their emails are compromised. Once verified, you can activate the ability to send money.' tracking=True
  • bank_id Many2one
    tracking=True
  • clearing_number Char
    tracking=True
  • currency_id Many2one
    tracking=True
  • duplicate_bank_partner_ids Many2many → res.partner
    compute='_compute_duplicate_bank_partner_ids' args: 'res.partner'
  • has_iban_warning Boolean
    compute='_compute_display_account_warning' help='Technical field used to display a warning if the IBAN country is different than the holder country.' store=True
  • has_money_transfer_warning Boolean
    compute='_compute_display_account_warning' help='Technical field used to display a warning if the account is a transfer service account.' store=True
  • journal_id One2many → account.journal
    check_company=True domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
  • lock_trust_fields Boolean
    compute='_compute_lock_trust_fields'
  • money_transfer_service Char
    compute='_compute_money_transfer_service_name'
  • partner_country_name Char
    related='partner_id.country_id.name'
  • partner_customer_rank Integer
    related='partner_id.customer_rank'
  • partner_id Many2one
    tracking=True
  • partner_supplier_rank Integer
    related='partner_id.supplier_rank'
  • related_moves One2many → account.move
    inverse_name='partner_bank_id' args: 'account.move'
  • user_has_group_validate_bank_account Boolean
    compute='_compute_user_has_group_validate_bank_account'
Public methods (8)
  • action_open_business_doc(self)
  • build_qr_code_base64(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • build_qr_code_url(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_available_qr_methods_in_sequence(self)
    @api.model
    Same as _get_available_qr_methods but without returning the sequence, and using it directly to order the returned list.
  • unlink(self)
  • write(self, vals)

New fields (2)
  • sequence_number Integer
    compute='_compute_split_sequence' store=True
  • sequence_prefix Char
    compute='_compute_split_sequence' store=True
Public methods (2)
  • init(self)
  • write(self, vals)

New fields (1)
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
Public methods (0)

No public methods.

New fields (10)
  • abnormal_amount_partner_ids One2many → res.partner
    compute='_compute_abnormal_amount_partner_ids' args: 'res.partner'
  • abnormal_date_partner_ids One2many → res.partner
    compute='_compute_abnormal_date_partner_ids' args: 'res.partner'
  • display_force_hash Boolean
    compute='_compute_display_force_hash'
  • display_force_post Boolean
    compute='_compute_display_force_post'
  • force_hash Boolean
    string='Force Hash'
  • force_post Boolean
    help='Entries in the future are set to be auto-posted by default. Check this checkbox to post them now.' string='Force'
  • ignore_abnormal_amount Boolean
  • ignore_abnormal_date Boolean
  • is_entries Boolean
    compute='_compute_is_entries'
  • move_ids Many2many → account.move
    args: 'account.move'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/account
VERSION
VERSION 1.3
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, Xavier ALT, Christophe Simonis, Xavier Morel, Joren Van Onder, Nicolas Lempereur, Stefan Rijnhart, qdp-odoo, Atul Patel, Géry Debongnie, Aaron Bohy, GitHub, Damien Bouvy, Yannick Tivisse, Odoo Online, Pierre Masereel, Romain Derie, Laurent Smet, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Julien Castiaux, Xavier-Do, Denis Roussel, Carlos Dauden, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, William Henrotin, Sébastien Theys, Akim Juillerat, oco-odoo, Florent de Labarre, Julien Mougenot, Anh Thao Pham (pta), Samuel Degueldre, Alvaro Fuentes, Achraf (abz), Brice bib Bartoletti, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Hoang Tran, Yenthe666, William Braeckman, bit-odoo, roen-odoo, Miquel Raïch, Jigar Vaghela, william-andre, Julien Van Roy, Florian Damhaut, aliya, Louis Baudoux, Yolann Sabaux, Abdelouahab (abla), John Laterre (jol), Ruben Gomes, Thomas Beckers, assellalou, Aurelien van Delft (avd), Hubert Van De Walle, Florian(flg), Renaud Thiry, Julien Banken, Vincent Larcin, Pierrot (prro), jbw-odoo, bve-odoo, Habib (ayh), damr, Thomas Lefebvre (thle), alsh-odoo, François Honoré, Pedram (PEBR), Louis Wicket (wil), Walid, Mylyna Hy, nda, Maximilien (malb), Victor Piryns (pivi), Mahamadasif Ansari, Thomas Becquevort (thbe), amdi-odoo, Gauthier Wala (gawa), Ali Alfie (alal), Malay Khamar, Daniel Kosky (dako), Pieter Claeys (clpi), Claire Bretton (clbr), Pablo Montenegro, Fernanda Hernández, Yosua Nicolaus, Om Rabara, Levi Siuzdak (sile), Naman Shah, Antoine Dupuis (andu), Carsten Wolff (cawo), Antoine Boonen, Dylan Kiss (dyki), Jinane Maksoud, PoMa, hupo-odoo, Paolo Gatti, Paolo Gatti (pgi), Julien Alardot (jual), FrancoisGe, rolandojduartem, Soam (sold), gera-odoo, Chong Wang (cwg), Odoo, Vivek Pathak, Xavier Bol (xbo), micheledic, Nguyễn Đại Dương, AH-Yussef, sovi-odoo, Harsh Modi, Zeel Patel, Sarah Bellefroid, adda-odoo, Arnaud Sibille, Noe Antoine, Mattis Megevand (mmeg), omra-odoo, Nicolas Viseur (vin), sesn-odoo, guva-odoo, kdeb@odoo.com, Paul Stroobant, Jay Savaliya, stefanorigano (SRI), Astik Singh, Hesham, Mattis Megevand, Ethan Vincent, Mathieu (mcou), lase@odoo.com, Benjamin Hanquin (beha), Aurelien MARIE (auma), bary, Maryam Kia, Louis (loti), jorv-odoo, Maxime de Neuville, mizosoft, Guillaume-gdi, axtr, reka-odoo, Sven Fuehr, thco-odoo, AMZIL Ayoub, Seif (segn), Eteil Djoumatchoua(etdj) etdj@odoo.com, yosa-odoo, Mohamed GadAlrab, Ruben Gomes (rugo), Saran440, Nathaniel (naja), vava-odoo, jobl, Bastien Fafchamps (bafa), Julien Carion (juca), kcv-odoo, moerradi, adsh-odoo, mega, Tanguy Quéguineur, SaddemAmine, Martin Trigaux (mat), Louis Gobert, Agustin Castro Bugallo, Chrysanthe (chgo), aath-odoo, sami odoo, Louis (wil), Eduardo de Miguel, Aungkokolin1997, asno-odoo, mano-odoo, Harsh Shah, aamo-odoo, Hussein Ebrahim(hyhe), Victorien (viso), Mathieu Coutant, mathysPaul, Elisabeth Dickinson, Ahmad (alah), Andrea Gidalti, Sanchit Gupta, mhch-odoo, Ryan Cen, Edoardo Piroli, casp-odoo, Claire (clbr), gteboul, Julia Elizondo, Rocío Vega, sabr, Manushi Shah, Abdo Mongy, unka-odoo, Hammad Arif, Urvish Patel, Antoine Dupuis, Léo Gizard, Pierre Pulinckx (PIPU), Hesham Saleh, Julien Schwanen, Saif (segn), Ian, Victor Miguel Armenta Carrillo, aizu-odoo, AhmedElemary57, Nishant Jain, sben-odoo, Ricardo Gomes Rodrigues, gvar-odoo, muab-odoo, Smit Patel, Logan Staelens, Trinh Ngoc Hung, Emeka Ubakanma, roto-odoo, Maira Salazar (srma), jepbarasgarov, Ezzuldin Zaky (ezza), st-yes, Kawtar Drissi El Bouzaidi (kdeb), Arthur Nanson, Ahmed Abdelaziz Hasaneen, David Van Droogenbroeck (DROD), elhayyany, pkgu-odoo, djameltouati, khsr-odoo, Pierre Lamotte (pila), Michaël Mattiello, nikj-odoo, Pierre Pulinckx (pipu), Bastien PIERRE, Anton Romanova (roan), Corentin Heinix (cohe), Corentin Lombard, Allesio, kasm, Sahil Patel, Carmine, Sherif Gabr, Bastien (bvdn), chha-odoo, MaximeNoirhomme, bona-odoo, plha-odoo, Krzysztof Magusiak (krma), Mahdi Alijani (malj), devp-odoo, rupa-odoo, Ajit Singh, Akash Pandey, Nils Coenen, Andrii Kompaniiets, dvsh-odoo, AllePilli, krip-odoo, hatr-odoo, utma-odoo, Robin Engels (roen), rida, sagu-odoo, Ester Andreetto, nsirjacobs, bhra-odoo, ijja-odoo, Earth Patel, pajo, bhna-odoo, mojem, Dirk Douglas, igbe-odoo, npm, thha-odoo, rare-odoo, sawer, agbr-odoo, aksi-odoo, Junqi, Jugurtha, igbe, Mongy (abmn), sjai-odoo, hisi-odoo, Laurent Smet (LAS), adip-odoo, Ali Hassan (alhy), shka-odoo, pssh-odoo, Killian Frappart, suju-odoo, Fernando Delgado, malb, Augusto Perez, Soncrits, josv-odoo, late-odoo, h4818, path-odoo, krge-odoo, Orrin Zhong, Philipp Walter, yaih, Ashish Nirmal, leclerc-leo, Ayush Modi, Manav Shah, Martin Doyen, Jacob Was (jacw), bhdo-odoo, Karna, Amr Elkhatieb, Robert Smith (rosm), assh-odoo, Felipe Garcia Suez, suma-odoo, Waleed Elgamal, shrm-odoo, YoussefM890, Leonardo Medina, saurabh, rugot-odoo, Johan Tötterman, steji, Eve Lin (evlin), Ali (alhy), jand-odoo, Léo Gizard (legi), Romain (roto), Yosua Nicolaus (yoni), smjo-odoo, Megaaaaaa, Suresh Badikala, abmn-odoo, levm-odoo, FWA-Amri.WICAHYO, Rebeca Ramírez (lare), soza-odoo, jowes-odoo, Akash, baje-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/invoicing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 17:42:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (175)
XML IDNameModelTypeStatus
account.account_terms_conditions_setting_banner Account Terms and Conditions Setting Banner ir.ui.view qweb New
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account div Inherits analytic.view_account_analytic_account_form
account_analytic_account_view_list_inherit account.analytic.account.list.inherit account.analytic.account field Inherits analytic.view_account_analytic_account_list
account_analytic_distribution_model_form_inherit account.analytic.distribution.model.inherit.form account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_form_view
account_analytic_distribution_model_tree_inherit account.analytic.distribution.model.inherit.list account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_tree_view
account_analytic_plan_form_view_inherit_account account.analytic.plan.inherit.form account.analytic.plan data Inherits analytic.account_analytic_plan_form_view
account_automatic_entry_wizard_form account.automatic.entry.wizard.form account.automatic.entry.wizard form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_default_terms_and_conditions account_default_terms_and_conditions ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_report_view_tree account.invoice.report.view.list account.invoice.report list New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_merge_wizard_form account.merge.wizard.form account.merge.wizard form New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_move_line_view_kanban_mobile account.move.line.kanban.mobile account.move.line xpath Inherits account_move_line_view_kanban
account_move_send_batch_wizard_form account.move.send.batch.wizard.form account.move.send.batch.wizard form New
account_move_send_wizard_form account.move.send.wizard.form account.move.send.wizard form New
account_move_view_activity account.move.view.activity account.move activity New
account_resequence_view Re-sequence Journal Entries account.resequence.wizard form New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag list New
account_tax_group_view_search account.tax.group.search.filters account.tax.group search New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax list New
account_terms_conditions_page Terms & Conditions ir.ui.view qweb New
autopost_bills_wizard Autopost Bills account.autopost.bills.wizard form New
bill_preview bill_preview ir.ui.view qweb New
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
document_tax_totals document_tax_totals ir.ui.view qweb Inherits account.document_tax_totals_template
document_tax_totals_company_currency_template document_tax_totals_company_currency_template ir.ui.view qweb New
document_tax_totals_template document_tax_totals_template ir.ui.view qweb New
email_template_mail_gateway_failed email_template_mail_gateway_failed ir.ui.view qweb New
init_accounts_tree account.setup.opening.move.line.list account.account list New
ir_actions_report_form_inherit_account ir.actions.report.form.inherit.account ir.actions.report field Inherits base.act_report_xml_view
partner_missing_account_list_view res.partner.list res.partner list New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice/Bill ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_required_fields_form portal_invoice_required_fields_form ir.ui.view qweb New
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_details_fields portal_my_details_fields ir.ui.view qweb Inherits portal.portal_my_details_fields
portal_my_home_invoice Invoices / Bills ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_product_view_form_normalized_account product.product.view.form.normalized.account.inherit product.product field Inherits product.product_product_view_form_normalized
product_template_form_view product.template.form.inherit product.template div Inherits product.product_template_form_view
product_template_view_tree product.template.list product.template list New
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
product_view_search_catalog product.view.search.catalog.inherit.account product.product xpath Inherits product.product_view_search_catalog
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_document_preview report_invoice_document_preview ir.ui.view qweb Inherits account.report_invoice_document
report_invoice_qr_code_preview report_invoice_qr_code_preview ir.ui.view qweb New
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_invoice_wizard_iframe report_invoice_wizard_iframe ir.ui.view qweb New
report_invoice_wizard_preview_inherit_account report_invoice_wizard_preview_inherit_account ir.ui.view qweb Inherits web.report_invoice_wizard_preview
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
report_statement_internal_layout report_statement_internal_layout ir.ui.view qweb Inherits web.internal_layout
res_company_form_view_onboarding res.company.form.view.onboarding res.company form New
res_company_form_view_onboarding_sale_tax res.company.form.view.onboarding.sale.tax res.company form New
res_company_view_form_terms res.company.view.form.terms res.company form New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_config_settings_view_form_base_setup res.config.settings.view.form.inherit.base_setup res.config.settings xpath Inherits base_setup.res_config_settings_view_form
res_currency_form_inherit res.currency.form.inherit res.currency xpath Inherits base.view_currency_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
res_partner_view_tree res.partner.list.inherit.account res.partner xpath Inherits base.view_partner_tree
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.list account.cash.rounding list New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_repartition_line_tree account.tax.repartition.line.list account.tax.repartition.line list New
tests_shared_js_python tests_shared_js_python ir.ui.view qweb New
validate_account_move_view Confirm Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_accrued_orders_wizard account.accrued.orders.wizard.view account.accrued.orders.wizard form New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.list.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bill_filter account.invoice.select account.move field Inherits account.view_account_invoice_filter
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.list account.group list New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.list account.journal.group list New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.list account.journal list New
view_account_list account.account.list account.account list New
view_account_lock_exception_form account.lock_exception.form account.lock_exception form New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_line_payment_filter account.move.line.payment.search account.move.line search New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_move_with_gaps_in_sequence_filter account.move.with.gaps.in.sequence.filter account.move filter Inherits account.view_account_invoice_filter
view_account_payment_form account.payment.form account.payment form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_method_line_kanban_mobile account.payment.method.line.kanban account.payment.method.line kanban New
view_account_payment_method_line_tree account.payment.method.line.list account.payment.method.line list New
view_account_payment_register_form account.payment.register.form account.payment.register form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.list account.payment list New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_tree account.fiscal.position.list account.fiscal.position list New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_line_form account.reconcile.model.line.form account.reconcile.model.line form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.list account.reconcile.model list New
view_account_search account.account.search account.account search New
view_account_secure_entries_wizard account.secure.entries.wizard.form account.secure.entries.wizard form New
view_account_supplier_payment_tree account.supplier.payment.list account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_various_payment_tree account.supplier.payment.list account.payment field Inherits account.view_account_payment_tree
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.list account.bank.statement list New
view_base_document_layout Document Layout base.document.layout xpath Inherits web.view_base_document_layout
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_form res.company.form.inherit.account res.company xpath Inherits base.view_company_form
view_duplicated_moves_tree_js account.duplicated.moves.list.js account.move xpath Inherits account.view_invoice_tree
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_in_invoice_bill_tree account.out.invoice.list account.move field Inherits account.view_in_invoice_tree
view_in_invoice_receipt_tree account.out.invoice.list account.move field Inherits account.view_in_invoice_tree
view_in_invoice_refund_tree account.out.invoice.list account.move field Inherits account.view_in_invoice_tree
view_in_invoice_tree account.out.invoice.list account.move xpath Inherits account.view_invoice_tree
view_incoterms_tree account.incoterms.list account.incoterms list New
view_invoice_tree account.invoice.list account.move list New
view_message_tree_audit_log mail.message.list.inherit.audit.log mail.message list New
view_message_tree_audit_log_search mail.message.search mail.message search New
view_module_filter_inherit_account ir.module.module.list.inherit.account ir.module.module xpath Inherits base.view_module_filter
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_payment_tree account.move.line.payment.list account.move.line list New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.list account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.list account.move.line list New
view_move_line_tree_grouped_bank_cash account.move.line.list.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_general account.move.line.list.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_misc account.move.line.list.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_partner account.move.line.list.grouped.partner account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_sales_purchases account.move.line.list.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree
view_move_tree account.move.list account.move list New
view_move_tree_multi_edit account.move.list.multi.edit account.move xpath Inherits account.view_move_tree
view_onboarding_tax_tree account.onboarding.tax.list account.tax xpath Inherits account.view_tax_tree
view_out_credit_note_tree account.out.invoice.list account.move xpath Inherits account.view_invoice_tree
view_out_invoice_tree account.out.invoice.list account.move xpath Inherits account.view_invoice_tree
view_partner_bank_form_inherit_account res.partner.bank.form.inherit.account res.partner.bank xpath Inherits base.view_partner_bank_form
view_partner_bank_search_inherit res.partner.bank.search.inherit res.partner.bank xpath Inherits base.view_partner_bank_search
view_partner_property_form res.partner.property.form.inherit res.partner xpath Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.list account.payment.term list New
view_tax_form account.tax.form account.tax form New
view_tax_group_form account.tax.group.form account.tax.group form New
view_tax_group_tree account.tax.group.list account.tax.group list New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.list account.tax list New
Models touched (91)

New fields (28)
  • account_type Selection
    compute='_compute_account_type' help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' index=True precompute=True readonly=False required=True selection=[('asset_receivable', 'Receivable'), ('asset_cash', 'Bank and Cash'), ('asset_current', 'Current Assets'), ('asset_non_current', 'Non-current Assets'), ('asset_prepayments', 'Prepayments'), ('asset_fixed', 'Fixed Assets'), ('liability_payable', 'Payable'), ('liability_credit_card', 'Credit Card'), ('liability_current', 'Current Liabilities'), ('liability_non_current', 'Non-current Liabilities'), ('equity', 'Equity'), ('equity_unaffected', 'Current Year Earnings'), ('income', 'Income'), ('income_other', 'Other Income'), ('expense', 'Expenses'), ('expense_depreciation', 'Depreciation'), ('expense_direct_cost', 'Cost of Revenue'), ('off_balance', 'Off-Balance Sheet')] store=True string='Type' tracking=True
  • allowed_journal_ids Many2many → account.journal
    check_company=True help='Define in which journals this account can be used. If empty, can be used in all journals.' string='Allowed Journals' args: 'account.journal'
  • code Char
    compute='_compute_code' inverse='_inverse_code' search='_search_code' size=64 string='Code' tracking=True
  • code_mapping_ids One2many → account.code.mapping
    comodel_name='account.code.mapping' inverse_name='account_id'
  • code_store Char
    company_dependent=True
  • company_currency_id Many2one → res.currency
    compute='_compute_company_currency_id' args: 'res.currency'
  • company_fiscal_country_code Char
    compute='_compute_company_fiscal_country_code'
  • company_ids Many2many → res.company
    default=<expr> depends_context=('uid') readonly=False required=True string='Companies' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all journal items in this account to have a specific currency (i.e. bank journals). If no currency is set, entries can use any currency.' string='Account Currency' tracking=True args: 'res.currency'
  • current_balance Float
    compute='_compute_current_balance'
  • deprecated Boolean
    default=False tracking=True
  • display_mapping_tab Boolean
    default=<expr> store=False
  • group_id Many2one → account.group
    compute='_compute_account_group' help='Account prefixes can determine account groups.' args: 'account.group'
  • include_initial_balance Boolean
    compute='_compute_include_initial_balance' help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' search='_search_include_initial_balance' string='Bring Accounts Balance Forward'
  • internal_group Selection
    compute='_compute_internal_group' search='_search_internal_group' selection=[('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off', 'Off Balance')] string='Internal Group'
  • name Char
    index='trigram' required=True string='Account Name' tracking=True translate=True
  • non_trade Boolean
    default=False help='If set, this account will belong to Non Trade Receivable/Payable in reports and filters.\nIf not, this account will belong to Trade Receivable/Payable in reports and filters.'
  • note Text
    tracking=True args: 'Internal Notes'
  • opening_balance Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_balance' string='Opening Balance'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_credit' string='Opening Credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_debit' string='Opening Debit'
  • placeholder_code Char
    compute='_compute_placeholder_code' search='_search_placeholder_code' string='Display code'
  • reconcile Boolean
    compute='_compute_reconcile' help='Check this box if this account allows invoices & payments matching of journal items.' precompute=True readonly=False store=True string='Allow Reconciliation' tracking=True
  • related_taxes_amount Integer
    compute='_compute_related_taxes_amount'
  • root_id Many2one → account.root
    compute='_compute_account_root' search='_search_account_root' args: 'account.root'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' compute='_compute_account_tags' help='Optional tags you may want to assign for custom reporting' ondelete='restrict' precompute=True readonly=False relation='account_account_account_tag' store=True string='Tags' tracking=True
  • tax_ids Many2many → account.tax
    check_company=True context={'append_type_to_tax_name': True} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
Public methods (10)
  • action_open_related_taxes(self)
  • action_unmerge(self)
    Split the account `self` into several accounts, one per company. The original account's codes are assigned respectively to the account created in each company. From an accounting perspective, this does not change anything to the journal items, since their account codes will remain unchanged.
  • copy_data(self, default=None)
  • copy_translations(self, new, excluded=())
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
    Split the account name into account code and account name in import. When importing a file with accounts, the account code and name may be both entered in the name column. In this case, the name will be split into code and name.
  • name_search(self, name='', args=None, operator='ilike', limit=100) -> <expr>
    @api.model
  • write(self, vals)

New fields (6)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes'), ('products', 'Products')]
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True translate=True args: 'Tag Name'
  • tax_negate Boolean
    help='Check this box to negate the absolute value of the balance of the lines associated with this tag in tax report computation.' string='Negate Tax Balance'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', '=', 'liability_current')] if context.get('active_model') == 'purchase.order' else [('account_type', '=', 'asset_current')]" required=True string='Accrual Account'
  • amount Monetary
    help='Specify an arbitrary value that will be accrued on a default account for the entire order, regardless of the products on the different lines.' string='Amount'
  • company_id Many2one → res.company
    default=_get_default_company args: 'res.company'
  • currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • date Date
    default=_get_default_date required=True
  • display_amount Boolean
    compute='_compute_display_amount'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' domain="[('type', '=', 'general')]" precompute=True readonly=False required=True store=True string='Journal'
  • preview_data Text
    compute='_compute_preview_data'
  • reversal_date Date
    compute='_compute_reversal_date' precompute=True readonly=False required=True store=True
Public methods (1)
  • create_entries(self)

New fields (4)
  • credit Monetary
    groups='account.group_account_readonly'
  • debit Monetary
    groups='account.group_account_readonly'
  • invoice_count Integer
    compute='_compute_invoice_count' args: 'Invoice Count'
  • vendor_bill_count Integer
    compute='_compute_vendor_bill_count' args: 'Vendor Bill Count'
Public methods (2)
  • action_view_invoice(self)
  • action_view_vendor_bill(self)

New fields (5)
  • account_prefix Char
    help='Prefix that defines which accounts from the financial accounting this applicability should apply on.' string='Financial Accounts Prefixes'
  • account_prefix_placeholder Char
    compute='_compute_prefix_placeholder'
  • business_domain Selection
    ondelete={'invoice': 'cascade', 'bill': 'cascade'} selection_add=[('invoice', 'Invoice'), ('bill', 'Vendor Bill')]
  • display_account_prefix Boolean
    compute='_compute_display_account_prefix' help='Defines if the field account prefix should be displayed'
  • product_categ_id Many2one → product.category
    string='Product Category' args: 'product.category'
Public methods (0)

No public methods.

New fields (4)
  • account_prefix Char
    help='This analytic distribution will apply to all financial accounts sharing the prefix specified.' string='Accounts Prefix'
  • prefix_placeholder Char
    compute='_compute_prefix_placeholder'
  • product_categ_id Many2one → product.category
    help='Select a product category which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    check_company=True help='Select a product for which the analytic distribution will be used (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (10)
  • analytic_profitability Selection
    compute='_compute_analytic_profitability' search='_search_analytic_profitability' selection=[('uncategorized', 'Uncategorized'), ('revenue', 'Revenue'), ('loss', 'Loss')] string='Profitability'
  • category Selection
    selection_add=[('invoice', 'Customer Invoice'), ('vendor_bill', 'Vendor Bill')]
  • code Char
    size=8
  • general_account_id Many2one → account.account
    check_company=True compute='_compute_general_account_id' domain="[('deprecated', '=', False)]" ondelete='restrict' readonly=False store=True string='Financial Account' args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True readonly=True related='move_line_id.journal_id' store=True string='Financial Journal' args: 'account.journal'
  • move_line_id Many2one → account.move.line
    check_company=True index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • product_category Many2one
    related='product_id.categ_id'
  • product_id Many2one → product.product
    check_company=True index='btree_not_null' string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (5)
  • create(self, vals)
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • unlink(self)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (16)
  • account_type Selection
    compute='_compute_account_type' store=True args: [('income', 'Revenue'), ('expense', 'Expense')]
  • action Selection
    required=True args: [('change_period', 'Change Period'), ('change_account', 'Change Account')]
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • date Date
    default=<expr> required=True
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Account to transfer to.' string='To'
  • display_currency_helper Boolean
    compute='_compute_display_currency_helper' string='Currency Conversion Helper'
  • expense_accrual_account Many2one → account.account
    check_company=True compute='_compute_expense_accrual_account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" inverse='_inverse_expense_accrual_account' readonly=False args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('type', '=', 'general')]" help='Journal where to create the entry.' inverse='_inverse_journal_id' readonly=False required=True string='Journal' args: 'account.journal'
  • lock_date_message Char
    compute='_compute_lock_date_message' string='Lock Date Message'
  • move_data Text
    compute='_compute_move_data'
  • move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • percentage Float
    compute='_compute_percentage' help='Percentage of each line to execute the action on.' readonly=False store=True args: 'Percentage'
  • preview_move_data Text
    compute='_compute_preview_move_data'
  • revenue_accrual_account Many2one → account.account
    check_company=True compute='_compute_revenue_accrual_account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" inverse='_inverse_revenue_accrual_account' readonly=False args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id' help='Total amount impacted by the automatic entry.' readonly=False store=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • do_action(self)

New fields (3)
  • nb_unmodified_bills Integer
    args: 'Number of bills previously unmodified from this partner'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • partner_name Char
    related='partner_id.name'
Public methods (3)
  • action_ask_later(self)
  • action_automate_partner(self)
  • action_never_automate_partner(self)

New fields (15)
  • attachment_ids Many2many → ir.attachment
    comodel_name='ir.attachment' string='Attachments'
  • balance_end Monetary
    compute='_compute_balance_end' store=True string='Computed Balance'
  • balance_end_real Monetary
    compute='_compute_balance_end_real' readonly=False store=True string='Ending Balance'
  • balance_start Monetary
    compute='_compute_balance_start' readonly=False store=True string='Starting Balance'
  • company_id Many2one → res.company
    comodel_name='res.company' related='journal_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id'
  • date Date
    compute='_compute_date_index' index=True store=True
  • first_line_index Char → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_date_index' store=True
  • is_complete Boolean
    compute='_compute_is_complete' store=True
  • is_valid Boolean
    compute='_compute_is_valid' search='_search_is_valid'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' store=True
  • line_ids One2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' inverse_name='statement_id' string='Statement lines'
  • name Char
    compute='_compute_name' copy=False readonly=False store=True string='Reference'
  • problem_description Text
    compute='_compute_problem_description'
  • reference Char
    copy=False string='External Reference'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • init(self)
  • write(self, values)

New fields (25)
  • account_number Char
    string='Bank Account Number'
  • amount Monetary
  • amount_currency Monetary
    compute='_compute_amount_currency' currency_field='foreign_currency_id' help='The amount expressed in an optional other currency if it is a multi-currency entry.' readonly=False store=True string='Amount in Currency'
  • amount_residual Float
    compute='_compute_is_reconciled' store=True string='Residual Amount'
  • company_id Many2one → res.company
    comodel_name='res.company' index=False inherited=True precompute=True readonly=False related='move_id.company_id' required=True store=True
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' store=True string='Journal Currency'
  • foreign_currency_id Many2one → res.currency
    comodel_name='res.currency' help='The optional other currency if it is a multi-currency entry.' string='Foreign Currency'
  • internal_index Char
    compute='_compute_internal_index' store=True string='Internal Reference'
  • is_reconciled Boolean
    compute='_compute_is_reconciled' store=True string='Is Reconciled'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' index=False inherited=True precompute=True readonly=False related='move_id.journal_id' required=True store=True
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=',True)]" ondelete='restrict' string='Partner'
  • partner_name Char
  • payment_ids Many2many → account.payment
    comodel_name='account.payment' relation='account_payment_account_bank_statement_line_rel' string='Auto-generated Payments'
  • payment_ref Char
    string='Label'
  • running_balance Monetary
    compute='_compute_running_balance'
  • sequence Integer
    default=1
  • statement_balance_end_real Monetary
    related='statement_id.balance_end_real'
  • statement_complete Boolean
    related='statement_id.is_complete'
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Statement'
  • statement_name Char
    related='statement_id.name' string='Statement Name'
  • statement_valid Boolean
    related='statement_id.is_valid'
  • transaction_details Json
    readonly=True
  • transaction_type Char
Public methods (8)
  • action_undo_reconciliation(self)
    Undo the reconciliation made on the statement line and reset their journal items to their original states.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • init(self)
  • new(self, values=None, origin=None, ref=None)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (6)
  • loss_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" ondelete='restrict' string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • profit_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" ondelete='restrict' string='Profit Account' args: 'account.account'
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'Up'), ('DOWN', 'Down'), ('HALF-UP', 'Nearest')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • ref(self, xmlid, raise_if_not_found=True)
  • try_loading(self, template_code, company, install_demo=False, force_create=True)
    Check if the chart template can be loaded then proceeds installing it. :param template_code: code of the chart template to be loaded. :type template_code: str :param company: the company we try to load the chart template on. If not provided, it is retrieved from the context. :type company: int, Model<res.company> :param install_demo: whether or not we should load demo data right after loading the chart template. :type install_demo: bool :param force_create: Determines the loading behavior. If True, forces the creation of new entries; if False, prevents new creations and performs updates on existing data where applicable. :type force_create: bool

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • account_id Many2one → account.account
    comodel_name='account.account' compute='_compute_account_id' search=True string='Account'
  • code Char
    compute='_compute_code' inverse='_inverse_code' string='Code'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False string='Company'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
  • write(self, vals)

New fields (21)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • account_map Binary
    compute='_compute_account_map'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply tax & account mappings on invoices automatically if the matching criterias (VAT/Country) are met.' string='Detect Automatically'
  • company_country_id Many2one
    related='company_id.account_fiscal_country_id' string='Company Country'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • fiscal_country_codes Char
    related='company_country_id.code' string='Company Fiscal Country Code'
  • foreign_vat Char
    help='The tax ID of your company in the region mapped by this fiscal position.' inverse='_inverse_foreign_vat' string='Foreign Tax ID'
  • foreign_vat_header_mode Selection
    compute='_compute_foreign_vat_header_mode' selection=[('templates_found', 'Templates Found'), ('no_template', 'No Template')]
  • name Char
    required=True string='Fiscal Position' translate=True
  • note Html
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • tax_map Binary
    compute='_compute_tax_map'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (5)
  • action_create_foreign_taxes(self)
  • create(self, vals_list)
    @api.model_create_multi
  • map_account(self, account)
  • map_tax(self, taxes)
  • write(self, vals)

New fields (4)
  • account_dest_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False)]" required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False)]" required=True string='Account on Product' args: 'account.account'
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_active Boolean
    related='tax_dest_id.active'
  • tax_dest_id Many2one → account.tax
    check_company=True string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    check_company=True required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • exchange_move_id Many2one → account.move
    index='btree_not_null' args: 'account.move'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (5)
  • code_prefix_end Char
    compute='_compute_code_prefix_end' precompute=True readonly=False store=True
  • code_prefix_start Char
    compute='_compute_code_prefix_start' precompute=True readonly=False store=True
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • name Char
    required=True translate=True
  • parent_id Many2one → account.group
    check_company=True index=True ondelete='cascade' readonly=True args: 'account.group'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (26)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • commercial_partner_id Many2one → res.partner
    string='Main Partner' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • inventory_value Float
    readonly=True string='Inventory Value'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • move_type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_state Selection
    readonly=True selection=PAYMENT_STATE_SELECTION string='Payment Status'
  • price_average Float
    aggregator='avg' readonly=True string='Average Price'
  • price_margin Float
    readonly=True string='Margin'
  • price_subtotal Float
    readonly=True string='Untaxed Amount'
  • price_subtotal_currency Float
    readonly=True string='Untaxed Amount in Currency'
  • price_total Float
    readonly=True string='Total in Currency'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This is a hack to allow us to correctly calculate the average price.

New fields (34)
  • account_control_ids Many2many → account.account
    check_company=True domain="[('deprecated', '=', False), ('account_type', '!=', 'off_balance')]" string='Allowed accounts' args: 'account.account', 'journal_account_control_rel', 'journal_id', 'account_id'
  • accounting_date Date
    compute='_compute_accounting_date'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_id Many2one
    help='Send one separate email for each invoice.\n\nAny file extension will be accepted.\n\nOnly PDF and XML files will be interpreted by Odoo'
  • autocheck_on_post Boolean
    default=True string='Auto-Check on Post'
  • available_payment_method_ids Many2many → account.payment.method
    comodel_name='account.payment.method' compute='_compute_available_payment_method_ids'
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    check_company=True copy=False domain="[('partner_id','=', company_partner_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    compute='_compute_code' help='Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.' precompute=True readonly=False required=True size=5 store=True string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True readonly=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=_get_default_account_domain ondelete='restrict' string='Default Account'
  • default_account_type Char
    compute='_compute_default_account_type' string='Default Account Type'
  • display_alias_fields Boolean
    compute='_compute_display_alias_fields'
  • inbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_inbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Inbound Payment Methods'
  • invoice_reference_model Selection
    default=_default_invoice_reference_model help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Odoo'), ('euro', 'European')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('none', 'Open'), ('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • journal_group_ids Many2many → account.journal.group
    check_company=True string='Ledger Group' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'expense')]" help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account'
  • name Char
    required=True string='Journal Name' translate=True
  • outbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_outbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'outbound')] help='Manual: Pay by any method outside of Odoo.\nCheck: Pay bills by check and print it from Odoo.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Outbound Payment Methods'
  • payment_sequence Boolean
    compute='_compute_payment_sequence' help="Check this box if you don't want to share the same sequence on payments and bank transactions posted on this journal" precompute=True readonly=False store=True string='Dedicated Payment Sequence'
  • profit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('income', 'income_other'))]" help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account'
  • refund_sequence Boolean
    compute='_compute_refund_sequence' help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" readonly=False store=True string='Dedicated Credit Note Sequence'
  • restrict_mode_hash_table Boolean
    help='If ticked, when an entry is posted, we retroactively hash all moves in the sequence from the entry back to the last hashed entry. The hash can also be performed on demand by the Secure Entries wizard.' string='Secure Posted Entries with Hash'
  • selected_payment_method_codes Char
    compute='_compute_selected_payment_method_codes'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_override_regex Text
    help='Technical field used to enforce complex sequence composition that the system would normally misunderstand.\nThis is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.\nThe prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).\ne.g: ^(?P<prefix1>.*?)(?P<year>\\d{4})(?P<prefix2>\\D*?)(?P<month>\\d{2})(?P<prefix3>\\D+?)(?P<seq>\\d+)(?P<suffix>\\D*?)$'
  • suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_suspense_account_id' domain="[('deprecated', '=', False), ('account_type', '=', 'asset_current')]" help='Bank statements transactions will be posted on the suspense account until the final reconciliation allowing finding the right account.' ondelete='restrict' readonly=False store=True string='Suspense Account'
  • type Selection
    help="\n Select 'Sale' for customer invoices journals.\n Select 'Purchase' for vendor bills journals.\n Select 'Cash', 'Bank' or 'Credit Card' for journals that are used in customer or vendor payments.\n Select 'General' for miscellaneous operations journals.\n " required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('credit', 'Credit Card'), ('general', 'Miscellaneous')]
Public methods (8)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_document_from_attachment(self, attachment_ids)
    Create the invoices from files. :return: A action redirecting to account.move list/form view.
  • get_next_bank_cash_default_code(self, journal_type, company, cache=None, protected_codes=False)
    @api.model
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (13)
  • color Integer
    default=0 args: 'Color Index'
  • current_statement_balance Monetary
    compute='_compute_current_statement_balance'
  • entries_count Integer
    compute='_compute_entries_count'
  • has_entries Boolean
    compute='_compute_has_entries'
  • has_posted_entries Boolean
    compute='_compute_has_entries'
  • has_sequence_holes Boolean
    compute='_compute_has_sequence_holes'
  • has_statement_lines Boolean
    compute='_compute_current_statement_balance'
  • has_unhashed_entries Boolean
    compute='_compute_has_unhashed_entries' string='Unhashed Entries'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • last_statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' compute='_compute_last_bank_statement'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (13)
  • action_create_new(self)
  • action_create_vendor_bill(self)
    This function is called by the "try our sample" button of Vendor Bills, visible on dashboard if no bill has been created yet.
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_customer_payment(self)
    return action to create a customer payment
  • create_supplier_payment(self)
    return action to create a supplier payment
  • is_sample_action_available(self)
    @api.model
    Used to hide 'try our sample' when demo data is not installed.
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_bank_difference_action(self)
  • open_payments_action(self, payment_type=False, mode='list')
  • show_sequence_holes(self)
  • show_unhashed_entries(self)
  • to_check_ids(self)

New fields (4)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> help='Define which company can select the multi-ledger in report filters. If none is provided, available for all companies'
  • excluded_journal_ids Many2many → account.journal
    string='Excluded Journals' args: 'account.journal'
  • name Char
    required=True translate=True args: 'Ledger group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True string='Active'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • company_lock_date Date
    copy=False help='Technical field giving the date the company lock date at the time the exception was created.' string='Original Lock Date'
  • end_datetime Datetime
    string='End Date'
  • fiscalyear_lock_date Date
    compute='_compute_lock_dates' help='The date the Global Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_fiscalyear_lock_date' string='Global Lock Date'
  • lock_date Date
    help='Technical field giving the date the lock date was changed to.' string='Changed Lock Date'
  • lock_date_field Selection
    help='Technical field identifying the changed lock date' required=True selection=[('fiscalyear_lock_date', 'Global Lock Date'), ('tax_lock_date', 'Tax Return Lock Date'), ('sale_lock_date', 'Sales Lock Date'), ('purchase_lock_date', 'Purchase Lock Date')] string='Lock Date Field'
  • purchase_lock_date Date
    compute='_compute_lock_dates' help='The date the Purchase Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_purchase_lock_date' string='Purchase Lock Date'
  • reason Char
    string='Reason'
  • sale_lock_date Date
    compute='_compute_lock_dates' help='The date the Sale Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_sale_lock_date' string='Sales Lock Date'
  • state Selection
    compute='_compute_state' search='_search_state' selection=[('active', 'Active'), ('revoked', 'Revoked'), ('expired', 'Expired')] string='State'
  • tax_lock_date Date
    compute='_compute_lock_dates' help='The date the Tax Lock Date is set to by this exception. If the lock date is not changed it is set to the maximal date.' search='_search_tax_lock_date' string='Tax Return Lock Date'
  • user_id Many2one → res.users
    default=<expr> string='User' args: 'res.users'
Public methods (5)
  • action_revoke(self)
    Revokes an active exception.
  • action_show_audit_trail_during_exception(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • init(self)

New fields (4)
  • account_ids Many2many → account.account
    args: 'account.account'
  • disable_merge_button Boolean
    compute='_compute_disable_merge_button'
  • is_group_by_name Boolean
    default=False help='Tick this checkbox if you want accounts to be grouped by name for merging.' string='Group by name?'
  • wizard_line_ids One2many → account.merge.wizard.line
    comodel_name='account.merge.wizard.line' compute='_compute_wizard_line_ids' inverse_name='wizard_id' readonly=False store=True
Public methods (2)
  • action_merge(self)
    Merge each group of accounts in `self.wizard_line_ids`.
  • default_get(self, fields)
    @api.model

New fields (9)
  • account_has_hashed_entries Boolean
    compute='_compute_account_has_hashed_entries'
  • account_id Many2one → account.account
    comodel_name='account.account' ondelete='cascade' readonly=True string='Account'
  • company_ids Many2many
    related='account_id.company_ids' string='Companies'
  • display_type Selection
    required=True selection=[('line_section', 'Section'), ('account', 'Account')]
  • grouping_key Char
  • info Char
    compute='_compute_info' help='Contains either the section name or error message, depending on the line type.' string='Info'
  • is_selected Boolean
  • sequence Integer
  • wizard_id Many2one → account.merge.wizard
    comodel_name='account.merge.wizard' ondelete='cascade' required=True
Public methods (0)

No public methods.

New fields (1)
  • statement_line_ids One2many → account.bank.statement.line
    string='Statements' args: 'account.bank.statement.line', 'move_id'
Public methods (0)

No public methods.

New fields (1)
  • payment_ids One2many → account.payment
    string='Payments' args: 'account.payment', 'move_id'
Public methods (0)

No public methods.

New fields (122)
  • abnormal_amount_warning Text
    compute='_compute_abnormal_warnings'
  • abnormal_date_warning Text
    compute='_compute_abnormal_warnings'
  • always_tax_exigible Boolean
    compute='_compute_always_tax_exigible' readonly=False store=True
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Total in Currency Signed'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_total_words Char
    compute='_compute_amount_total_words' string='Amount total in words'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Untaxed Amount Signed Currency'
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • attachment_ids One2many → ir.attachment
    domain=[('res_model', '=', 'account.move')] string='Attachments' args: 'ir.attachment', 'res_id'
  • audit_trail_message_ids One2many → mail.message
    domain=[('model', '=', 'account.move'), ('message_type', '=', 'notification')] string='Audit Trail Messages' args: 'mail.message', 'res_id'
  • auto_post Selection
    copy=False default='no' help='Specify whether this entry is posted automatically on its accounting date, and any similar recurring invoices.' required=True selection=[('no', 'No'), ('at_date', 'At Date'), ('monthly', 'Monthly'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly')] string='Auto-post'
  • auto_post_origin_id Many2one → account.move
    comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='First recurring entry'
  • auto_post_until Date
    compute='_compute_auto_post_until' copy=False help='This recurring move will be posted up to and including this date.' readonly=False store=True string='Auto-post until'
  • bank_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank'
  • checked Boolean
    help='If this checkbox is not ticked, it means that the user was not sure of all the related information at the time of the creation of the move and that the move needs to be checked again.' string='Checked' tracking=True
  • commercial_partner_id Many2one → res.partner
    check_company=True compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' index=True inverse='_inverse_company_id' precompute=True readonly=False store=True string='Company'
  • company_price_include Selection
    readonly=True related='company_id.account_price_include'
  • country_code Char
    depends=['company_id'] readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' inverse='_inverse_currency_id' precompute=True readonly=False required=True store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    compute='_compute_date' copy=False index=True precompute=True readonly=False required=True store=True string='Date' tracking=True
  • delivery_date Date
    compute='_compute_delivery_date' copy=False inverse='_inverse_delivery_date' precompute=True readonly=False store=True string='Delivery Date'
  • direction_sign Integer
    compute='_compute_direction_sign' help='Multiplicator depending on the document type, to convert a price into a balance'
  • display_inactive_currency_warning Boolean
    compute='_compute_display_inactive_currency_warning'
  • display_qr_code Boolean
    compute='_compute_display_qr_code' string='Display QR-code'
  • duplicated_ref_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_duplicated_ref_ids'
  • expected_currency_rate Float
    compute='_compute_expected_currency_rate' digits=0
  • fiscal_position_id Many2one → account.fiscal.position
    check_company=True compute='_compute_fiscal_position_id' help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' precompute=True readonly=False store=True string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • hide_post_button Boolean
    compute='_compute_hide_post_button' readonly=True
  • highest_name Char
    compute='_compute_highest_name'
  • inalterable_hash Char
    copy=False index='btree_not_null' readonly=True string='Inalterability Hash'
  • incoterm_location Char
    compute='_compute_incoterm_location' readonly=False store=True string='Incoterm Location'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    comodel_name='account.cash.rounding' help='Defines the smallest coinage of the currency that can be used to pay by cash.' string='Cash Rounding Method'
  • invoice_currency_rate Float
    compute='_compute_invoice_currency_rate' copy=False digits=0 help='Currency rate from company currency to document currency.' precompute=True readonly=False store=True string='Currency Rate'
  • invoice_date Date
    copy=False index=True string='Invoice/Bill Date'
  • invoice_date_due Date
    compute='_compute_invoice_date_due' copy=False index=True readonly=False store=True string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain'
  • invoice_has_outstanding Boolean
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' compute='_compute_incoterm' help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False store=True string='Incoterm'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('display_type', 'in', ('product', 'line_section', 'line_note'))] string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    copy=False help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Binary
    compute='_compute_payments_widget_to_reconcile_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' compute='_compute_invoice_payment_term_id' inverse='_inverse_invoice_payment_term_id' precompute=True readonly=False store=True string='Payment Terms'
  • invoice_payments_widget Binary
    compute='_compute_payments_widget_reconciled_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_pdf_report_file Binary
    attachment=True copy=False string='PDF File'
  • invoice_pdf_report_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> depends=['invoice_pdf_report_file'] string='PDF Attachment'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_invoice_default_sale_person' copy=False readonly=False store=True string='Salesperson' tracking=True
  • invoice_vendor_bill_id Many2one → account.move
    check_company=True help='Auto-complete from a past bill.' store=False string='Vendor Bill' args: 'account.move'
  • is_being_sent Boolean
    compute='_compute_is_being_sent' help='Is the move being sent asynchronously'
  • is_manually_modified Boolean
  • is_move_sent Boolean
    copy=False help='It indicates that the invoice/payment has been sent or the PDF has been generated.' readonly=True tracking=True
  • is_storno Boolean
    compute='_compute_is_storno' copy=False readonly=False store=True
  • journal_group_id Many2one → account.journal.group
    search='_search_journal_group_id' store=False string='Ledger' args: 'account.journal.group'
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('id', 'in', suitable_journal_ids)]" inverse='_inverse_journal_id' precompute=True readonly=False required=True store=True string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True string='Journal Items' args: 'account.move.line', 'move_id'
  • made_sequence_gap Boolean
    compute='_compute_made_sequence_gap' store=True
  • matched_payment_ids Many2many → account.payment
    column1='invoice_id' column2='payment_id' comodel_name='account.payment' copy=False relation='account_move__account_payment' string='Matched Payments'
  • move_sent_values Selection
    compute='compute_move_sent_values' search='_search_move_sent_values' selection=[('sent', 'Sent'), ('not_sent', 'Not Sent')] string='Sent'
  • move_type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] string='Type' tracking=True
  • name Char
    compute='_compute_name' copy=False index='trigram' inverse='_inverse_name' readonly=False store=True string='Number' tracking=True
  • name_placeholder Char
    compute='_compute_name_placeholder'
  • narration Html
    compute='_compute_narration' readonly=False store=True string='Terms and Conditions'
  • need_cancel_request Boolean
    compute='_compute_need_cancel_request'
  • needed_terms Binary
    compute='_compute_needed_terms' exportable=False
  • needed_terms_dirty Boolean
    compute='_compute_needed_terms'
  • next_payment_date Date
    compute='_compute_next_payment_date' search='_search_next_payment_date' string='Next Payment Date'
  • origin_payment_id Many2one → account.payment
    check_company=True comodel_name='account.payment' copy=False index='btree_not_null' string='Payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' ondelete='restrict' readonly=False store=True string='Recipient Bank' tracking=True args: 'res.partner.bank'
  • partner_credit Monetary
    compute='_compute_partner_credit'
  • partner_credit_warning Text
    compute='_compute_partner_credit_warning' groups='account.group_account_invoice,account.group_account_readonly'
  • partner_id Many2one → res.partner
    change_default=True check_company=True index=True inverse='_inverse_partner_id' ondelete='restrict' readonly=False string='Partner' tracking=True args: 'res.partner'
  • partner_shipping_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_shipping_id' help='The delivery address will be used in the computation of the fiscal position.' precompute=True readonly=False store=True string='Delivery Address'
  • payment_count Integer
    compute='_compute_payment_count'
  • payment_reference Char
    compute='_compute_payment_reference' copy=False help='The payment reference to set on journal items.' index='trigram' inverse='_inverse_payment_reference' readonly=False store=True string='Payment Reference' tracking=True
  • payment_state Selection
    compute='_compute_payment_state' copy=False readonly=True selection=PAYMENT_STATE_SELECTION store=True string='Payment Status' tracking=True
  • payment_term_details Binary
    compute='_compute_payment_term_details' exportable=False
  • posted_before Boolean
    copy=False
  • preferred_payment_method_line_id Many2one → account.payment.method.line
    comodel_name='account.payment.method.line' compute='_compute_preferred_payment_method_line_id' readonly=False store=True string='Preferred Payment Method Line'
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for the payment of this invoice, when printing it. If left blank, the first available and usable method will be used.' selection=<expr> string='Payment QR-code'
  • quick_edit_mode Boolean
    compute='_compute_quick_edit_mode'
  • quick_edit_total_amount Monetary
    help='Use this field to encode the total amount of the invoice.\nOdoo will automatically create one invoice line with default values to match it.' string='Total (Tax inc.)'
  • quick_encoding_vals Json
    compute='_compute_quick_encoding_vals' exportable=False
  • reconciled_payment_ids Many2many → account.payment
    compute='_compute_reconciled_payment_ids' help='Payments that have been reconciled with this invoice.' search='_search_reconciled_payment_ids' string='Reconciled Payments' args: 'account.payment'
  • ref Char
    copy=False index='trigram' string='Reference' tracking=True
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_ids One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    check_company=True comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='Reversal of'
  • secure_sequence_number Integer
    copy=False index=True readonly=True string='Inalterability No Gap Sequence #'
  • secured Boolean
    compute='_compute_secured' help='The entry is secured with an inalterable hash.' search='_search_secured'
  • sending_data Json
    copy=False
  • show_delivery_date Boolean
    compute='_compute_show_delivery_date'
  • show_discount_details Boolean
    compute='_compute_show_payment_term_details'
  • show_name_warning Boolean
    store=False
  • show_payment_term_details Boolean
    compute='_compute_show_payment_term_details'
  • show_reset_to_draft_button Boolean
    compute='_compute_show_reset_to_draft_button'
  • show_update_fpos Boolean
    store=False string='Has Fiscal Position Changed'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_id Many2one
    related='statement_line_id.statement_id'
  • statement_line_id Many2one → account.bank.statement.line
    check_company=True comodel_name='account.bank.statement.line' copy=False index='btree_not_null' string='Statement Line'
  • status_in_payment Selection
    compute='_compute_status_in_payment' copy=False search='_search_status_in_payment' selection=<expr>
  • suitable_journal_ids Many2many → account.journal
    compute='_compute_suitable_journal_ids' args: 'account.journal'
  • tax_calculation_rounding_method Selection
    readonly=True related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_created_move_ids One2many → account.move
    comodel_name='account.move' help='The cash basis entries created from the taxes on this entry, when reconciling its lines.' inverse_name='tax_cash_basis_origin_move_id' string='Cash Basis Entries'
  • tax_cash_basis_origin_move_id Many2one → account.move
    comodel_name='account.move' help='The journal entry from which this tax cash basis journal entry has been created.' index='btree_not_null' readonly=True string='Cash Basis Origin'
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    comodel_name='account.partial.reconcile' index='btree_not_null' string='Tax Cash Basis Entry of'
  • tax_country_code Char
    compute='_compute_tax_country_code'
  • tax_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_tax_country_id'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message'
  • tax_totals Binary
    compute='_compute_tax_totals' exportable=False help='Edit Tax amounts if you encounter rounding issues.' inverse='_inverse_tax_totals' string='Invoice Totals'
  • taxes_legal_notes Html
    compute='_compute_taxes_legal_notes' string='Taxes Legal Notes'
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    related='invoice_user_id' string='User'
Public methods (53)
  • action_activate_currency(self)
  • action_add_from_catalog(self)
  • action_duplicate(self)
  • action_export_zip(self)
  • action_force_register_payment(self)
  • action_invoice_download_pdf(self)
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_open_business_doc(self)
  • action_post(self)
  • action_print_pdf(self)
  • action_register_payment(self)
  • action_reverse(self)
  • action_send_and_print(self)
  • action_switch_move_type(self)
  • action_toggle_block_payment(self)
  • action_update_fpos_values(self)
  • button_cancel(self)
  • button_draft(self)
  • button_hash(self)
  • button_request_cancel(self)
    Hook allowing the localizations to request a cancellation from the government before cancelling the invoice.
  • button_set_checked(self)
  • check_field_access_rights(self, operation, field_names)
  • check_move_sequence_chain(self)
  • compute_move_sent_values(self)
    @api.depends('is_move_sent')
  • copy(self, default=None)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_currency_rate(self, company_id, to_currency_id, date)
  • get_extra_print_items(self)
    Helper to dynamically add items in the 'Print' menu of list and form of account.move. This is necessary to avoid the re-generation of the PDF through the action_report. Indeed, once a legal PDF is generated, it should be used and not re-generated.
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • init(self)
  • is_entry(self)
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False)
  • is_sale_document(self, include_receipts=False)
  • js_assign_outstanding_line(self, line_id)
    Called by the 'payment' widget to reconcile a suggested journal item to the present invoice. :param line_id: The id of the line to reconcile with the current invoice.
  • js_remove_outstanding_partial(self, partial_id)
    Called by the 'payment' widget to remove a reconciled entry to the present invoice. :param partial_id: The id of an existing partial reconciled with the current invoice.
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • onchange(self, values, field_names, fields_spec)
  • open_created_caba_entries(self)
  • open_payments(self)
  • open_reconcile_view(self)
  • preview_invoice(self)
  • refresh_invoice_currency_rate(self)
  • unlink(self)
  • write(self, vals)

New fields (77)
  • account_code Char
    related='account_id.code'
  • account_id Many2one → account.account
    auto_join=True check_company=True comodel_name='account.account' compute='_compute_account_id' domain="[('deprecated', '=', False), ('account_type', '!=', 'off_balance')]" index=False inverse='_inverse_account_id' ondelete='restrict' precompute=True readonly=False store=True string='Account' tracking=True
  • account_internal_group Selection
    related='account_id.internal_group'
  • account_name Char
    related='account_id.name'
  • account_root_id Many2one
    depends_context='company' related='account_id.root_id' string='Account Root'
  • account_type Selection
    related='account_id.account_type' string='Internal Type'
  • amount_currency Monetary
    compute='_compute_amount_currency' help='The amount expressed in an optional other currency if it is a multi-currency entry.' inverse='_inverse_amount_currency' precompute=True readonly=False store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_compute_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    aggregator=None compute='_compute_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_distribution Json
    inverse='_inverse_analytic_distribution'
  • analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='move_line_id' string='Analytic lines'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' precompute=True readonly=False store=True string='Balance' tracking=True
  • commercial_partner_country Many2one
    related='move_id.commercial_partner_id.country_id' string='Commercial Partner Country'
  • company_currency_id Many2one
    precompute=True readonly=True related='move_id.company_currency_id' store=True string='Company Currency'
  • company_id Many2one
    index=True precompute=True readonly=True related='move_id.company_id' store=True
  • credit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_credit' precompute=True store=True string='Credit'
  • cumulated_balance Monetary
    compute='_compute_cumulated_balance' currency_field='company_currency_id' exportable=False help='Cumulated balance depending on the domain and the order chosen in the view.' string='Cumulated Balance'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' precompute=True readonly=False required=True store=True string='Currency'
  • currency_rate Float
    compute='_compute_currency_rate' help='Currency rate from company currency to document currency.'
  • date Date
    aggregator='min' copy=False related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date' tracking=True
  • debit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_debit' precompute=True store=True string='Debit'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • discount_allocation_dirty Boolean
    compute='_compute_discount_allocation_needed'
  • discount_allocation_key Binary
    compute='_compute_discount_allocation_key' exportable=False
  • discount_allocation_needed Binary
    compute='_compute_discount_allocation_needed' exportable=False
  • discount_amount_currency Monetary
    aggregator=None currency_field='currency_id' store=True string='Discount amount in Currency'
  • discount_balance Monetary
    currency_field='company_currency_id' store=True string='Discount Balance'
  • discount_date Date
    help='Last date at which the discounted amount must be paid in order for the Early Payment Discount to be granted' readonly=True store=True string='Discount Date'
  • display_type Selection
    compute='_compute_display_type' precompute=True readonly=False required=True selection=[('product', 'Product'), ('cogs', 'Cost of Goods Sold'), ('tax', 'Tax'), ('discount', 'Discount'), ('rounding', 'Rounding'), ('payment_term', 'Payment Term'), ('line_section', 'Section'), ('line_note', 'Note'), ('epd', 'Early Payment Discount')] store=True
  • epd_dirty Boolean
    compute='_compute_epd_needed'
  • epd_key Binary
    compute='_compute_epd_key' exportable=False
  • epd_needed Binary
    compute='_compute_epd_needed' exportable=False
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' readonly=True string='Matching'
  • group_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' index='btree_not_null' string='Originator Group of Taxes'
  • invoice_date Date
    aggregator='min' copy=False related='move_id.invoice_date' store=True
  • is_account_reconcile Boolean
    related='account_id.reconcile' string='Account Reconcile'
  • is_imported Boolean
  • is_refund Boolean
    compute='_compute_is_refund'
  • is_same_currency Boolean
    compute='_compute_same_currency'
  • is_storno Boolean
    help='Utility field to express whether the journal item is subject to storno accounting' related='move_id.is_storno' string='Company Storno Accounting'
  • journal_group_id Many2one → account.journal.group
    comodel_name='account.journal.group' search='_search_journal_group_id' store=False string='Ledger'
  • journal_id Many2one
    copy=False index=True precompute=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Credit journal items that are matched with this journal item.' inverse_name='debit_move_id' readonly=True string='Matched Credits'
  • matched_debit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Debit journal items that are matched with this journal item.' inverse_name='credit_move_id' readonly=True string='Matched Debits'
  • matching_number Char
    copy=False help="Matching number for this line, 'P' if it is only partially reconcile, or the name of the full reconcile if it exists." index='btree' string='Matching #'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • move_name Char
    index='btree' related='move_id.name' store=True string='Number'
  • move_type Selection
    related='move_id.move_type'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True string='Label' tracking=True
  • parent_state Selection
    related='move_id.state' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_id' inverse='_inverse_partner_id' ondelete='restrict' precompute=True readonly=False store=True string='Partner'
  • payment_date Date
    compute='_compute_payment_date' search='_search_payment_date' string='Next Payment Date'
  • payment_id Many2one → account.payment
    auto_join=True comodel_name='account.payment' help='The payment that created this entry' index='btree_not_null' related='move_id.origin_payment_id' store=True string='Originator Payment'
  • price_subtotal Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Subtotal'
  • price_total Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Total'
  • price_unit Float
    compute='_compute_price_unit' min_display_digits='Product Price' precompute=True readonly=False store=True string='Unit Price'
  • product_category_id Many2one
    related='product_id.product_tmpl_id.categ_id'
  • product_id Many2one → product.product
    check_company=True comodel_name='product.product' index=True inverse='_inverse_product_id' ondelete='restrict' string='Product'
  • product_uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_product_uom_id' domain="[('category_id', '=', product_uom_category_id)]" ondelete='restrict' precompute=True readonly=False store=True string='Unit of Measure'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit of Measure' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' precompute=True readonly=False store=True string='Quantity'
  • reconcile_model_id Many2one → account.reconcile.model
    check_company=True comodel_name='account.reconcile.model' copy=False readonly=True string='Reconciliation Model'
  • reconciled Boolean
    compute='_compute_amount_residual' store=True
  • ref Char
    copy=False index='trigram' related='move_id.ref' store=True
  • sequence Integer
    compute='_compute_sequence' precompute=True readonly=False store=True
  • statement_id Many2one
    auto_join=True copy=False help='The bank statement used for bank reconciliation' index='btree_not_null' related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    auto_join=True comodel_name='account.bank.statement.line' help='The statement line that created this entry' index='btree_not_null' related='move_id.statement_line_id' store=True string='Originator Statement Line'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True string='Base Amount'
  • tax_calculation_rounding_method Selection
    readonly=True related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_group_id Many2one
    precompute=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' compute='_compute_tax_ids' context={'active_test': False} precompute=True readonly=False store=True string='Taxes' tracking=True
  • tax_line_id Many2one → account.tax
    comodel_name='account.tax' help='Indicates that this journal item is a tax line' ondelete='restrict' precompute=True related='tax_repartition_line_id.tax_id' store=True string='Originator Tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    check_company=True comodel_name='account.tax.repartition.line' help='Tax distribution line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Distribution Line'
  • tax_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' context={'active_test': False} help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags' tracking=True
  • tax_tag_invert Boolean
    compute='_compute_tax_tag_invert' copy=False readonly=False store=True string='Invert Tags'
  • term_key Binary
    compute='_compute_term_key' exportable=False
Public methods (24)
  • action_add_from_catalog(self)
    Will open the catalog view
  • action_automatic_entry(self, default_action=None)
  • action_open_business_doc(self)
  • action_payment_items_register_payment(self)
  • action_register_payment(self, ctx=None)
    Open the account.payment.register wizard to pay the selected journal items. :return: An action opening the account.payment.register wizard.
  • action_unreconcile_match_entries(self)
    This method will do the unreconcile action in the list view of the moves
  • check_field_access_rights(self, operation, field_names)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • flush_model(self, fnames=None)
  • flush_recordset(self, fnames=None)
  • get_import_templates(self)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • init(self)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • invalidate_model(self, fnames=None, flush=True)
  • invalidate_recordset(self, fnames=None, flush=True)
  • open_reconcile_view(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • reconcile(self)
    Reconcile the current move lines all together.
  • remove_move_reconcile(self)
    Undo a reconciliation
  • search_fetch(self, domain, field_names, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • available_journal_ids Many2many → account.journal
    compute='_compute_available_journal_ids' args: 'account.journal'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today string='Reversal date'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' help='If empty, uses the journal of the journal entry to be reversed.' readonly=False required=True store=True string='Journal'
  • move_ids Many2many → account.move
    domain=[('state', '=', 'posted')] args: 'account.move', 'account_move_reversal_move', 'reversal_id', 'move_id'
  • move_type Char
    compute='_compute_from_moves'
  • new_move_ids Many2many → account.move
    args: 'account.move', 'account_move_reversal_new_move', 'reversal_id', 'new_move_id'
  • reason Char
    string='Reason displayed on Credit Note'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (4)
  • default_get(self, fields)
    @api.model
  • modify_moves(self)
  • refund_moves(self)
  • reverse_moves(self, is_modify=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • alerts Json
    compute='_compute_alerts'
  • move_ids Many2many → account.move
    comodel_name='account.move' required=True
  • summary_data Json
    compute='_compute_summary_data'
Public methods (2)
  • action_send_and_print(self, force_synchronous=False, allow_fallback_pdf=False)
    Launch asynchronously the generation and sending of invoices.
  • default_get(self, fields_list)
    @api.model

New fields (19)
  • alerts Json
    compute='_compute_alerts'
  • attachments_not_supported Json
    compute='_compute_attachments_not_supported'
  • company_id Many2one → res.company
    comodel_name='res.company' related='move_id.company_id'
  • display_attachments_widget Boolean
    compute='_compute_display_attachments_widget'
  • display_pdf_report_id Boolean
    compute='_compute_display_pdf_report_id'
  • extra_edi_checkboxes Json
    compute='_compute_extra_edi_checkboxes' precompute=True readonly=False store=True
  • extra_edis Json
    compute='_compute_extra_edis' inverse='_inverse_extra_edis'
  • invoice_edi_format Selection
    compute='_compute_invoice_edi_format' selection=<expr>
  • is_download_only Boolean
    compute='_compute_is_download_only'
  • mail_attachments_widget Json
    compute='_compute_mail_attachments_widget' readonly=False store=True
  • mail_body Html
    compute='_compute_mail_subject_body_partners' readonly=False sanitize_style=True store=True string='Contents'
  • mail_lang Char
    compute='_compute_mail_lang'
  • mail_partner_ids Many2many → res.partner
    comodel_name='res.partner' compute='_compute_mail_subject_body_partners' readonly=False store=True string='To'
  • mail_subject Char
    compute='_compute_mail_subject_body_partners' readonly=False store=True string='Subject'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' compute='_compute_mail_template_id' domain="[('model', '=', 'account.move')]" readonly=False store=True string='Email template'
  • move_id Many2one → account.move
    comodel_name='account.move' required=True
  • pdf_report_id Many2one → ir.actions.report
    comodel_name='ir.actions.report' compute='_compute_pdf_report_id' domain="[('is_invoice_report', '=', True)]" readonly=False store=True string='Invoice template'
  • sending_method_checkboxes Json
    compute='_compute_sending_method_checkboxes' precompute=True readonly=False store=True
  • sending_methods Json
    compute='_compute_sending_methods' inverse='_inverse_sending_methods'
Public methods (2)
  • action_send_and_print(self, allow_fallback_pdf=False)
    Create invoice documents and send them.
  • default_get(self, fields_list)
    @api.model

New fields (12)
  • amount Monetary
    currency_field='company_currency_id' help='Always positive amount concerned by this matching expressed in the company currency.'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' help='Utility field to express amount currency' related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' precompute=True readonly=False store=True string='Company'
  • credit_amount_currency Monetary
    currency_field='credit_currency_id' help='Always positive amount concerned by this matching expressed in the credit line foreign currency.'
  • credit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='credit_move_id.currency_id' store=True string='Currency of the credit journal item.'
  • credit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • debit_amount_currency Monetary
    currency_field='debit_currency_id' help='Always positive amount concerned by this matching expressed in the debit line foreign currency.'
  • debit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='debit_move_id.currency_id' store=True string='Currency of the debit journal item.'
  • debit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • exchange_move_id Many2one → account.move
    comodel_name='account.move' index='btree_not_null'
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' string='Full Reconcile'
  • max_date Date
    compute='_compute_max_date' precompute=True store=True string='Max Date of Matched Lines'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (45)
  • amount Monetary
    currency_field='currency_id'
  • amount_company_currency_signed Monetary
    compute='_compute_amount_company_currency_signed' currency_field='company_currency_id' store=True
  • amount_signed Monetary
    compute='_compute_amount_signed' currency_field='currency_id' help='Negative value of amount field if payment_type is outbound' tracking=True
  • attachment_ids One2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'res_id'
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • company_currency_id Many2one
    related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' index=False precompute=True readonly=False required=True store=True
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • date Date
    default=fields.Date.context_today required=True tracking=True
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_destination_account_id' domain="[('account_type', 'in', ('asset_receivable', 'liability_payable'))]" readonly=False store=True string='Destination Account'
  • duplicate_payment_ids Many2many → account.payment
    comodel_name='account.payment' compute='_compute_duplicate_payment_ids'
  • invoice_ids Many2many → account.move
    column1='payment_id' column2='invoice_id' comodel_name='account.move' copy=False relation='account_move__account_payment' string='Invoices'
  • is_matched Boolean
    compute='_compute_reconciliation_status' store=True string='Is Matched With a Bank Statement'
  • is_reconciled Boolean
    compute='_compute_reconciliation_status' store=True string='Is Reconciled'
  • is_sent Boolean
    copy=False readonly=True string='Is Sent'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' index=False precompute=True readonly=False required=True store=True
  • memo Char
    inverse='_inverse_memo' string='Memo' tracking=True
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' copy=False index=True string='Journal Entry'
  • name Char
    compute='_compute_name' store=True string='Number'
  • need_cancel_request Boolean
    related='move_id.need_cancel_request'
  • outstanding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_outstanding_account_id' index='btree_not_null' store=True string='Outstanding Account'
  • paired_internal_transfer_payment_id Many2one → account.payment
    copy=False help='When an internal transfer is posted, a paired payment is created. They are cross referenced through this field' index='btree_not_null' args: 'account.payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" ondelete='restrict' readonly=False store=True string='Recipient Bank Account' tracking=True args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_id' domain="['|', ('parent_id','=', False), ('is_company','=', True)]" ondelete='restrict' precompute=True readonly=False store=True string='Customer/Vendor' tracking=True
  • partner_type Selection
    default='customer' required=True tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_method_id Many2one
    related='payment_method_line_id.payment_method_id' store=True string='Method' tracking=True
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' copy=False domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_receipt_title Char
    compute='_compute_payment_receipt_title'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' string='Payment Reference' tracking=True
  • payment_type Selection
    default='inbound' required=True string='Payment Type' tracking=True args: [('outbound', 'Send'), ('inbound', 'Receive')]
  • qr_code Html
    compute='_compute_qr_code' string='QR Code URL'
  • reconciled_bill_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' search='_search_reconciled_invoice_ids' string='Reconciled Bills' args: 'account.move'
  • reconciled_bills_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Bills'
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' search='_search_reconciled_invoice_ids' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Invoices'
  • reconciled_invoices_type Selection
    compute='_compute_stat_buttons_from_reconciliation' args: [('credit_note', 'Credit Note'), ('invoice', 'Invoice')]
  • reconciled_statement_line_ids Many2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_stat_buttons_from_reconciliation' help='Statements lines matched to this payment' string='Reconciled Statement Lines'
  • reconciled_statement_lines_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Statement Lines'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • state Selection
    compute='_compute_state' copy=False default='draft' readonly=False required=True selection=[('draft', 'Draft'), ('in_process', 'In Process'), ('paid', 'Paid'), ('canceled', 'Canceled'), ('rejected', 'Rejected')] store=True tracking=True
Public methods (18)
  • action_cancel(self)
  • action_draft(self)
  • action_open_business_doc(self)
  • action_post(self)
    draft -> posted
  • action_reject(self)
  • action_validate(self)
  • button_open_bills(self)
    Redirect the user to the bill(s) paid by this payment. :return: An action on account.move.
  • button_open_invoices(self)
    Redirect the user to the invoice(s) paid by this payment. :return: An action on account.move.
  • button_open_journal_entry(self)
    Redirect the user to this payment journal. :return: An action on account.move.
  • button_open_statement_lines(self)
    Redirect the user to the statement line(s) reconciled to this payment. :return: An action on account.move.
  • button_request_cancel(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • init(self)
  • mark_as_sent(self)
  • unlink(self)
  • unmark_as_sent(self)
  • write(self, vals)

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True selection=[('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (10)
  • available_payment_method_ids Many2many
    related='journal_id.available_payment_method_ids'
  • code Char
    related='payment_method_id.code'
  • company_id Many2one
    related='journal_id.company_id'
  • default_account_id Many2one
    related='journal_id.default_account_id'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal'
  • name Char
    compute='_compute_name' readonly=False store=True
  • payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="[('deprecated', '=', False), '|', ('account_type', 'in', ('asset_current', 'liability_current')), ('id', '=', default_account_id)]" ondelete='restrict'
  • payment_method_id Many2one → account.payment.method
    comodel_name='account.payment.method' domain="[('payment_type', '=?', payment_type), ('id', 'in', available_payment_method_ids)]" required=True string='Payment Method'
  • payment_type Selection
    related='payment_method_id.payment_type'
  • sequence Integer
    default=10
Public methods (1)
  • unlink(self)
    Payment method lines which are used in a payment should not be deleted from the database, only the link betweend them and the journals must be broken.

New fields (48)
  • actionable_errors Json
    compute='_compute_actionable_errors'
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False store=True
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • batches Binary
    compute='_compute_batches' export_string_translation=False
  • can_edit_wizard Boolean
    compute='_compute_from_lines' copy=False store=True
  • can_group_payments Boolean
    compute='_compute_can_group_payments' copy=False store=True
  • communication Char
    compute='_compute_communication' readonly=False store=True string='Memo'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    compute='_compute_from_lines' copy=False store=True args: 'res.company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • custom_user_amount Monetary
    currency_field='currency_id'
  • custom_user_currency_id Many2one → res.currency
    comodel_name='res.currency'
  • duplicate_payment_ids Many2many → account.payment
    comodel_name='account.payment' compute='_compute_duplicate_moves'
  • early_payment_discount_mode Boolean
    compute='_compute_early_payment_discount_mode'
  • group_payment Boolean
    compute='_compute_group_payment' help='Only one payment will be created by partner (bank), instead of one per bill.' readonly=False store=True string='Group Payments'
  • hide_writeoff_section Boolean
    compute='_compute_hide_writeoff_section'
  • installments_mode Selection
    compute='_compute_installments_mode' export_string_translation=False readonly=False selection=[('next', 'Next Installment'), ('overdue', 'Overdue Amount'), ('before_date', 'Before Next Payment Date'), ('full', 'Full Amount')] store=True
  • installments_switch_amount Monetary
    compute='_compute_installments_switch_values' currency_field='currency_id'
  • installments_switch_html Html
    compute='_compute_installments_switch_values'
  • is_register_payment_on_draft Boolean
    compute='_compute_is_register_payment_on_draft'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' domain="[('id', 'in', available_journal_ids)]" precompute=True readonly=False store=True
  • line_ids Many2many → account.move.line
    copy=False readonly=True string='Journal items' args: 'account.move.line', 'account_payment_register_move_line_rel', 'wizard_id', 'line_id'
  • missing_account_partners Many2many → res.partner
    compute='_compute_trust_values' args: 'res.partner'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account'
  • partner_id Many2one → res.partner
    compute='_compute_from_lines' copy=False ondelete='restrict' store=True string='Customer/Vendor' args: 'res.partner'
  • partner_type Selection
    compute='_compute_from_lines' copy=False store=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference'
  • payment_difference_handling Selection
    compute='_compute_payment_difference_handling' readonly=False selection=[('open', 'Keep open'), ('reconcile', 'Mark as fully paid')] store=True string='Payment Difference Handling'
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_type Selection
    compute='_compute_from_lines' copy=False store=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • qr_code Html
    compute='_compute_qr_code' string='QR Code URL'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_payment_difference Boolean
    compute='_compute_show_payment_difference'
  • source_amount Monetary
    compute='_compute_from_lines' copy=False currency_field='company_currency_id' store=True string='Amount to Pay (company currency)'
  • source_amount_currency Monetary
    compute='_compute_from_lines' copy=False currency_field='source_currency_id' store=True string='Amount to Pay (foreign currency)'
  • source_currency_id Many2one → res.currency
    compute='_compute_from_lines' copy=False store=True string='Source Currency' args: 'res.currency'
  • total_payments_amount Integer
    compute='_compute_trust_values'
  • untrusted_bank_ids Many2many → res.partner.bank
    compute='_compute_trust_values' args: 'res.partner.bank'
  • untrusted_payments_count Integer
    compute='_compute_trust_values'
  • writeoff_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="[('deprecated', '=', False)]" string='Difference Account'
  • writeoff_is_exchange_account Boolean
    compute='_compute_writeoff_is_exchange_account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (4)
  • action_create_payments(self)
  • action_open_missing_account_partners(self)
  • action_open_untrusted_bank_accounts(self)
  • default_get(self, fields_list)
    @api.model

New fields (18)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' args: 'res.currency'
  • discount_days Integer
    default=10 help='Number of days before the early payment proposition expires' string='Discount Days'
  • discount_percentage Float
    default=2.0 help='Early Payment Discount granted for this payment term' string='Discount %'
  • display_on_invoice Boolean
    default=True string='Show installment dates'
  • early_discount Boolean
    string='Early Discount'
  • early_pay_discount_computation Selection
    compute='_compute_discount_computation' readonly=False store=True string='Cash Discount Tax Reduction' args: [('included', 'On early payment'), ('excluded', 'Never'), ('mixed', 'Always (upon invoice)')]
  • example_amount Monetary
    currency_field='currency_id' default=1000 readonly=True store=False
  • example_date Date
    default=_default_example_date store=False string='Date example'
  • example_invalid Boolean
    compute='_compute_example_invalid'
  • example_preview Html
    compute='_compute_example_preview'
  • example_preview_discount Html
    compute='_compute_example_preview'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Html
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (1)
  • copy_data(self, default=None)

New fields (7)
  • days_next_month Char
    default='10' readonly=False size=2 string='Days on the next month'
  • delay_type Selection
    default='days_after' required=True args: [('days_after', 'Days after invoice date'), ('days_after_end_of_month', 'Days after end of month'), ('days_after_end_of_next_month', 'Days after end of next month'), ('days_end_of_month_on_the', 'Days end of month on the')]
  • display_days_next_month Boolean
    compute='_compute_display_days_next_month'
  • nb_days Integer
    compute='_compute_days' readonly=False store=True string='Days'
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • value Selection
    default='percent' help='Select here the kind of valuation related to this payment terms line.' required=True args: [('percent', 'Percent'), ('fixed', 'Fixed')]
  • value_amount Float
    compute='_compute_value_amount' digits='Payment Terms' help='For percent enter a ratio between 0-100.' readonly=False store=True string='Due'
Public methods (0)

No public methods.

New fields (36)
  • active Boolean
    default=True
  • allow_payment_tolerance Boolean
    default=True help='Difference accepted in case of underpayment.' string='Payment Tolerance' tracking=True
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate' tracking=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • counterpart_type Selection
    default='general' selection=[('general', 'Journal Entry'), ('sale', 'Customer Invoices'), ('purchase', 'Vendor Bills')] string='Counterpart Type'
  • decimal_separator Char
    default=<expr> help='Every character that is nor a digit nor this separator will be removed from the matching string' tracking=True
  • line_ids One2many → account.reconcile.model.line
    copy=True args: 'account.reconcile.model.line', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount Condition' tracking=True
  • match_amount_max Float
    string='Amount Max Parameter' tracking=True
  • match_amount_min Float
    string='Amount Min Parameter' tracking=True
  • match_journal_ids Many2many → account.journal
    check_company=True domain="[('type', 'in', ('bank', 'cash', 'credit'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals Availability' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label' tracking=True
  • match_label_param Char
    string='Label Parameter' tracking=True
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Received'), ('amount_paid', 'Paid'), ('both', 'Paid/Received')] string='Amount Type' tracking=True
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note' tracking=True
  • match_note_param Char
    string='Note Parameter' tracking=True
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner is Set' tracking=True
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Matching categories' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Matching partners' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency' tracking=True
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference" tracking=True
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference" tracking=True
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference" tracking=True
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type' tracking=True
  • match_transaction_type_param Char
    string='Transaction Type Parameter' tracking=True
  • matching_order Selection
    default='old_first' required=True selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')] tracking=True
  • name Char
    required=True string='Name' translate=True
  • number_entries Integer
    compute='_compute_number_entries' string='Number of entries related to this model'
  • partner_mapping_line_ids One2many → account.reconcile.model.partner.mapping
    comodel_name='account.reconcile.model.partner.mapping' help='The mapping uses regular expressions.\n- To Match the text at the beginning of the line (in label or notes), simply fill in your text.\n- To Match the text anywhere (in label or notes), put your text between .*\n e.g: .*N°48748 abc123.*' inverse_name='model_id' string='Partner Mapping Lines'
  • past_months_limit Integer
    default=18 help='Number of months in the past to consider entries from when applying this model.' string='Search Months Limit' tracking=True
  • payment_tolerance_param Float
    compute='_compute_payment_tolerance_param' help='The sum of total residual amount propositions matches the statement line amount under this amount/percentage.' readonly=False store=True string='Gap' tracking=True
  • payment_tolerance_type Selection
    default='percentage' help='The sum of total residual amount propositions and the statement line amount allowed gap type.' required=True selection=[('percentage', 'in percentage'), ('fixed_amount', 'in amount')] tracking=True
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Button to generate counterpart entry'), ('writeoff_suggestion', 'Rule to suggest counterpart entry'), ('invoice_matching', 'Rule to match invoices/bills')] string='Type' tracking=True
  • sequence Integer
    default=10 required=True
  • show_decimal_separator Boolean
    compute='_compute_show_decimal_separator'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (2)
  • action_reconcile_stat(self)
  • copy_data(self, default=None)

New fields (15)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('account_type', '!=', 'off_balance')]" ondelete='cascade' string='Account' args: 'account.account'
  • allow_payment_tolerance Boolean
    related='model_id.allow_payment_tolerance'
  • amount Float
    compute='_compute_float_amount' store=True string='Float Amount'
  • amount_string Char
    default='100' help='Value for the amount of the writeoff line\n * Percentage: Percentage of the balance, between 0 and 100.\n * Fixed: The fixed value of the writeoff. The amount will count as a debit if it is negative, as a credit if it is positive.\n * From Label: There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)' required=True string='Amount'
  • amount_type Selection
    compute='_compute_amount_type' precompute=True readonly=False required=True selection=[('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('percentage_st_line', 'Percentage of statement line'), ('regex', 'From label')] store=True
  • company_id Many2one
    related='model_id.company_id' store=True
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' ondelete='cascade' readonly=False store=True string='Journal'
  • label Char
    string='Journal Item Label' translate=True
  • model_id Many2one → account.reconcile.model
    ondelete='cascade' readonly=True args: 'account.reconcile.model'
  • payment_tolerance_param Float
    related='model_id.payment_tolerance_param'
  • rule_type Selection
    related='model_id.rule_type'
  • sequence Integer
    default=10 required=True
  • show_force_tax_included Boolean
    compute='_compute_show_force_tax_included'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' compute='_compute_tax_ids' ondelete='restrict' readonly=False store=True string='Taxes'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one
    related='model_id.company_id'
  • model_id Many2one → account.reconcile.model
    comodel_name='account.reconcile.model' ondelete='cascade' readonly=True required=True
  • narration_regex Char
    string='Find Text in Notes'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' ondelete='cascade' required=True string='Partner'
  • payment_ref_regex Char
    string='Find Text in Label'
Public methods (1)
  • validate_regex(self)
    @api.constrains('narration_regex', 'payment_ref_regex')

New fields (36)
  • active Boolean
    default=True string='Active'
  • availability_condition Selection
    compute='_compute_default_availability_condition' readonly=False selection=[('country', 'Country Matches'), ('coa', 'Chart of Accounts Matches'), ('always', 'Always')] store=True string='Availability'
  • chart_template Selection
    selection=<expr> string='Chart of Accounts'
  • column_ids One2many → account.report.column
    comodel_name='account.report.column' inverse_name='report_id' string='Columns'
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • currency_translation Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('current', 'Use the most recent rate at the date of the report'), ('cta', 'Use CTA')] store=True string='Currency Translation'
  • default_opening_date_filter Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('this_year', 'This Year'), ('this_quarter', 'This Quarter'), ('this_month', 'This Month'), ('today', 'Today'), ('previous_month', 'Last Month'), ('previous_quarter', 'Last Quarter'), ('previous_year', 'Last Year'), ('this_tax_period', 'This Tax Period'), ('previous_tax_period', 'Last Tax Period')] store=True string='Default Opening'
  • filter_account_type Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('both', 'Payable and receivable'), ('payable', 'Payable'), ('receivable', 'Receivable'), ('disabled', 'Disabled')] store=True string='Account Types'
  • filter_aml_ir_filters Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] help='If activated, user-defined filters on journal items can be selected on this report' readonly=False store=True string='Favorite Filters'
  • filter_analytic Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Analytic Filter'
  • filter_budgets Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Budgets'
  • filter_date_range Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Date Range'
  • filter_fiscal_position Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Filter Multivat'
  • filter_growth_comparison Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Growth Comparison'
  • filter_hide_0_lines Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Hide lines at 0'
  • filter_hierarchy Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Account Groups'
  • filter_journals Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Journals'
  • filter_multi_company Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('disabled', 'Disabled'), ('selector', 'Use Company Selector'), ('tax_units', 'Use Tax Units')] store=True string='Multi-Company'
  • filter_partner Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Partners'
  • filter_period_comparison Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Period Comparison'
  • filter_show_draft Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Draft Entries'
  • filter_unfold_all Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Unfold All'
  • filter_unreconciled Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Unreconciled Entries'
  • integer_rounding Selection
    selection=[('HALF-UP', 'Nearest'), ('UP', 'Up'), ('DOWN', 'Down')] string='Integer Rounding'
  • line_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='report_id' string='Lines'
  • load_more_limit Integer
    string='Load More Limit'
  • name Char
    required=True string='Name' translate=True
  • only_tax_exigible Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Only Tax Exigible Lines'
  • prefix_groups_threshold Integer
    default=4000 string='Prefix Groups Threshold'
  • root_report_id Many2one → account.report
    comodel_name='account.report' help='The report this report is a variant of.' string='Root Report'
  • search_bar Boolean
    string='Search Bar'
  • section_main_report_ids Many2many → account.report
    column1='sub_report_id' column2='main_report_id' comodel_name='account.report' relation='account_report_section_rel' string='Section Of'
  • section_report_ids Many2many → account.report
    column1='main_report_id' column2='sub_report_id' comodel_name='account.report' relation='account_report_section_rel' string='Sections'
  • sequence Integer
    string='Sequence'
  • use_sections Boolean
    compute='_compute_use_sections' help='Create a structured report with multiple sections for convenient navigation and simultaneous printing.' readonly=False store=True string='Composite Report'
  • variant_report_ids One2many → account.report
    comodel_name='account.report' inverse_name='root_report_id' string='Variants'
Public methods (3)
  • copy(self, default=None)
    Copy the whole financial report hierarchy by duplicating each line recursively. :param default: Default values. :return: The copied account.report record.
  • copy_data(self, default=None)
  • write(self, vals)

New fields (8)
  • blank_if_zero Boolean
    help='When checked, 0 values will not show in this column.' string='Blank if Zero'
  • custom_audit_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' string='Custom Audit Action'
  • expression_label Char
    required=True string='Expression Label'
  • figure_type Selection
    default='monetary' required=True selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • name Char
    required=True string='Name' translate=True
  • report_id Many2one → account.report
    comodel_name='account.report' string='Report'
  • sequence Integer
    string='Sequence'
  • sortable Boolean
    string='Sortable'
Public methods (0)

No public methods.

New fields (12)
  • auditable Boolean
    compute='_compute_auditable' readonly=False store=True string='Auditable'
  • blank_if_zero Boolean
    help="When checked, 0 values will not show when displaying this expression's value." string='Blank if Zero'
  • carryover_target Char
    help='Formula in the form line_code.expression_label. This allows setting the target of the carryover for this expression (on a _carryover_*-labeled expression), in case it is different from the parent line.' string='Carry Over To'
  • date_scope Selection
    default='strict_range' required=True selection=[('from_beginning', 'From the very start'), ('from_fiscalyear', 'From the start of the fiscal year'), ('to_beginning_of_fiscalyear', 'At the beginning of the fiscal year'), ('to_beginning_of_period', 'At the beginning of the period'), ('strict_range', 'Strictly on the given dates'), ('previous_tax_period', 'From previous tax period')] string='Date Scope'
  • engine Selection
    required=True selection=[('domain', 'Odoo Domain'), ('tax_tags', 'Tax Tags'), ('aggregation', 'Aggregate Other Formulas'), ('account_codes', 'Prefix of Account Codes'), ('external', 'External Value'), ('custom', 'Custom Python Function')] string='Computation Engine'
  • figure_type Selection
    selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • formula Char
    required=True string='Formula'
  • green_on_positive Boolean
    default=True string='Is Growth Good when Positive'
  • label Char
    required=True string='Label'
  • report_line_id Many2one → account.report.line
    comodel_name='account.report.line' ondelete='cascade' required=True string='Report Line'
  • report_line_name Char
    related='report_line_id.name' string='Report Line Name'
  • subformula Char
    string='Subformula'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (12)
  • carryover_origin_expression_label Char
    string='Origin Expression Label'
  • carryover_origin_report_line_id Many2one → account.report.line
    comodel_name='account.report.line' string='Origin Line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    required=True
  • foreign_vat_fiscal_position_id Many2one → account.fiscal.position
    check_company=True comodel_name='account.fiscal.position' domain="[('country_id', '=', report_country_id), ('foreign_vat', '!=', False)]" help='The foreign fiscal position for which this external value is made.' string='Fiscal position'
  • name Char
    required=True
  • report_country_id Many2one
    related='target_report_line_id.report_id.country_id' string='Country'
  • target_report_expression_id Many2one → account.report.expression
    comodel_name='account.report.expression' ondelete='cascade' required=True string='Target Expression'
  • target_report_expression_label Char
    related='target_report_expression_id.label' string='Target Expression Label'
  • target_report_line_id Many2one
    related='target_report_expression_id.report_line_id' string='Target Line'
  • text_value Char
    string='Text Value'
  • value Float
    string='Numeric Value'
Public methods (0)

No public methods.

New fields (20)
  • account_codes_formula Char
    help='Internal field to shorten expression_ids creation for the account_codes engine' inverse='_inverse_account_codes_formula' store=False string='Account Codes Formula Shortcut'
  • action_id Many2one → ir.actions.actions
    comodel_name='ir.actions.actions' help='Setting this field will turn the line into a link, executing the action when clicked.' string='Action'
  • aggregation_formula Char
    help='Internal field to shorten expression_ids creation for the aggregation engine' inverse='_inverse_aggregation_formula' store=False string='Aggregation Formula Shortcut'
  • children_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='parent_id' string='Child Lines'
  • code Char
    help='Unique identifier for this line.' string='Code'
  • domain_formula Char
    help='Internal field to shorten expression_ids creation for the domain engine' inverse='_inverse_domain_formula' store=False string='Domain Formula Shortcut'
  • expression_ids One2many → account.report.expression
    comodel_name='account.report.expression' inverse_name='report_line_id' string='Expressions'
  • external_formula Char
    help='Internal field to shorten expression_ids creation for the external engine' inverse='_inverse_external_formula' store=False string='External Formula Shortcut'
  • foldable Boolean
    help="By default, we always unfold the lines that can be. If this is checked, the line won't be unfolded by default, and a folding button will be displayed." string='Foldable'
  • groupby Char
    help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' string='Group By'
  • hide_if_zero Boolean
    help='This line and its children will be hidden when all of their columns are 0.' string='Hide if Zero'
  • hierarchy_level Integer
    compute='_compute_hierarchy_level' precompute=True readonly=False recursive=True required=True store=True string='Level'
  • horizontal_split_side Selection
    compute='_compute_horizontal_split_side' readonly=False recursive=True selection=[('left', 'Left'), ('right', 'Right')] store=True string='Horizontal Split Side'
  • name Char
    required=True string='Name' translate=True
  • parent_id Many2one → account.report.line
    comodel_name='account.report.line' ondelete='set null' string='Parent Line'
  • print_on_new_page Boolean
    help='When checked this line and everything after it will be printed on a new page.' args: 'Print On New Page'
  • report_id Many2one → account.report
    comodel_name='account.report' compute='_compute_report_id' ondelete='cascade' precompute=True readonly=False recursive=True required=True store=True string='Parent Report'
  • sequence Integer
    string='Sequence'
  • tax_tags_formula Char
    help='Internal field to shorten expression_ids creation for the tax_tags engine' inverse='_inverse_aggregation_tax_formula' store=False string='Tax Tags Formula Shortcut'
  • user_groupby Char
    compute='_compute_user_groupby' help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' precompute=True readonly=False store=True string='User Group By'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    help='Date (inclusive) to which the numbers are resequenced. If not set, all Journal Entries up to the end of the period are resequenced.'
  • first_date Date
    help='Date (inclusive) from which the numbers are resequenced.'
  • first_name Char
    compute='_compute_first_name' readonly=False required=True store=True string='First New Sequence'
  • move_ids Many2many → account.move
    args: 'account.move'
  • new_values Text
    compute='_compute_new_values'
  • ordering Selection
    default='keep' required=True args: [('keep', 'Keep current order'), ('date', 'Reorder by accounting date')]
  • preview_moves Text
    compute='_compute_preview_moves'
  • sequence_number_reset Char
    compute='_compute_sequence_number_reset'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • resequence(self)

New fields (2)
  • name Char
    compute='_compute_root'
  • parent_id Many2one → account.root
    compute='_compute_root' args: 'account.root'
Public methods (1)
  • browse(self, ids=())

New fields (9)
  • chains_to_hash_with_gaps Json
    compute='_compute_data'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • hash_date Date
    compute='_compute_hash_date' help='The selected Date' readonly=False required=True store=True string='Hash All Entries'
  • max_hash_date Date
    compute='_compute_max_hash_date' help='Highest Date such that all posted journal entries prior to (including) the date are secured. Only journal entries after the hard lock date are considered.' string='Max Hash Date'
  • move_to_hash_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_data' help='All moves that will be hashed'
  • not_hashable_unlocked_move_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_data' help='All unhashable moves before the selected date that are not protected by the Hard Lock Date'
  • unreconciled_bank_statement_line_ids Many2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_data' help='All unreconciled bank statement lines before the selected date.'
  • warnings Json
    compute='_compute_warnings'
Public methods (3)
  • action_secure_entries(self)
  • action_show_draft_moves_in_hashed_period(self)
  • action_show_moves(self, moves)

New fields (6)
  • bank_bic Char
    readonly=False related='bank_id.bic' string='Bic'
  • company_id Many2one → res.company
    compute='_compute_company_id' required=True args: 'res.company'
  • linked_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_linked_journal_id' domain=[('type', '=', 'bank'), ('bank_account_id', '=', False)] inverse='set_linked_journal_id' string='Journal'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account Integer
    default=<expr>
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (31)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0.0 digits=(16, 4) required=True tracking=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage: The tax amount is a % of the price:\n e.g 100 * (1 + 10%) = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage'), ('division', 'Percentage Tax Included')] string='Tax Computation' tracking=True
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="\n [\n ('deprecated', '=', False),\n ('account_type', 'not in', ('asset_receivable', 'liability_payable'))\n ]\n " help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    check_company=True string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • company_price_include Selection
    related='company_id.account_price_include'
  • country_code Char
    readonly=True related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='The country for which this tax is applicable.' precompute=True readonly=False required=True store=True string='Country'
  • description Html
    string='Description' translate=html_translate
  • has_negative_factor Boolean
    compute='_compute_has_negative_factor'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Base of Subsequent Taxes' tracking=True
  • invoice_label Char
    string='Label on Invoices' translate=True
  • invoice_legal_notes Html
    help='Legal mentions that have to be printed on the invoices.' string='Legal Notes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' compute='_compute_invoice_repartition_line_ids' domain=[('document_type', '=', 'invoice')] help='Distribution when the tax is used on an invoice' inverse_name='tax_id' readonly=False store=True string='Distribution for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes' tracking=True
  • is_used Boolean
    compute='_compute_is_used' string='Tax used'
  • name Char
    required=True string='Tax Name' tracking=True translate=True
  • name_searchable Char
    help="This dummy field lets us use another search method on the field 'name'.This allows more freedom on how to search the 'name' compared to 'filter_domain'.See '_search_name' and '_parse_name_search' for why this is not possible with 'filter_domain'." search='_search_name' store=False
  • price_include Boolean
    compute='_compute_price_include' help='Determines whether the price you use on the product and invoices includes this tax.' search='_search_price_include'
  • price_include_override Selection
    help="Overrides the Company's default on whether the price you use on the product and invoices includes this tax." selection=[('tax_included', 'Tax Included'), ('tax_excluded', 'Tax Excluded')] string='Included in Price' tracking=True
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' compute='_compute_refund_repartition_line_ids' domain=[('document_type', '=', 'refund')] help='Distribution when the tax is used on a refund' inverse_name='tax_id' readonly=False store=True string='Distribution for Refund Invoices'
  • repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True inverse_name='tax_id' string='Distribution'
  • repartition_lines_str Char
    compute='_compute_repartition_lines_str' string='Repartition Lines' tracking=True
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Exigibility' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    comodel_name='account.tax.group' compute='_compute_tax_group_id' domain="[('country_id', 'in', (country_id, False))]" precompute=True readonly=False required=True store=True string='Tax Group'
  • tax_scope Selection
    string='Tax Scope' args: [('service', 'Services'), ('consu', 'Goods')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note: 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Type' tracking=True args: TYPE_TAX_USE
Public methods (10)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, rounding_method=None)
    Compute all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] :param price_unit: The unit price of the line to compute taxes on. :param currency: The optional currency in which the price_unit is expressed. :param quantity: The optional quantity of the product to compute taxes on. :param product: The optional product to compute taxes on. Used to get the tags to apply on the lines. :param partner: The optional partner compute taxes on. Used to retrieve the lang to build strings and for potential extensions. :param is_refund: The optional boolean indicating if this is a refund. :param handle_price_include: Used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. :param include_caba_tags: The optional boolean indicating if CABA tags need to be taken into account. :return: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'base_tags: : list<int>, # Tags to apply on the base line 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'base': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': bool, 'price_include': bool, 'tax_exigibility': str, 'tax_repartition_line_id': int, 'group': recordset, 'tag_ids': list<int>, 'tax_ids': list<int>, }], }
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • flatten_taxes_hierarchy(self)
  • get_tax_tags(self, is_refund, repartition_type)
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')
  • validate_tax_group_id(self)
    @api.constrains('tax_group_id')
  • write(self, vals)

New fields (10)
  • advance_tax_payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Downpayments posted on this account will be considered by the Tax Closing Entry.' string='Tax Advance Account'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='The country for which this tax group is applicable.' precompute=True readonly=False store=True string='Country'
  • name Char
    required=True translate=True
  • pos_receipt_label Char
    string='PoS receipt label'
  • preceding_subtotal Char
    help="If set, this value will be used on documents as the label of a subtotal excluding this tax group before displaying it. If not set, the tax group will be displayed after the 'Untaxed amount' subtotal." string='Preceding Subtotal' translate=True
  • sequence Integer
    default=10
  • tax_payable_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the authorities.' string='Tax Payable Account'
  • tax_receivable_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the company.' string='Tax Receivable Account'
Public methods (0)

No public methods.

New fields (11)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' help='The company this distribution line belongs to.' related='tax_id.company_id' store=True string='Company'
  • document_type Selection
    required=True selection=[('invoice', 'Invoice'), ('refund', 'Refund')] string='Related to'
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this distribution line' string='Factor Ratio'
  • factor_percent Float
    default=100 digits=(16, 12) help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which distribution lines are displayed and matched. For refunds to work properly, invoice distribution lines should be arranged in the same order as the credit note distribution lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] ondelete='restrict' string='Tax Grids'
  • tag_ids_domain Binary
    compute='_compute_tag_ids_domain' help='Dynamic domain used for the tag that can be set on tax' string='tag domain'
  • tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' ondelete='cascade'
  • use_in_tax_closing Boolean
    compute='_compute_use_in_tax_closing' precompute=True readonly=False store=True string='Tax Closing Entry'
Public methods (0)

No public methods.

New fields (4)
  • account_number Char
    compute='_compute_account_number' inverse='_inverse_account_number'
  • from_invoice Boolean
  • qr_code Boolean
    readonly=False related='company_id.qr_code'
  • vat Char
    readonly=False related='company_id.vat'
Public methods (1)
  • document_layout_save(self)
    Save layout and onboarding step progress, return super() result

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • precision_get(self, application)

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (0)

No public methods.

New fields (1)
  • is_invoice_report Boolean
    copy=True string='Invoice report'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • account_templates Binary
    compute='_compute_account_templates' exportable=False
Public methods (2)
  • module_uninstall(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • get_account_kpi_summary(self)
    @api.model
  • get_kpi_summary(self)
    @api.model

New fields (7)
  • account_audit_log_account_id Many2one → account.account
    comodel_name='account.account' compute='_compute_account_audit_log_account_id' search='_search_account_audit_log_account_id' string='Account'
  • account_audit_log_activated Boolean
    compute='_compute_account_audit_log_activated' search='_search_account_audit_log_activated' string='Audit Log Activated'
  • account_audit_log_company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_account_audit_log_company_id' search='_search_account_audit_log_company_id' string='Company '
  • account_audit_log_move_id Many2one → account.move
    comodel_name='account.move' compute='_compute_account_audit_log_move_id' search='_search_account_audit_log_move_id' string='Journal Entry'
  • account_audit_log_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_account_audit_log_partner_id' search='_search_account_audit_log_partner_id' string='Partner'
  • account_audit_log_preview Text
    compute='_compute_account_audit_log_preview' string='Description'
  • account_audit_log_tax_id Many2one → account.tax
    comodel_name='account.tax' compute='_compute_account_audit_log_tax_id' search='_search_account_audit_log_tax_id' string='Tax'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • action_close_panel_account_dashboard(self)
    @api.model
  • action_close_panel_account_invoice(self)
    @api.model

New fields (0)

No new fields.

Public methods (8)
  • action_open_step_bank_account(self)
    @api.model
  • action_open_step_base_document_layout(self)
    @api.model
  • action_open_step_chart_of_accounts(self)
    @api.model
    Called by the 'Chart of Accounts' button of the dashboard onboarding panel.
  • action_open_step_company_data(self)
    @api.model
    Set company's basic information.
  • action_open_step_create_invoice(self)
    @api.model
  • action_open_step_fiscal_year(self)
    @api.model
  • action_open_step_sales_tax(self)
    @api.model
  • action_validate_step_base_document_layout(self)
    @api.model
    Set the onboarding(s) step as done only if layout is set.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' ondelete='restrict' string='Expense Account' tracking=True args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' ondelete='restrict' string='Income Account' tracking=True args: 'account.account'
Public methods (0)

No public methods.

New fields (1)
  • tax_string Char
    compute='_compute_tax_string'
Public methods (0)

No public methods.

New fields (7)
  • account_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' domain="[('applicability', '=', 'products')]" help='Tags to be set on the base and tax journal items created for this product.' string='Account Tags'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' ondelete='restrict' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category.' ondelete='restrict' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product' string='Purchase Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • tax_string Char
    compute='_compute_tax_string'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product' string='Sales Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (63)
  • account_cash_basis_base_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • account_default_pos_receivable_account_id Many2one → account.account
    check_company=True string='Default PoS Receivable Account' args: 'account.account'
  • account_discount_expense_allocation_id Many2one → account.account
    comodel_name='account.account' string='Separate account for expense discount'
  • account_discount_income_allocation_id Many2one → account.account
    comodel_name='account.account' string='Separate account for income discount'
  • account_enabled_tax_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_account_enabled_tax_country_ids' help='Technical field containing the countries for which this company is using tax-related features(hence the ones for which l10n modules need to show tax-related fields).' string='l10n-used countries'
  • account_fiscal_country_id Many2one → res.country
    comodel_name='res.country' compute='compute_account_tax_fiscal_country' help='The country to use the tax reports from for this company' readonly=False store=True string='Fiscal Country'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Cash Discount Write-Off Gain Account'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Cash Discount Write-Off Loss Account'
  • account_journal_suspense_account_id Many2one → account.account
    check_company=True string='Journal Suspense Account' args: 'account.account'
  • account_opening_date Date
    default=<expr> help='That is the date of the opening entry.' required=True string='Opening Entry'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_price_include Selection
    default='tax_excluded' help='Default on whether the sales price used on the product and invoices with this Company includes its taxes.' required=True selection=[('tax_included', 'Tax Included'), ('tax_excluded', 'Tax Excluded')] string='Default Sales Price Include'
  • account_purchase_tax_id Many2one → account.tax
    check_company=True string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    check_company=True string='Default Sale Tax' args: 'account.tax'
  • account_storno Boolean
    readonly=False string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' string='Sales Credit Limit'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • automatic_entry_default_journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • autopost_bills Boolean
    default=True string='Auto-validate bills'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • batch_payment_sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False readonly=True
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template Selection
    selection='_chart_template_selection'
  • check_account_audit_trail Boolean
    string='Audit Trail'
  • company_registry_placeholder Char
    compute='_compute_company_registry_placeholder'
  • company_vat_placeholder Char
    compute='_compute_company_vat_placeholder'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    check_company=True string='Cash Difference Expense' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    check_company=True string='Cash Difference Income' args: 'account.account'
  • display_invoice_amount_total_words Boolean
    string='Total amount of invoice in letters'
  • display_invoice_tax_company_currency Boolean
    default=True string='Taxes in company currency'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_accrual_account_id Many2one → account.account
    check_company=True domain="[('internal_group', '=', 'liability'), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'expense')]" string='Loss Exchange Rate Account'
  • fiscal_position_ids One2many → account.fiscal.position
    comodel_name='account.fiscal.position' inverse_name='company_id'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help="Any entry up to and including that date will be postponed to a later time, in accordance with its journal's sequence." string='Global Lock Date' tracking=True
  • hard_lock_date Date
    help='Any entry up to and including that date will be postponed to a later time, in accordance with its journal sequence. This lock date is irreversible and does not allow any exception.' string='Hard Lock Date' tracking=True
  • income_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('internal_group', '=', 'income')]" string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_terms Html
    string='Default Terms and Conditions' translate=True
  • invoice_terms_html Html
    compute='_compute_invoice_terms_html' readonly=False sanitize_attributes=False store=True string='Default Terms and Conditions as a Web page' translate=True
  • multi_vat_foreign_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_multi_vat_foreign_country' help='Countries for which the company has a VAT number' string='Foreign VAT countries'
  • purchase_lock_date Date
    help="Any purchase entry prior to and including this date will be postponed to a later date, in accordance with its journal's sequence." string='Purchase Lock date' tracking=True
  • qr_code Boolean
    string='Display QR-code on invoices'
  • quick_edit_mode Selection
    selection=[('out_invoices', 'Customer Invoices'), ('in_invoices', 'Vendor Bills'), ('out_and_in_invoices', 'Customer Invoices and Vendor Bills')] string='Quick encoding'
  • revenue_accrual_account_id Many2one → account.account
    check_company=True domain="[('internal_group', '=', 'asset'), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to move the period of a revenue' args: 'account.account'
  • sale_lock_date Date
    help="Any sales entry prior to and including this date will be postponed to a later date, in accordance with its journal's sequence." string='Sales Lock Date' tracking=True
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' string='Cash Basis Journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help="Any entry with taxes up to and including that date will be postponed to a later time, in accordance with its journal's sequence. The tax lock date is automatically set when the tax closing entry is posted." string='Tax Return Lock Date' tracking=True
  • terms_type Selection
    default='plain' string='Terms & Conditions format' args: [('plain', 'Add a Note'), ('html', 'Add a link to a Web Page')]
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    check_company=True domain="[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)]" help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
  • user_fiscalyear_lock_date Date
    compute='_compute_user_fiscalyear_lock_date'
  • user_hard_lock_date Date
    compute='_compute_user_hard_lock_date'
  • user_purchase_lock_date Date
    compute='_compute_user_purchase_lock_date'
  • user_sale_lock_date Date
    compute='_compute_user_sale_lock_date'
  • user_tax_lock_date Date
    compute='_compute_user_tax_lock_date'
Public methods (15)
  • action_save_onboarding_company_data(self)
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • cache_invalidation_fields(self)
  • compute_account_tax_fiscal_country(self)
    @api.depends('country_id')
  • compute_fiscalyear_dates(self, current_date)
    Returns the dates of the fiscal year containing the provided date for this company. :return: A dictionary containing: * date_from * date_to
  • create(self, vals_list)
    @api.model_create_multi
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_next_batch_payment_communication(self)
    When in need of a batch payment communication reference (several invoices paid at the same time) use batch_payment_sequence_id to get it (eventually create it first): e.g BATCH/2024/00001
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • install_l10n_modules(self)
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar or from the Financial configuration menu.
  • write(self, values)

New fields (64)
  • account_cash_basis_base_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] readonly=False related='company_id.account_cash_basis_base_account_id' string='Base Tax Received Account'
  • account_default_credit_limit Monetary
    compute='_compute_account_default_credit_limit' help='This is the default credit limit that will be used on partners that do not have a specific limit on them.' inverse='_inverse_account_default_credit_limit' readonly=False string='Default Credit Limit'
  • account_discount_expense_allocation_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('income', 'income_other', 'expense'))]" readonly=False related='company_id.account_discount_expense_allocation_id' string='Customer Invoices Discounts Account'
  • account_discount_income_allocation_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('income', 'income_other', 'expense'))]" readonly=False related='company_id.account_discount_income_allocation_id' string='Vendor Bills Discounts Account'
  • account_fiscal_country_id Many2one
    readonly=False related='company_id.account_fiscal_country_id' store=False string='Fiscal Country Code'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('income', 'income_other', 'expense'))]" help='Account for the difference amount after the income discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_gain_account_id' string='Early Discount Gain'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('expense', 'income', 'income_other'))]" help='Account for the difference amount after the expense discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_loss_account_id' string='Early Discount Loss'
  • account_journal_suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('asset_current', 'liability_current'))]" help='Bank Transactions are posted immediately after import or synchronization. Their counterparty is the bank suspense account.\nReconciliation replaces the latter by the definitive account(s).' readonly=False related='company_id.account_journal_suspense_account_id' string='Bank Suspense'
  • account_price_include Selection
    help='Default on whether the sales price used on the product and invoices with this Company includes its taxes.' readonly=False related='company_id.account_price_include' required=True string='Default Sales Price Include'
  • account_storno Boolean
    readonly=False related='company_id.account_storno' string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' readonly=False related='company_id.account_use_credit_limit' string='Sales Credit Limit'
  • autopost_bills Boolean
    readonly=False related='company_id.autopost_bills'
  • chart_template Selection
    default=<expr> selection=<expr>
  • check_account_audit_trail Boolean
    readonly=False related='company_id.check_account_audit_trail' string='Audit Trail'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Currency Exchange Journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • display_invoice_amount_total_words Boolean
    readonly=False related='company_id.display_invoice_amount_total_words' string='Total amount of invoice in letters'
  • display_invoice_tax_company_currency Boolean
    readonly=False related='company_id.display_invoice_tax_company_currency' string='Taxes in company currency'
  • expense_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'expense')]" readonly=False related='company_id.expense_currency_exchange_account_id' string='Loss Exchange Rate Account'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_sale_delivery_address Boolean
    implied_group='account.group_delivery_invoice_address' args: 'Customer Addresses'
  • group_show_purchase_receipts Boolean
    implied_group='account.group_purchase_receipts' string='Purchase Receipt'
  • group_show_sale_receipts Boolean
    implied_group='account.group_sale_receipts' string='Sale Receipt'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • income_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('internal_group', '=', 'income')]" readonly=False related='company_id.income_currency_exchange_account_id' string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_terms Html
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • invoice_terms_html Html
    readonly=False related='company_id.invoice_terms_html' string='Terms & Conditions as a Web page'
  • is_account_peppol_eligible Boolean
    compute='_compute_is_account_peppol_eligible' string='PEPPOL eligible'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_bank_statement_extract Boolean
    compute='_compute_module_account_bank_statement_extract' readonly=False store=True args: 'Bank Statement Digitization'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv, .xls, and .xlsx format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_extract Boolean
    string='Document Digitization'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    compute='_compute_module_account_invoice_extract' readonly=False store=True args: 'Invoice Digitization'
  • module_account_iso20022 Boolean
    string='SEPA Credit Transfer / ISO20022'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_peppol Boolean
    string='PEPPOL Invoicing'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_oss Boolean
    string='EU Intra-community Distance Selling'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • preview_ready Boolean
    compute='_compute_terms_preview' string='Display preview button'
  • purchase_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR-code'
  • quick_edit_mode Selection
    readonly=False related='company_id.quick_edit_mode' string='Quick encoding'
  • sale_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_journal_id Many2one → account.journal
    check_company=True readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • terms_type Selection
    readonly=False related='company_id.terms_type'
  • transfer_account_id Many2one → account.account
    check_company=True domain=[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)] help='Intermediary account used when moving from a liquidity account to another.' readonly=False related='company_id.transfer_account_id' string='Internal Transfer' args: 'account.account'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (5)
  • action_update_terms(self)
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • reload_template(self)
  • set_values(self)

New fields (2)
  • display_rounding_warning Boolean
    compute='_compute_display_rounding_warning' help="The warning informs a rounding factor change might be dangerous on res.currency's form view." string='Display Rounding Warning'
  • fiscal_country_codes Char
    default=_get_fiscal_country_codes store=False
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • get_application_groups(self, domain)
    @api.model

New fields (44)
  • autopost_bills Selection
    default='ask' help='Automatically post bills for this trusted partner' required=True selection=[('always', 'Always'), ('ask', 'Ask after 3 validations without edits'), ('never', 'Never')] string='Auto-post bills'
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • credit_limit Float
    company_dependent=True copy=False groups='account.group_account_invoice,account.group_account_readonly' help='Credit limit specific to this partner.' readonly=False string='Credit Limit'
  • credit_to_invoice Monetary
    compute='_compute_credit_to_invoice' groups='account.group_account_invoice,account.group_account_readonly'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • days_sales_outstanding Float
    compute='_compute_days_sales_outstanding' help='[(Total Receivable/Total Revenue) * number of days since the first invoice] for this customer' string='Days Sales Outstanding (DSO)'
  • debit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • display_invoice_edi_format Boolean
    default=<expr> store=False
  • display_invoice_template_pdf_report_id Boolean
    default=_default_display_invoice_template_pdf_report_id store=False
  • duplicate_bank_partner_ids Many2many
    related='bank_ids.duplicate_bank_partner_ids'
  • duplicated_bank_account_partners_count Integer
    compute='_compute_duplicated_bank_account_partners_count'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • ignore_abnormal_invoice_amount Boolean
    company_dependent=True
  • ignore_abnormal_invoice_date Boolean
    company_dependent=True
  • invoice_edi_format Selection
    compute='_compute_invoice_edi_format' compute_sudo=True inverse='_inverse_invoice_edi_format' selection=[] string='eInvoice format'
  • invoice_edi_format_store Char
    company_dependent=True
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_sending_method Selection
    company_dependent=True selection=[('manual', 'Download'), ('email', 'by Email')] string='Invoice sending'
  • invoice_template_pdf_report_id Many2one → ir.actions.report
    comodel_name='ir.actions.report' domain="[('is_invoice_report', '=', True)]" readonly=False store=True string='Invoice template'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • is_coa_installed Boolean
    default=<expr> store=False
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items'
  • name Char
    tracking=True
  • partner_company_registry_placeholder Char
    compute='_compute_partner_company_registry_placeholder'
  • partner_vat_placeholder Char
    compute='_compute_partner_vat_placeholder'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('account_type', '=', 'liability_payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' ondelete='restrict' string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('account_type', '=', 'asset_receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' ondelete='restrict' string='Account Receivable' args: 'account.account'
  • property_inbound_payment_method_line_id Many2one → account.payment.method.line
    comodel_name='account.payment.method.line' company_dependent=True domain=<expr> help='Preferred payment method when selling to this customer. This will be set by default on all incoming payments created for this customer'
  • property_outbound_payment_method_line_id Many2one → account.payment.method.line
    comodel_name='account.payment.method.line' company_dependent=True domain=<expr> help='Preferred payment method when buying from this vendor. This will be set by default on all outgoing payments created for this vendor'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sales orders and customer invoices' ondelete='restrict' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • show_credit_limit Boolean
    compute='_compute_show_credit_limit' default=<expr> groups='account.group_account_invoice,account.group_account_readonly'
  • supplier_invoice_count Integer
    compute='_compute_supplier_invoice_count' string='# Vendor Bills'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice,account.group_account_readonly' string='Total Invoiced'
  • trust Selection
    company_dependent=True string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
  • use_partner_credit_limit Boolean
    compute='_compute_use_partner_credit_limit' groups='account.group_account_invoice,account.group_account_readonly' help='Set a value greater than 0.0 to activate a credit limit check' inverse='_inverse_use_partner_credit_limit' string='Partner Limit'
Public methods (7)
  • action_open_business_doc(self)
  • action_view_partner_invoices(self)
  • action_view_partner_with_same_bank(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • get_partner_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • write(self, vals)

New fields (18)
  • acc_holder_name Char
    tracking=True
  • acc_number Char
    tracking=True
  • active Boolean
    tracking=True
  • allow_out_payment Boolean
    help='Sending fake invoices with a fraudulent account number is a common phishing practice. To protect yourself, always verify new bank account numbers, preferably by calling the vendor, as phishing usually happens when their emails are compromised. Once verified, you can activate the ability to send money.' tracking=True
  • bank_id Many2one
    tracking=True
  • currency_id Many2one
    tracking=True
  • duplicate_bank_partner_ids Many2many → res.partner
    compute='_compute_duplicate_bank_partner_ids' args: 'res.partner'
  • has_iban_warning Boolean
    compute='_compute_display_account_warning' help='Technical field used to display a warning if the IBAN country is different than the holder country.' store=True
  • has_money_transfer_warning Boolean
    compute='_compute_display_account_warning' help='Technical field used to display a warning if the account is a transfer service account.' store=True
  • journal_id One2many → account.journal
    check_company=True domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
  • lock_trust_fields Boolean
    compute='_compute_lock_trust_fields'
  • money_transfer_service Char
    compute='_compute_money_transfer_service_name'
  • partner_country_name Char
    related='partner_id.country_id.name'
  • partner_customer_rank Integer
    related='partner_id.customer_rank'
  • partner_id Many2one
    tracking=True
  • partner_supplier_rank Integer
    related='partner_id.supplier_rank'
  • related_moves One2many → account.move
    inverse_name='partner_bank_id' args: 'account.move'
  • user_has_group_validate_bank_account Boolean
    compute='_compute_user_has_group_validate_bank_account'
Public methods (8)
  • action_open_business_doc(self)
  • build_qr_code_base64(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • build_qr_code_url(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • get_available_qr_methods_in_sequence(self)
    @api.model
    Same as _get_available_qr_methods but without returning the sequence, and using it directly to order the returned list.
  • unlink(self)
  • write(self, vals)

New fields (2)
  • sequence_number Integer
    compute='_compute_split_sequence' store=True
  • sequence_prefix Char
    compute='_compute_split_sequence' store=True
Public methods (2)
  • init(self)
  • write(self, vals)

New fields (1)
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
Public methods (0)

No public methods.

New fields (8)
  • abnormal_amount_partner_ids One2many → res.partner
    compute='_compute_abnormal_amount_partner_ids' args: 'res.partner'
  • abnormal_date_partner_ids One2many → res.partner
    compute='_compute_abnormal_date_partner_ids' args: 'res.partner'
  • display_force_post Boolean
    compute='_compute_display_force_post'
  • force_post Boolean
    help='Entries in the future are set to be auto-posted by default. Check this checkbox to post them now.' string='Force'
  • ignore_abnormal_amount Boolean
  • ignore_abnormal_date Boolean
  • is_entries Boolean
    compute='_compute_is_entries'
  • move_ids Many2many → account.move
    args: 'account.move'
Public methods (2)
  • default_get(self, fields_list)
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/account
VERSION
VERSION 1.2
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Xavier ALT, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Stefan Rijnhart, qdp-odoo, Atul Patel, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, GitHub, Damien Bouvy, Yannick Tivisse, Odoo Online, Romain Derie, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Lucas Perais, Julien Castiaux, Xavier-Do, Denis Roussel, Romeo Fragomeli, Luis Torres, Carlos Dauden, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, William Henrotin, Sébastien Theys, Akim Juillerat, Joseph Caburnay, oco-odoo, Florent de Labarre, Julien Mougenot, Anh Thao Pham (pta), Katherine Zaoral, Samuel Degueldre, Alvaro Fuentes, std-odoo, Achraf (abz), Carlos Lopez, Brice bib Bartoletti, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Pierre Rousseau, Ivàn Todorovich, Gorash, fja-odoo, Bohdan Lisnenko, Mathieu Duckerts-Antoine, Pierre Paridans, Yenthe666, William Braeckman, Romain Estievenart, Guillaume (guva), odoo, roen-odoo, Benoit Socias, Hubert Van de Walle (huvw), Miquel Raïch, pedrambiria, sergio-teruel, momegahed, Jigar Vaghela, Ricardo Gomes Rodrigues (rigr), Nicolas (vin), william-andre, Paolo (pgi), Julien Van Roy, Víctor Martínez, Florian Damhaut, MerlinGuillaume, yhu-odoo, aliya, william, Florian Vranckx, bat-odoo, Arthur Detroux (ard), Florian Charlier, Nshimiyimana Séna, Louis Baudoux, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), John Laterre (jol), Ruben Gomes, Thomas Beckers, Antoine Vandevenne (anv), assellalou, Jinjiu Liu, gawa-odoo, Demesmaeker, Aurelien van Delft (avd), Hubert Van De Walle, Florian(flg), Valentin Chevalier, Roy Le, Renaud Thiry, Elias Regopoulos, Pierrot (prro), Stanislas Gueniffey, niyasraphy, jbw-odoo, Rodrigo, bve-odoo, Habib (ayh), Loan (LSE), Thomas Lefebvre (thle), alsh-odoo, Matheus Leal Viana (malv), Gaetan Vanden Bergh (gavb), Merel Geens (mege), Louis Wicket (wil), tsm-odoo, Walid, Mylyna Hy, Adrien Widart (awt), nda, althaf shaik, Maximilien (malb), Victor Piryns (pivi), Hamza (hisl), Shawcker, Mahamadasif Ansari, Thomas Becquevort (thbe), amdi-odoo, Gauthier Wala (gawa), maximilien(malb), Ali Alfie (alal), Tom De Caluwé, Pierre-Yves Dufays, Malay Khamar, Saurabh Mishra, clesgow, Daniel Kosky (dako), Andrew Gavgavian, Valentin Vallaeys (vava), Claire Bretton (clbr), Pablo Montenegro, Fernanda Hernández, Yosua Nicolaus, Om Rabara, duongnguyen, Levi Siuzdak (sile), Naman Shah, Maruan Aguerdouh (magm), Antoine Dupuis (andu), Carsten Wolff (cawo), Antoine Boonen, Camille Spiritus, Dylan Kiss (dyki), Hansun (hale), Jinane Maksoud, PoMa, arsi, smdc-odoo, hupo-odoo, Paolo Gatti, Sanket Brahmbhatt, Mahdi cheikh rouhou (macr), Bruno Boi, Antoine (ande), flvr-odoo, Paolo Gatti (pgi), Julien Alardot (jual), FrancoisGe, Michael (mcm), Emanuele, Preksha Chouhan, Valeriya(vchu), rolandojduartem, Soam (sold), Rahul Prajapati, gera-odoo, Karnav Sojitra, paso-odoo, Odoo, prye-odoo, Kartik Chavda, tong-odoo, HuylenbroeckFlorent, Anita (anko), ArnaudVerlaine, Xavier Bol (xbo), Brieuc-brd, Adesh Jolhe, Renilkumar Kajavadra, Nguyễn Đại Dương, AH-Yussef, Harsh Modi, Zeel Patel, Sarah Bellefroid, adda-odoo, Arnaud Sibille, Mahdi Cheikh Rouhou (macr), Corentin Thaon (thco), Mattis Megevand (mmeg), Andrzej(pian), Nicolas Viseur (vin), sesn-odoo, guva-odoo, kdeb@odoo.com, Paul Stroobant, aktr-odoo, Hesham, ravb-odoo, Ethan Vincent, Mathieu (mcou), lase@odoo.com, Benjamin Hanquin (beha), Aurelien MARIE (auma), bary, Maryam Kia, Louis (loti), mizosoft, reka-odoo, Sven Fuehr, thco-odoo, AMZIL Ayoub, Trịnh Ngọc Hưng, Seif (segn), Karl Southern, Eteil Djoumatchoua(etdj) etdj@odoo.com, Mountain Tran, yosa-odoo, Mohamed GadAlrab, Nathaniel (naja), det, Bastien Fafchamps (bafa), Julien Carion (juca), kcv-odoo, moerradi, adsh-odoo, mega, Tanguy Quéguineur, SaddemAmine, smna-odoo, Louis Gobert, Agustin Castro Bugallo, Chrysanthe (chgo), aath-odoo, Louis (wil), Đào Nam, asno-odoo, mano-odoo, Harsh Shah, Harsh Bhatt (habh), csnauwaert, aamo-odoo, Hussein Ebrahim(hyhe), Victorien (viso), Mathieu Coutant, Elisabeth Dickinson, Edoardo Piroli, casp-odoo, Claire (clbr), gteboul, Rocío Vega, sabr, unka-odoo, Hammad Arif, prep-odoo, Antoine Dupuis, Léo Gizard, Jonathan Castillo (jcs), Hesham Saleh, Saif (segn), Hung Trinh Ngoc, aizu-odoo, shy, AhmedElemary57, geiercsaba, Nishant Jain, sben-odoo, Ricardo Gomes Rodrigues, gvar-odoo, mth-odoo, Dũng (Trần Đình), muab-odoo, Smit Patel, Logan Staelens, Trinh Ngoc Hung, mky-odoo, Emeka Ubakanma, roto-odoo, Maira Salazar (srma), jepbarasgarov, Ezzuldin Zaky (ezza), Kawtar Drissi El Bouzaidi (kdeb), Arthur Nanson, Ahmed Abdelaziz Hasaneen, elhayyany, Pierre Lamotte (pila), Michaël Mattiello, nikj-odoo, Pierre Pulinckx (pipu), Bastien PIERRE, Corentin Heinix (cohe), Corentin Lombard, kasm, Carmine, Sherif Gabr, MaximeNoirhomme, bona-odoo, Christihan Laurel [Vauxoo], Mahdi Alijani (malj), devp-odoo, Akash Pandey, dvsh-odoo, AllePilli, krip-odoo, hatr-odoo, utma-odoo, rida, Ester Andreetto, Sohail JAIDI (soja), bhra-odoo, ijja-odoo, agrabsi, Earth Patel, mojem, Dirk Douglas, sawer, mohannedah, Junqi, Jugurtha, Laurent Smet (LAS), Quentin Colla (qucol), Fernando Delgado, MediaStudioBK, malb, Augusto Perez, Soncrits, oumaima-aarabe, josv-odoo, late-odoo, Ayushi Gorai, h4818, path-odoo, krge-odoo, anden-odoo, cbeddies, Sohail Jaidi (soja), Orrin Zhong, Philipp Walter, Yash Pathak, yaih, Ashish Nirmal, leclerc-leo, Ayush Modi, Manav Shah, Martin Doyen, Jacob Was (jacw), bhdo-odoo, Karna
WEBSITE
WEBSITEhttps://www.odoo.com/app/invoicing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 13:18:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (155)
XML IDNameModelTypeStatus
account.account_terms_conditions_setting_banner Account Terms and Conditions Setting Banner ir.ui.view qweb New
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account div Inherits analytic.view_account_analytic_account_form
account_analytic_account_view_list_inherit account.analytic.account.list.inherit account.analytic.account field Inherits analytic.view_account_analytic_account_list
account_analytic_distribution_model_form_inherit account.analytic.distribution.model.inherit.form account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_form_view
account_analytic_distribution_model_tree_inherit account.analytic.distribution.model.inherit.tree account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_tree_view
account_analytic_plan_form_view_inherit_account account.analytic.plan.inherit.form account.analytic.plan data Inherits analytic.account_analytic_plan_form_view
account_automatic_entry_wizard_form account.automatic.entry.wizard.form account.automatic.entry.wizard form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_default_terms_and_conditions account_default_terms_and_conditions ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_report_view_tree account.invoice.report.view.tree account.invoice.report tree New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_move_line_view_kanban_mobile account.move.line.kanban.mobile account.move.line xpath Inherits account_move_line_view_kanban
account_move_send_form account.move.send.form account.move.send form New
account_move_view_activity account.move.view.activity account.move activity New
account_resequence_view Re-sequence Journal Entries account.resequence.wizard form New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag tree New
account_tax_group_view_search account.tax.group.search.filters account.tax.group search New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax tree New
account_terms_conditions_page Terms & Conditions ir.ui.view qweb New
account_tour_upload_bill account.tour.upload.bill account.tour.upload.bill form New
account_tour_upload_bill_email_confirm account.tour.upload.bill.email.confirm account.tour.upload.bill.email.confirm form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
bill_preview bill_preview ir.ui.view qweb New
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
document_tax_totals document_tax_totals ir.ui.view qweb Inherits account.document_tax_totals_template
document_tax_totals_company_currency_template document_tax_totals_company_currency_template ir.ui.view qweb New
document_tax_totals_template document_tax_totals_template ir.ui.view qweb New
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice/Bill ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_required_fields_form portal_invoice_required_fields_form ir.ui.view qweb New
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Show Invoices & Bills ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
product_template_view_tree product.template.tree product.template tree New
product_uom_form_view_inherit product_uom_form_view_inherit uom.uom xpath Inherits uom.product_uom_form_view
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
report_statement_internal_layout report_statement_internal_layout ir.ui.view qweb Inherits web.internal_layout
res_company_form_view_onboarding res.company.form.view.onboarding res.company xpath Inherits base.view_company_form
res_company_form_view_onboarding_sale_tax res.company.form.view.onboarding.sale.tax res.company form New
res_company_view_form_terms res.company.view.form.terms res.company form New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_currency_form_inherit res.currency.form.inherit res.currency xpath Inherits base.view_currency_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_groups_totals tax_groups_totals ir.ui.view qweb New
tax_repartition_line_tree account.tax.repartition.line.tree account.tax.repartition.line tree New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_accrued_orders_wizard account.accrued.orders.wizard.view account.accrued.orders.wizard form New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.tree account.journal.group tree New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_line_payment_filter account.move.line.payment.search account.move.line search New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_method_line_kanban account.payment.method.line.kanban account.payment.method.line kanban New
view_account_payment_method_line_tree account.payment.method.line.tree account.payment.method.line tree New
view_account_payment_register_form account.payment.register.form account.payment.register form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_line_form account.reconcile.model.line.form account.reconcile.model.line form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_various_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_form res.company.form.inherit.account res.company xpath Inherits base.view_company_form
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_in_invoice_bill_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_receipt_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_refund_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_incoterms_tree account.incoterms.tree account.incoterms tree New
view_invoice_tree account.invoice.tree account.move tree New
view_module_filter_inherit_account ir.module.module.list.inherit.account ir.module.module xpath Inherits base.view_module_filter
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_payment_tree account.move.line.payment.tree account.move.line tree New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_grouped_bank_cash account.move.line.tree.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_general account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_misc account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_partner account.move.line.tree.grouped.partner account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_sales_purchases account.move.line.tree.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree
view_move_tree account.move.tree account.move tree New
view_onboarding_tax_tree account.onboarding.tax.tree account.tax xpath Inherits account.view_tax_tree
view_out_credit_note_tree account.out.invoice.tree account.move field Inherits account.view_invoice_tree
view_out_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_partner_bank_form_inherit_account res.partner.bank.form.inherit.account res.partner.bank xpath Inherits base.view_partner_bank_form
view_partner_bank_search_inherit res.partner.bank.search.inherit res.partner.bank xpath Inherits base.view_partner_bank_search
view_partner_property_form res.partner.property.form.inherit res.partner xpath Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_group_form account.tax.group.form account.tax.group form New
view_tax_group_tree account.tax.group.tree account.tax.group tree New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
Models touched (90)

New fields (23)
  • account_type Selection
    compute='_compute_account_type' help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' index=True precompute=True readonly=False required=True selection=[('asset_receivable', 'Receivable'), ('asset_cash', 'Bank and Cash'), ('asset_current', 'Current Assets'), ('asset_non_current', 'Non-current Assets'), ('asset_prepayments', 'Prepayments'), ('asset_fixed', 'Fixed Assets'), ('liability_payable', 'Payable'), ('liability_credit_card', 'Credit Card'), ('liability_current', 'Current Liabilities'), ('liability_non_current', 'Non-current Liabilities'), ('equity', 'Equity'), ('equity_unaffected', 'Current Year Earnings'), ('income', 'Income'), ('income_other', 'Other Income'), ('expense', 'Expenses'), ('expense_depreciation', 'Depreciation'), ('expense_direct_cost', 'Cost of Revenue'), ('off_balance', 'Off-Balance Sheet')] store=True string='Type' tracking=True
  • allowed_journal_ids Many2many → account.journal
    check_company=True help='Define in which journals this account can be used. If empty, can be used in all journals.' string='Allowed Journals' args: 'account.journal'
  • code Char
    index=True required=True size=64 tracking=True unaccent=False
  • company_currency_id Many2one
    related='company_id.currency_id'
  • company_id Many2one → res.company
    default=<expr> readonly=False required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all journal items in this account to have a specific currency (i.e. bank journals). If no currency is set, entries can use any currency.' string='Account Currency' tracking=True args: 'res.currency'
  • current_balance Float
    compute='_compute_current_balance'
  • deprecated Boolean
    default=False tracking=True
  • group_id Many2one → account.group
    compute='_compute_account_group' help='Account prefixes can determine account groups.' readonly=True store=True args: 'account.group'
  • include_initial_balance Boolean
    compute='_compute_include_initial_balance' help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' precompute=True store=True string='Bring Accounts Balance Forward'
  • internal_group Selection
    compute='_compute_internal_group' precompute=True selection=[('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off_balance', 'Off Balance')] store=True string='Internal Group'
  • name Char
    index='trigram' required=True string='Account Name' tracking=True translate=True
  • non_trade Boolean
    default=False help='If set, this account will belong to Non Trade Receivable/Payable in reports and filters.\nIf not, this account will belong to Trade Receivable/Payable in reports and filters.'
  • note Text
    tracking=True args: 'Internal Notes'
  • opening_balance Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_balance' string='Opening Balance'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_credit' string='Opening Credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_debit' string='Opening Debit'
  • reconcile Boolean
    compute='_compute_reconcile' help='Check this box if this account allows invoices & payments matching of journal items.' precompute=True readonly=False store=True string='Allow Reconciliation' tracking=True
  • related_taxes_amount Integer
    compute='_compute_related_taxes_amount'
  • root_id Many2one → account.root
    compute='_compute_account_root' precompute=True store=True args: 'account.root'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' help='Optional tags you may want to assign for custom reporting' ondelete='restrict' relation='account_account_account_tag' string='Tags' tracking=True
  • tax_ids Many2many → account.tax
    check_company=True context={'append_type_to_tax_name': True} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
Public methods (8)
  • action_open_related_taxes(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • copy_translations(self, new, excluded=())
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
    Split the account name into account code and account name in import. When importing a file with accounts, the account code and name may be both entered in the name column. In this case, the name will be split into code and name.
  • write(self, vals)

New fields (6)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes'), ('products', 'Products')]
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True translate=True args: 'Tag Name'
  • tax_negate Boolean
    help='Check this box to negate the absolute value of the balance of the lines associated with this tag in tax report computation.' string='Negate Tax Balance'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('account_type', '=', 'liability_current')] if context.get('active_model') == 'purchase.order' else [('account_type', '=', 'asset_current')]" required=True string='Accrual Account'
  • amount Monetary
    help='Specify an arbitrary value that will be accrued on a default account for the entire order, regardless of the products on the different lines.' string='Amount'
  • company_id Many2one → res.company
    default=_get_default_company args: 'res.company'
  • currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • date Date
    default=_get_default_date required=True
  • display_amount Boolean
    compute='_compute_display_amount'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' domain="[('type', '=', 'general')]" precompute=True readonly=False required=True store=True string='Journal'
  • preview_data Text
    compute='_compute_preview_data'
  • reversal_date Date
    compute='_compute_reversal_date' precompute=True readonly=False required=True store=True
Public methods (1)
  • create_entries(self)

New fields (4)
  • credit Monetary
    groups='account.group_account_readonly'
  • debit Monetary
    groups='account.group_account_readonly'
  • invoice_count Integer
    compute='_compute_invoice_count' args: 'Invoice Count'
  • vendor_bill_count Integer
    compute='_compute_vendor_bill_count' args: 'Vendor Bill Count'
Public methods (2)
  • action_view_invoice(self)
  • action_view_vendor_bill(self)

New fields (4)
  • account_prefix Char
    help='Prefix that defines which accounts from the financial accounting this applicability should apply on.' string='Financial Accounts Prefix'
  • business_domain Selection
    ondelete={'invoice': 'cascade', 'bill': 'cascade'} selection_add=[('invoice', 'Invoice'), ('bill', 'Vendor Bill')]
  • display_account_prefix Boolean
    compute='_compute_display_account_prefix' help='Defines if the field account prefix should be displayed'
  • product_categ_id Many2one → product.category
    string='Product Category' args: 'product.category'
Public methods (0)

No public methods.

New fields (3)
  • account_prefix Char
    help='This analytic distribution will apply to all financial accounts sharing the prefix specified.' string='Accounts Prefix'
  • product_categ_id Many2one → product.category
    help='Select a product category which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    check_company=True help='Select a product for which the analytic distribution will be used (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (8)
  • category Selection
    selection_add=[('invoice', 'Customer Invoice'), ('vendor_bill', 'Vendor Bill')]
  • code Char
    size=8
  • general_account_id Many2one → account.account
    check_company=True compute='_compute_general_account_id' domain="[('deprecated', '=', False)]" ondelete='restrict' readonly=False store=True string='Financial Account' args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True readonly=True related='move_line_id.journal_id' store=True string='Financial Journal' args: 'account.journal'
  • move_line_id Many2one → account.move.line
    check_company=True index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • product_id Many2one → product.product
    check_company=True string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (16)
  • account_type Selection
    compute='_compute_account_type' store=True args: [('income', 'Revenue'), ('expense', 'Expense')]
  • action Selection
    required=True args: [('change_period', 'Change Period'), ('change_account', 'Change Account')]
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • date Date
    default=<expr> required=True
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Account to transfer to.' string='To'
  • display_currency_helper Boolean
    compute='_compute_display_currency_helper' string='Currency Conversion Helper'
  • expense_accrual_account Many2one → account.account
    check_company=True compute='_compute_expense_accrual_account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" inverse='_inverse_expense_accrual_account' readonly=False args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('type', '=', 'general')]" help='Journal where to create the entry.' inverse='_inverse_journal_id' readonly=False required=True string='Journal' args: 'account.journal'
  • lock_date_message Char
    compute='_compute_lock_date_message' string='Lock Date Message'
  • move_data Text
    compute='_compute_move_data'
  • move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • percentage Float
    compute='_compute_percentage' help='Percentage of each line to execute the action on.' readonly=False store=True args: 'Percentage'
  • preview_move_data Text
    compute='_compute_preview_move_data'
  • revenue_accrual_account Many2one → account.account
    check_company=True compute='_compute_revenue_accrual_account' domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" inverse='_inverse_revenue_accrual_account' readonly=False args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id' help='Total amount impacted by the automatic entry.' readonly=False store=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • do_action(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • attachment_ids Many2many → ir.attachment
    comodel_name='ir.attachment' string='Attachments'
  • balance_end Monetary
    compute='_compute_balance_end' store=True string='Computed Balance'
  • balance_end_real Monetary
    compute='_compute_balance_end_real' readonly=False store=True string='Ending Balance'
  • balance_start Monetary
    compute='_compute_balance_start' readonly=False store=True string='Starting Balance'
  • company_id Many2one → res.company
    comodel_name='res.company' related='journal_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id'
  • date Date
    compute='_compute_date_index' index=True store=True
  • first_line_index Char → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_date_index' index=True store=True
  • is_complete Boolean
    compute='_compute_is_complete' store=True
  • is_valid Boolean
    compute='_compute_is_valid' search='_search_is_valid'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' store=True
  • line_ids One2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' inverse_name='statement_id' required=True string='Statement lines'
  • name Char
    compute='_compute_name' copy=False readonly=False store=True string='Reference'
  • problem_description Text
    compute='_compute_problem_description'
  • reference Char
    copy=False string='External Reference'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • init(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (23)
  • account_number Char
    string='Bank Account Number'
  • amount Monetary
  • amount_currency Monetary
    compute='_compute_amount_currency' currency_field='foreign_currency_id' help='The amount expressed in an optional other currency if it is a multi-currency entry.' readonly=False store=True string='Amount in Currency'
  • amount_residual Float
    compute='_compute_is_reconciled' store=True string='Residual Amount'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' store=True string='Journal Currency'
  • foreign_currency_id Many2one → res.currency
    comodel_name='res.currency' help='The optional other currency if it is a multi-currency entry.' string='Foreign Currency'
  • internal_index Char
    compute='_compute_internal_index' index=True store=True string='Internal Reference'
  • is_reconciled Boolean
    compute='_compute_is_reconciled' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=',True)]" ondelete='restrict' string='Partner'
  • partner_name Char
  • payment_ids Many2many → account.payment
    comodel_name='account.payment' relation='account_payment_account_bank_statement_line_rel' string='Auto-generated Payments'
  • payment_ref Char
    string='Label'
  • running_balance Monetary
    compute='_compute_running_balance'
  • sequence Integer
    default=1
  • statement_balance_end_real Monetary
    related='statement_id.balance_end_real'
  • statement_complete Boolean
    related='statement_id.is_complete'
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Statement'
  • statement_name Char
    related='statement_id.name' string='Statement Name'
  • statement_valid Boolean
    related='statement_id.is_valid'
  • transaction_details Json
    readonly=True
  • transaction_type Char
Public methods (8)
  • action_undo_reconciliation(self)
    Undo the reconciliation made on the statement line and reset their journal items to their original states.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • init(self)
  • new(self, values=None, origin=None, ref=None)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (7)
  • company_id Many2one → res.company
    related='profit_account_id.company_id' args: 'res.company'
  • loss_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False)]" string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • profit_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False)]" string='Profit Account' args: 'account.account'
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'Up'), ('DOWN', 'Down'), ('HALF-UP', 'Nearest')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • ref(self, xmlid, raise_if_not_found=True)
  • try_loading(self, template_code, company, install_demo=True)
    Check if the chart template can be loaded then proceeds installing it. :param template_code: code of the chart template to be loaded. :type template_code: str :param company: the company we try to load the chart template on. If not provided, it is retrieved from the context. :type company: int, Model<res.company> :param install_demo: whether or not we should load demo data right after loading the chart template. :type install_demo: bool

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
  • write(self, vals)

New fields (19)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply tax & account mappings on invoices automatically if the matching criterias (VAT/Country) are met.' string='Detect Automatically'
  • company_country_id Many2one
    related='company_id.account_fiscal_country_id' string='Company Country'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • fiscal_country_codes Char
    related='company_country_id.code' string='Company Fiscal Country Code'
  • foreign_vat Char
    help='The tax ID of your company in the region mapped by this fiscal position.' inverse='_inverse_foreign_vat' string='Foreign Tax ID'
  • foreign_vat_header_mode Selection
    compute='_compute_foreign_vat_header_mode' selection=[('templates_found', 'Templates Found'), ('no_template', 'No Template')]
  • name Char
    required=True string='Fiscal Position' translate=True
  • note Html
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (6)
  • action_create_foreign_taxes(self)
  • create(self, vals_list)
    @api.model_create_multi
  • map_account(self, account)
  • map_accounts(self, accounts)
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes)
  • write(self, vals)

New fields (4)
  • account_dest_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False)]" required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False)]" required=True string='Account on Product' args: 'account.account'
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_active Boolean
    related='tax_dest_id.active'
  • tax_dest_id Many2one → account.tax
    check_company=True string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    check_company=True required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • exchange_move_id Many2one → account.move
    index='btree_not_null' args: 'account.move'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (6)
  • code_prefix_end Char
    compute='_compute_code_prefix_end' precompute=True readonly=False store=True
  • code_prefix_start Char
    compute='_compute_code_prefix_start' precompute=True readonly=False store=True
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • name Char
    required=True translate=True
  • parent_id Many2one → account.group
    check_company=True index=True ondelete='cascade' readonly=True args: 'account.group'
  • parent_path Char
    index=True unaccent=False
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (25)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • commercial_partner_id Many2one → res.partner
    string='Main Partner' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • inventory_value Float
    readonly=True string='Inventory Value'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • move_type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_state Selection
    readonly=True selection=PAYMENT_STATE_SELECTION string='Payment Status'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_margin Float
    readonly=True string='Margin'
  • price_subtotal Float
    readonly=True string='Untaxed Total'
  • price_total Float
    readonly=True string='Total in Currency'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This is a hack to allow us to correctly calculate the average price.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (37)
  • account_control_ids Many2many → account.account
    check_company=True domain="[('deprecated', '=', False), ('account_type', '!=', 'off_balance')]" string='Allowed accounts' args: 'account.account', 'journal_account_control_rel', 'journal_id', 'account_id'
  • accounting_date Date
    compute='_compute_accounting_date'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_id Many2one
    help='Send one separate email for each invoice.\n\nAny file extension will be accepted.\n\nOnly PDF and XML files will be interpreted by Odoo'
  • available_payment_method_ids Many2many → account.payment.method
    comodel_name='account.payment.method' compute='_compute_available_payment_method_ids'
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    check_company=True copy=False domain="[('partner_id','=', company_partner_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    compute='_compute_code' help='Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.' precompute=True readonly=False required=True size=5 store=True string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True readonly=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=_get_default_account_domain ondelete='restrict' string='Default Account'
  • default_account_type Char
    compute='_compute_default_account_type' string='Default Account Type'
  • display_alias_fields Boolean
    compute='_compute_display_alias_fields'
  • inbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_inbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Inbound Payment Methods'
  • invoice_reference_model Selection
    default=_default_invoice_reference_model help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Odoo'), ('euro', 'European')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('none', 'Open'), ('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • journal_group_ids Many2many → account.journal.group
    check_company=True string='Journal Groups' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'expense')]" help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account'
  • name Char
    required=True string='Journal Name' translate=True
  • outbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_outbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'outbound')] help='Manual: Pay by any method outside of Odoo.\nCheck: Pay bills by check and print it from Odoo.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Outbound Payment Methods'
  • payment_sequence Boolean
    compute='_compute_payment_sequence' help="Check this box if you don't want to share the same sequence on payments and bank transactions posted on this journal" precompute=True readonly=False store=True string='Dedicated Payment Sequence'
  • profit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('income', 'income_other'))]" help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • restrict_mode_hash_table Boolean
    help='If ticked, the accounting entry or invoice receives a hash as soon as it is posted and cannot be modified anymore.' string='Lock Posted Entries with Hash'
  • sale_activity_note Text
    args: 'Activity Summary'
  • sale_activity_type_id Many2one → mail.activity.type
    default=False help='Activity will be automatically scheduled on payment due date, improving collection process.' string='Schedule Activity' args: 'mail.activity.type'
  • sale_activity_user_id Many2one → res.users
    help='Leave empty to assign the Salesperson of the invoice.' string='Activity User' args: 'res.users'
  • secure_sequence_id Many2one → ir.sequence
    check_company=True copy=False help='Sequence to use to ensure the securisation of data' readonly=True args: 'ir.sequence'
  • selected_payment_method_codes Char
    compute='_compute_selected_payment_method_codes'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_override_regex Text
    help='Technical field used to enforce complex sequence composition that the system would normally misunderstand.\nThis is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.\nThe prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).\ne.g: ^(?P<prefix1>.*?)(?P<year>\\d{4})(?P<prefix2>\\D*?)(?P<month>\\d{2})(?P<prefix3>\\D+?)(?P<seq>\\d+)(?P<suffix>\\D*?)$'
  • suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_suspense_account_id' domain="[('deprecated', '=', False), ('account_type', '=', 'asset_current')]" help='Bank statements transactions will be posted on the suspense account until the final reconciliation allowing finding the right account.' ondelete='restrict' readonly=False store=True string='Suspense Account'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
Public methods (9)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • action_new_transaction(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • create_document_from_attachment(self, attachment_ids)
    Create the invoices from files. :return: A action redirecting to account.move tree/form view.
  • get_next_bank_cash_default_code(self, journal_type, company, cache=None, protected_codes=False)
    @api.model
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (10)
  • color Integer
    default=0 args: 'Color Index'
  • current_statement_balance Monetary
    compute='_compute_current_statement_balance'
  • entries_count Integer
    compute='_compute_entries_count'
  • has_sequence_holes Boolean
    compute='_compute_has_sequence_holes'
  • has_statement_lines Boolean
    compute='_compute_current_statement_balance'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • last_statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' compute='_compute_last_bank_statement'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (11)
  • action_create_new(self)
  • action_create_vendor_bill(self)
    This function is called by the "Import" button of Vendor Bills, visible on dashboard if no bill has been created yet.
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_customer_payment(self)
    return action to create a customer payment
  • create_supplier_payment(self)
    return action to create a supplier payment
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_bank_difference_action(self)
  • open_payments_action(self, payment_type=False, mode='tree')
  • show_sequence_holes(self)
  • to_check_ids(self)

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • excluded_journal_ids Many2many → account.journal
    check_company=True string='Excluded Journals' args: 'account.journal'
  • name Char
    required=True translate=True args: 'Journal Group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • statement_line_ids One2many → account.bank.statement.line
    string='Statements' args: 'account.bank.statement.line', 'move_id'
Public methods (0)

No public methods.

New fields (1)
  • payment_ids One2many → account.payment
    string='Payments' args: 'account.payment', 'move_id'
Public methods (0)

No public methods.

New fields (104)
  • always_tax_exigible Boolean
    compute='_compute_always_tax_exigible' readonly=False store=True
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Total in Currency Signed'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_total_words Char
    compute='_compute_amount_total_words' string='Amount total in words'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • attachment_ids One2many → ir.attachment
    domain=[('res_model', '=', 'account.move')] string='Attachments' args: 'ir.attachment', 'res_id'
  • auto_post Selection
    copy=False default='no' help='Specify whether this entry is posted automatically on its accounting date, and any similar recurring invoices.' required=True selection=[('no', 'No'), ('at_date', 'At Date'), ('monthly', 'Monthly'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly')] string='Auto-post'
  • auto_post_origin_id Many2one → account.move
    comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='First recurring entry'
  • auto_post_until Date
    compute='_compute_auto_post_until' copy=False help='This recurring move will be posted up to and including this date.' readonly=False store=True string='Auto-post until'
  • bank_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank'
  • commercial_partner_id Many2one → res.partner
    check_company=True compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' index=True inverse='_inverse_company_id' precompute=True readonly=False store=True string='Company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' inverse='_inverse_currency_id' precompute=True readonly=False required=True store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    compute='_compute_date' copy=False index=True precompute=True readonly=False required=True store=True string='Date' tracking=True
  • delivery_date Date
    compute='_compute_delivery_date' copy=False readonly=False store=True string='Delivery Date'
  • direction_sign Integer
    compute='_compute_direction_sign' help='Multiplicator depending on the document type, to convert a price into a balance'
  • display_inactive_currency_warning Boolean
    compute='_compute_display_inactive_currency_warning'
  • display_qr_code Boolean
    compute='_compute_display_qr_code' string='Display QR-code'
  • duplicated_ref_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_duplicated_ref_ids'
  • fiscal_position_id Many2one → account.fiscal.position
    check_company=True compute='_compute_fiscal_position_id' help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' precompute=True readonly=False store=True string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • hide_post_button Boolean
    compute='_compute_hide_post_button' readonly=True
  • highest_name Char
    compute='_compute_highest_name'
  • inalterable_hash Char
    copy=False readonly=True string='Inalterability Hash'
  • incoterm_location Char
    compute='_compute_incoterm_location' readonly=False store=True string='Incoterm Location'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    comodel_name='account.cash.rounding' help='Defines the smallest coinage of the currency that can be used to pay by cash.' string='Cash Rounding Method'
  • invoice_date Date
    copy=False index=True string='Invoice/Bill Date'
  • invoice_date_due Date
    compute='_compute_invoice_date_due' copy=False index=True readonly=False store=True string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain'
  • invoice_has_outstanding Boolean
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' compute='_compute_incoterm' help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False store=True string='Incoterm'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('display_type', 'in', ('product', 'line_section', 'line_note'))] string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    copy=False help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Binary
    compute='_compute_payments_widget_to_reconcile_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' compute='_compute_invoice_payment_term_id' inverse='_inverse_invoice_payment_term_id' precompute=True readonly=False store=True string='Payment Terms'
  • invoice_payments_widget Binary
    compute='_compute_payments_widget_reconciled_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_pdf_report_file Binary
    attachment=True copy=False string='PDF File'
  • invoice_pdf_report_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> depends=['invoice_pdf_report_file'] string='PDF Attachment'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_invoice_default_sale_person' copy=False readonly=False store=True string='Salesperson' tracking=True
  • invoice_vendor_bill_id Many2one → account.move
    check_company=True help='Auto-complete from a past bill.' store=False string='Vendor Bill' args: 'account.move'
  • is_being_sent Boolean
    compute='_compute_is_being_sent' help='Is the move being sent asynchronously'
  • is_move_sent Boolean
    copy=False help='It indicates that the invoice/payment has been sent or the PDF has been generated.' readonly=True tracking=True
  • is_storno Boolean
    compute='_compute_is_storno' copy=False readonly=False store=True
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('id', 'in', suitable_journal_ids)]" inverse='_inverse_journal_id' precompute=True readonly=False required=True store=True string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True string='Journal Items' args: 'account.move.line', 'move_id'
  • made_sequence_hole Boolean
    compute='_compute_made_sequence_hole'
  • move_type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] string='Type' tracking=True
  • name Char
    compute='_compute_name' copy=False index='trigram' inverse='_inverse_name' readonly=False store=True string='Number' tracking=True
  • narration Html
    compute='_compute_narration' readonly=False store=True string='Terms and Conditions'
  • need_cancel_request Boolean
    compute='_compute_need_cancel_request'
  • needed_terms Binary
    compute='_compute_needed_terms' exportable=False
  • needed_terms_dirty Boolean
    compute='_compute_needed_terms'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' ondelete='restrict' readonly=False store=True string='Recipient Bank' tracking=True args: 'res.partner.bank'
  • partner_credit Monetary
    compute='_compute_partner_credit'
  • partner_credit_warning Text
    compute='_compute_partner_credit_warning' groups='account.group_account_invoice,account.group_account_readonly'
  • partner_id Many2one → res.partner
    change_default=True check_company=True index=True inverse='_inverse_partner_id' ondelete='restrict' readonly=False string='Partner' tracking=True args: 'res.partner'
  • partner_shipping_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_shipping_id' help='The delivery address will be used in the computation of the fiscal position.' precompute=True readonly=False store=True string='Delivery Address'
  • payment_id Many2one → account.payment
    check_company=True comodel_name='account.payment' copy=False index='btree_not_null' string='Payment'
  • payment_reference Char
    compute='_compute_payment_reference' copy=False help='The payment reference to set on journal items.' index='trigram' inverse='_inverse_payment_reference' readonly=False store=True string='Payment Reference' tracking=True
  • payment_state Selection
    compute='_compute_payment_state' copy=False readonly=True selection=PAYMENT_STATE_SELECTION store=True string='Payment Status' tracking=True
  • payment_term_details Binary
    compute='_compute_payment_term_details' exportable=False
  • posted_before Boolean
    copy=False
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for the payment of this invoice, when printing it. If left blank, the first available and usable method will be used.' selection=<expr> string='Payment QR-code'
  • quick_edit_mode Boolean
    compute='_compute_quick_edit_mode'
  • quick_edit_total_amount Monetary
    help='Use this field to encode the total amount of the invoice.\nOdoo will automatically create one invoice line with default values to match it.' string='Total (Tax inc.)'
  • quick_encoding_vals Json
    compute='_compute_quick_encoding_vals' exportable=False
  • ref Char
    copy=False index='trigram' string='Reference' tracking=True
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_id One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    check_company=True comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='Reversal of'
  • secure_sequence_number Integer
    copy=False index=True readonly=True string='Inalteralbility No Gap Sequence #'
  • send_and_print_values Json
    copy=False
  • show_delivery_date Boolean
    compute='_compute_show_delivery_date'
  • show_discount_details Boolean
    compute='_compute_show_payment_term_details'
  • show_name_warning Boolean
    store=False
  • show_payment_term_details Boolean
    compute='_compute_show_payment_term_details'
  • show_reset_to_draft_button Boolean
    compute='_compute_show_reset_to_draft_button'
  • show_update_fpos Boolean
    store=False string='Has Fiscal Position Changed'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_id Many2one
    related='statement_line_id.statement_id'
  • statement_line_id Many2one → account.bank.statement.line
    check_company=True comodel_name='account.bank.statement.line' copy=False index='btree_not_null' string='Statement Line'
  • string_to_hash Char
    compute='_compute_string_to_hash' readonly=True
  • suitable_journal_ids Many2many → account.journal
    compute='_compute_suitable_journal_ids' args: 'account.journal'
  • tax_calculation_rounding_method Selection
    readonly=True related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_created_move_ids One2many → account.move
    comodel_name='account.move' help='The cash basis entries created from the taxes on this entry, when reconciling its lines.' inverse_name='tax_cash_basis_origin_move_id' string='Cash Basis Entries'
  • tax_cash_basis_origin_move_id Many2one → account.move
    comodel_name='account.move' help='The journal entry from which this tax cash basis journal entry has been created.' index='btree_not_null' readonly=True string='Cash Basis Origin'
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    comodel_name='account.partial.reconcile' index='btree_not_null' string='Tax Cash Basis Entry of'
  • tax_country_code Char
    compute='_compute_tax_country_code'
  • tax_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_tax_country_id'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message'
  • tax_totals Binary
    compute='_compute_tax_totals' exportable=False help='Edit Tax amounts if you encounter rounding issues.' inverse='_inverse_tax_totals' string='Invoice Totals'
  • to_check Boolean
    help='If this checkbox is ticked, it means that the user was not sure of all the related information at the time of the creation of the move and that the move needs to be checked again.' string='To Check' tracking=True
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    related='invoice_user_id' string='User'
Public methods (44)
  • action_activate_currency(self)
  • action_duplicate(self)
  • action_export_zip(self)
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_open_business_doc(self)
  • action_post(self)
  • action_register_payment(self)
  • action_reverse(self)
  • action_send_and_print(self)
  • action_switch_move_type(self)
  • action_update_fpos_values(self)
  • button_cancel(self)
  • button_draft(self)
  • button_request_cancel(self)
    Hook allowing the localizations to request a cancellation from the government before cancelling the invoice.
  • button_set_checked(self)
  • check_field_access_rights(self, operation, field_names)
  • check_move_sequence_chain(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • get_invoice_pdf_report_attachment(self)
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • init(self)
  • is_entry(self)
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False)
  • is_sale_document(self, include_receipts=False)
  • js_assign_outstanding_line(self, line_id)
    Called by the 'payment' widget to reconcile a suggested journal item to the present invoice. :param line_id: The id of the line to reconcile with the current invoice.
  • js_remove_outstanding_partial(self, partial_id)
    Called by the 'payment' widget to remove a reconciled entry to the present invoice. :param partial_id: The id of an existing partial reconciled with the current invoice.
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • onchange(self, values, field_names, fields_spec)
  • open_created_caba_entries(self)
  • open_duplicated_ref_bill_view(self)
  • open_reconcile_view(self)
  • preview_invoice(self)
  • unlink(self)
  • write(self, vals)

New fields (75)
  • account_id Many2one → account.account
    auto_join=True check_company=True comodel_name='account.account' compute='_compute_account_id' domain="[('deprecated', '=', False), ('account_type', '!=', 'off_balance')]" index=False inverse='_inverse_account_id' ondelete='cascade' precompute=True readonly=False store=True string='Account' tracking=True
  • account_internal_group Selection
    related='account_id.internal_group'
  • account_root_id Many2one
    related='account_id.root_id' store=True string='Account Root'
  • account_type Selection
    related='account_id.account_type' string='Internal Type'
  • amount_currency Monetary
    compute='_compute_amount_currency' group_operator=None help='The amount expressed in an optional other currency if it is a multi-currency entry.' inverse='_inverse_amount_currency' precompute=True readonly=False store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_compute_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_compute_amount_residual' group_operator=None help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_distribution Json
    inverse='_inverse_analytic_distribution'
  • analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='move_line_id' string='Analytic lines'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' precompute=True readonly=False store=True string='Balance' tracking=True
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one
    precompute=True readonly=True related='move_id.company_currency_id' store=True string='Company Currency'
  • company_id Many2one
    index=True precompute=True readonly=True related='move_id.company_id' store=True
  • compute_all_tax Binary
    compute='_compute_all_tax' exportable=False
  • compute_all_tax_dirty Boolean
    compute='_compute_all_tax'
  • credit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_credit' precompute=True store=True string='Credit'
  • cumulated_balance Monetary
    compute='_compute_cumulated_balance' currency_field='company_currency_id' exportable=False help='Cumulated balance depending on the domain and the order chosen in the view.' string='Cumulated Balance'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' precompute=True readonly=False required=True store=True string='Currency'
  • currency_rate Float
    compute='_compute_currency_rate' help='Currency rate from company currency to document currency.'
  • date Date
    copy=False group_operator='min' related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date' tracking=True
  • debit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_debit' precompute=True store=True string='Debit'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • discount_allocation_dirty Boolean
    compute='_compute_discount_allocation_needed'
  • discount_allocation_key Binary
    compute='_compute_discount_allocation_key' exportable=False
  • discount_allocation_needed Binary
    compute='_compute_discount_allocation_needed' exportable=False
  • discount_amount_currency Monetary
    currency_field='currency_id' group_operator=None store=True string='Discount amount in Currency'
  • discount_balance Monetary
    currency_field='company_currency_id' store=True string='Discount Balance'
  • discount_date Date
    help='Last date at which the discounted amount must be paid in order for the Early Payment Discount to be granted' store=True string='Discount Date'
  • display_type Selection
    compute='_compute_display_type' precompute=True readonly=False required=True selection=[('product', 'Product'), ('cogs', 'Cost of Goods Sold'), ('tax', 'Tax'), ('discount', 'Discount'), ('rounding', 'Rounding'), ('payment_term', 'Payment Term'), ('line_section', 'Section'), ('line_note', 'Note'), ('epd', 'Early Payment Discount')] store=True
  • epd_dirty Boolean
    compute='_compute_epd_needed'
  • epd_key Binary
    compute='_compute_epd_key' exportable=False
  • epd_needed Binary
    compute='_compute_epd_needed' exportable=False
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' readonly=True string='Matching'
  • group_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' index='btree_not_null' string='Originator Group of Taxes'
  • invoice_date Date
    copy=False group_operator='min' related='move_id.invoice_date' store=True
  • is_account_reconcile Boolean
    related='account_id.reconcile' string='Account Reconcile'
  • is_refund Boolean
    compute='_compute_is_refund'
  • is_same_currency Boolean
    compute='_compute_same_currency'
  • is_storno Boolean
    help='Utility field to express whether the journal item is subject to storno accounting' related='move_id.is_storno' string='Company Storno Accounting'
  • journal_id Many2one
    copy=False index=True precompute=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Credit journal items that are matched with this journal item.' inverse_name='debit_move_id' readonly=True string='Matched Credits'
  • matched_debit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Debit journal items that are matched with this journal item.' inverse_name='credit_move_id' readonly=True string='Matched Debits'
  • matching_number Char
    copy=False help="Matching number for this line, 'P' if it is only partially reconcile, or the name of the full reconcile if it exists." index='btree' string='Matching #'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • move_name Char
    index='btree' related='move_id.name' store=True string='Number'
  • move_type Selection
    related='move_id.move_type'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True string='Label' tracking=True
  • parent_state Selection
    related='move_id.state' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_id' inverse='_inverse_partner_id' ondelete='restrict' precompute=True readonly=False store=True string='Partner'
  • payment_date Date
    compute='_compute_payment_date' search='_search_payment_date' string='Payment Date'
  • payment_id Many2one → account.payment
    auto_join=True comodel_name='account.payment' help='The payment that created this entry' index='btree_not_null' related='move_id.payment_id' store=True string='Originator Payment'
  • price_subtotal Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Subtotal'
  • price_total Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Total'
  • price_unit Float
    compute='_compute_price_unit' digits='Product Price' precompute=True readonly=False store=True string='Unit Price'
  • product_id Many2one → product.product
    check_company=True comodel_name='product.product' index=True inverse='_inverse_product_id' ondelete='restrict' string='Product'
  • product_uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_product_uom_id' domain="[('category_id', '=', product_uom_category_id)]" ondelete='restrict' precompute=True readonly=False store=True string='Unit of Measure'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit of Measure' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' precompute=True readonly=False store=True string='Quantity'
  • reconcile_model_id Many2one → account.reconcile.model
    check_company=True comodel_name='account.reconcile.model' copy=False readonly=True string='Reconciliation Model'
  • reconciled Boolean
    compute='_compute_amount_residual' store=True
  • ref Char
    copy=False index='trigram' related='move_id.ref' store=True
  • sequence Integer
    compute='_compute_sequence' precompute=True readonly=False store=True
  • statement_id Many2one
    auto_join=True copy=False help='The bank statement used for bank reconciliation' index='btree_not_null' related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    auto_join=True comodel_name='account.bank.statement.line' help='The statement line that created this entry' index='btree_not_null' related='move_id.statement_line_id' store=True string='Originator Statement Line'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True string='Base Amount'
  • tax_calculation_rounding_method Selection
    readonly=True related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_group_id Many2one
    precompute=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' compute='_compute_tax_ids' context={'active_test': False} precompute=True readonly=False store=True string='Taxes' tracking=True
  • tax_key Binary
    compute='_compute_tax_key' exportable=False
  • tax_line_id Many2one → account.tax
    comodel_name='account.tax' help='Indicates that this journal item is a tax line' ondelete='restrict' precompute=True related='tax_repartition_line_id.tax_id' store=True string='Originator Tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    check_company=True comodel_name='account.tax.repartition.line' help='Tax distribution line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Distribution Line'
  • tax_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' context={'active_test': False} help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags' tracking=True
  • tax_tag_invert Boolean
    compute='_compute_tax_tag_invert' copy=False readonly=False store=True string='Invert Tags'
  • term_key Binary
    compute='_compute_term_key' exportable=False
Public methods (20)
  • action_automatic_entry(self, default_action=None)
  • action_open_business_doc(self)
  • action_register_payment(self)
    Open the account.payment.register wizard to pay the selected journal items. :return: An action opening the account.payment.register wizard.
  • check_field_access_rights(self, operation, field_names)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • flush_model(self, fnames=None)
  • flush_recordset(self, fnames=None)
  • get_import_templates(self)
    @api.model
  • get_views(self, views, options=None)
    @api.model
  • init(self)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • invalidate_model(self, fnames=None, flush=True)
  • invalidate_recordset(self, fnames=None, flush=True)
  • open_reconcile_view(self)
  • reconcile(self)
    Reconcile the current move lines all together.
  • remove_move_reconcile(self)
    Undo a reconciliation
  • search_fetch(self, domain, field_names, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • available_journal_ids Many2many → account.journal
    compute='_compute_available_journal_ids' args: 'account.journal'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today string='Reversal date'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' help='If empty, uses the journal of the journal entry to be reversed.' readonly=False required=True store=True string='Journal'
  • move_ids Many2many → account.move
    domain=[('state', '=', 'posted')] args: 'account.move', 'account_move_reversal_move', 'reversal_id', 'move_id'
  • move_type Char
    compute='_compute_from_moves'
  • new_move_ids Many2many → account.move
    args: 'account.move', 'account_move_reversal_new_move', 'reversal_id', 'new_move_id'
  • reason Char
    string='Reason displayed on Credit Note'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (4)
  • default_get(self, fields)
    @api.model
  • modify_moves(self)
  • refund_moves(self)
  • reverse_moves(self, is_modify=False)

New fields (18)
  • attachments_not_supported Json
    compute='_compute_attachments_not_supported'
  • checkbox_download Boolean
    compute='_compute_checkbox_download' readonly=False store=True string='Download'
  • checkbox_send_mail Boolean
    compute='_compute_checkbox_send_mail' readonly=False store=True string='Email'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' store=True
  • display_attachments_widget Boolean
    compute='_compute_display_attachments_widget'
  • display_mail_composer Boolean
    compute='_compute_send_mail_extra_fields'
  • enable_download Boolean
    compute='_compute_enable_download'
  • enable_send_mail Boolean
    compute='_compute_enable_send_mail'
  • mail_attachments_widget Json
    compute='_compute_mail_attachments_widget' readonly=False store=True
  • mail_body Html
    compute='_compute_mail_subject_body' readonly=False sanitize_style=True store=True string='Contents'
  • mail_lang Char
    compute='_compute_mail_lang' string='Lang'
  • mail_partner_ids Many2many → res.partner
    comodel_name='res.partner' compute='_compute_mail_partner_ids' readonly=False store=True string='Recipients'
  • mail_subject Char
    compute='_compute_mail_subject_body' readonly=False store=True string='Subject'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain="[('model', '=', 'account.move')]" string='Use template'
  • mode Selection
    compute='_compute_mode' readonly=False selection=[('invoice_single', 'Invoice Single'), ('invoice_multi', 'Invoice Multi')] store=True
  • move_ids Many2many → account.move
    comodel_name='account.move'
  • send_mail_readonly Boolean
    compute='_compute_send_mail_extra_fields'
  • send_mail_warning_message Json
    compute='_compute_send_mail_extra_fields'
Public methods (3)
  • action_open_partners_without_email(self, res_ids=None)
  • action_send_and_print(self, force_synchronous=False, allow_fallback_pdf=False, **kwargs)
    Create the documents and send them to the end customers. If we are sending multiple invoices and not downloading them we will process the moves asynchronously. :param force_synchronous: Flag indicating if the method should be done synchronously. :param allow_fallback_pdf: In case of error when generating the documents for invoices, generate a proforma PDF report instead.
  • default_get(self, fields_list)
    @api.model

New fields (12)
  • amount Monetary
    currency_field='company_currency_id' help='Always positive amount concerned by this matching expressed in the company currency.'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' help='Utility field to express amount currency' related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' precompute=True readonly=False store=True string='Company'
  • credit_amount_currency Monetary
    currency_field='credit_currency_id' help='Always positive amount concerned by this matching expressed in the credit line foreign currency.'
  • credit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='credit_move_id.currency_id' store=True string='Currency of the credit journal item.'
  • credit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • debit_amount_currency Monetary
    currency_field='debit_currency_id' help='Always positive amount concerned by this matching expressed in the debit line foreign currency.'
  • debit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='debit_move_id.currency_id' store=True string='Currency of the debit journal item.'
  • debit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • exchange_move_id Many2one → account.move
    comodel_name='account.move' index='btree_not_null'
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' string='Full Reconcile'
  • max_date Date
    compute='_compute_max_date' precompute=True store=True string='Max Date of Matched Lines'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (34)
  • amount Monetary
    currency_field='currency_id'
  • amount_company_currency_signed Monetary
    compute='_compute_amount_company_currency_signed' currency_field='company_currency_id' store=True
  • amount_signed Monetary
    compute='_compute_amount_signed' currency_field='currency_id' help='Negative value of amount field if payment_type is outbound' tracking=True
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_destination_account_id' domain="[('account_type', 'in', ('asset_receivable', 'liability_payable'))]" readonly=False store=True string='Destination Account'
  • destination_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', 'in', ('bank','cash')), ('id', '!=', journal_id)]" string='Destination Journal'
  • is_internal_transfer Boolean
    compute='_compute_is_internal_transfer' readonly=False store=True string='Internal Transfer' tracking=True
  • is_matched Boolean
    compute='_compute_reconciliation_status' store=True string='Is Matched With a Bank Statement'
  • is_reconciled Boolean
    compute='_compute_reconciliation_status' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • outstanding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_outstanding_account_id' index='btree_not_null' store=True string='Outstanding Account'
  • paired_internal_transfer_payment_id Many2one → account.payment
    copy=False help='When an internal transfer is posted, a paired payment is created. They are cross referenced through this field' index='btree_not_null' args: 'account.payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" ondelete='restrict' readonly=False store=True string='Recipient Bank Account' tracking=True args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_id' domain="['|', ('parent_id','=', False), ('is_company','=', True)]" ondelete='restrict' readonly=False store=True string='Customer/Vendor' tracking=True
  • partner_type Selection
    default='customer' required=True tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_method_id Many2one
    related='payment_method_line_id.payment_method_id' store=True string='Method' tracking=True
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' copy=False domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' string='Payment Reference' tracking=True
  • payment_type Selection
    default='inbound' required=True string='Payment Type' tracking=True args: [('outbound', 'Send'), ('inbound', 'Receive')]
  • qr_code Html
    compute='_compute_qr_code' string='QR Code URL'
  • reconciled_bill_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Bills' args: 'account.move'
  • reconciled_bills_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Bills'
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Invoices'
  • reconciled_invoices_type Selection
    compute='_compute_stat_buttons_from_reconciliation' args: [('credit_note', 'Credit Note'), ('invoice', 'Invoice')]
  • reconciled_statement_line_ids Many2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_stat_buttons_from_reconciliation' help='Statements lines matched to this payment' string='Reconciled Statement Lines'
  • reconciled_statement_lines_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Statement Lines'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
Public methods (15)
  • action_cancel(self)
    draft -> cancelled
  • action_draft(self)
    posted -> draft
  • action_open_destination_journal(self)
    Redirect the user to this destination journal. :return: An action on account.move.
  • action_post(self)
    draft -> posted
  • button_open_bills(self)
    Redirect the user to the bill(s) paid by this payment. :return: An action on account.move.
  • button_open_invoices(self)
    Redirect the user to the invoice(s) paid by this payment. :return: An action on account.move.
  • button_open_journal_entry(self)
    Redirect the user to this payment journal. :return: An action on account.move.
  • button_open_statement_lines(self)
    Redirect the user to the statement line(s) reconciled to this payment. :return: An action on account.move.
  • button_request_cancel(self)
  • create(self, vals_list)
    @api.model_create_multi
  • mark_as_sent(self)
  • new(self, values=None, origin=None, ref=None)
  • unlink(self)
  • unmark_as_sent(self)
  • write(self, vals)

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True selection=[('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • available_payment_method_ids Many2many
    related='journal_id.available_payment_method_ids'
  • code Char
    related='payment_method_id.code'
  • company_id Many2one
    related='journal_id.company_id'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' ondelete='cascade'
  • name Char
    compute='_compute_name' readonly=False store=True
  • payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="[('deprecated', '=', False), '|', ('account_type', 'in', ('asset_current', 'liability_current')), ('id', '=', parent.default_account_id)]" ondelete='restrict'
  • payment_method_id Many2one → account.payment.method
    comodel_name='account.payment.method' domain="[('payment_type', '=?', payment_type), ('id', 'in', available_payment_method_ids)]" ondelete='cascade' required=True string='Payment Method'
  • payment_type Selection
    related='payment_method_id.payment_type'
  • sequence Integer
    default=10
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
    Payment method lines which are used in a payment should not be deleted from the database, only the link betweend them and the journals must be broken.
  • write(self, vals)

New fields (36)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False store=True
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • can_edit_wizard Boolean
    compute='_compute_from_lines' copy=False store=True
  • can_group_payments Boolean
    compute='_compute_from_lines' copy=False store=True
  • communication Char
    compute='_compute_communication' readonly=False store=True string='Memo'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    compute='_compute_from_lines' copy=False store=True args: 'res.company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • early_payment_discount_mode Boolean
    compute='_compute_early_payment_discount_mode'
  • group_payment Boolean
    compute='_compute_group_payment' help='Only one payment will be created by partner (bank), instead of one per bill.' readonly=False store=True string='Group Payments'
  • hide_writeoff_section Boolean
    compute='_compute_hide_writeoff_section'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' domain="[('id', 'in', available_journal_ids)]" precompute=True readonly=False store=True
  • line_ids Many2many → account.move.line
    copy=False readonly=True string='Journal items' args: 'account.move.line', 'account_payment_register_move_line_rel', 'wizard_id', 'line_id'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account'
  • partner_id Many2one → res.partner
    compute='_compute_from_lines' copy=False ondelete='restrict' store=True string='Customer/Vendor' args: 'res.partner'
  • partner_type Selection
    compute='_compute_from_lines' copy=False store=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference'
  • payment_difference_handling Selection
    compute='_compute_payment_difference_handling' readonly=False selection=[('open', 'Keep open'), ('reconcile', 'Mark as fully paid')] store=True string='Payment Difference Handling'
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_type Selection
    compute='_compute_from_lines' copy=False store=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • qr_code Html
    compute='_compute_qr_code' string='QR Code URL'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • source_amount Monetary
    compute='_compute_from_lines' copy=False currency_field='company_currency_id' store=True string='Amount to Pay (company currency)'
  • source_amount_currency Monetary
    compute='_compute_from_lines' copy=False currency_field='source_currency_id' store=True string='Amount to Pay (foreign currency)'
  • source_currency_id Many2one → res.currency
    compute='_compute_from_lines' copy=False store=True string='Source Currency' args: 'res.currency'
  • total_payments_amount Integer
    compute='_compute_trust_values'
  • untrusted_bank_ids Many2many → res.partner.bank
    compute='_compute_trust_values' args: 'res.partner.bank'
  • untrusted_payments_count Integer
    compute='_compute_trust_values'
  • writeoff_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="[('deprecated', '=', False)]" string='Difference Account'
  • writeoff_is_exchange_account Boolean
    compute='_compute_writeoff_is_exchange_account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (3)
  • action_create_payments(self)
  • action_open_untrusted_bank_accounts(self)
  • default_get(self, fields_list)
    @api.model

New fields (18)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' args: 'res.currency'
  • discount_days Integer
    default=10 help='Number of days before the early payment proposition expires' string='Discount Days'
  • discount_percentage Float
    default=2.0 help='Early Payment Discount granted for this payment term' string='Discount %'
  • display_on_invoice Boolean
    default=True string='Show installment dates'
  • early_discount Boolean
    string='Early Discount'
  • early_pay_discount_computation Selection
    compute='_compute_discount_computation' readonly=False store=True string='Cash Discount Tax Reduction' args: [('included', 'On early payment'), ('excluded', 'Never'), ('mixed', 'Always (upon invoice)')]
  • example_amount Monetary
    currency_field='currency_id' default=1000 readonly=True store=False
  • example_date Date
    default=_default_example_date store=False string='Date example'
  • example_invalid Boolean
    compute='_compute_example_invalid'
  • example_preview Html
    compute='_compute_example_preview'
  • example_preview_discount Html
    compute='_compute_example_preview'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Html
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • copy(self, default=None)
  • unlink(self)

New fields (5)
  • delay_type Selection
    default='days_after' required=True args: [('days_after', 'Days after invoice date'), ('days_after_end_of_month', 'Days after end of month'), ('days_after_end_of_next_month', 'Days after end of next month')]
  • nb_days Integer
    compute='_compute_days' readonly=False store=True string='Days'
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • value Selection
    default='percent' help='Select here the kind of valuation related to this payment terms line.' required=True args: [('percent', 'Percent'), ('fixed', 'Fixed')]
  • value_amount Float
    compute='_compute_value_amount' digits='Payment Terms' help='For percent enter a ratio between 0-100.' readonly=False store=True string='Due'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (35)
  • active Boolean
    default=True
  • allow_payment_tolerance Boolean
    default=True help='Difference accepted in case of underpayment.' string='Payment Tolerance' tracking=True
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate' tracking=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • decimal_separator Char
    default=<expr> help='Every character that is nor a digit nor this separator will be removed from the matching string' tracking=True
  • line_ids One2many → account.reconcile.model.line
    copy=True args: 'account.reconcile.model.line', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount Condition' tracking=True
  • match_amount_max Float
    string='Amount Max Parameter' tracking=True
  • match_amount_min Float
    string='Amount Min Parameter' tracking=True
  • match_journal_ids Many2many → account.journal
    check_company=True domain="[('type', 'in', ('bank', 'cash'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals Availability' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label' tracking=True
  • match_label_param Char
    string='Label Parameter' tracking=True
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Received'), ('amount_paid', 'Paid'), ('both', 'Paid/Received')] string='Amount Type' tracking=True
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note' tracking=True
  • match_note_param Char
    string='Note Parameter' tracking=True
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner is Set' tracking=True
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Matching categories' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Matching partners' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency' tracking=True
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference" tracking=True
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference" tracking=True
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference" tracking=True
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type' tracking=True
  • match_transaction_type_param Char
    string='Transaction Type Parameter' tracking=True
  • matching_order Selection
    default='old_first' required=True selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')] tracking=True
  • name Char
    required=True string='Name' translate=True
  • number_entries Integer
    compute='_compute_number_entries' string='Number of entries related to this model'
  • partner_mapping_line_ids One2many → account.reconcile.model.partner.mapping
    comodel_name='account.reconcile.model.partner.mapping' help='The mapping uses regular expressions.\n- To Match the text at the beginning of the line (in label or notes), simply fill in your text.\n- To Match the text anywhere (in label or notes), put your text between .*\n e.g: .*N°48748 abc123.*' inverse_name='model_id' string='Partner Mapping Lines'
  • past_months_limit Integer
    default=18 help='Number of months in the past to consider entries from when applying this model.' string='Search Months Limit' tracking=True
  • payment_tolerance_param Float
    compute='_compute_payment_tolerance_param' help='The sum of total residual amount propositions matches the statement line amount under this amount/percentage.' readonly=False store=True string='Gap' tracking=True
  • payment_tolerance_type Selection
    default='percentage' help='The sum of total residual amount propositions and the statement line amount allowed gap type.' required=True selection=[('percentage', 'in percentage'), ('fixed_amount', 'in amount')] tracking=True
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Button to generate counterpart entry'), ('writeoff_suggestion', 'Rule to suggest counterpart entry'), ('invoice_matching', 'Rule to match invoices/bills')] string='Type' tracking=True
  • sequence Integer
    default=10 required=True
  • show_decimal_separator Boolean
    compute='_compute_show_decimal_separator'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (2)
  • action_reconcile_stat(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('account_type', '!=', 'off_balance')]" ondelete='cascade' required=True string='Account' args: 'account.account'
  • allow_payment_tolerance Boolean
    related='model_id.allow_payment_tolerance'
  • amount Float
    compute='_compute_float_amount' store=True string='Float Amount'
  • amount_string Char
    default='100' help='Value for the amount of the writeoff line\n * Percentage: Percentage of the balance, between 0 and 100.\n * Fixed: The fixed value of the writeoff. The amount will count as a debit if it is negative, as a credit if it is positive.\n * From Label: There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)' required=True string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('percentage_st_line', 'Percentage of statement line'), ('regex', 'From label')]
  • company_id Many2one
    related='model_id.company_id' store=True
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general')]" ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label' translate=True
  • model_id Many2one → account.reconcile.model
    ondelete='cascade' readonly=True args: 'account.reconcile.model'
  • payment_tolerance_param Float
    related='model_id.payment_tolerance_param'
  • rule_type Selection
    related='model_id.rule_type'
  • sequence Integer
    default=10 required=True
  • show_force_tax_included Boolean
    compute='_compute_show_force_tax_included'
  • tax_ids Many2many → account.tax
    check_company=True ondelete='restrict' string='Taxes' args: 'account.tax'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one
    related='model_id.company_id'
  • model_id Many2one → account.reconcile.model
    comodel_name='account.reconcile.model' ondelete='cascade' readonly=True required=True
  • narration_regex Char
    string='Find Text in Notes'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' ondelete='cascade' required=True string='Partner'
  • payment_ref_regex Char
    string='Find Text in Label'
Public methods (1)
  • validate_regex(self)
    @api.constrains('narration_regex', 'payment_ref_regex')

New fields (33)
  • active Boolean
    default=True string='Active'
  • availability_condition Selection
    compute='_compute_default_availability_condition' readonly=False selection=[('country', 'Country Matches'), ('coa', 'Chart of Accounts Matches'), ('always', 'Always')] store=True string='Availability'
  • chart_template Selection
    selection=<expr> string='Chart of Accounts'
  • column_ids One2many → account.report.column
    comodel_name='account.report.column' inverse_name='report_id' string='Columns'
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • default_opening_date_filter Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('this_year', 'This Year'), ('this_quarter', 'This Quarter'), ('this_month', 'This Month'), ('today', 'Today'), ('last_month', 'Last Month'), ('last_quarter', 'Last Quarter'), ('last_year', 'Last Year'), ('this_tax_period', 'This Tax Period'), ('last_tax_period', 'Last Tax Period')] store=True string='Default Opening'
  • filter_account_type Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('both', 'Payable and receivable'), ('payable', 'Payable'), ('receivable', 'Receivable'), ('disabled', 'Disabled')] store=True string='Account Types'
  • filter_aml_ir_filters Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] help='If activated, user-defined filters on journal items can be selected on this report' readonly=False store=True string='Favorite Filters'
  • filter_analytic Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Analytic Filter'
  • filter_date_range Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Date Range'
  • filter_fiscal_position Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Filter Multivat'
  • filter_growth_comparison Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Growth Comparison'
  • filter_hide_0_lines Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Hide lines at 0'
  • filter_hierarchy Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Account Groups'
  • filter_journals Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Journals'
  • filter_multi_company Selection
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False selection=[('disabled', 'Disabled'), ('selector', 'Use Company Selector'), ('tax_units', 'Use Tax Units')] store=True string='Multi-Company'
  • filter_partner Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Partners'
  • filter_period_comparison Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Period Comparison'
  • filter_show_draft Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Draft Entries'
  • filter_unfold_all Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Unfold All'
  • filter_unreconciled Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Unreconciled Entries'
  • line_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='report_id' string='Lines'
  • load_more_limit Integer
    string='Load More Limit'
  • name Char
    required=True string='Name' translate=True
  • only_tax_exigible Boolean
    compute=<expr> depends=['root_report_id', 'section_main_report_ids'] readonly=False store=True string='Only Tax Exigible Lines'
  • prefix_groups_threshold Integer
    string='Prefix Groups Threshold'
  • root_report_id Many2one → account.report
    comodel_name='account.report' help='The report this report is a variant of.' string='Root Report'
  • search_bar Boolean
    string='Search Bar'
  • section_main_report_ids Many2many → account.report
    column1='sub_report_id' column2='main_report_id' comodel_name='account.report' relation='account_report_section_rel' string='Section Of'
  • section_report_ids Many2many → account.report
    column1='main_report_id' column2='sub_report_id' comodel_name='account.report' relation='account_report_section_rel' string='Sections'
  • sequence Integer
    string='Sequence'
  • use_sections Boolean
    compute='_compute_use_sections' help='Create a structured report with multiple sections for convenient navigation and simultaneous printing.' readonly=False store=True string='Composite Report'
  • variant_report_ids One2many → account.report
    comodel_name='account.report' inverse_name='root_report_id' string='Variants'
Public methods (2)
  • copy(self, default=None)
    Copy the whole financial report hierarchy by duplicating each line recursively. :param default: Default values. :return: The copied account.report record.
  • write(self, vals)

New fields (8)
  • blank_if_zero Boolean
    help='When checked, 0 values will not show in this column.' string='Blank if Zero'
  • custom_audit_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' string='Custom Audit Action'
  • expression_label Char
    required=True string='Expression Label'
  • figure_type Selection
    default='monetary' required=True selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • name Char
    required=True string='Name' translate=True
  • report_id Many2one → account.report
    comodel_name='account.report' string='Report'
  • sequence Integer
    string='Sequence'
  • sortable Boolean
    string='Sortable'
Public methods (0)

No public methods.

New fields (12)
  • auditable Boolean
    compute='_compute_auditable' readonly=False store=True string='Auditable'
  • blank_if_zero Boolean
    help="When checked, 0 values will not show when displaying this expression's value." string='Blank if Zero'
  • carryover_target Char
    help='Formula in the form line_code.expression_label. This allows setting the target of the carryover for this expression (on a _carryover_*-labeled expression), in case it is different from the parent line.' string='Carry Over To'
  • date_scope Selection
    default='strict_range' required=True selection=[('from_beginning', 'From the very start'), ('from_fiscalyear', 'From the start of the fiscal year'), ('to_beginning_of_fiscalyear', 'At the beginning of the fiscal year'), ('to_beginning_of_period', 'At the beginning of the period'), ('normal', 'According to each type of account'), ('strict_range', 'Strictly on the given dates'), ('previous_tax_period', 'From previous tax period')] string='Date Scope'
  • engine Selection
    required=True selection=[('domain', 'Odoo Domain'), ('tax_tags', 'Tax Tags'), ('aggregation', 'Aggregate Other Formulas'), ('account_codes', 'Prefix of Account Codes'), ('external', 'External Value'), ('custom', 'Custom Python Function')] string='Computation Engine'
  • figure_type Selection
    selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • formula Char
    required=True string='Formula'
  • green_on_positive Boolean
    default=True string='Is Growth Good when Positive'
  • label Char
    required=True string='Label'
  • report_line_id Many2one → account.report.line
    comodel_name='account.report.line' ondelete='cascade' required=True string='Report Line'
  • report_line_name Char
    related='report_line_id.name' string='Report Line Name'
  • subformula Char
    string='Subformula'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (12)
  • carryover_origin_expression_label Char
    string='Origin Expression Label'
  • carryover_origin_report_line_id Many2one → account.report.line
    comodel_name='account.report.line' string='Origin Line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    required=True
  • foreign_vat_fiscal_position_id Many2one → account.fiscal.position
    check_company=True comodel_name='account.fiscal.position' domain="[('country_id', '=', report_country_id), ('foreign_vat', '!=', False)]" help='The foreign fiscal position for which this external value is made.' string='Fiscal position'
  • name Char
    required=True
  • report_country_id Many2one
    related='target_report_line_id.report_id.country_id' string='Country'
  • target_report_expression_id Many2one → account.report.expression
    comodel_name='account.report.expression' ondelete='cascade' required=True string='Target Expression'
  • target_report_expression_label Char
    related='target_report_expression_id.label' string='Target Expression Label'
  • target_report_line_id Many2one
    related='target_report_expression_id.report_line_id' string='Target Line'
  • text_value Char
    string='Text Value'
  • value Float
    string='Numeric Value'
Public methods (0)

No public methods.

New fields (19)
  • account_codes_formula Char
    help='Internal field to shorten expression_ids creation for the account_codes engine' inverse='_inverse_account_codes_formula' store=False string='Account Codes Formula Shortcut'
  • action_id Many2one → ir.actions.actions
    comodel_name='ir.actions.actions' help='Setting this field will turn the line into a link, executing the action when clicked.' string='Action'
  • aggregation_formula Char
    help='Internal field to shorten expression_ids creation for the aggregation engine' inverse='_inverse_aggregation_formula' store=False string='Aggregation Formula Shortcut'
  • children_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='parent_id' string='Child Lines'
  • code Char
    help='Unique identifier for this line.' string='Code'
  • domain_formula Char
    help='Internal field to shorten expression_ids creation for the domain engine' inverse='_inverse_domain_formula' store=False string='Domain Formula Shortcut'
  • expression_ids One2many → account.report.expression
    comodel_name='account.report.expression' inverse_name='report_line_id' string='Expressions'
  • external_formula Char
    help='Internal field to shorten expression_ids creation for the external engine' inverse='_inverse_external_formula' store=False string='External Formula Shortcut'
  • foldable Boolean
    help="By default, we always unfold the lines that can be. If this is checked, the line won't be unfolded by default, and a folding button will be displayed." string='Foldable'
  • groupby Char
    help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' string='Group By'
  • hide_if_zero Boolean
    help='This line and its children will be hidden when all of their columns are 0.' string='Hide if Zero'
  • hierarchy_level Integer
    compute='_compute_hierarchy_level' precompute=True readonly=False recursive=True required=True store=True string='Level'
  • name Char
    required=True string='Name' translate=True
  • parent_id Many2one → account.report.line
    comodel_name='account.report.line' ondelete='set null' string='Parent Line'
  • print_on_new_page Boolean
    help='When checked this line and everything after it will be printed on a new page.' args: 'Print On New Page'
  • report_id Many2one → account.report
    comodel_name='account.report' compute='_compute_report_id' ondelete='cascade' precompute=True readonly=False recursive=True required=True store=True string='Parent Report'
  • sequence Integer
    string='Sequence'
  • tax_tags_formula Char
    help='Internal field to shorten expression_ids creation for the tax_tags engine' inverse='_inverse_aggregation_tax_formula' store=False string='Tax Tags Formula Shortcut'
  • user_groupby Char
    compute='_compute_user_groupby' help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' precompute=True readonly=False store=True string='User Group By'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    help='Date (inclusive) to which the numbers are resequenced. If not set, all Journal Entries up to the end of the period are resequenced.'
  • first_date Date
    help='Date (inclusive) from which the numbers are resequenced.'
  • first_name Char
    compute='_compute_first_name' readonly=False required=True store=True string='First New Sequence'
  • move_ids Many2many → account.move
    args: 'account.move'
  • new_values Text
    compute='_compute_new_values'
  • ordering Selection
    default='keep' required=True args: [('keep', 'Keep current order'), ('date', 'Reorder by accounting date')]
  • preview_moves Text
    compute='_compute_preview_moves'
  • sequence_number_reset Char
    compute='_compute_sequence_number_reset'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • resequence(self)

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company'
  • name Char
  • parent_id Many2one → account.root
    args: 'account.root'
Public methods (1)
  • init(self)

New fields (6)
  • bank_bic Char
    readonly=False related='bank_id.bic' string='Bic'
  • company_id Many2one → res.company
    compute='_compute_company_id' required=True args: 'res.company'
  • linked_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_linked_journal_id' domain=[('type', '=', 'bank'), ('bank_account_id', '=', False)] inverse='set_linked_journal_id' string='Journal'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account Integer
    default=<expr>
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (27)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0.0 digits=(16, 4) required=True tracking=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage of Price: The tax amount is a % of the price:\n e.g 100 * (1 + 10%) = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage of Price Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation' tracking=True
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="\n [\n ('deprecated', '=', False),\n ('account_type', 'not in', ('asset_receivable', 'liability_payable'))\n ]\n " help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    check_company=True string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • country_code Char
    readonly=True related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='The country for which this tax is applicable.' precompute=True readonly=False required=True store=True string='Country'
  • description Char
    string='Description' translate=True
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Base of Subsequent Taxes' tracking=True
  • invoice_label Char
    string='Label on Invoices' translate=True
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' compute='_compute_invoice_repartition_line_ids' domain=[('document_type', '=', 'invoice')] help='Distribution when the tax is used on an invoice' inverse_name='tax_id' readonly=False store=True string='Distribution for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes' tracking=True
  • is_used Boolean
    compute='_compute_is_used' string='Tax used'
  • name Char
    required=True string='Tax Name' tracking=True translate=True
  • name_searchable Char
    help="This dummy field lets us use another search method on the field 'name'.This allows more freedom on how to search the 'name' compared to 'filter_domain'.See '_search_name' and '_parse_name_search' for why this is not possible with 'filter_domain'." search='_search_name' store=False
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price' tracking=True
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' compute='_compute_refund_repartition_line_ids' domain=[('document_type', '=', 'refund')] help='Distribution when the tax is used on a refund' inverse_name='tax_id' readonly=False store=True string='Distribution for Refund Invoices'
  • repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True inverse_name='tax_id' string='Distribution'
  • repartition_lines_str Char
    compute='_compute_repartition_lines_str' string='Repartition Lines' tracking=True
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Exigibility' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    comodel_name='account.tax.group' compute='_compute_tax_group_id' domain="[('country_id', 'in', (country_id, False))]" precompute=True readonly=False required=True store=True string='Tax Group'
  • tax_scope Selection
    string='Tax Scope' args: [('service', 'Services'), ('consu', 'Goods')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note: 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Type' tracking=True args: TYPE_TAX_USE
Public methods (11)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, fixed_multiplicator=1)
    Compute all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] :param price_unit: The unit price of the line to compute taxes on. :param currency: The optional currency in which the price_unit is expressed. :param quantity: The optional quantity of the product to compute taxes on. :param product: The optional product to compute taxes on. Used to get the tags to apply on the lines. :param partner: The optional partner compute taxes on. Used to retrieve the lang to build strings and for potential extensions. :param is_refund: The optional boolean indicating if this is a refund. :param handle_price_include: Used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. :param include_caba_tags: The optional boolean indicating if CABA tags need to be taken into account. :param fixed_multiplicator: The amount to multiply fixed amount taxes by. :return: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'base_tags: : list<int>, # Tags to apply on the base line 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'base': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': bool, 'price_include': bool, 'tax_exigibility': str, 'tax_repartition_line_id': int, 'group': recordset, 'tag_ids': list<int>, 'tax_ids': list<int>, }], }
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • flatten_taxes_hierarchy(self, create_map=False)
  • get_tax_tags(self, is_refund, repartition_type)
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None, is_refund=False, include_caba_tags=False)
    Called by the reconciliation to compute taxes on writeoff during bank reconciliation
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')
  • validate_tax_group_id(self)
    @api.constrains('tax_group_id')
  • write(self, vals)

New fields (9)
  • advance_tax_payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Downpayments posted on this account will be considered by the Tax Closing Entry.' string='Tax Advance Account'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' help='The country for which this tax group is applicable.' precompute=True readonly=False store=True string='Country'
  • name Char
    required=True translate=True
  • preceding_subtotal Char
    help="If set, this value will be used on documents as the label of a subtotal excluding this tax group before displaying it. If not set, the tax group will be displayed after the 'Untaxed amount' subtotal." string='Preceding Subtotal'
  • sequence Integer
    default=10
  • tax_payable_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the authorities.' string='Tax Payable Account'
  • tax_receivable_account_id Many2one → account.account
    check_company=True comodel_name='account.account' help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the company.' string='Tax Receivable Account'
Public methods (0)

No public methods.

New fields (11)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' help='The company this distribution line belongs to.' related='tax_id.company_id' store=True string='Company'
  • document_type Selection
    required=True selection=[('invoice', 'Invoice'), ('refund', 'Refund')] string='Related to'
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this distribution line' string='Factor Ratio'
  • factor_percent Float
    default=100 help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which distribution lines are displayed and matched. For refunds to work properly, invoice distribution lines should be arranged in the same order as the credit note distribution lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] ondelete='restrict' string='Tax Grids'
  • tag_ids_domain Binary
    compute='_compute_tag_ids_domain' help='Dynamic domain used for the tag that can be set on tax' string='tag domain'
  • tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' ondelete='cascade'
  • use_in_tax_closing Boolean
    compute='_compute_use_in_tax_closing' precompute=True readonly=False store=True string='Tax Closing Entry'
Public methods (0)

No public methods.

New fields (3)
  • attachment_ids Many2many → ir.attachment
    comodel_name='ir.attachment' relation='account_tour_upload_bill_ir_attachments_rel' string='Attachments'
  • preview_invoice Html
    compute='_compute_preview_invoice' string='Invoice Preview' translate=True
  • selection Selection
    default=<expr> selection=<expr>
Public methods (1)
  • apply(self)

New fields (1)
  • email_alias Char
    readonly=True
Public methods (1)
  • apply(self)

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)

New fields (0)

No new fields.

Public methods (1)
  • document_layout_save(self)
    Save layout and onboarding step progress, return super() result

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • precision_get(self, application)

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_download_xsd_files(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • session_info(self)

New fields (1)
  • account_templates Binary
    compute='_compute_account_templates' exportable=False
Public methods (2)
  • module_uninstall(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • get_account_kpi_summary(self)
    @api.model
  • get_kpi_summary(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • action_close_panel_account_dashboard(self)
    @api.model
  • action_close_panel_account_invoice(self)
    @api.model

New fields (0)

No new fields.

Public methods (9)
  • action_open_step_bank_account(self)
    @api.model
  • action_open_step_base_document_layout(self)
    @api.model
  • action_open_step_chart_of_accounts(self)
    @api.model
    Called by the 'Chart of Accounts' button of the dashboard onboarding panel.
  • action_open_step_company_data(self)
    @api.model
    Set company's basic information.
  • action_open_step_create_invoice(self)
    @api.model
  • action_open_step_default_taxes(self)
    @api.model
    Called by the 'Taxes' button of the setup bar.
  • action_open_step_fiscal_year(self)
    @api.model
  • action_open_step_sales_tax(self)
    @api.model
  • action_validate_step_base_document_layout(self)
    @api.model
    Set the onboarding(s) step as done only if layout is set.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (1)
  • tax_string Char
    compute='_compute_tax_string'
Public methods (0)

No public methods.

New fields (7)
  • account_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' domain="[('applicability', '=', 'products')]" help='Tags to be set on the base and tax journal items created for this product.' string='Account Tags'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category.' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product.' string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • tax_string Char
    compute='_compute_tax_string'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product.' string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (55)
  • account_cash_basis_base_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • account_default_pos_receivable_account_id Many2one → account.account
    check_company=True string='Default PoS Receivable Account' args: 'account.account'
  • account_discount_expense_allocation_id Many2one → account.account
    comodel_name='account.account' string='Separate account for expense discount'
  • account_discount_income_allocation_id Many2one → account.account
    comodel_name='account.account' string='Separate account for income discount'
  • account_enabled_tax_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_account_enabled_tax_country_ids' help='Technical field containing the countries for which this company is using tax-related features(hence the ones for which l10n modules need to show tax-related fields).' string='l10n-used countries'
  • account_fiscal_country_id Many2one → res.country
    comodel_name='res.country' compute='compute_account_tax_fiscal_country' help='The country to use the tax reports from for this company' readonly=False store=True string='Fiscal Country'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Cash Discount Write-Off Gain Account'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='Cash Discount Write-Off Loss Account'
  • account_journal_payment_credit_account_id Many2one → account.account
    check_company=True string='Journal Outstanding Payments' args: 'account.account'
  • account_journal_payment_debit_account_id Many2one → account.account
    check_company=True string='Journal Outstanding Receipts' args: 'account.account'
  • account_journal_suspense_account_id Many2one → account.account
    check_company=True string='Journal Suspense Account' args: 'account.account'
  • account_opening_date Date
    default=<expr> help='That is the date of the opening entry.' required=True string='Opening Entry'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_purchase_tax_id Many2one → account.tax
    check_company=True string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    check_company=True string='Default Sale Tax' args: 'account.tax'
  • account_storno Boolean
    readonly=False string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' string='Sales Credit Limit'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • automatic_entry_default_journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template Selection
    selection='_chart_template_selection'
  • country_code Char
    depends=['country_id'] related='country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    check_company=True string='Cash Difference Expense' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    check_company=True string='Cash Difference Income' args: 'account.account'
  • display_invoice_amount_total_words Boolean
    string='Total amount of invoice in letters'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_accrual_account_id Many2one → account.account
    check_company=True domain="[('internal_group', '=', 'liability'), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'expense')]" string='Loss Exchange Rate Account'
  • fiscal_position_ids One2many → account.fiscal.position
    comodel_name='account.fiscal.position' inverse_name='company_id'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='All Users Lock Date' tracking=True
  • income_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('internal_group', '=', 'income')]" string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_download Boolean
    default=True args: 'Download by default'
  • invoice_is_email Boolean
    default=True args: 'Email by default'
  • invoice_terms Html
    string='Default Terms and Conditions' translate=True
  • invoice_terms_html Html
    compute='_compute_invoice_terms_html' readonly=False sanitize_attributes=False store=True string='Default Terms and Conditions as a Web page' translate=True
  • max_tax_lock_date Date
    compute='_compute_max_tax_lock_date' recursive=True
  • multi_vat_foreign_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_multi_vat_foreign_country' help='Countries for which the company has a VAT number' string='Foreign VAT countries'
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Journals Entries Lock Date' tracking=True
  • qr_code Boolean
    string='Display QR-code on invoices'
  • quick_edit_mode Selection
    selection=[('out_invoices', 'Customer Invoices'), ('in_invoices', 'Vendor Bills'), ('out_and_in_invoices', 'Customer Invoices and Vendor Bills')] string='Quick encoding'
  • revenue_accrual_account_id Many2one → account.account
    check_company=True domain="[('internal_group', '=', 'asset'), ('account_type', 'not in', ('asset_receivable', 'liability_payable'))]" help='Account used to move the period of a revenue' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' string='Cash Basis Journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help='No users can edit journal entries related to a tax prior and inclusive of this date.' string='Tax Return Lock Date' tracking=True
  • terms_type Selection
    default='plain' string='Terms & Conditions format' args: [('plain', 'Add a Note'), ('html', 'Add a link to a Web Page')]
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    check_company=True domain="[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)]" help='Intermediary account used when moving money from a liqity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (13)
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • compute_account_tax_fiscal_country(self)
    @api.depends('country_id')
  • compute_fiscalyear_dates(self, current_date)
    Returns the dates of the fiscal year containing the provided date for this company. :return: A dictionary containing: * date_from * date_to
  • create(self, vals_list)
    @api.model_create_multi
  • create_op_move_if_non_existant(self)
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar or from the Financial configuration menu.
  • write(self, values)

New fields (64)
  • account_cash_basis_base_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=[('deprecated', '=', False)] readonly=False related='company_id.account_cash_basis_base_account_id' string='Base Tax Received Account'
  • account_default_credit_limit Monetary
    compute='_compute_account_default_credit_limit' help='This is the default credit limit that will be used on partners that do not have a specific limit on them.' inverse='_inverse_account_default_credit_limit' readonly=False string='Default Credit Limit'
  • account_discount_expense_allocation_id Many2one → account.account
    comodel_name='account.account' domain="[('account_type', 'in', ('income', 'expense'))]" readonly=False related='company_id.account_discount_expense_allocation_id' string='Customer Invoices Discounts Account'
  • account_discount_income_allocation_id Many2one → account.account
    comodel_name='account.account' domain="[('account_type', 'in', ('income', 'expense'))]" readonly=False related='company_id.account_discount_income_allocation_id' string='Vendor Bills Discounts Account'
  • account_fiscal_country_id Many2one
    readonly=False related='company_id.account_fiscal_country_id' store=False string='Fiscal Country Code'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('income', 'income_other', 'expense'))]" help='Account for the difference amount after the income discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_gain_account_id' string='Cash Discount Gain'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('expense', 'income', 'income_other'))]" help='Account for the difference amount after the expense discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_loss_account_id' string='Cash Discount Loss'
  • account_journal_payment_credit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'asset_current')]" help='Outgoing Payments are posted on an Outstanding Payments Account. In the bank reconciliation widget, they appear as blue lines.\nBank transactions are then reconciled on the Outstanding Payments Account rather the Payable Account.' readonly=False related='company_id.account_journal_payment_credit_account_id' string='Outstanding Payments'
  • account_journal_payment_debit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'asset_current')]" help='Incoming payments are posted on an Outstanding Receipts Account. In the bank reconciliation widget, they appear as blue lines.\nBank transactions are then reconciled on the Outstanding Receipts Accounts rather than the Receivable Account.' readonly=False related='company_id.account_journal_payment_debit_account_id' string='Outstanding Receipts'
  • account_journal_suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', 'in', ('asset_current', 'liability_current'))]" help='Bank Transactions are posted immediately after import or synchronization. Their counterparty is the bank suspense account.\nReconciliation replaces the latter by the definitive account(s).' readonly=False related='company_id.account_journal_suspense_account_id' string='Bank Suspense'
  • account_storno Boolean
    readonly=False related='company_id.account_storno' string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' readonly=False related='company_id.account_use_credit_limit' string='Sales Credit Limit'
  • chart_template Selection
    default=<expr> selection=<expr>
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Currency Exchange Journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • display_invoice_amount_total_words Boolean
    readonly=False related='company_id.display_invoice_amount_total_words' string='Total amount of invoice in letters'
  • expense_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('account_type', '=', 'expense')]" readonly=False related='company_id.expense_currency_exchange_account_id' string='Loss Exchange Rate Account'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_sale_delivery_address Boolean
    implied_group='account.group_delivery_invoice_address' args: 'Customer Addresses'
  • group_show_purchase_receipts Boolean
    implied_group='account.group_purchase_receipts' string='Purchase Receipt'
  • group_show_sale_receipts Boolean
    implied_group='account.group_sale_receipts' string='Sale Receipt'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • income_currency_exchange_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('internal_group', '=', 'income')]" readonly=False related='company_id.income_currency_exchange_account_id' string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_download Boolean
    readonly=False related='company_id.invoice_is_download' string='Download'
  • invoice_is_email Boolean
    readonly=False related='company_id.invoice_is_email' string='Send Email'
  • invoice_terms Html
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • invoice_terms_html Html
    readonly=False related='company_id.invoice_terms_html' string='Terms & Conditions as a Web page'
  • is_account_peppol_eligible Boolean
    compute='_compute_is_account_peppol_eligible' string='PEPPOL eligible'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_avatax Boolean
    string='Account Avatax'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv, .xls, and .xlsx format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    string='Document Digitization'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_peppol Boolean
    string='PEPPOL Invoicing'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_oss Boolean
    string='EU Intra-community Distance Selling'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • preview_ready Boolean
    compute='_compute_terms_preview' string='Display preview button'
  • purchase_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR-code'
  • quick_edit_mode Selection
    readonly=False related='company_id.quick_edit_mode' string='Quick encoding'
  • sale_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_journal_id Many2one → account.journal
    check_company=True readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • terms_type Selection
    readonly=False related='company_id.terms_type'
  • transfer_account_id Many2one → account.account
    check_company=True domain=[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)] help='Intermediary account used when moving from a liquidity account to another.' readonly=False related='company_id.transfer_account_id' string='Internal Transfer' args: 'account.account'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (5)
  • action_update_terms(self)
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • reload_template(self)
  • set_values(self)

New fields (2)
  • display_rounding_warning Boolean
    compute='_compute_display_rounding_warning' help="The warning informs a rounding factor change might be dangerous on res.currency's form view." string='Display Rounding Warning'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • get_application_groups(self, domain)
    @api.model

New fields (32)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • credit_limit Float
    company_dependent=True copy=False groups='account.group_account_invoice,account.group_account_readonly' help='Credit limit specific to this partner.' readonly=False string='Credit Limit'
  • credit_to_invoice Monetary
    compute='_compute_credit_to_invoice' groups='account.group_account_invoice,account.group_account_readonly'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • days_sales_outstanding Float
    compute='_compute_days_sales_outstanding' help='[(Total Receivable/Total Revenue) * number of days since the first invoice] for this customer' string='Days Sales Outstanding (DSO)'
  • debit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • duplicated_bank_account_partners_count Integer
    compute='_compute_duplicated_bank_account_partners_count'
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • is_coa_installed Boolean
    default=<expr> store=False
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • name Char
    tracking=True
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('account_type', '=', 'liability_payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('account_type', '=', 'asset_receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sales orders and customer invoices' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • show_credit_limit Boolean
    compute='_compute_show_credit_limit' default=<expr> groups='account.group_account_invoice,account.group_account_readonly'
  • supplier_invoice_count Integer
    compute='_compute_supplier_invoice_count' string='# Vendor Bills'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice,account.group_account_readonly' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
  • use_partner_credit_limit Boolean
    compute='_compute_use_partner_credit_limit' groups='account.group_account_invoice,account.group_account_readonly' help='Set a value greater than 0.0 to activate a credit limit check' inverse='_inverse_use_partner_credit_limit' string='Partner Limit'
Public methods (6)
  • action_view_partner_invoices(self)
  • action_view_partner_with_same_bank(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • get_partner_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • mark_as_reconciled(self)

New fields (17)
  • acc_holder_name Char
    tracking=True
  • acc_number Char
    tracking=True
  • active Boolean
    tracking=True
  • allow_out_payment Boolean
    help='Sending fake invoices with a fraudulent account number is a common phishing practice. To protect yourself, always verify new bank account numbers, preferably by calling the vendor, as phishing usually happens when their emails are compromised. Once verified, you can activate the ability to send money.' tracking=True
  • bank_id Many2one
    tracking=True
  • currency_id Many2one
    tracking=True
  • has_iban_warning Boolean
    compute='_compute_display_account_warning' help='Technical field used to display a warning if the IBAN country is different than the holder country.' store=True
  • has_money_transfer_warning Boolean
    compute='_compute_display_account_warning' help='Technical field used to display a warning if the account is a transfer service account.' store=True
  • journal_id One2many → account.journal
    check_company=True domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
  • lock_trust_fields Boolean
    compute='_compute_lock_trust_fields'
  • money_transfer_service Char
    compute='_compute_money_transfer_service_name'
  • partner_country_name Char
    related='partner_id.country_id.name'
  • partner_customer_rank Integer
    related='partner_id.customer_rank'
  • partner_id Many2one
    tracking=True
  • partner_supplier_rank Integer
    related='partner_id.supplier_rank'
  • related_moves One2many → account.move
    inverse_name='partner_bank_id' args: 'account.move'
  • user_has_group_validate_bank_account Boolean
    compute='_compute_user_has_group_validate_bank_account'
Public methods (7)
  • build_qr_code_base64(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • build_qr_code_url(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • get_available_qr_methods_in_sequence(self)
    @api.model
    Same as _get_available_qr_methods but without returning the sequence, and using it directly to order the returned list.
  • unlink(self)
  • write(self, vals)

New fields (2)
  • sequence_number Integer
    compute='_compute_split_sequence' store=True
  • sequence_prefix Char
    compute='_compute_split_sequence' store=True
Public methods (1)
  • init(self)

New fields (1)
  • fiscal_country_codes Char
    compute='_compute_fiscal_country_codes'
Public methods (0)

No public methods.

New fields (1)
  • force_post Boolean
    help='Entries in the future are set to be auto-posted by default. Check this checkbox to post them now.' string='Force'
Public methods (1)
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/account
VERSION
VERSION 1.2
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Stéphane Bidoul, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Stefan Rijnhart, qdp-odoo, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, GitHub, Damien Bouvy, Wolfgang Taferner, Yannick Tivisse, Pierre Masereel, Laurent Smet, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Lucas Perais, Arnold Moyaux, wan, mreficent, Julien Castiaux, Xavier-Do, Denis Roussel, Romeo Fragomeli, Carlos Dauden, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, William Henrotin, Akim Juillerat, Joseph Caburnay, alt-odoo, oco-odoo, Florent de Labarre, Julien Mougenot, Vincent Schippefilt, Anh Thao Pham (pta), Katherine Zaoral, Samuel Degueldre, Achraf (abz), Carlos Lopez, Brice bib Bartoletti, Adrien Widart, Ivan Yelizariev, Philémon van Helden, Nasreddin Boulif (bon), Touati Djamel (otd), Tiffany Chang (tic), Nathan Marotte (nama), Rémy Voet (ryv), Andrius Laukavičius, Gorash, fja-odoo, Bohdan Lisnenko, Mathieu Duckerts-Antoine, Pierre Paridans, snd, jbw, remi-filament, Aurélien (avd), William Braeckman, root, Guillaume (guva), Stefan-Calin Crainiciuc (stcc), Arnaud Baes, Xavier BOL (xbo), roen-odoo, Benoit Socias, Hubert Van de Walle (huvw), Hardik Prajapati, Miquel Raïch, pedrambiria, momegahed, Jigar Vaghela, Ricardo Gomes Rodrigues (rigr), Bruno-brsy, Nicolas (vin), william-andre, Paolo (pgi), Julien Van Roy, Víctor Martínez, Florian Damhaut, Merlin (megu), MerlinGuillaume, thcl-odoo, Juan Jose Scarafia, nicolas, mafo-odoo, Krzysztof Magusiak, aliya, william, Arthur Detroux (ard), Florian Charlier, anhe-odoo, Agustín Castro Bugallo, Nshimiyimana Séna, Louis Baudoux, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), Pouya Malekinejad, John Laterre (jol), Ruben Gomes, Thomas Beckers, Adrien Minet, Antoine Vandevenne (anv), assellalou, Jinjiu Liu, gawa-odoo, Demesmaeker, dbkosky, Aurelien van Delft (avd), Hubert Van De Walle, Dossogne Bertrand, luvi, Florian(flg), Roy Le, Renaud Thiry, Pierrot (prro), Stanislas Gueniffey, niyasraphy, jbw-odoo, Sébastien BEAU, Rodrigo, bve-odoo, Habib (ayh), Loan (LSE), baa, Thomas Lefebvre (thle), alsh-odoo, Matheus Leal Viana (malv), Gaetan Vanden Bergh (gavb), Louis Wicket (wil), Walid, Mylyna Hy, nda, althaf shaik, Maximilien (malb), Victor Piryns (pivi), Hamza (hisl), Shawcker, Mahamadasif Ansari, Thomas Becquevort (thbe), amdi-odoo, Gauthier Wala (gawa), maximilien(malb), Ali Alfie (alal), Tom De Caluwé, Pierre-Yves Dufays, Saurabh Mishra, Daniel Kosky (dako), Andrew Gavgavian, Claire Bretton (clbr), Pablo Montenegro, Fernanda Hernández, duongnguyen, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Antoine Dupuis (andu), Kshitij Nariya, Antoine Boonen, Camille Spiritus, Dylan Kiss (dyki), Hansun (hale), Jinane Maksoud, PoMa, arsi, Sébastien Geelen (sge), smdc-odoo, hupo-odoo, Paolo Gatti, Mahdi cheikh rouhou (macr), Bruno Boi, Antoine (ande), Paolo Gatti (pgi), Mitul Shah, Julien Alardot (jual), Michael (mcm), Preksha Chouhan, Horacio Tellez, paso-odoo, Odoo, Ivan Rasputin, David Vidal, Nguyễn Đại Dương, AH-Yussef, Harsh Modi, Dawn Hwang, adda-odoo, Arnaud Sibille, Mahdi Cheikh Rouhou (macr), Corentin Thaon (thco), Andrzej(pian), Nicolas Viseur (vin), sesn-odoo, guva-odoo, Paul Stroobant, stefanorigano (SRI), Hesham, Ethan Vincent, Mathieu (mcou), lase@odoo.com, Benjamin Hanquin (beha), Jordan D. (Joda), Louis (loti), mizosoft, Nguyen Hong Quang, Sven Fuehr, Jérémy Hennecart (jeh), thco-odoo, AMZIL Ayoub, Trịnh Ngọc Hưng, Seif (segn), kmod-odoo, Karl Southern, Eteil Djoumatchoua(etdj) etdj@odoo.com, Mountain Tran, Ayoub Amzil, yosa-odoo, Mohamed GadAlrab, Carlos Roca, det, Julien Carion (juca), moerradi, mega, Martin Trigaux (mat), Louis Gobert, aath-odoo, Đào Nam, bt-ojossen, Harsh Bhatt (habh), csnauwaert, Hussein Ebrahim(hyhe), Majed Alhanash (malh), Mathieu Coutant, Edoardo Piroli, casp-odoo, Steven Luna, Claire (clbr), Rocío Vega, Hammad Arif, Léo Gizard, Saif (segn), Jerome Sonnet (ito-invest-lu), aizu-odoo, shy, AhmedElemary57, geiercsaba, Nishant Jain, sben-odoo, Ricardo Gomes Rodrigues, gvar-odoo, mth-odoo, Dũng (Trần Đình), muab-odoo, Smit Patel, Germán Bernabeu, Logan Staelens, Trinh Ngoc Hung, mky-odoo, Emeka Ubakanma, roto-odoo, Maira Salazar (srma), jepbarasgarov, Ezzuldin Zaky (ezza), st-yes, abwa, m7913d, Kawtar Drissi El Bouzaidi (kdeb), Arthur Nanson, Ahmed Abdelaziz Hasaneen
WEBSITE
WEBSITEhttps://www.odoo.com/app/invoicing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (160)
XML IDNameModelTypeStatus
account.account_terms_conditions_setting_banner Account Terms and Conditions Setting Banner ir.ui.view qweb New
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account div Inherits analytic.view_account_analytic_account_form
account_analytic_account_view_list_inherit account.analytic.account.list.inherit account.analytic.account field Inherits analytic.view_account_analytic_account_list
account_analytic_distribution_model_form_inherit account.analytic.distribution.model.inherit.form account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_form_view
account_analytic_distribution_model_tree_inherit account.analytic.distribution.model.inherit.tree account.analytic.distribution.model data Inherits analytic.account_analytic_distribution_model_tree_view
account_analytic_plan_form_view_inherit_account account.analytic.plan.inherit.form account.analytic.plan data Inherits analytic.account_analytic_plan_form_view
account_automatic_entry_wizard_form account.automatic.entry.wizard.form account.automatic.entry.wizard form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_dashboard_onboarding_panel account.dashboard.onboarding.panel ir.ui.view qweb New
account_default_terms_and_conditions account_default_terms_and_conditions ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_onboarding_panel account.invoice.onboarding.panel ir.ui.view qweb New
account_invoice_onboarding_sale_tax_form account.invoice.layout.onboarding.form res.company form New
account_invoice_report_view_tree account.invoice.report.view.tree account.invoice.report tree New
account_invoice_send_wizard_form account.invoice.send.form account.invoice.send form New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_move_line_view_kanban_mobile account.move.line.kanban.mobile account.move.line xpath Inherits account_move_line_view_kanban
account_resequence_view Re-sequence Journal Entries account.resequence.wizard form New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag tree New
account_tax_group_view_search account.tax.group.search.filters account.tax.group search New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax tree New
account_terms_conditions_page Terms & Conditions ir.ui.view qweb New
account_tour_upload_bill account.tour.upload.bill account.tour.upload.bill form New
account_tour_upload_bill_email_confirm account.tour.upload.bill.email.confirm account.tour.upload.bill.email.confirm form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
bill_preview bill_preview ir.ui.view qweb New
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
document_tax_totals document_tax_totals ir.ui.view qweb New
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
onboarding_bank_account_step onboarding_bank_account_step ir.ui.view qweb New
onboarding_chart_of_account_step onboarding_chart_of_account_step ir.ui.view qweb New
onboarding_create_invoice_step onboarding_create_invoice_step ir.ui.view qweb New
onboarding_fiscal_year_step onboarding_fiscal_year_step ir.ui.view qweb New
onboarding_invoice_layout_step onboarding_invoice_layout_step ir.ui.view qweb New
onboarding_sale_tax_step onboarding_sale_tax_step ir.ui.view qweb New
onboarding_taxes_step onboarding_taxes_step ir.ui.view qweb New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_required_fields_form portal_invoice_required_fields_form ir.ui.view qweb New
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Show Invoices & Bills ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
product_template_view_tree product.template.tree product.template tree New
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
res_company_view_form_terms res.company.view.form.terms res.company form New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_currency_form_inherit res.currency.form.inherit res.currency xpath Inherits base.view_currency_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_groups_totals tax_groups_totals ir.ui.view qweb New
tax_repartition_line_tree account.tax.repartition.line.tree account.tax.repartition.line tree New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_accrued_orders_wizard account.accrued.orders.wizard.view account.accrued.orders.wizard form New
view_account_analytic_line_filter_inherit account.analytic.line.select.inherit account.analytic.line xpath Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.tree account.journal.group tree New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_register_form account.payment.register.form account.payment.register form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_line_form account.reconcile.model.line.form account.reconcile.model.line form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_various_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_form res.company.form.inherit.account res.company xpath Inherits base.view_company_form
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_in_invoice_bill_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_receipt_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_refund_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_incoterms_tree account.incoterms.tree account.incoterms tree New
view_invoice_tree account.invoice.tree account.move tree New
view_module_filter_inherit_account ir.module.module.list.inherit.account ir.module.module xpath Inherits base.view_module_filter
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_grouped_bank_cash account.move.line.tree.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_general account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_misc account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_partner account.move.line.tree.grouped.partner account.move.line field Inherits account.view_move_line_tree
view_move_line_tree_grouped_sales_purchases account.move.line.tree.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree
view_move_tree account.move.tree account.move tree New
view_onboarding_tax_tree account.onboarding.tax.tree account.tax xpath Inherits account.view_tax_tree
view_out_credit_note_tree account.out.invoice.tree account.move field Inherits account.view_invoice_tree
view_out_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_partner_bank_form_inherit_account res.partner.bank.form.inherit.account res.partner.bank xpath Inherits base.view_partner_bank_form
view_partner_property_form res.partner.property.form.inherit res.partner xpath Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_group_form account.tax.group.form account.tax.group form New
view_tax_group_tree account.tax.group.tree account.tax.group tree New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
Models touched (95)

New fields (24)
  • account_type Selection
    compute='_compute_account_type' help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' index=True precompute=True readonly=False required=True selection=[('asset_receivable', 'Receivable'), ('asset_cash', 'Bank and Cash'), ('asset_current', 'Current Assets'), ('asset_non_current', 'Non-current Assets'), ('asset_prepayments', 'Prepayments'), ('asset_fixed', 'Fixed Assets'), ('liability_payable', 'Payable'), ('liability_credit_card', 'Credit Card'), ('liability_current', 'Current Liabilities'), ('liability_non_current', 'Non-current Liabilities'), ('equity', 'Equity'), ('equity_unaffected', 'Current Year Earnings'), ('income', 'Income'), ('income_other', 'Other Income'), ('expense', 'Expenses'), ('expense_depreciation', 'Depreciation'), ('expense_direct_cost', 'Cost of Revenue'), ('off_balance', 'Off-Balance Sheet')] store=True string='Type' tracking=True
  • allowed_journal_ids Many2many → account.journal
    help='Define in which journals this account can be used. If empty, can be used in all journals.' string='Allowed Journals' args: 'account.journal'
  • code Char
    required=True size=64 tracking=True unaccent=False
  • company_currency_id Many2one
    related='company_id.currency_id'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all journal items in this account to have a specific currency (i.e. bank journals). If no currency is set, entries can use any currency.' string='Account Currency' tracking=True args: 'res.currency'
  • current_balance Float
    compute='_compute_current_balance'
  • deprecated Boolean
    default=False tracking=True
  • group_id Many2one → account.group
    compute='_compute_account_group' help='Account prefixes can determine account groups.' readonly=True store=True args: 'account.group'
  • include_initial_balance Boolean
    compute='_compute_include_initial_balance' help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' store=True string='Bring Accounts Balance Forward'
  • internal_group Selection
    compute='_compute_internal_group' readonly=True selection=[('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off_balance', 'Off Balance')] store=True string='Internal Group'
  • is_off_balance Boolean
    compute='_compute_is_off_balance' default=False readonly=True store=True
  • name Char
    index='trigram' required=True string='Account Name' tracking=True
  • non_trade Boolean
    default=False help='If set, this account will belong to Non Trade Receivable/Payable in reports and filters.\nIf not, this account will belong to Trade Receivable/Payable in reports and filters.'
  • note Text
    tracking=True args: 'Internal Notes'
  • opening_balance Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_balance' string='Opening Balance'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_credit' string='Opening Credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' currency_field='company_currency_id' inverse='_set_opening_debit' string='Opening Debit'
  • reconcile Boolean
    compute='_compute_reconcile' help='Check this box if this account allows invoices & payments matching of journal items.' readonly=False store=True string='Allow Reconciliation' tracking=True
  • related_taxes_amount Integer
    compute='_compute_related_taxes_amount'
  • root_id Many2one → account.root
    compute='_compute_account_root' store=True args: 'account.root'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' ondelete='restrict' string='Tags' args: 'account.account.tag', 'account_account_account_tag'
  • tax_ids Many2many → account.tax
    check_company=True context={'append_type_to_tax_name': True} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
Public methods (9)
  • action_duplicate_accounts(self)
  • action_open_related_taxes(self)
  • action_read_account(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
    Split the account name into account code and account name in import. When importing a file with accounts, the account code and name may be both entered in the name column. In this case, the name will be split into code and name.
  • name_get(self)
  • write(self, vals)

New fields (6)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes'), ('products', 'Products')]
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True args: 'Tag Name'
  • tax_negate Boolean
    help='Check this box to negate the absolute value of the balance of the lines associated with this tag in tax report computation.' string='Negate Tax Balance'
Public methods (1)
  • name_get(self)

New fields (10)
  • account_type Selection
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' selection=[('asset_receivable', 'Receivable'), ('asset_cash', 'Bank and Cash'), ('asset_current', 'Current Assets'), ('asset_non_current', 'Non-current Assets'), ('asset_prepayments', 'Prepayments'), ('asset_fixed', 'Fixed Assets'), ('liability_payable', 'Payable'), ('liability_credit_card', 'Credit Card'), ('liability_current', 'Current Liabilities'), ('liability_non_current', 'Non-current Liabilities'), ('equity', 'Equity'), ('equity_unaffected', 'Current Year Earnings'), ('income', 'Income'), ('income_other', 'Other Income'), ('expense', 'Expenses'), ('expense_depreciation', 'Depreciation'), ('expense_direct_cost', 'Cost of Revenue'), ('off_balance', 'Off-Balance Sheet')] string='Type'
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • name Char
    required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
Public methods (1)
  • name_get(self)
    @api.depends('name', 'code')

New fields (9)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=_get_account_domain required=True string='Accrual Account'
  • amount Monetary
    help='Specify an arbitrary value that will be accrued on a default account for the entire order, regardless of the products on the different lines.' string='Amount'
  • company_id Many2one → res.company
    default=_get_default_company args: 'res.company'
  • currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • date Date
    default=_get_default_date required=True
  • display_amount Boolean
    compute='_compute_display_amount'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' company_dependent=True compute='_compute_journal_id' default=_get_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" readonly=False required=True string='Journal'
  • preview_data Text
    compute='_compute_preview_data'
  • reversal_date Date
    compute='_compute_reversal_date' precompute=True readonly=False required=True store=True
Public methods (1)
  • create_entries(self)

New fields (4)
  • credit Monetary
    groups='account.group_account_readonly'
  • debit Monetary
    groups='account.group_account_readonly'
  • invoice_count Integer
    compute='_compute_invoice_count' args: 'Invoice Count'
  • vendor_bill_count Integer
    compute='_compute_vendor_bill_count' args: 'Vendor Bill Count'
Public methods (2)
  • action_view_invoice(self)
  • action_view_vendor_bill(self)

New fields (3)
  • account_prefix Char
    help='Prefix that defines which accounts from the financial accounting this applicability should apply on.' string='Financial Accounts Prefix'
  • business_domain Selection
    ondelete={'invoice': 'cascade', 'bill': 'cascade'} selection_add=[('invoice', 'Invoice'), ('bill', 'Vendor Bill')]
  • product_categ_id Many2one → product.category
    string='Product Category' args: 'product.category'
Public methods (0)

No public methods.

New fields (3)
  • account_prefix Char
    help='Prefix that defines which accounts from the financial accounting this model should apply on.' string='Accounts Prefix'
  • product_categ_id Many2one → product.category
    help='Select a product category which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    help='Select a product for which the analytic distribution will be used (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (8)
  • category Selection
    selection_add=[('invoice', 'Customer Invoice'), ('vendor_bill', 'Vendor Bill')]
  • code Char
    size=8
  • general_account_id Many2one → account.account
    compute='_compute_general_account_id' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' readonly=False store=True string='Financial Account' args: 'account.account'
  • journal_id Many2one → account.journal
    check_company=True readonly=True related='move_line_id.journal_id' store=True string='Financial Journal' args: 'account.journal'
  • move_line_id Many2one → account.move.line
    check_company=True index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • partner_id Many2one
    compute='_compute_partner_id' readonly=False store=True
  • product_id Many2one → product.product
    check_company=True string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (16)
  • account_type Selection
    compute='_compute_account_type' store=True args: [('income', 'Revenue'), ('expense', 'Expense')]
  • action Selection
    required=True args: [('change_period', 'Change Period'), ('change_account', 'Change Account')]
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • date Date
    default=<expr> required=True
  • destination_account_id Many2one → account.account
    comodel_name='account.account' help='Account to transfer to.' string='To'
  • display_currency_helper Boolean
    compute='_compute_display_currency_helper' string='Currency Conversion Helper'
  • expense_accrual_account Many2one → account.account
    compute='_compute_expense_accrual_account' domain="[('company_id', '=', company_id),('account_type', 'not in', ('asset_receivable', 'liability_payable')),('is_off_balance', '=', False)]" inverse='_inverse_expense_accrual_account' readonly=False args: 'account.account'
  • journal_id Many2one → account.journal
    compute='_compute_journal_id' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='Journal where to create the entry.' inverse='_inverse_journal_id' readonly=False required=True string='Journal' args: 'account.journal'
  • lock_date_message Char
    compute='_compute_lock_date_message' string='Lock Date Message'
  • move_data Text
    compute='_compute_move_data'
  • move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • percentage Float
    compute='_compute_percentage' help='Percentage of each line to execute the action on.' readonly=False store=True args: 'Percentage'
  • preview_move_data Text
    compute='_compute_preview_move_data'
  • revenue_accrual_account Many2one → account.account
    compute='_compute_revenue_accrual_account' domain="[('company_id', '=', company_id),('account_type', 'not in', ('asset_receivable', 'liability_payable')),('is_off_balance', '=', False)]" inverse='_inverse_revenue_accrual_account' readonly=False args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id' help='Total amount impacted by the automatic entry.' readonly=False store=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • do_action(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • attachment_ids Many2many → ir.attachment
    comodel_name='ir.attachment' string='Attachments'
  • balance_end Monetary
    compute='_compute_balance_end' store=True string='Computed Balance'
  • balance_end_real Monetary
    compute='_compute_balance_end_real' readonly=False store=True string='Ending Balance'
  • balance_start Monetary
    compute='_compute_balance_start' readonly=False store=True string='Starting Balance'
  • company_id Many2one → res.company
    comodel_name='res.company' related='journal_id.company_id' store=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id'
  • date Date
    compute='_compute_date_index' index=True store=True
  • first_line_index Char → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_date_index' index=True store=True
  • is_complete Boolean
    compute='_compute_is_complete' store=True
  • is_valid Boolean
    compute='_compute_is_valid' search='_search_is_valid'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' store=True
  • line_ids One2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' inverse_name='statement_id' required=True string='Statement lines'
  • name Char
    compute='_compute_name' copy=False readonly=False store=True string='Reference'
  • problem_description Text
    compute='_compute_problem_description'
  • reference Char
    copy=False string='External Reference'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • write(self, values)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (20)
  • account_number Char
    string='Bank Account Number'
  • amount Monetary
  • amount_currency Monetary
    compute='_compute_amount_currency' currency_field='foreign_currency_id' help='The amount expressed in an optional other currency if it is a multi-currency entry.' readonly=False store=True string='Amount in Currency'
  • amount_residual Float
    compute='_compute_is_reconciled' store=True string='Residual Amount'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' store=True string='Journal Currency'
  • foreign_currency_id Many2one → res.currency
    comodel_name='res.currency' help='The optional other currency if it is a multi-currency entry.' string='Foreign Currency'
  • internal_index Char
    compute='_compute_internal_index' index=True store=True string='Internal Reference'
  • is_reconciled Boolean
    compute='_compute_is_reconciled' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=',True)]" ondelete='restrict' string='Partner'
  • partner_name Char
  • payment_ids Many2many → account.payment
    comodel_name='account.payment' relation='account_payment_account_bank_statement_line_rel' string='Auto-generated Payments'
  • payment_ref Char
    string='Label'
  • running_balance Monetary
    compute='_compute_running_balance'
  • sequence Integer
    default=1
  • statement_complete Boolean
    related='statement_id.is_complete'
  • statement_id Many2one → account.bank.statement
    comodel_name='account.bank.statement' string='Statement'
  • statement_valid Boolean
    related='statement_id.is_valid'
  • transaction_type Char
Public methods (7)
  • action_undo_reconciliation(self)
    Undo the reconciliation made on the statement line and reset their journal items to their original states.
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • new(self, values=None, origin=None, ref=None)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (7)
  • company_id Many2one → res.company
    related='profit_account_id.company_id' args: 'res.company'
  • loss_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • profit_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" string='Profit Account' args: 'account.account'
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'Up'), ('DOWN', 'Down'), ('HALF-UP', 'Nearest')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (36)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account.template
    comodel_name='account.account.template' string='Cash Discount Write-Off Gain Account'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account.template
    comodel_name='account.account.template' string='Cash Discount Write-Off Loss Account'
  • account_journal_payment_credit_account_id Many2one → account.account.template
    string='Journal Outstanding Payments Account' args: 'account.account.template'
  • account_journal_payment_debit_account_id Many2one → account.account.template
    string='Journal Outstanding Receipts Account' args: 'account.account.template'
  • account_journal_suspense_account_id Many2one → account.account.template
    string='Journal Suspense Account' args: 'account.account.template'
  • bank_account_code_prefix Char
    required=True string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    required=True string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • country_id Many2one → res.country
    comodel_name='res.country' help="The country this chart of accounts belongs to. None if it's generic." string='Country'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • default_cash_difference_expense_account_id Many2one → account.account.template
    string='Cash Difference Expense Account' args: 'account.account.template'
  • default_cash_difference_income_account_id Many2one → account.account.template
    string='Cash Difference Income Account' args: 'account.account.template'
  • default_pos_receivable_account_id Many2one → account.account.template
    string='PoS receivable account' args: 'account.account.template'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    string='Receivable Account' args: 'account.account.template'
  • property_advance_tax_payment_account_id Many2one → account.account.template
    string='Advance tax payment account' args: 'account.account.template'
  • property_cash_basis_base_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • property_stock_account_input_categ_id Many2one → account.account.template
    string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • property_tax_payable_account_id Many2one → account.account.template
    string='Tax current account (payable)' args: 'account.account.template'
  • property_tax_receivable_account_id Many2one → account.account.template
    string='Tax current account (receivable)' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_code_prefix Char
    required=True string='Prefix of the main transfer accounts'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • use_storno_accounting Boolean
    default=False string='Use Storno accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (9)
  • create_record_with_xmlid(self, company, template, model, vals)
  • existing_accounting(self, company_id)
    @api.model
    Returns True iff some accounting entries have already been made for the provided company (meaning hence that its chart of accounts cannot be changed anymore).
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    This method generates accounts from account templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary containing the mapping between the account templates and generated accounts (will be populated) :param code_digits: number of digits to use for account code. :param company_id: company to generate accounts for. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_groups(self, company)
    This method generates account groups from account groups templates. :param company: company to generate the account groups for
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    This method creates account reconcile models :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mapping between the account templates and the real accounts. :param company_id: company to create models for :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    This method generates Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: the company to generate fiscal position data for :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param acc_template_ref: Account templates reference. :param company_id: company to generate journals for. :returns: True
  • generate_properties(self, acc_template_ref, company)
    This method used for creating properties. :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company to generate properties for. :returns: True
  • try_loading(self, company=False, install_demo=True)
    Installs this chart of accounts for the current company if not chart of accounts had been created for it yet. :param company (Model<res.company>): the company we try to load the chart template on. If not provided, it is retrieved from the context. :param install_demo (bool): whether or not we should load demo data right after loading the chart template.

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
  • write(self, vals)

New fields (18)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_country_id Many2one
    related='company_id.account_fiscal_country_id' string='Company Country'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • foreign_vat Char
    help='The tax ID of your company in the region mapped by this fiscal position.' string='Foreign Tax ID'
  • foreign_vat_header_mode Selection
    compute='_compute_foreign_vat_header_mode' selection=[('templates_found', 'Templates Found'), ('no_template', 'No Template')]
  • name Char
    required=True string='Fiscal Position'
  • note Html
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (6)
  • action_create_foreign_taxes(self)
  • create(self, vals_list)
    @api.model_create_multi
  • map_account(self, account)
  • map_accounts(self, accounts)
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes)
  • write(self, vals)

New fields (4)
  • account_dest_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Account on Product' args: 'account.account'
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_active Boolean
    related='tax_dest_id.active'
  • tax_dest_id Many2one → account.tax
    check_company=True string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    check_company=True required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (13)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (0)

No public methods.

New fields (4)
  • exchange_move_id Many2one → account.move
    index='btree_not_null' args: 'account.move'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (6)
  • code_prefix_end Char
  • code_prefix_start Char
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • name Char
    required=True
  • parent_id Many2one → account.group
    index=True ondelete='cascade' readonly=True args: 'account.group'
  • parent_path Char
    index=True unaccent=False
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (5)
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • code_prefix_end Char
  • code_prefix_start Char
  • name Char
    required=True
  • parent_id Many2one → account.group.template
    ondelete='cascade' args: 'account.group.template'
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (23)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • commercial_partner_id Many2one → res.partner
    string='Main Partner' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • move_type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_state Selection
    readonly=True selection=PAYMENT_STATE_SELECTION string='Payment Status'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_subtotal Float
    readonly=True string='Untaxed Total'
  • price_total Float
    readonly=True string='Total in Currency'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This is a hack to allow us to correctly calculate the average price.

New fields (10)
  • attachments_not_supported Json
    compute='_compute_attachments_not_supported'
  • composer_id Many2one → mail.compose.message
    ondelete='cascade' required=True string='Composer' args: 'mail.compose.message'
  • display_attachment_fields Boolean
    compute='_compute_display_attachment_fields'
  • invoice_ids Many2many → account.move
    string='Invoices' args: 'account.move', 'account_move_account_invoice_send_rel'
  • invoice_without_email Text
    compute='_compute_invoice_without_email' string='invoice(s) that will not be sent'
  • is_email Boolean
    default=<expr> args: 'Email'
  • is_print Boolean
    default=<expr> args: 'Print'
  • move_types Char
    compute='_compute_move_types' readonly=True string='Move types'
  • printed Boolean
    default=False args: 'Is Printed'
  • template_id Many2one → mail.template
    domain="[('model', '=', 'account.move')]" args: 'mail.template', 'Use template'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • onchange_is_email(self)
    @api.onchange('is_email')
  • onchange_template_id(self)
    @api.onchange('template_id')
  • save_as_template(self)
  • send_and_print_action(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (37)
  • account_control_ids Many2many → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" string='Allowed accounts' args: 'account.account', 'journal_account_control_rel', 'journal_id', 'account_id'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_domain Char
    compute='_compute_alias_domain' args: 'Alias domain'
  • alias_id Many2one → mail.alias
    copy=False help='Send one separate email for each invoice.\n\nAny file extension will be accepted.\n\nOnly PDF and XML files will be interpreted by Odoo' string='Email Alias' args: 'mail.alias'
  • alias_name Char
    compute='_compute_alias_name' copy=False help='It creates draft invoices and bills by sending an email.' inverse='_inverse_type' args: 'Alias Name'
  • available_payment_method_ids Many2many → account.payment.method
    comodel_name='account.payment.method' compute='_compute_available_payment_method_ids'
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    check_company=True copy=False domain="[('partner_id','=', company_partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    help='Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.' required=True size=5 string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True readonly=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=_get_default_account_domain ondelete='restrict' string='Default Account'
  • default_account_type Char
    compute='_compute_default_account_type' string='Default Account Type'
  • inbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_inbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Inbound Payment Methods'
  • invoice_reference_model Selection
    default=_default_invoice_reference_model help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Odoo'), ('euro', 'European')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('none', 'Open'), ('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • journal_group_ids Many2many → account.journal.group
    check_company=True domain="[('company_id', '=', company_id)]" string='Journal Groups' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=', 'expense')]" help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account'
  • name Char
    required=True string='Journal Name'
  • outbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_outbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'outbound')] help='Manual: Pay by any method outside of Odoo.\nCheck: Pay bills by check and print it from Odoo.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Outbound Payment Methods'
  • payment_sequence Boolean
    compute='_compute_payment_sequence' help="Check this box if you don't want to share the same sequence on payments and bank transactions posted on this journal" precompute=True readonly=False store=True string='Dedicated Payment Sequence'
  • profit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', 'in', ('income', 'income_other'))]" help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • restrict_mode_hash_table Boolean
    help='If ticked, the accounting entry or invoice receives a hash as soon as it is posted and cannot be modified anymore.' string='Lock Posted Entries with Hash'
  • sale_activity_note Text
    args: 'Activity Summary'
  • sale_activity_type_id Many2one → mail.activity.type
    default=False help='Activity will be automatically scheduled on payment due date, improving collection process.' string='Schedule Activity' args: 'mail.activity.type'
  • sale_activity_user_id Many2one → res.users
    help='Leave empty to assign the Salesperson of the invoice.' string='Activity User' args: 'res.users'
  • secure_sequence_id Many2one → ir.sequence
    check_company=True copy=False help='Sequence to use to ensure the securisation of data' readonly=True args: 'ir.sequence'
  • selected_payment_method_codes Char
    compute='_compute_selected_payment_method_codes'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_override_regex Text
    help='Technical field used to enforce complex sequence composition that the system would normally misunderstand.\nThis is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.\nThe prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).\ne.g: ^(?P<prefix1>.*?)(?P<year>\\d{4})(?P<prefix2>\\D*?)(?P<month>\\d{2})(?P<prefix3>\\D+?)(?P<seq>\\d+)(?P<suffix>\\D*?)$'
  • suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_suspense_account_id' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=', 'asset_current')]" help='Bank statements transactions will be posted on the suspense account until the final reconciliation allowing finding the right account.' ondelete='restrict' readonly=False store=True string='Suspense Account'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." inverse='_inverse_type' required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
Public methods (9)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • create_document_from_attachment(self, attachment_ids=None)
    Create invoices from the attachments (for instance a Factur-X XML file) and redirect the user to the newly created invoice(s). :param attachment_ids: list of attachment ids :return: action to open the created invoices
  • get_next_bank_cash_default_code(self, journal_type, company, protected_codes=False)
    @api.model
  • name_get(self)
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (9)
  • color Integer
    default=0 args: 'Color Index'
  • current_statement_balance Monetary
    compute='_compute_current_statement_balance'
  • entries_count Integer
    compute='_compute_entries_count'
  • has_sequence_holes Boolean
    compute='_compute_has_sequence_holes'
  • has_statement_lines Boolean
    compute='_compute_current_statement_balance'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (20)
  • action_create_new(self)
  • action_create_vendor_bill(self)
    This function is called by the "Import" button of Vendor Bills, visible on dashboard if no bill has been created yet.
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
  • create_customer_payment(self)
    return action to create a customer payment
  • create_internal_transfer(self)
    return action to create a internal transfer
  • create_supplier_payment(self)
    return action to create a supplier payment
  • get_bar_graph_datas(self)
  • get_journal_dashboard_datas(self)
  • get_line_graph_datas(self)
  • mark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as done in the setup bar and in the company.
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_collect_money(self)
  • open_payments_action(self, payment_type, mode='tree')
  • open_spend_money(self)
  • open_transfer_money(self)
  • show_sequence_holes(self)
  • to_check_ids(self)
  • unmark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as not done in the setup bar and in the company.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • excluded_journal_ids Many2many → account.journal
    check_company=True domain="[('company_id', '=', company_id)]" string='Excluded Journals' args: 'account.journal'
  • name Char
    required=True translate=True args: 'Journal Group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • statement_line_ids One2many → account.bank.statement.line
    string='Statements' args: 'account.bank.statement.line', 'move_id'
Public methods (0)

No public methods.

New fields (1)
  • payment_ids One2many → account.payment
    string='Payments' args: 'account.payment', 'move_id'
Public methods (0)

No public methods.

New fields (91)
  • always_tax_exigible Boolean
    compute='_compute_always_tax_exigible' readonly=False store=True
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Total in Currency Signed'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • attachment_ids One2many → ir.attachment
    domain=[('res_model', '=', 'account.move')] string='Attachments' args: 'ir.attachment', 'res_id'
  • auto_post Selection
    copy=False default='no' help='Specify whether this entry is posted automatically on its accounting date, and any similar recurring invoices.' required=True selection=[('no', 'No'), ('at_date', 'At Date'), ('monthly', 'Monthly'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly')] string='Auto-post'
  • auto_post_origin_id Many2one → account.move
    comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='First recurring entry'
  • auto_post_until Date
    compute='_compute_auto_post_until' copy=False help='This recurring move will be posted up to and including this date.' readonly=False store=True string='Auto-post until'
  • bank_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' index=True inverse='_inverse_company_id' precompute=True readonly=False store=True string='Company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' inverse='_inverse_currency_id' precompute=True readonly=False required=True states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    compute='_compute_date' copy=False index=True precompute=True readonly=False required=True states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Date' tracking=True
  • direction_sign Integer
    compute='_compute_direction_sign' help='Multiplicator depending on the document type, to convert a price into a balance'
  • display_inactive_currency_warning Boolean
    compute='_compute_display_inactive_currency_warning'
  • display_qr_code Boolean
    compute='_compute_display_qr_code' string='Display QR-code'
  • duplicated_ref_ids Many2many → account.move
    comodel_name='account.move' compute='_compute_duplicated_ref_ids'
  • fiscal_position_id Many2one → account.fiscal.position
    check_company=True compute='_compute_fiscal_position_id' domain="[('company_id', '=', company_id)]" help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' precompute=True readonly=False states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • hide_post_button Boolean
    compute='_compute_hide_post_button' readonly=True
  • highest_name Char
    compute='_compute_highest_name'
  • inalterable_hash Char
    copy=False readonly=True string='Inalterability Hash'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    comodel_name='account.cash.rounding' help='Defines the smallest coinage of the currency that can be used to pay by cash.' readonly=True states={'draft': [('readonly', False)]} string='Cash Rounding Method'
  • invoice_date Date
    copy=False index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice/Bill Date'
  • invoice_date_due Date
    compute='_compute_invoice_date_due' copy=False index=True readonly=False states={'draft': [('readonly', False)]} store=True string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain'
  • invoice_has_outstanding Boolean
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' default=<expr> help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Incoterm'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('display_type', 'in', ('product', 'line_section', 'line_note'))] readonly=True states={'draft': [('readonly', False)]} string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Binary
    compute='_compute_payments_widget_to_reconcile_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' compute='_compute_invoice_payment_term_id' precompute=True readonly=False states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Payment Terms'
  • invoice_payments_widget Binary
    compute='_compute_payments_widget_reconciled_info' exportable=False groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_invoice_default_sale_person' copy=False readonly=False store=True string='Salesperson' tracking=True
  • invoice_vendor_bill_id Many2one → account.move
    check_company=True help='Auto-complete from a past bill.' store=False string='Vendor Bill' args: 'account.move'
  • is_move_sent Boolean
    copy=False default=False help='It indicates that the invoice/payment has been sent.' readonly=True tracking=True
  • is_storno Boolean
    compute='_compute_is_storno' copy=False readonly=False store=True
  • journal_id Many2one → account.journal
    check_company=True compute='_compute_journal_id' domain="[('id', 'in', suitable_journal_ids)]" inverse='_inverse_journal_id' precompute=True readonly=False required=True states={'draft': [('readonly', False)]} store=True string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True readonly=True states={'draft': [('readonly', False)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • made_sequence_hole Boolean
    compute='_compute_made_sequence_hole'
  • move_type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] string='Type' tracking=True
  • name Char
    compute='_compute_name' copy=False index='trigram' inverse='_inverse_name' readonly=False store=True string='Number' tracking=True
  • narration Html
    compute='_compute_narration' readonly=False store=True string='Terms and Conditions'
  • needed_terms Binary
    compute='_compute_needed_terms' exportable=False
  • needed_terms_dirty Boolean
    compute='_compute_needed_terms'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' readonly=False store=True string='Recipient Bank' tracking=True args: 'res.partner.bank'
  • partner_credit_warning Text
    compute='_compute_partner_credit_warning' groups='account.group_account_invoice,account.group_account_readonly'
  • partner_id Many2one → res.partner
    change_default=True check_company=True index=True inverse='_inverse_partner_id' ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Partner' tracking=True args: 'res.partner'
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_shipping_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Delivery address for current invoice.' precompute=True readonly=False store=True string='Delivery Address'
  • payment_id Many2one → account.payment
    check_company=True comodel_name='account.payment' copy=False index='btree_not_null' string='Payment'
  • payment_reference Char
    compute='_compute_payment_reference' copy=False help='The payment reference to set on journal items.' index='trigram' inverse='_inverse_payment_reference' readonly=False store=True string='Payment Reference' tracking=True
  • payment_state Selection
    compute='_compute_payment_state' copy=False readonly=True selection=PAYMENT_STATE_SELECTION store=True string='Payment Status' tracking=True
  • payment_term_details Binary
    compute='_compute_payment_term_details' exportable=False
  • posted_before Boolean
    copy=False
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for the payment of this invoice, when printing it. If left blank, the first available and usable method will be used.' selection=<expr> string='Payment QR-code'
  • quick_edit_mode Boolean
    compute='_compute_quick_edit_mode'
  • quick_edit_total_amount Monetary
    help='Use this field to encode the total amount of the invoice.\nOdoo will automatically create one invoice line with default values to match it.' string='Total (Tax inc.)'
  • quick_encoding_vals Binary
    compute='_compute_quick_encoding_vals' exportable=False
  • ref Char
    copy=False string='Reference' tracking=True
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_id One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    check_company=True comodel_name='account.move' copy=False index='btree_not_null' readonly=True string='Reversal of'
  • secure_sequence_number Integer
    copy=False index=True readonly=True string='Inalteralbility No Gap Sequence #'
  • show_discount_details Boolean
    compute='_compute_show_payment_term_details'
  • show_name_warning Boolean
    store=False
  • show_payment_term_details Boolean
    compute='_compute_show_payment_term_details'
  • show_reset_to_draft_button Boolean
    compute='_compute_show_reset_to_draft_button'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_line_id Many2one → account.bank.statement.line
    check_company=True comodel_name='account.bank.statement.line' copy=False index='btree_not_null' string='Statement Line'
  • string_to_hash Char
    compute='_compute_string_to_hash' readonly=True
  • suitable_journal_ids Many2many → account.journal
    compute='_compute_suitable_journal_ids' args: 'account.journal'
  • tax_cash_basis_created_move_ids One2many → account.move
    comodel_name='account.move' help='The cash basis entries created from the taxes on this entry, when reconciling its lines.' inverse_name='tax_cash_basis_origin_move_id' string='Cash Basis Entries'
  • tax_cash_basis_origin_move_id Many2one → account.move
    comodel_name='account.move' help='The journal entry from which this tax cash basis journal entry has been created.' index='btree_not_null' readonly=True string='Cash Basis Origin'
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    comodel_name='account.partial.reconcile' index='btree_not_null' string='Tax Cash Basis Entry of'
  • tax_country_code Char
    compute='_compute_tax_country_code'
  • tax_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_tax_country_id'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message'
  • tax_totals Binary
    compute='_compute_tax_totals' exportable=False help='Edit Tax amounts if you encounter rounding issues.' inverse='_inverse_tax_totals' string='Invoice Totals'
  • to_check Boolean
    help='If this checkbox is ticked, it means that the user was not sure of all the related information at the time of the creation of the move and that the move needs to be checked again.' string='To Check' tracking=True
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    related='invoice_user_id' string='User'
Public methods (40)
  • action_activate_currency(self)
  • action_duplicate(self)
  • action_invoice_print(self)
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_open_business_doc(self)
  • action_post(self)
  • action_register_payment(self)
    Open the account.payment.register wizard to pay the selected journal entries. :return: An action opening the account.payment.register wizard.
  • action_reverse(self)
  • action_send_and_print(self)
  • action_switch_invoice_into_refund_credit_note(self)
  • button_cancel(self)
  • button_draft(self)
  • button_set_checked(self)
  • check_field_access_rights(self, operation, field_names)
  • check_move_sequence_chain(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False)
  • is_sale_document(self, include_receipts=False)
  • js_assign_outstanding_line(self, line_id)
    Called by the 'payment' widget to reconcile a suggested journal item to the present invoice. :param line_id: The id of the line to reconcile with the current invoice.
  • js_remove_outstanding_partial(self, partial_id)
    Called by the 'payment' widget to remove a reconciled entry to the present invoice. :param partial_id: The id of an existing partial reconciled with the current invoice.
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • name_get(self)
  • onchange(self, values, field_name, field_onchange)
  • open_created_caba_entries(self)
  • open_duplicated_ref_bill_view(self)
  • open_reconcile_view(self)
  • preview_invoice(self)
  • unlink(self)
  • write(self, vals)

New fields (71)
  • account_id Many2one → account.account
    auto_join=True check_company=True comodel_name='account.account' compute='_compute_account_id' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" index=True inverse='_inverse_account_id' ondelete='cascade' precompute=True readonly=False store=True string='Account' tracking=True
  • account_internal_group Selection
    related='account_id.internal_group'
  • account_root_id Many2one
    related='account_id.root_id' store=True string='Account Root'
  • account_type Selection
    related='account_id.account_type' string='Internal Type'
  • amount_currency Monetary
    compute='_compute_amount_currency' group_operator=None help='The amount expressed in an optional other currency if it is a multi-currency entry.' inverse='_inverse_amount_currency' precompute=True readonly=False store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_compute_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_compute_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_distribution Json
    inverse='_inverse_analytic_distribution'
  • analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='move_line_id' string='Analytic lines'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' precompute=True readonly=False store=True string='Balance'
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one
    precompute=True readonly=True related='move_id.company_currency_id' store=True string='Company Currency'
  • company_id Many2one
    index=True precompute=True readonly=True related='move_id.company_id' store=True
  • compute_all_tax Binary
    compute='_compute_all_tax' exportable=False
  • compute_all_tax_dirty Boolean
    compute='_compute_all_tax'
  • credit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_credit' precompute=True store=True string='Credit'
  • cumulated_balance Monetary
    compute='_compute_cumulated_balance' currency_field='company_currency_id' exportable=False help='Cumulated balance depending on the domain and the order chosen in the view.' string='Cumulated Balance'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' precompute=True readonly=False required=True store=True string='Currency'
  • currency_rate Float
    compute='_compute_currency_rate' help='Currency rate from company currency to document currency.'
  • date Date
    copy=False group_operator='min' related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date' tracking=True
  • debit Monetary
    compute='_compute_debit_credit' currency_field='company_currency_id' inverse='_inverse_debit' precompute=True store=True string='Debit'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • discount_amount_currency Monetary
    currency_field='currency_id' store=True string='Discount amount in Currency'
  • discount_balance Monetary
    currency_field='company_currency_id' store=True string='Discount Balance'
  • discount_date Date
    help='Last date at which the discounted amount must be paid in order for the Early Payment Discount to be granted' store=True string='Discount Date'
  • discount_percentage Float
    store=True
  • display_type Selection
    compute='_compute_display_type' precompute=True readonly=False required=True selection=[('product', 'Product'), ('cogs', 'Cost of Goods Sold'), ('tax', 'Tax'), ('rounding', 'Rounding'), ('payment_term', 'Payment Term'), ('line_section', 'Section'), ('line_note', 'Note'), ('epd', 'Early Payment Discount')] store=True
  • epd_dirty Boolean
    compute='_compute_epd_needed'
  • epd_key Binary
    compute='_compute_epd_key' exportable=False
  • epd_needed Binary
    compute='_compute_epd_needed' exportable=False
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' readonly=True string='Matching'
  • group_tax_id Many2one → account.tax
    comodel_name='account.tax' index='btree_not_null' string='Originator Group of Taxes'
  • is_account_reconcile Boolean
    related='account_id.reconcile' string='Account Reconcile'
  • is_refund Boolean
    compute='_compute_is_refund'
  • is_same_currency Boolean
    compute='_compute_same_currency'
  • is_storno Boolean
    help='Utility field to express whether the journal item is subject to storno accounting' related='move_id.is_storno' string='Company Storno Accounting'
  • journal_id Many2one
    copy=False index=True precompute=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Credit journal items that are matched with this journal item.' inverse_name='debit_move_id' readonly=True string='Matched Credits'
  • matched_debit_ids One2many → account.partial.reconcile
    comodel_name='account.partial.reconcile' help='Debit journal items that are matched with this journal item.' inverse_name='credit_move_id' readonly=True string='Matched Debits'
  • matching_number Char
    compute='_compute_matching_number' help="Matching number for this line, 'P' if it is only partially reconcile, or the name of the full reconcile if it exists." store=True string='Matching #'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • move_name Char
    index='btree' related='move_id.name' store=True string='Number'
  • move_type Selection
    related='move_id.move_type'
  • name Char
    compute='_compute_name' precompute=True readonly=False store=True string='Label' tracking=True
  • parent_state Selection
    related='move_id.state' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_partner_id' inverse='_inverse_partner_id' ondelete='restrict' precompute=True readonly=False store=True string='Partner'
  • payment_id Many2one → account.payment
    auto_join=True comodel_name='account.payment' help='The payment that created this entry' index='btree_not_null' related='move_id.payment_id' store=True string='Originator Payment'
  • price_subtotal Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Subtotal'
  • price_total Monetary
    compute='_compute_totals' currency_field='currency_id' store=True string='Total'
  • price_unit Float
    compute='_compute_price_unit' digits='Product Price' precompute=True readonly=False store=True string='Unit Price'
  • product_id Many2one → product.product
    comodel_name='product.product' index=True inverse='_inverse_product_id' ondelete='restrict' string='Product'
  • product_uom_category_id Many2one → uom.category
    comodel_name='uom.category' related='product_id.uom_id.category_id'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_product_uom_id' domain="[('category_id', '=', product_uom_category_id)]" ondelete='restrict' precompute=True readonly=False store=True string='Unit of Measure'
  • quantity Float
    compute='_compute_quantity' digits='Product Unit of Measure' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' precompute=True readonly=False store=True string='Quantity'
  • reconcile_model_id Many2one → account.reconcile.model
    check_company=True comodel_name='account.reconcile.model' copy=False readonly=True string='Reconciliation Model'
  • reconciled Boolean
    compute='_compute_amount_residual' store=True
  • ref Char
    copy=False index='trigram' related='move_id.ref' store=True
  • sequence Integer
    compute='_compute_sequence' precompute=True readonly=False store=True
  • statement_id Many2one
    auto_join=True copy=False help='The bank statement used for bank reconciliation' index='btree_not_null' related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    auto_join=True comodel_name='account.bank.statement.line' help='The statement line that created this entry' index='btree_not_null' related='move_id.statement_line_id' store=True string='Originator Statement Line'
  • tax_audit Char
    compute='_compute_tax_audit' help='Computed field, listing the tax grids impacted by this line, and the amount it applies to each of them.' store=True string='Tax Audit String'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True string='Base Amount'
  • tax_group_id Many2one
    precompute=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' compute='_compute_tax_ids' context={'active_test': False} precompute=True readonly=False store=True string='Taxes'
  • tax_key Binary
    compute='_compute_tax_key' exportable=False
  • tax_line_id Many2one → account.tax
    comodel_name='account.tax' help='Indicates that this journal item is a tax line' ondelete='restrict' precompute=True related='tax_repartition_line_id.tax_id' store=True string='Originator Tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    check_company=True comodel_name='account.tax.repartition.line' help='Tax distribution line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Distribution Line'
  • tax_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' context={'active_test': False} help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags' tracking=True
  • tax_tag_invert Boolean
    compute='_compute_tax_tag_invert' copy=False readonly=False store=True string='Invert Tags'
  • term_key Binary
    compute='_compute_term_key' exportable=False
Public methods (19)
  • action_automatic_entry(self)
  • action_open_business_doc(self)
  • check_field_access_rights(self, operation, field_names)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • flush_model(self, fnames=None)
  • flush_recordset(self, fnames=None)
  • get_import_templates(self)
    @api.model
  • init(self)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • invalidate_model(self, fnames=None, flush=True)
  • invalidate_recordset(self, fnames=None, flush=True)
  • name_get(self)
  • open_reconcile_view(self)
  • reconcile(self)
    Reconcile the current move lines all together. :return: A dictionary representing a summary of what has been done during the reconciliation: * partials: A recorset of all account.partial.reconcile created during the reconciliation. * exchange_partials: A recorset of all account.partial.reconcile created during the reconciliation with the exchange difference journal entries. * full_reconcile: An account.full.reconcile record created when there is nothing left to reconcile in the involved lines. * tax_cash_basis_moves: An account.move recordset representing the tax cash basis journal entries.
  • remove_move_reconcile(self)
    Undo a reconciliation
  • search_read(self, domain=None, fields=None, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (13)
  • available_journal_ids Many2many → account.journal
    compute='_compute_available_journal_ids' args: 'account.journal'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today string='Reversal date'
  • date_mode Selection
    default='custom' required=True selection=[('custom', 'Specific'), ('entry', 'Journal Entry Date')]
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' help='If empty, uses the journal of the journal entry to be reversed.' readonly=False required=True store=True string='Use Specific Journal'
  • move_ids Many2many → account.move
    domain=[('state', '=', 'posted')] args: 'account.move', 'account_move_reversal_move', 'reversal_id', 'move_id'
  • move_type Char
    compute='_compute_from_moves'
  • new_move_ids Many2many → account.move
    args: 'account.move', 'account_move_reversal_new_move', 'reversal_id', 'new_move_id'
  • reason Char
    string='Reason'
  • refund_method Selection
    help='Choose how you want to credit this invoice. You cannot "modify" nor "cancel" if the invoice is already reconciled.' required=True selection=[('refund', 'Partial Refund'), ('cancel', 'Full Refund'), ('modify', 'Full refund and new draft invoice')] string='Credit Method'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_moves(self)

New fields (12)
  • amount Monetary
    currency_field='company_currency_id' help='Always positive amount concerned by this matching expressed in the company currency.'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' help='Utility field to express amount currency' related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=False related='debit_move_id.company_id' store=True string='Company'
  • credit_amount_currency Monetary
    currency_field='credit_currency_id' help='Always positive amount concerned by this matching expressed in the credit line foreign currency.'
  • credit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='credit_move_id.currency_id' store=True string='Currency of the credit journal item.'
  • credit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • debit_amount_currency Monetary
    currency_field='debit_currency_id' help='Always positive amount concerned by this matching expressed in the debit line foreign currency.'
  • debit_currency_id Many2one → res.currency
    comodel_name='res.currency' precompute=True related='debit_move_id.currency_id' store=True string='Currency of the debit journal item.'
  • debit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • exchange_move_id Many2one → account.move
    comodel_name='account.move' index='btree_not_null'
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False index='btree_not_null' string='Full Reconcile'
  • max_date Date
    compute='_compute_max_date' store=True string='Max Date of Matched Lines'
Public methods (1)
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (34)
  • amount Monetary
    currency_field='currency_id'
  • amount_company_currency_signed Monetary
    compute='_compute_amount_company_currency_signed' currency_field='company_currency_id' store=True
  • amount_signed Monetary
    compute='_compute_amount_signed' currency_field='currency_id' help='Negative value of amount field if payment_type is outbound' tracking=True
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_destination_account_id' domain="[('account_type', 'in', ('asset_receivable', 'liability_payable')), ('company_id', '=', company_id)]" readonly=False store=True string='Destination Account'
  • destination_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', 'in', ('bank','cash')), ('company_id', '=', company_id), ('id', '!=', journal_id)]" string='Destination Journal'
  • is_internal_transfer Boolean
    compute='_compute_is_internal_transfer' readonly=False store=True string='Internal Transfer' tracking=True
  • is_matched Boolean
    compute='_compute_reconciliation_status' store=True string='Is Matched With a Bank Statement'
  • is_reconciled Boolean
    compute='_compute_reconciliation_status' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' index=True ondelete='cascade' readonly=True required=True string='Journal Entry'
  • outstanding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_outstanding_account_id' store=True string='Outstanding Account'
  • paired_internal_transfer_payment_id Many2one → account.payment
    copy=False help='When an internal transfer is posted, a paired payment is created. They are cross referenced through this field' index='btree_not_null' args: 'account.payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account' tracking=True args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_id' domain="['|', ('parent_id','=', False), ('is_company','=', True)]" ondelete='restrict' readonly=False store=True string='Customer/Vendor' tracking=True
  • partner_type Selection
    default='customer' required=True tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_method_code Char
    related='payment_method_line_id.code'
  • payment_method_id Many2one
    related='payment_method_line_id.payment_method_id' store=True string='Method' tracking=True
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' copy=False domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' string='Payment Reference' tracking=True
  • payment_type Selection
    default='inbound' required=True string='Payment Type' tracking=True args: [('outbound', 'Send'), ('inbound', 'Receive')]
  • qr_code Char
    compute='_compute_qr_code' string='QR Code URL'
  • reconciled_bill_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Bills' args: 'account.move'
  • reconciled_bills_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Bills'
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Invoices'
  • reconciled_invoices_type Selection
    compute='_compute_stat_buttons_from_reconciliation' args: [('credit_note', 'Credit Note'), ('invoice', 'Invoice')]
  • reconciled_statement_line_ids Many2many → account.bank.statement.line
    comodel_name='account.bank.statement.line' compute='_compute_stat_buttons_from_reconciliation' help='Statements lines matched to this payment' string='Reconciled Statement Lines'
  • reconciled_statement_lines_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Statement Lines'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
Public methods (15)
  • action_cancel(self)
    draft -> cancelled
  • action_draft(self)
    posted -> draft
  • action_open_destination_journal(self)
    Redirect the user to this destination journal. :return: An action on account.move.
  • action_post(self)
    draft -> posted
  • button_open_bills(self)
    Redirect the user to the bill(s) paid by this payment. :return: An action on account.move.
  • button_open_invoices(self)
    Redirect the user to the invoice(s) paid by this payment. :return: An action on account.move.
  • button_open_journal_entry(self)
    Redirect the user to this payment journal. :return: An action on account.move.
  • button_open_statement_lines(self)
    Redirect the user to the statement line(s) reconciled to this payment. :return: An action on account.move.
  • create(self, vals_list)
    @api.model_create_multi
  • mark_as_sent(self)
  • name_get(self)
    @api.depends('move_id.name')
  • new(self, values=None, origin=None, ref=None)
  • unlink(self)
  • unmark_as_sent(self)
  • write(self, vals)

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True selection=[('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • available_payment_method_ids Many2many
    related='journal_id.available_payment_method_ids'
  • code Char
    related='payment_method_id.code'
  • company_id Many2one
    related='journal_id.company_id'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' ondelete='cascade'
  • name Char
    compute='_compute_name' readonly=False store=True
  • payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', 'not in', ('asset_receivable', 'liability_payable')), '|', ('account_type', 'in', ('asset_current', 'liability_current')), ('id', '=', parent.default_account_id)]" ondelete='restrict'
  • payment_method_id Many2one → account.payment.method
    comodel_name='account.payment.method' domain="[('payment_type', '=?', payment_type), ('id', 'in', available_payment_method_ids)]" ondelete='cascade' required=True string='Payment Method'
  • payment_type Selection
    related='payment_method_id.payment_type'
  • sequence Integer
    default=10
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
    Payment method lines which are used in a payment should not be deleted from the database, only the link betweend them and the journals must be broken.
  • write(self, vals)

New fields (31)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False store=True
  • available_journal_ids Many2many → account.journal
    comodel_name='account.journal' compute='_compute_available_journal_ids'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • can_edit_wizard Boolean
    compute='_compute_from_lines' copy=False store=True
  • can_group_payments Boolean
    compute='_compute_from_lines' copy=False store=True
  • communication Char
    compute='_compute_communication' readonly=False store=True string='Memo'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    compute='_compute_from_lines' copy=False store=True args: 'res.company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' help="The payment's currency." precompute=True readonly=False store=True string='Currency'
  • early_payment_discount_mode Boolean
    compute='_compute_early_payment_discount_mode'
  • group_payment Boolean
    compute='_compute_group_payment' help='Only one payment will be created by partner (bank), instead of one per bill.' readonly=False store=True string='Group Payments'
  • hide_writeoff_section Boolean
    compute='_compute_hide_writeoff_section'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' compute='_compute_journal_id' domain="[('id', 'in', available_journal_ids)]" precompute=True readonly=False store=True
  • line_ids Many2many → account.move.line
    copy=False readonly=True string='Journal items' args: 'account.move.line', 'account_payment_register_move_line_rel', 'wizard_id', 'line_id'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account'
  • partner_id Many2one → res.partner
    compute='_compute_from_lines' copy=False ondelete='restrict' store=True string='Customer/Vendor' args: 'res.partner'
  • partner_type Selection
    compute='_compute_from_lines' copy=False store=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference'
  • payment_difference_handling Selection
    compute='_compute_payment_difference_handling' readonly=False selection=[('open', 'Keep open'), ('reconcile', 'Mark as fully paid')] store=True string='Payment Difference Handling'
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_type Selection
    compute='_compute_from_lines' copy=False store=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank'
  • source_amount Monetary
    compute='_compute_from_lines' copy=False currency_field='company_currency_id' store=True string='Amount to Pay (company currency)'
  • source_amount_currency Monetary
    compute='_compute_from_lines' copy=False currency_field='source_currency_id' store=True string='Amount to Pay (foreign currency)'
  • source_currency_id Many2one → res.currency
    compute='_compute_from_lines' copy=False store=True string='Source Currency' args: 'res.currency'
  • writeoff_account_id Many2one → account.account
    comodel_name='account.account' copy=False domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Difference Account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (2)
  • action_create_payments(self)
  • default_get(self, fields_list)
    @api.model

New fields (11)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • display_on_invoice Boolean
    help='If set, the payment deadlines and respective due amounts will be detailed on invoices.' string='Display terms on invoice'
  • example_amount Float
    default=_default_example_amount store=False
  • example_date Date
    default=_default_example_date store=False string='Date example'
  • example_invalid Boolean
    compute='_compute_example_invalid'
  • example_preview Html
    compute='_compute_example_preview'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Html
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • copy(self, default=None)
  • unlink(self)

New fields (9)
  • days Integer
    default=0 required=True string='Days'
  • days_after Integer
    help='Days to add after the end of the month' string='Days after End of month'
  • discount_days Integer
    help='Number of days before the early payment proposition expires' string='Discount Days'
  • discount_percentage Float
    help='Early Payment Discount granted for this line' string='Discount %'
  • end_month Boolean
    help='Switch to end of the month after having added months or days' string='End of month'
  • months Integer
    default=0 required=True string='Months'
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • value Selection
    default='percent' help='Select here the kind of valuation related to this payment terms line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits='Payment Terms' help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (35)
  • active Boolean
    default=True
  • allow_payment_tolerance Boolean
    default=True help='Difference accepted in case of underpayment.' string='Payment Tolerance' tracking=True
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate' tracking=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • decimal_separator Char
    default=<expr> help='Every character that is nor a digit nor this separator will be removed from the matching string' tracking=True
  • line_ids One2many → account.reconcile.model.line
    copy=True args: 'account.reconcile.model.line', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount Condition' tracking=True
  • match_amount_max Float
    string='Amount Max Parameter' tracking=True
  • match_amount_min Float
    string='Amount Min Parameter' tracking=True
  • match_journal_ids Many2many → account.journal
    check_company=True domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" help='The reconciliation model will only be available from the selected journals.' string='Journals Availability' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label' tracking=True
  • match_label_param Char
    string='Label Parameter' tracking=True
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Received'), ('amount_paid', 'Paid'), ('both', 'Paid/Received')] string='Amount Type' tracking=True
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note' tracking=True
  • match_note_param Char
    string='Note Parameter' tracking=True
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner is Set' tracking=True
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Matching categories' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Matching partners' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency' tracking=True
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference" tracking=True
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference" tracking=True
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference" tracking=True
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type' tracking=True
  • match_transaction_type_param Char
    string='Transaction Type Parameter' tracking=True
  • matching_order Selection
    default='old_first' required=True selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')] tracking=True
  • name Char
    required=True string='Name'
  • number_entries Integer
    compute='_compute_number_entries' string='Number of entries related to this model'
  • partner_mapping_line_ids One2many → account.reconcile.model.partner.mapping
    comodel_name='account.reconcile.model.partner.mapping' help='The mapping uses regular expressions.\n- To Match the text at the beginning of the line (in label or notes), simply fill in your text.\n- To Match the text anywhere (in label or notes), put your text between .*\n e.g: .*N°48748 abc123.*' inverse_name='model_id' string='Partner Mapping Lines'
  • past_months_limit Integer
    default=18 help='Number of months in the past to consider entries from when applying this model.' string='Search Months Limit' tracking=True
  • payment_tolerance_param Float
    compute='_compute_payment_tolerance_param' help='The sum of total residual amount propositions matches the statement line amount under this amount/percentage.' readonly=False store=True string='Gap' tracking=True
  • payment_tolerance_type Selection
    default='percentage' help='The sum of total residual amount propositions and the statement line amount allowed gap type.' required=True selection=[('percentage', 'in percentage'), ('fixed_amount', 'in amount')] tracking=True
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Button to generate counterpart entry'), ('writeoff_suggestion', 'Rule to suggest counterpart entry'), ('invoice_matching', 'Rule to match invoices/bills')] string='Type' tracking=True
  • sequence Integer
    default=10 required=True
  • show_decimal_separator Boolean
    compute='_compute_show_decimal_separator'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (2)
  • action_reconcile_stat(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" ondelete='cascade' required=True string='Account' args: 'account.account'
  • allow_payment_tolerance Boolean
    related='model_id.allow_payment_tolerance'
  • amount Float
    compute='_compute_float_amount' store=True string='Float Amount'
  • amount_string Char
    default='100' help='Value for the amount of the writeoff line\n * Percentage: Percentage of the balance, between 0 and 100.\n * Fixed: The fixed value of the writeoff. The amount will count as a debit if it is negative, as a credit if it is positive.\n * From Label: There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)' required=True string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('percentage_st_line', 'Percentage of statement line'), ('regex', 'From label')]
  • company_id Many2one
    related='model_id.company_id' store=True
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label'
  • model_id Many2one → account.reconcile.model
    ondelete='cascade' readonly=True args: 'account.reconcile.model'
  • payment_tolerance_param Float
    related='model_id.payment_tolerance_param'
  • rule_type Selection
    related='model_id.rule_type'
  • sequence Integer
    default=10 required=True
  • show_force_tax_included Boolean
    compute='_compute_show_force_tax_included'
  • tax_ids Many2many → account.tax
    check_company=True ondelete='restrict' string='Taxes' args: 'account.tax'
Public methods (0)

No public methods.

New fields (8)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount_string Char
    string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • label Char
    string='Journal Item Label'
  • model_id Many2one → account.reconcile.model.template
    args: 'account.reconcile.model.template'
  • sequence Integer
    default=10 required=True
  • tax_ids Many2many → account.tax.template
    ondelete='restrict' string='Taxes' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (4)
  • model_id Many2one → account.reconcile.model
    comodel_name='account.reconcile.model' ondelete='cascade' readonly=True required=True
  • narration_regex Char
    string='Find Text in Notes'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='cascade' required=True string='Partner'
  • payment_ref_regex Char
    string='Find Text in Label'
Public methods (1)
  • validate_regex(self)
    @api.constrains('narration_regex', 'payment_ref_regex')

New fields (30)
  • allow_payment_tolerance Boolean
    default=True help='Difference accepted in case of underpayment.' string='Allow Payment Gap'
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • decimal_separator Char
    help='Every character that is nor a digit nor this separator will be removed from the matching string'
  • line_ids One2many → account.reconcile.model.line.template
    args: 'account.reconcile.model.line.template', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount Condition'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals Availability' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Type'
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note'
  • match_note_param Char
    string='Note Parameter'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency'
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference"
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference"
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference"
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type'
  • match_transaction_type_param Char
    string='Transaction Type Parameter'
  • matching_order Selection
    selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')]
  • name Char
    required=True string='Button Label'
  • payment_tolerance_param Float
    default=0.0 help='The sum of total residual amount propositions matches the statement line amount under this amount/percentage.' string='Gap'
  • payment_tolerance_type Selection
    default='percentage' help='The sum of total residual amount propositions and the statement line amount allowed gap type.' required=True selection=[('percentage', 'in percentage'), ('fixed_amount', 'in amount')]
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Button to generate counterpart entry'), ('writeoff_suggestion', 'Rule to suggest counterpart entry'), ('invoice_matching', 'Rule to match invoices/bills')] string='Type'
  • sequence Integer
    default=10 required=True
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (0)

No public methods.

New fields (25)
  • availability_condition Selection
    compute='_compute_default_availability_condition' readonly=False selection=[('country', 'Country Matches'), ('coa', 'Chart of Accounts Matches'), ('always', 'Always')] store=True string='Availability'
  • chart_template_id Many2one → account.chart.template
    comodel_name='account.chart.template' string='Chart of Accounts'
  • column_ids One2many → account.report.column
    comodel_name='account.report.column' inverse_name='report_id' string='Columns'
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • default_opening_date_filter Selection
    compute=<expr> depends=['root_report_id'] readonly=False selection=[('this_year', 'This Year'), ('this_quarter', 'This Quarter'), ('this_month', 'This Month'), ('today', 'Today'), ('last_month', 'Last Month'), ('last_quarter', 'Last Quarter'), ('last_year', 'Last Year')] store=True string='Default Opening'
  • filter_account_type Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Account Types'
  • filter_analytic Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Analytic Filter'
  • filter_date_range Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Date Range'
  • filter_fiscal_position Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Filter Multivat'
  • filter_growth_comparison Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Growth Comparison'
  • filter_hierarchy Selection
    compute=<expr> depends=['root_report_id'] readonly=False selection=[('by_default', 'Enabled by Default'), ('optional', 'Optional'), ('never', 'Never')] store=True string='Account Groups'
  • filter_journals Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Journals'
  • filter_multi_company Selection
    compute=<expr> depends=['root_report_id'] readonly=False selection=[('disabled', 'Disabled'), ('selector', 'Use Company Selector'), ('tax_units', 'Use Tax Units')] store=True string='Multi-Company'
  • filter_partner Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Partners'
  • filter_period_comparison Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Period Comparison'
  • filter_show_draft Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Draft Entries'
  • filter_unfold_all Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Unfold All'
  • filter_unreconciled Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Unreconciled Entries'
  • line_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='report_id' string='Lines'
  • load_more_limit Integer
    string='Load More Limit'
  • name Char
    required=True string='Name' translate=True
  • only_tax_exigible Boolean
    compute=<expr> depends=['root_report_id'] readonly=False store=True string='Only Tax Exigible Lines'
  • root_report_id Many2one → account.report
    comodel_name='account.report' help='The report this report is a variant of.' string='Root Report'
  • search_bar Boolean
    string='Search Bar'
  • variant_report_ids One2many → account.report
    comodel_name='account.report' inverse_name='root_report_id' string='Variants'
Public methods (3)
  • copy(self, default=None)
    Copy the whole financial report hierarchy by duplicating each line recursively. :param default: Default values. :return: The copied account.report record.
  • name_get(self)
    @api.depends('name', 'country_id')
  • write(self, vals)

New fields (8)
  • blank_if_zero Boolean
    default=True help='When checked, 0 values will not show in this column.' string='Blank if Zero'
  • custom_audit_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' string='Custom Audit Action'
  • expression_label Char
    required=True string='Expression Label'
  • figure_type Selection
    default='monetary' required=True selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • name Char
    required=True string='Name' translate=True
  • report_id Many2one → account.report
    comodel_name='account.report' string='Report'
  • sequence Integer
    string='Sequence'
  • sortable Boolean
    string='Sortable'
Public methods (0)

No public methods.

New fields (12)
  • auditable Boolean
    compute='_compute_auditable' readonly=False store=True string='Auditable'
  • blank_if_zero Boolean
    help="When checked, 0 values will not show when displaying this expression's value." string='Blank if Zero'
  • carryover_target Char
    help="Formula in the form line_code.expression_label. This allows setting the target of the carryover for this expression (on a _carryover_*-labeled expression), in case it is different from the parent line. 'custom' is also allowed as value in case the carryover destination requires more complex logic." string='Carry Over To'
  • date_scope Selection
    default='strict_range' required=True selection=[('from_beginning', 'From the very start'), ('from_fiscalyear', 'From the start of the fiscal year'), ('to_beginning_of_fiscalyear', 'At the beginning of the fiscal year'), ('to_beginning_of_period', 'At the beginning of the period'), ('normal', 'According to each type of account'), ('strict_range', 'Strictly on the given dates'), ('previous_tax_period', 'From previous tax period')] string='Date Scope'
  • engine Selection
    required=True selection=[('domain', 'Odoo Domain'), ('tax_tags', 'Tax Tags'), ('aggregation', 'Aggregate Other Formulas'), ('account_codes', 'Prefix of Account Codes'), ('external', 'External Value'), ('custom', 'Custom Python Function')] string='Computation Engine'
  • figure_type Selection
    selection=FIGURE_TYPE_SELECTION_VALUES string='Figure Type'
  • formula Char
    required=True string='Formula'
  • green_on_positive Boolean
    default=True string='Is Growth Good when Positive'
  • label Char
    required=True string='Label'
  • report_line_id Many2one → account.report.line
    comodel_name='account.report.line' ondelete='cascade' required=True string='Report Line'
  • report_line_name Char
    related='report_line_id.name' string='Report Line Name'
  • subformula Char
    string='Subformula'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
  • write(self, vals)

New fields (11)
  • carryover_origin_expression_label Char
    string='Origin Expression Label'
  • carryover_origin_report_line_id Many2one → account.report.line
    comodel_name='account.report.line' string='Origin Line'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    required=True
  • foreign_vat_fiscal_position_id Many2one → account.fiscal.position
    check_company=True comodel_name='account.fiscal.position' domain="[('company_id', '=', company_id), ('country_id', '=', report_country_id), ('foreign_vat', '!=', False)]" help='The foreign fiscal position for which this external value is made.' string='Fiscal position'
  • name Char
    required=True
  • report_country_id Many2one
    related='target_report_line_id.report_id.country_id' string='Country'
  • target_report_expression_id Many2one → account.report.expression
    comodel_name='account.report.expression' ondelete='cascade' required=True string='Target Expression'
  • target_report_expression_label Char
    related='target_report_expression_id.label' string='Target Expression Label'
  • target_report_line_id Many2one
    related='target_report_expression_id.report_line_id' string='Target Line'
  • value Float
    required=True
Public methods (0)

No public methods.

New fields (17)
  • account_codes_formula Char
    help='Internal field to shorten expression_ids creation for the account_codes engine' inverse='_inverse_account_codes_formula' store=False string='Account Codes Formula Shortcut'
  • action_id Many2one → ir.actions.actions
    comodel_name='ir.actions.actions' help='Setting this field will turn the line into a link, executing the action when clicked.' string='Action'
  • aggregation_formula Char
    help='Internal field to shorten expression_ids creation for the aggregation engine' inverse='_inverse_aggregation_formula' store=False string='Aggregation Formula Shortcut'
  • children_ids One2many → account.report.line
    comodel_name='account.report.line' inverse_name='parent_id' string='Child Lines'
  • code Char
    help='Unique identifier for this line.' string='Code'
  • domain_formula Char
    help='Internal field to shorten expression_ids creation for the domain engine' inverse='_inverse_domain_formula' store=False string='Domain Formula Shortcut'
  • expression_ids One2many → account.report.expression
    comodel_name='account.report.expression' inverse_name='report_line_id' string='Expressions'
  • foldable Boolean
    help="By default, we always unfold the lines that can be. If this is checked, the line won't be unfolded by default, and a folding button will be displayed." string='Foldable'
  • groupby Char
    help='Comma-separated list of fields from account.move.line (Journal Item). When set, this line will generate sublines grouped by those keys.' string='Group By'
  • hide_if_zero Boolean
    help='This line and its children will be hidden when all of their columns are 0.' string='Hide if Zero'
  • hierarchy_level Integer
    compute='_compute_hierarchy_level' precompute=True readonly=False recursive=True required=True store=True string='Level'
  • name Char
    required=True string='Name' translate=True
  • parent_id Many2one → account.report.line
    comodel_name='account.report.line' ondelete='set null' string='Parent Line'
  • print_on_new_page Boolean
    help='When checked this line and everything after it will be printed on a new page.' args: 'Print On New Page'
  • report_id Many2one → account.report
    comodel_name='account.report' compute='_compute_report_id' ondelete='cascade' precompute=True readonly=False recursive=True required=True store=True string='Parent Report'
  • sequence Integer
    string='Sequence'
  • tax_tags_formula Char
    help='Internal field to shorten expression_ids creation for the tax_tags engine' inverse='_inverse_aggregation_tax_formula' store=False string='Tax Tags Formula Shortcut'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    help='Date (inclusive) to which the numbers are resequenced. If not set, all Journal Entries up to the end of the period are resequenced.'
  • first_date Date
    help='Date (inclusive) from which the numbers are resequenced.'
  • first_name Char
    compute='_compute_first_name' readonly=False required=True store=True string='First New Sequence'
  • move_ids Many2many → account.move
    args: 'account.move'
  • new_values Text
    compute='_compute_new_values'
  • ordering Selection
    default='keep' required=True args: [('keep', 'Keep current order'), ('date', 'Reorder by accounting date')]
  • preview_moves Text
    compute='_compute_preview_moves'
  • sequence_number_reset Char
    compute='_compute_sequence_number_reset'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • resequence(self)

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company'
  • name Char
  • parent_id Many2one → account.root
    args: 'account.root'
Public methods (1)
  • init(self)

New fields (5)
  • bank_bic Char
    readonly=False related='bank_id.bic' string='Bic'
  • linked_journal_id Many2one → account.journal
    comodel_name='account.journal' compute='_compute_linked_journal_id' domain=<expr> inverse='set_linked_journal_id' string='Journal'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account Integer
    default=<expr>
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (24)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0.0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage of Price: The tax amount is a % of the price:\n e.g 100 * (1 + 10%) = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage of Price Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    check_company=True string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • country_code Char
    readonly=True related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' help='The country for which this tax is applicable.' required=True string='Country'
  • description Char
    string='Label on Invoices'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Base of Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Distribution when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Distribution for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes'
  • name Char
    required=True string='Tax Name'
  • name_searchable Char
    help="This dummy field lets us use another search method on the field 'name'.This allows more freedom on how to search the 'name' compared to 'filter_domain'.See '_search_name' and '_parse_name_search' for why this is not possible with 'filter_domain'." search='_search_name' store=False
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • real_amount Float
    compute='_compute_real_amount' store=True string='Real amount to apply'
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Distribution when the tax is used on a refund' inverse_name='refund_tax_id' string='Distribution for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Exigibility' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    default=_default_tax_group domain="[('country_id', 'in', (country_id, False))]" required=True string='Tax Group' args: 'account.tax.group'
  • tax_scope Selection
    help='Restrict the use of taxes to a type of product.' string='Tax Scope' args: [('service', 'Services'), ('consu', 'Goods')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Type' args: TYPE_TAX_USE
Public methods (11)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, fixed_multiplicator=1)
    Compute all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] :param price_unit: The unit price of the line to compute taxes on. :param currency: The optional currency in which the price_unit is expressed. :param quantity: The optional quantity of the product to compute taxes on. :param product: The optional product to compute taxes on. Used to get the tags to apply on the lines. :param partner: The optional partner compute taxes on. Used to retrieve the lang to build strings and for potential extensions. :param is_refund: The optional boolean indicating if this is a refund. :param handle_price_include: Used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. :param include_caba_tags: The optional boolean indicating if CABA tags need to be taken into account. :param fixed_multiplicator: The amount to multiply fixed amount taxes by. :return: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'base_tags: : list<int>, # Tags to apply on the base line 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'base': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': bool, 'price_include': bool, 'tax_exigibility': str, 'tax_repartition_line_id': int, 'group': recordset, 'tag_ids': list<int>, 'tax_ids': list<int>, }], }
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields_list)
    @api.model
  • flatten_taxes_hierarchy(self, create_map=False)
  • get_tax_tags(self, is_refund, repartition_type)
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None, is_refund=False, include_caba_tags=False)
    Called by the reconciliation to compute taxes on writeoff during bank reconciliation
  • name_get(self)
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')
  • validate_tax_group_id(self)
    @api.constrains('tax_group_id')

New fields (8)
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' help='The country for which this tax group is applicable.' string='Country'
  • name Char
    required=True translate=True
  • preceding_subtotal Char
    help="If set, this value will be used on documents as the label of a subtotal excluding this tax group before displaying it. If not set, the tax group will be displayed after the 'Untaxed amount' subtotal." string='Preceding Subtotal'
  • property_advance_tax_payment_account_id Many2one → account.account
    comodel_name='account.account' company_dependent=True help='Downpayments posted on this account will be considered by the Tax Closing Entry.' string='Tax Advance Account'
  • property_tax_payable_account_id Many2one → account.account
    comodel_name='account.account' company_dependent=True help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the authorities.' string='Tax Payable Account'
  • property_tax_receivable_account_id Many2one → account.account
    comodel_name='account.account' company_dependent=True help='Tax current account used as a counterpart to the Tax Closing Entry when in favor of the company.' string='Tax Receivable Account'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (13)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', 'not in', ('asset_receivable', 'liability_payable', 'off_balance'))]" help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company' help='The company this distribution line belongs to.' store=True string='Company'
  • document_type Selection
    compute='_compute_document_type' help='The type of documnet on which the repartition line should be applied' selection=[('invoice', 'Invoice'), ('refund', 'Refund')]
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this distribution line' string='Factor Ratio'
  • factor_percent Float
    default=100 help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' help='The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id' ondelete='cascade'
  • refund_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' help='The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id' ondelete='cascade'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which distribution lines are displayed and matched. For refunds to work properly, invoice distribution lines should be arranged in the same order as the credit note distribution lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] ondelete='restrict' string='Tax Grids'
  • tag_ids_domain Binary
    compute='_compute_tag_ids_domain' help='Dynamic domain used for the tag that can be set on tax' string='tag domain'
  • tax_id Many2one → account.tax
    comodel_name='account.tax' compute='_compute_tax_id'
  • use_in_tax_closing Boolean
    default=True string='Tax Closing Entry'
Public methods (1)
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (9)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' help='Account on which to post the tax amount' string='Account'
  • factor_percent Float
    default=100 help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id'
  • minus_report_expression_ids Many2many → account.report.expression
    comodel_name='account.report.expression' copy=True help="Tax report expressions whose '-' tag will be assigned to move lines by this repartition line" relation='account_tax_rep_template_minus' string='Minus Report Expressions'
  • plus_report_expression_ids Many2many → account.report.expression
    comodel_name='account.report.expression' copy=True help="Tax report expressions whose '+' tag will be assigned to move lines by this repartition line" relation='account_tax_rep_template_plus' string='Plus Tax Report Expressions'
  • refund_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True help='Additional tags that will be assigned by this repartition line for use in domains' relation='account_tax_repartition_financial_tags' string='Financial Tags'
  • use_in_tax_closing Boolean
    string='Tax Closing Entry'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • get_repartition_line_create_vals(self, company)
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (19)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Repartition for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on a refund' inverse_name='refund_tax_id' string='Repartition for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • tax_scope Selection
    help='Restrict the use of taxes to a type of product.' args: [('service', 'Service'), ('consu', 'Consumable')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Type' args: TYPE_TAX_USE
Public methods (1)
  • name_get(self)
    @api.depends('name', 'description')

New fields (3)
  • attachment_ids Many2many → ir.attachment
    comodel_name='ir.attachment' relation='account_tour_upload_bill_ir_attachments_rel' string='Attachments'
  • preview_invoice Html
    compute='_compute_preview_invoice' string='Invoice Preview' translate=True
  • selection Selection
    default=<expr> selection=<expr>
Public methods (1)
  • apply(self)

New fields (1)
  • email_alias Char
    readonly=True
Public methods (1)
  • apply(self)

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)

New fields (0)

No new fields.

Public methods (1)
  • document_layout_save(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • precision_get(self, application)

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_download_xsd_files(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_account_kpi_summary(self)
    @api.model
  • get_kpi_summary(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (1)
  • tax_string Char
    compute='_compute_tax_string'
Public methods (0)

No public methods.

New fields (6)
  • account_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' domain="[('applicability', '=', 'products')]" help='Tags to be set on the base and tax journal items created for this product.' string='Account Tags'
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category.' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product.' string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • tax_string Char
    compute='_compute_tax_string'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product.' string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (1)
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (66)
  • account_cash_basis_base_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • account_dashboard_onboarding_state Selection
    default='not_done' string='State of the account dashboard onboarding panel' args: DASHBOARD_ONBOARDING_STATES
  • account_default_pos_receivable_account_id Many2one → account.account
    string='Default PoS Receivable Account' args: 'account.account'
  • account_enabled_tax_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_account_enabled_tax_country_ids' help='Technical field containing the countries for which this company is using tax-related features(hence the ones for which l10n modules need to show tax-related fields).' string='l10n-used countries'
  • account_fiscal_country_id Many2one → res.country
    comodel_name='res.country' compute='compute_account_tax_fiscal_country' help='The country to use the tax reports from for this company' readonly=False store=True string='Fiscal Country'
  • account_invoice_onboarding_state Selection
    default='not_done' string='State of the account invoice onboarding panel' args: DASHBOARD_ONBOARDING_STATES
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    comodel_name='account.account' string='Cash Discount Write-Off Gain Account'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    comodel_name='account.account' string='Cash Discount Write-Off Loss Account'
  • account_journal_payment_credit_account_id Many2one → account.account
    string='Journal Outstanding Payments Account' args: 'account.account'
  • account_journal_payment_debit_account_id Many2one → account.account
    string='Journal Outstanding Receipts Account' args: 'account.account'
  • account_journal_suspense_account_id Many2one → account.account
    string='Journal Suspense Account' args: 'account.account'
  • account_onboarding_create_invoice_state Selection
    compute='_compute_account_onboarding_create_invoice_state' string='State of the onboarding create invoice step' args: ONBOARDING_STEP_STATES
  • account_onboarding_create_invoice_state_flag Boolean
    default=False store=True
  • account_onboarding_invoice_layout_state Selection
    default='not_done' string='State of the onboarding invoice layout step' args: ONBOARDING_STEP_STATES
  • account_onboarding_sale_tax_state Selection
    default='not_done' string='State of the onboarding sale tax step' args: ONBOARDING_STEP_STATES
  • account_opening_date Date
    default=<expr> help='That is the date of the opening entry.' required=True string='Opening Entry'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_purchase_tax_id Many2one → account.tax
    string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    string='Default Sale Tax' args: 'account.tax'
  • account_setup_bank_data_state Selection
    default='not_done' string='State of the onboarding bank data step' args: ONBOARDING_STEP_STATES
  • account_setup_bill_state Selection
    default='not_done' string='State of the onboarding bill step' args: ONBOARDING_STEP_STATES
  • account_setup_coa_state Selection
    default='not_done' string='State of the onboarding charts of account step' args: ONBOARDING_STEP_STATES
  • account_setup_fy_data_state Selection
    default='not_done' string='State of the onboarding fiscal year step' args: ONBOARDING_STEP_STATES
  • account_setup_taxes_state Selection
    default='not_done' string='State of the onboarding Taxes step' args: ONBOARDING_STEP_STATES
  • account_storno Boolean
    readonly=False string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' string='Sales Credit Limit'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • automatic_entry_default_journal_id Many2one → account.journal
    domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • country_code Char
    depends=['country_id'] related='country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    string='Cash Difference Expense Account' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    string='Cash Difference Income Account' args: 'account.account'
  • early_pay_discount_computation Selection
    compute='_compute_early_pay_discount_computation' readonly=False store=True string='Cash Discount Tax Reduction' args: [('included', 'On early payment'), ('excluded', 'Never'), ('mixed', 'Always (upon invoice)')]
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'liability'), ('account_type', 'not in', ('asset_receivable', 'liability_payable')), ('company_id', '=', id)]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', id), ('account_type', '=', 'expense')]" string='Loss Exchange Rate Account'
  • fiscal_position_ids One2many → account.fiscal.position
    comodel_name='account.fiscal.position' inverse_name='company_id'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='All Users Lock Date' tracking=True
  • income_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', id), ('internal_group', '=', 'income')]" string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    default=True args: 'Email by default'
  • invoice_is_print Boolean
    default=True args: 'Print by default'
  • invoice_terms Html
    string='Default Terms and Conditions' translate=True
  • invoice_terms_html Html
    compute='_compute_invoice_terms_html' readonly=False sanitize_attributes=False store=True string='Default Terms and Conditions as a Web page' translate=True
  • multi_vat_foreign_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_multi_vat_foreign_country' help='Countries for which the company has a VAT number' string='Foreign VAT countries'
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Journals Entries Lock Date' tracking=True
  • property_stock_account_input_categ_id Many2one → account.account
    string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • qr_code Boolean
    string='Display QR-code on invoices'
  • quick_edit_mode Selection
    selection=[('out_invoices', 'Customer Invoices'), ('in_invoices', 'Vendor Bills'), ('out_and_in_invoices', 'Customer Invoices and Vendor Bills')] string='Quick encoding'
  • revenue_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'asset'), ('account_type', 'not in', ('asset_receivable', 'liability_payable')), ('company_id', '=', id)]" help='Account used to move the period of a revenue' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    comodel_name='account.journal' string='Cash Basis Journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help='No users can edit journal entries related to a tax prior and inclusive of this date.' string='Tax Return Lock Date' tracking=True
  • terms_type Selection
    default='plain' string='Terms & Conditions format' args: [('plain', 'Add a Note'), ('html', 'Add a link to a Web Page')]
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    domain="[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)]" help='Intermediary account used when moving money from a liqity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (24)
  • action_close_account_dashboard_onboarding(self)
    @api.model
    Mark the dashboard onboarding panel as closed.
  • action_close_account_invoice_onboarding(self)
    @api.model
    Mark the invoice onboarding panel as closed.
  • action_open_account_onboarding_create_invoice(self)
    @api.model
  • action_open_account_onboarding_sale_tax(self)
    @api.model
    Onboarding step for the invoice layout.
  • action_open_taxes_onboarding(self)
    @api.model
    Called by the 'Taxes' button of the setup bar.
  • action_save_onboarding_invoice_layout(self)
    Set the onboarding step as done
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • compute_account_tax_fiscal_country(self)
    @api.depends('country_id')
  • compute_fiscalyear_dates(self, current_date)
    Returns the dates of the fiscal year containing the provided date for this company. :return: A dictionary containing: * date_from * date_to
  • create_op_move_if_non_existant(self)
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_account_dashboard_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (account_winbooks_import in this case).
  • get_account_invoice_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (payment provider in this case).
  • get_and_update_account_dashboard_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_and_update_account_invoice_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_chart_of_accounts_action(self)
    @api.model
    Called by the 'Chart of Accounts' button of the setup bar.
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar.
  • setting_init_fiscal_year_action(self)
    @api.model
    Called by the 'Fiscal Year Opening' button of the setup bar.
  • write(self, values)

New fields (63)
  • account_cash_basis_base_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] readonly=False related='company_id.account_cash_basis_base_account_id' string='Base Tax Received Account'
  • account_default_credit_limit Monetary
    compute='_compute_account_default_credit_limit' help='This is the default credit limit that will be used on partners that do not have a specific limit on them.' inverse='_inverse_account_default_credit_limit' readonly=False string='Default Credit Limit'
  • account_fiscal_country_id Many2one
    readonly=False related='company_id.account_fiscal_country_id' store=False string='Fiscal Country Code'
  • account_journal_early_pay_discount_gain_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', 'in', ('income', 'income_other', 'expense'))]" help='Account for the difference amount after the income discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_gain_account_id' string='Cash Discount Gain account'
  • account_journal_early_pay_discount_loss_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', 'in', ('expense', 'income', 'income_other'))]" help='Account for the difference amount after the expense discount has been granted' readonly=False related='company_id.account_journal_early_pay_discount_loss_account_id' string='Cash Discount Loss account'
  • account_journal_payment_credit_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=', 'asset_current')]" help='Outgoing Payments are posted on an Outstanding Payments Account. In the bank reconciliation widget, they appear as blue lines.\nBank transactions are then reconciled on the Outstanding Payments Account rather the Payable Account.' readonly=False related='company_id.account_journal_payment_credit_account_id' string='Outstanding Payments Account'
  • account_journal_payment_debit_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=', 'asset_current')]" help='Incoming payments are posted on an Outstanding Receipts Account. In the bank reconciliation widget, they appear as blue lines.\nBank transactions are then reconciled on the Outstanding Receipts Accounts rather than the Receivable Account.' readonly=False related='company_id.account_journal_payment_debit_account_id' string='Outstanding Receipts Account'
  • account_journal_suspense_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', 'in', ('asset_current', 'liability_current'))]" help='Bank Transactions are posted immediately after import or synchronization. Their counterparty is the bank suspense account.\nReconciliation replaces the latter by the definitive account(s).' readonly=False related='company_id.account_journal_suspense_account_id' string='Bank Suspense Account'
  • account_storno Boolean
    readonly=False related='company_id.account_storno' string='Storno accounting'
  • account_use_credit_limit Boolean
    help='Enable the use of credit limit on partners.' readonly=False related='company_id.account_use_credit_limit' string='Sales Credit Limit'
  • chart_template_id Many2one → account.chart.template
    default=<expr> domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Currency Exchange Journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • early_pay_discount_computation Selection
    readonly=False related='company_id.early_pay_discount_computation' string='Tax setting'
  • expense_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('account_type', '=', 'expense')]" readonly=False related='company_id.expense_currency_exchange_account_id' string='Loss Account'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_sale_delivery_address Boolean
    implied_group='account.group_delivery_invoice_address' args: 'Customer Addresses'
  • group_show_line_subtotals_tax_excluded Boolean
    compute='_compute_group_show_line_subtotals' group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_excluded' readonly=False store=True args: 'Show line subtotals without taxes (B2B)'
  • group_show_line_subtotals_tax_included Boolean
    compute='_compute_group_show_line_subtotals' group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_included' readonly=False store=True args: 'Show line subtotals with taxes (B2C)'
  • group_show_purchase_receipts Boolean
    implied_group='account.group_purchase_receipts' string='Purchase Receipt'
  • group_show_sale_receipts Boolean
    implied_group='account.group_sale_receipts' string='Sale Receipt'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • income_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('internal_group', '=', 'income')]" readonly=False related='company_id.income_currency_exchange_account_id' string='Gain Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    readonly=False related='company_id.invoice_is_email' string='Send Email'
  • invoice_is_print Boolean
    readonly=False related='company_id.invoice_is_print' string='Print'
  • invoice_terms Html
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • invoice_terms_html Html
    readonly=False related='company_id.invoice_terms_html' string='Terms & Conditions as a Web page'
  • is_account_peppol_eligible Boolean
    compute='_compute_is_account_peppol_eligible' string='PEPPOL eligible'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    string='Document Digitization'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_oss Boolean
    string='EU Intra-community Distance Selling'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • preview_ready Boolean
    compute='_compute_terms_preview' string='Display preview button'
  • purchase_tax_id Many2one → account.tax
    readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR-code'
  • quick_edit_mode Selection
    readonly=False related='company_id.quick_edit_mode' string='Quick encoding'
  • sale_tax_id Many2one → account.tax
    readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • show_line_subtotals_tax_selection Selection
    config_parameter='account.show_line_subtotals_tax_selection' default='tax_excluded' required=True string='Line Subtotals Tax Display' args: [('tax_excluded', 'Tax Excluded'), ('tax_included', 'Tax Included')]
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_journal_id Many2one → account.journal
    readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • terms_type Selection
    readonly=False related='company_id.terms_type'
  • transfer_account_id Many2one → account.account
    domain=[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)] help='Intermediary account used when moving from a liquidity account to another.' readonly=False related='company_id.transfer_account_id' string='Internal Transfer Account' args: 'account.account'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (4)
  • action_update_terms(self)
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • set_values(self)

New fields (1)
  • display_rounding_warning Boolean
    compute='_compute_display_rounding_warning' help="The warning informs a rounding factor change might be dangerous on res.currency's form view." string='Display Rounding Warning'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • get_application_groups(self, domain)
    @api.model

New fields (28)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • credit_limit Float
    company_dependent=True copy=False groups='account.group_account_invoice,account.group_account_readonly' help='Credit limit specific to this partner.' readonly=False string='Credit Limit'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • debit Monetary
    compute='_credit_debit_get' groups='account.group_account_invoice,account.group_account_readonly' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • duplicated_bank_account_partners_count Integer
    compute='_compute_duplicated_bank_account_partners_count'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • is_coa_installed Boolean
    default=<expr> store=False
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('account_type', '=', 'liability_payable'), ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used instead of the default one as the payable account for the current partner' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True domain="[('company_id', '=', current_company_id)]" help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('account_type', '=', 'asset_receivable'), ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used instead of the default one as the receivable account for the current partner' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True domain="[('company_id', 'in', [current_company_id, False])]" help='This payment term will be used instead of the default one for sales orders and customer invoices' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True domain="[('company_id', 'in', [current_company_id, False])]" help='This payment term will be used instead of the default one for purchase orders and vendor bills' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • show_credit_limit Boolean
    compute='_compute_show_credit_limit' default=<expr> groups='account.group_account_invoice,account.group_account_readonly'
  • supplier_invoice_count Integer
    compute='_compute_supplier_invoice_count' string='# Vendor Bills'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice,account.group_account_readonly' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
  • use_partner_credit_limit Boolean
    compute='_compute_use_partner_credit_limit' groups='account.group_account_invoice,account.group_account_readonly' help='Set a value greater than 0.0 to activate a credit limit check' inverse='_inverse_use_partner_credit_limit' string='Partner Limit'
Public methods (6)
  • action_view_partner_invoices(self)
  • action_view_partner_with_same_bank(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • get_partner_localisation_fields_required_to_invoice(self, country_id)
    @api.model
    Returns the list of fields that needs to be filled when creating an invoice for the selected country. This is required for some flows that would allow a user to request an invoice from the portal. Using these, we can get their information and dynamically create form inputs based for the fields required legally for the company country_id. The returned fields must be of type ir.model.fields in order to handle translations :param country_id: The country for which we want the fields. :return: an array of ir.model.fields for which the user should provide values.
  • mark_as_reconciled(self)

New fields (8)
  • acc_holder_name Char
    tracking=True
  • acc_number Char
    tracking=True
  • active Boolean
    tracking=True
  • allow_out_payment Boolean
    tracking=True
  • bank_id Many2one
    tracking=True
  • currency_id Many2one
    tracking=True
  • journal_id One2many → account.journal
    domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
  • partner_id Many2one
    tracking=True
Public methods (7)
  • build_qr_code_base64(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • build_qr_code_url(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
  • get_available_qr_methods_in_sequence(self)
    @api.model
    Same as _get_available_qr_methods but without returning the sequence, and using it directly to order the returned list.
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sequence_number Integer
    compute='_compute_split_sequence' store=True
  • sequence_prefix Char
    compute='_compute_split_sequence' store=True
Public methods (1)
  • init(self)

New fields (1)
  • force_post Boolean
    help='Entries in the future are set to be auto-posted by default. Check this checkbox to post them now.' string='Force'
Public methods (1)
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/account
VERSION
VERSION 1.2
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Stéphane Bidoul, Martin Trigaux, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Mohammed Shekha, Cedric Snauwaert, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Dharmraj Jhala, Nicolas Seinlet, Pierre Masereel, Romain Derie, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Nathan de Pryck, wan, mreficent, Julien Castiaux, Xavier-Do, Denis Roussel, Romeo Fragomeli, Carlos Dauden, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Akim Juillerat, Joseph Caburnay, Nasreddin (bon), alt-odoo, oco-odoo, Florent de Labarre, Julien Mougenot, Anh Thao Pham (pta), Alvaro Fuentes, Rémy Baranx (bar), Achraf (abz), Carlos Lopez, Brice bib Bartoletti, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Touati Djamel (otd), Nicolas Galler, Swapnesh Shah, nie, Tiffany Chang (tic), Nathan Marotte (nama), IEL, Rémy Voet (ryv), Andrius Laukavičius, Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, snd, Julien CHEVREAU (JCU), jbw, Djamel (otd), Jalpesh Patel, Benjamin Frantzen (bfr), Aurélien (avd), Arnaud Joset, Elmeri Niemelä, William Braeckman, root, Kevin Baptiste, Guillaume (guva), Raf Geens, Stefan-Calin Crainiciuc (stcc), Pablo Paez, roen-odoo, Benoit Socias, Stanislas Sobieski, Hubert Van de Walle (huvw), Hardik Prajapati, Miquel Raïch, momegahed, Jigar Vaghela, Ricardo Gomes Rodrigues (rigr), Bruno-brsy, Nicolas (vin), william-andre, Paolo (pgi), Julien Van Roy, Florian Damhaut, Merlin (megu), MerlinGuillaume, yhu-odoo, thcl-odoo, Juan Jose Scarafia, nicolas, aliya, william, anhe-odoo, Agustín Castro Bugallo, Nshimiyimana Séna, Louis Baudoux, John (jol), BVE, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), Pouya Malekinejad, Thomas (det), John Laterre (jol), Florian Gilbert, Ruben Gomes, Thomas Beckers, Adrien Minet, Swapnesh, Nicolas Bayet, Antoine Vandevenne (anv), Jinjiu Liu, Laurent Stukkens (LTU), gawa-odoo, dbkosky, Aurelien van Delft (avd), Michael Mattiello (mcm), Florian(flg), dht-odoo, Roy Le, Stanislas Gueniffey, niyasraphy, jbw-odoo, Sébastien BEAU, bve-odoo, Habib (ayh), baa, Thomas Lefebvre (thle), alsh-odoo, Matheus Leal Viana (malv), Gaetan Vanden Bergh (gavb), François Honoré, Louis Wicket (wil), Walid, Mylyna Hy, Maximilien (malb), Siddarth Gajjar, Shawcker, Gauthier Wala (gawa), maximilien(malb), Simon Genin (ges), Andrew Gavgavian, Claire Bretton (clbr), Fernanda Hernández, Levi Siuzdak (sile), dasa-odoo, Maruan Aguerdouh (magm), Antoine Dupuis (andu), mhabboush, Kshitij Nariya, Antoine Boonen, Camille Spiritus, Michael Tietz, Dylan Kiss (dyki), Hansun (hale), Jinane Maksoud, emilkholod, PoMa, arsi, Jesús Alan Ramos Rodríguez, Sébastien Geelen (sge), smdc-odoo, jadir-bs, hupo-odoo, Paolo Gatti, Bruno Boi, Paolo Gatti (pgi), kir-odoo, Nguyen Viet Phuong, Preksha Chouhan, HuylenbroeckFlorent, AH-Yussef, Leonardo Pavan Rocha, Dawn Hwang, Arnaud Sibille, ilru-odoo, Noe Antoine, Mattis Megevand (mmeg), sesn-odoo, guva-odoo, Hesham, Mathieu (mcou), Benjamin Hanquin (beha), Jordan D. (Joda), Nguyen Hong Quang, Sven Fuehr, thco-odoo, AMZIL AYOUB (amay), AMZIL Ayoub, Ngoc, Trịnh Ngọc Hưng, Seif (segn), kmod-odoo, Karl Southern, Eteil Djoumatchoua(etdj) etdj@odoo.com, bt-crodriguez, Mountain Tran, Ayoub Amzil, yosa-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/invoicing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (189)
XML IDNameModelTypeStatus
account.account_terms_conditions_setting_banner Account Terms and Conditions Setting Banner ir.ui.view qweb New
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account div Inherits analytic.view_account_analytic_account_form
account_analytic_account_view_list_inherit account.analytic.account.list.inherit account.analytic.account field Inherits analytic.view_account_analytic_account_list
account_automatic_entry_wizard_form account.automatic.entry.wizard.form account.automatic.entry.wizard form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_dashboard_onboarding_panel account.dashboard.onboarding.panel ir.ui.view qweb New
account_default_terms_and_conditions account_default_terms_and_conditions ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_onboarding_panel account.invoice.onboarding.panel ir.ui.view qweb New
account_invoice_onboarding_sale_tax_form account.invoice.layout.onboarding.form res.company form New
account_invoice_report_view_tree account.invoice.report.view.tree account.invoice.report tree New
account_invoice_send_wizard_form account.invoice.send.form account.invoice.send form New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_move_line_view_kanban_mobile account.move.line.kanban.mobile account.move.line xpath Inherits account_move_line_view_kanban
account_resequence_view Re-sequence Journal Entries account.resequence.wizard form New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag tree New
account_tax_carryover_line_form account.tax.carryover.line.form account.tax.carryover.line form New
account_tax_carryover_line_tree account.tax.carryover.line.tree account.tax.carryover.line tree New
account_tax_group_view_search account.tax.group.search.filters account.tax.group search New
account_tax_report_form account.tax.report.form account.tax.report form New
account_tax_report_line_form account.tax.report.line.form account.tax.report.line form New
account_tax_report_line_tree account.tax.report.line.tree account.tax.report.line tree New
account_tax_report_search account.tax.report.search account.tax.report search New
account_tax_report_tree account.tax.report.tree account.tax.report tree New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax tree New
account_terms_conditions_page Terms & Conditions ir.ui.view qweb New
account_tour_upload_bill account.tour.upload.bill account.tour.upload.bill form New
account_tour_upload_bill_email_confirm account.tour.upload.bill.email.confirm account.tour.upload.bill.email.confirm form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
bill_preview bill_preview ir.ui.view qweb New
cash_box_out_form cash_box_out cash.box.out form New
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
document_tax_totals document_tax_totals ir.ui.view qweb New
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
onboarding_bank_account_step onboarding_bank_account_step ir.ui.view qweb New
onboarding_chart_of_account_step onboarding_chart_of_account_step ir.ui.view qweb New
onboarding_create_invoice_step onboarding_create_invoice_step ir.ui.view qweb New
onboarding_fiscal_year_step onboarding_fiscal_year_step ir.ui.view qweb New
onboarding_invoice_layout_step onboarding_invoice_layout_step ir.ui.view qweb New
onboarding_sale_tax_step onboarding_sale_tax_step ir.ui.view qweb New
onboarding_taxes_step onboarding_taxes_step ir.ui.view qweb New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Show Invoices & Bills ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
product_template_view_tree product.template.tree product.template tree New
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
res_company_view_form_terms res.company.view.form.terms res.company form New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_currency_form_inherit res.currency.form.inherit res.currency xpath Inherits base.view_currency_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_adjustments_wizard tax.adjustments.wizard.form tax.adjustments.wizard form New
tax_groups_totals tax_groups_totals ir.ui.view qweb New
tax_repartition_line_tree account.tax.repartition.line.tree account.tax.repartition.line tree New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_accrued_orders_wizard account.accrued.orders.wizard.view account.accrued.orders.wizard form New
view_account_analytic_default_form account.analytic.default.form account.analytic.default form New
view_account_analytic_default_form_search account.analytic.default.search account.analytic.default search New
view_account_analytic_default_kanban account.analytic.default.kanban account.analytic.default kanban New
view_account_analytic_default_tree account.analytic.default.tree account.analytic.default tree New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_cashbox_footer account.bnk_stmt_cashbox.form account.bank.statement.cashbox xpath Inherits view_account_bnk_stmt_cashbox
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_invoice_report_search_analytic_accounting account.invoice.report.search_analytic_accounting account.invoice.report filter Inherits account.view_account_invoice_report_search
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.tree account.journal.group tree New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_line_filter_with_root_selection account.move.line.search account.move.line xpath Inherits account.view_account_move_line_filter
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_register_form account.payment.register.form account.payment.register form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_line_form account.reconcile.model.line.form account.reconcile.model.line form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_account_various_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_form res.company.form.inherit.account res.company xpath Inherits base.view_company_form
view_company_partner_bank_form company.res.partner.bank.form res.partner.bank xpath Inherits base.view_partner_bank_form
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_in_invoice_bill_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_receipt_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_refund_tree account.out.invoice.tree account.move field Inherits account.view_in_invoice_tree
view_in_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_incoterms_tree account.incoterms.tree account.incoterms tree New
view_invoice_tree account.invoice.tree account.move tree New
view_module_filter_inherit_account ir.module.module.list.inherit.account ir.module.module xpath Inherits base.view_module_filter
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_grouped account.move.line.tree.grouped account.move.line tree New
view_move_line_tree_grouped_bank_cash account.move.line.tree.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_general account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_misc account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_partner account.move.line.tree.grouped.partner account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_sales_purchases account.move.line.tree.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree_grouped
view_move_tree account.move.tree account.move tree New
view_out_credit_note_tree account.out.invoice.tree account.move field Inherits account.view_invoice_tree
view_out_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_group_tree account.tax.group.tree account.tax.group tree New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
Models touched (99)

New fields (22)
  • allowed_journal_ids Many2many → account.journal
    help='Define in which journals this account can be used. If empty, can be used in all journals.' string='Allowed Journals' args: 'account.journal'
  • code Char
    index=True required=True size=64 tracking=True
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this account currency.' string='Account Currency' tracking=True args: 'res.currency'
  • current_balance Float
    compute='_compute_current_balance'
  • deprecated Boolean
    default=False index=True tracking=True
  • group_id Many2one → account.group
    compute='_compute_account_group' help='Account prefixes can determine account groups.' readonly=True store=True args: 'account.group'
  • internal_group Selection
    readonly=True related='user_type_id.internal_group' store=True string='Internal Group'
  • internal_type Selection
    readonly=True related='user_type_id.type' store=True string='Internal Type'
  • is_off_balance Boolean
    compute='_compute_is_off_balance' default=False readonly=True store=True
  • name Char
    index=True required=True string='Account Name' tracking=True
  • note Text
    tracking=True args: 'Internal Notes'
  • opening_balance Monetary
    compute='_compute_opening_debit_credit' help='Opening balance value for this account.' string='Opening Balance'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' help='Opening credit value for this account.' inverse='_set_opening_credit' string='Opening Credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' help='Opening debit value for this account.' inverse='_set_opening_debit' string='Opening Debit'
  • reconcile Boolean
    default=False help='Check this box if this account allows invoices & payments matching of journal items.' string='Allow Reconciliation' tracking=True
  • related_taxes_amount Integer
    compute='_compute_related_taxes_amount'
  • root_id Many2one → account.root
    compute='_compute_account_root' store=True args: 'account.root'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_account_account_tag'
  • tax_ids Many2many → account.tax
    check_company=True context={'append_type_to_tax_name': True} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
  • user_type_id Many2one → account.account.type
    help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' required=True string='Type' tracking=True args: 'account.account.type'
Public methods (8)
  • action_duplicate_accounts(self)
  • action_open_related_taxes(self)
  • action_read_account(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • load(self, fields, data)
    @api.model
    Overridden for better performances when importing a list of account with opening debit/credit. In that case, the auto-balance is postpone until the whole file has been imported.
  • name_get(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes'), ('products', 'Products')]
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True args: 'Tag Name'
  • tax_negate Boolean
    help='Check this box to negate the absolute value of the balance of the lines associated with this tag in tax report computation.' string='Negate Tax Balance'
  • tax_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='The tax report lines using this tag' relation='account_tax_report_line_tags_rel' string='Tax Report Lines'
Public methods (1)
  • name_get(self)

New fields (10)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.depends('name', 'code')

New fields (5)
  • include_initial_balance Boolean
    help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' string='Bring Accounts Balance Forward'
  • internal_group Selection
    help="The 'Internal Group' is used to filter accounts based on the internal group set on the account type." required=True string='Internal Group' args: [('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off_balance', 'Off Balance')]
  • name Char
    required=True string='Account Type' translate=True
  • note Text
    string='Description'
  • type Selection
    default='other' help="The 'Internal Type' is used for features available on different types of accounts: liquidity type is for cash or bank accounts, payable/receivable is for vendor/customer accounts." required=True args: [('other', 'Regular'), ('receivable', 'Receivable'), ('payable', 'Payable'), ('liquidity', 'Liquidity')]
Public methods (0)

No public methods.

New fields (9)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=_get_account_domain required=True string='Accrual Account'
  • amount Monetary
    help='Specify an arbitrary value that will be accrued on a default account for the entire order, regardless of the products on the different lines.' string='Amount'
  • company_id Many2one → res.company
    default=_get_default_company args: 'res.company'
  • currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • date Date
    default=_get_default_date required=True
  • display_amount Boolean
    compute='_compute_display_amount'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' company_dependent=True compute='_compute_journal_id' default=_get_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" readonly=False required=True string='Journal'
  • preview_data Text
    compute='_compute_preview_data'
  • reversal_date Date
    compute='_compute_reversal_date' readonly=False required=True
Public methods (1)
  • create_entries(self)

New fields (4)
  • credit Monetary
    groups='account.group_account_readonly'
  • debit Monetary
    groups='account.group_account_readonly'
  • invoice_count Integer
    compute='_compute_invoice_count' args: 'Invoice Count'
  • vendor_bill_count Integer
    compute='_compute_vendor_bill_count' args: 'Vendor Bill Count'
Public methods (2)
  • action_view_invoice(self)
  • action_view_vendor_bill(self)

New fields (10)
  • account_id Many2one → account.account
    help='Select an accounting account which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this account, it will automatically take this as an analytic account)' ondelete='cascade' string='Account' args: 'account.account'
  • analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • company_id Many2one → res.company
    help='Select a company which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this company, it will automatically take this as an analytic account)' ondelete='cascade' string='Company' args: 'res.company'
  • date_start Date
    help='Default start date for this Analytic Account.' string='Start Date'
  • date_stop Date
    help='Default end date for this Analytic Account.' string='End Date'
  • partner_id Many2one → res.partner
    help='Select a partner which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this partner, it will automatically take this as an analytic account)' ondelete='cascade' string='Partner' args: 'res.partner'
  • product_id Many2one → product.product
    help='Select a product which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product' args: 'product.product'
  • sequence Integer
    help='Gives the sequence order when displaying a list of analytic distribution' string='Sequence'
  • user_id Many2one → res.users
    help='Select a user which will use analytic account specified in analytic default.' ondelete='cascade' string='User' args: 'res.users'
Public methods (1)
  • account_get(self, product_id=None, partner_id=None, account_id=None, user_id=None, date=None, company_id=None)
    @api.model

New fields (6)
  • category Selection
    selection_add=[('invoice', 'Customer Invoice'), ('vendor_bill', 'Vendor Bill')]
  • code Char
    size=8
  • general_account_id Many2one → account.account
    compute_sudo=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    check_company=True index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • product_id Many2one → product.product
    check_company=True string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • account_type Selection
    compute='_compute_account_type' store=True args: [('income', 'Revenue'), ('expense', 'Expense')]
  • action Selection
    required=True args: [('change_period', 'Change Period'), ('change_account', 'Change Account')]
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • date Date
    default=<expr> required=True
  • destination_account_id Many2one → account.account
    comodel_name='account.account' help='Account to transfer to.' string='To'
  • display_currency_helper Boolean
    compute='_compute_display_currency_helper' help='Technical field. Used to indicate whether or not to display the currency conversion tooltip. The tooltip informs a currency conversion will be performed with the transfer.' string='Currency Conversion Helper'
  • expense_accrual_account Many2one → account.account
    compute='_compute_expense_accrual_account' domain="[('company_id', '=', company_id),('internal_type', 'not in', ('receivable', 'payable')),('is_off_balance', '=', False)]" inverse='_inverse_expense_accrual_account' readonly=False args: 'account.account'
  • journal_id Many2one → account.journal
    compute='_compute_journal_id' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='Journal where to create the entry.' inverse='_inverse_journal_id' readonly=False required=True string='Journal' args: 'account.journal'
  • move_data Text
    compute='_compute_move_data' help='JSON value of the moves to be created'
  • move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • percentage Float
    compute='_compute_percentage' help='Percentage of each line to execute the action on.' readonly=False store=True args: 'Percentage'
  • preview_move_data Text
    compute='_compute_preview_move_data' help='JSON value of the data to be displayed in the previewer'
  • revenue_accrual_account Many2one → account.account
    compute='_compute_revenue_accrual_account' domain="[('company_id', '=', company_id),('internal_type', 'not in', ('receivable', 'payable')),('is_off_balance', '=', False)]" inverse='_inverse_revenue_accrual_account' readonly=False args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id' help='Total amount impacted by the automatic entry.' readonly=False store=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • do_action(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (25)
  • all_lines_reconciled Boolean
    compute='_compute_all_lines_reconciled' help='Technical field indicating if all statement lines are fully reconciled.'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    compute='_compute_ending_balance' readonly=False recursive=True states={'confirm': [('readonly', True)]} store=True tracking=True args: 'Ending Balance'
  • balance_start Monetary
    compute='_compute_starting_balance' readonly=False states={'confirm': [('readonly', True)]} store=True string='Starting Balance' tracking=True
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • is_valid_balance_start Boolean
    compute='_compute_is_valid_balance_start' help='Technical field to display a warning message in case starting balance is different than previous ending balance' store=True string='Is Valid Balance Start'
  • journal_id Many2one → account.journal
    check_company=True default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_count Integer
    compute='_get_move_line_count'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • previous_statement_id Many2one → account.bank.statement
    compute='_get_previous_statement' help='technical field to compute starting balance correctly' store=True args: 'account.bank.statement'
  • reference Char
    copy=False help='Used to hold the reference of the external mean that created this statement (name of imported file, reference of online synchronization...)' readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' help='The current state of your bank statement:- New: Fully editable with draft Journal Entries.- Processing: No longer editable with posted Journal entries, ready for the reconciliation.- Validated: All lines are reconciled. There is nothing left to process.' readonly=True required=True selection=[('open', 'New'), ('posted', 'Processing'), ('confirm', 'Validated')] string='Status' tracking=True
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (11)
  • button_journal_entries(self)
  • button_post(self)
    Move the bank statements from 'draft' to 'posted'.
  • button_reopen(self)
    Move the bank statements back to the 'open' state.
  • button_reprocess(self)
    Move the bank statements back to the 'posted' state.
  • button_validate(self)
  • button_validate_or_action(self)
  • create(self, values)
    @api.model_create_multi
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
  • unlink(self)
  • write(self, values)

New fields (5)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
  • currency_id Many2one → res.currency
    compute='_compute_currency' args: 'res.currency'
  • end_bank_stmt_ids One2many → account.bank.statement
    args: 'account.bank.statement', 'cashbox_end_id'
  • start_bank_stmt_ids One2many → account.bank.statement
    args: 'account.bank.statement', 'cashbox_start_id'
  • total Float
    compute='_compute_total'
Public methods (4)
  • create(self, vals)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • name_get(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • validate(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (17)
  • account_number Char
    help="Technical field used to store the bank account number before its creation, upon the line's processing" string='Bank Account Number'
  • amount Monetary
    currency_field='currency_id'
  • amount_currency Monetary
    currency_field='foreign_currency_id' help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • amount_residual Float
    compute='_compute_is_reconciled' help="The amount left to be reconciled on this statement line (signed according to its move lines' balance), expressed in its currency. This is a technical field use to speedup the application of reconciliation models." store=True string='Residual Amount'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    string='Journal Currency' args: 'res.currency'
  • foreign_currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Foreign Currency' args: 'res.currency'
  • is_reconciled Boolean
    compute='_compute_is_reconciled' help='Technical field indicating if the statement line is already reconciled.' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=',True)]" ondelete='restrict' string='Partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • payment_ids Many2many → account.payment
    comodel_name='account.payment' help='Payments generated during the reconciliation of this bank statement lines.' relation='account_payment_account_bank_statement_line_rel' string='Auto-generated Payments'
  • payment_ref Char
    required=True string='Label'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    check_company=True comodel_name='account.bank.statement' index=True ondelete='cascade' required=True string='Statement'
  • transaction_type Char
    string='Transaction Type'
Public methods (5)
  • button_undo_reconciliation(self)
    Undo the reconciliation mades on the statement line and reset their journal items to their original states.
  • create(self, vals_list)
    @api.model_create_multi
  • reconcile(self, lines_vals_list, to_check=False, allow_partial=False)
    Perform a reconciliation on the current account.bank.statement.line with some counterpart account.move.line. If the statement line entry is not fully balanced after the reconciliation, an open balance will be created using the partner. :param lines_vals_list: A list of python dictionary containing: 'id': Optional id of an existing account.move.line. For each line having an 'id', a new line will be created in the current statement line. 'balance': Optional amount to consider during the reconciliation. If a foreign currency is set on the counterpart line in the same foreign currency as the statement line, then this amount is considered as the amount in foreign currency. If not specified, the full balance is taken. This value must be provided if 'id' is not. **kwargs: Custom values to be set on the newly created account.move.line. :param to_check: Mark the current statement line as "to_check" (see field for more details). :param allow_partial: In case of matching a line having an higher amount, allow creating a partial instead of an open balance on the statement line.
  • unlink(self)
  • write(self, vals)

New fields (7)
  • company_id Many2one → res.company
    related='profit_account_id.company_id' args: 'res.company'
  • loss_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • profit_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" string='Profit Account' args: 'account.account'
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'UP'), ('DOWN', 'DOWN'), ('HALF-UP', 'HALF-UP')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (5)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • currency_id Many2one → res.currency
    related='cashbox_id.currency_id' args: 'res.currency'
  • number Integer
    help='Opening Unit Numbers' string='#Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (34)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • account_journal_payment_credit_account_id Many2one → account.account.template
    string='Journal Outstanding Payments Account' args: 'account.account.template'
  • account_journal_payment_debit_account_id Many2one → account.account.template
    string='Journal Outstanding Receipts Account' args: 'account.account.template'
  • account_journal_suspense_account_id Many2one → account.account.template
    string='Journal Suspense Account' args: 'account.account.template'
  • bank_account_code_prefix Char
    required=True string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    required=True string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • country_id Many2one → res.country
    comodel_name='res.country' help="The country this chart of accounts belongs to. None if it's generic." string='Country'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • default_cash_difference_expense_account_id Many2one → account.account.template
    string='Cash Difference Expense Account' args: 'account.account.template'
  • default_cash_difference_income_account_id Many2one → account.account.template
    string='Cash Difference Income Account' args: 'account.account.template'
  • default_pos_receivable_account_id Many2one → account.account.template
    string='PoS receivable account' args: 'account.account.template'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    string='Receivable Account' args: 'account.account.template'
  • property_advance_tax_payment_account_id Many2one → account.account.template
    string='Advance tax payment account' args: 'account.account.template'
  • property_cash_basis_base_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • property_stock_account_input_categ_id Many2one → account.account.template
    string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • property_tax_payable_account_id Many2one → account.account.template
    string='Tax current account (payable)' args: 'account.account.template'
  • property_tax_receivable_account_id Many2one → account.account.template
    string='Tax current account (receivable)' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_code_prefix Char
    required=True string='Prefix of the main transfer accounts'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (9)
  • create_record_with_xmlid(self, company, template, model, vals)
  • existing_accounting(self, company_id)
    @api.model
    Returns True iff some accounting entries have already been made for the provided company (meaning hence that its chart of accounts cannot be changed anymore).
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    This method generates accounts from account templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary containing the mapping between the account templates and generated accounts (will be populated) :param code_digits: number of digits to use for account code. :param company_id: company to generate accounts for. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_groups(self, company)
    This method generates account groups from account groups templates. :param company: company to generate the account groups for
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    This method creates account reconcile models :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mapping between the account templates and the real accounts. :param company_id: company to create models for :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    This method generates Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: the company to generate fiscal position data for :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param acc_template_ref: Account templates reference. :param company_id: company to generate journals for. :returns: True
  • generate_properties(self, acc_template_ref, company)
    This method used for creating properties. :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company to generate properties for. :returns: True
  • try_loading(self, company=False, install_demo=True)
    Installs this chart of accounts for the current company if not chart of accounts had been created for it yet. :param company (Model<res.company>): the company we try to load the chart template on. If not provided, it is retrieved from the context. :param install_demo (bool): whether or not we should load demo data right after loading the chart template.

New fields (1)
  • amount_currency Boolean
    help='Print Report with the currency column if the currency differs from the company currency.' args: 'With Currency'
Public methods (1)
  • pre_print_report(self, data)

New fields (5)
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    comodel_name='account.journal' default=<expr> domain="[('company_id', '=', company_id)]" required=True string='Journals'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
  • write(self, vals)

New fields (18)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_country_id Many2one
    related='company_id.account_fiscal_country_id' string='Company Country'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • foreign_vat Char
    help='The tax ID of your company in the region mapped by this fiscal position.' string='Foreign Tax ID'
  • foreign_vat_header_mode Selection
    compute='_compute_foreign_vat_header_mode' help='Technical field used to display a banner on top of foreign vat fiscal positions, in order to ease the instantiation of foreign taxes when possible.' selection=[('templates_found', 'Templates Found'), ('no_template', 'No Template')]
  • name Char
    required=True string='Fiscal Position'
  • note Html
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (7)
  • action_create_foreign_taxes(self)
  • create(self, vals)
    @api.model
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
    :return: fiscal position found (recordset) :rtype: :class:`account.fiscal.position`
  • map_account(self, account)
  • map_accounts(self, accounts)
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes)
  • write(self, vals)

New fields (4)
  • account_dest_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Account on Product' args: 'account.account'
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_active Boolean
    related='tax_dest_id.active'
  • tax_dest_id Many2one → account.tax
    check_company=True string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    check_company=True required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (13)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (0)

No public methods.

New fields (4)
  • exchange_move_id Many2one → account.move
    index=True args: 'account.move'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (6)
  • code_prefix_end Char
  • code_prefix_start Char
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • name Char
    required=True
  • parent_id Many2one → account.group
    index=True ondelete='cascade' readonly=True args: 'account.group'
  • parent_path Char
    index=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (5)
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • code_prefix_end Char
  • code_prefix_start Char
  • name Char
    required=True
  • parent_id Many2one → account.group.template
    index=True ondelete='cascade' args: 'account.group.template'
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (22)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • analytic_account_id Many2one → account.analytic.account
    groups='analytic.group_analytic_accounting' string='Analytic Account' args: 'account.analytic.account'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • move_type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_state Selection
    readonly=True selection=PAYMENT_STATE_SELECTION string='Payment Status'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_subtotal Float
    readonly=True string='Untaxed Total'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
Public methods (0)

No public methods.

New fields (8)
  • composer_id Many2one → mail.compose.message
    ondelete='cascade' required=True string='Composer' args: 'mail.compose.message'
  • invoice_ids Many2many → account.move
    string='Invoices' args: 'account.move', 'account_move_account_invoice_send_rel'
  • invoice_without_email Text
    compute='_compute_invoice_without_email' string='invoice(s) that will not be sent'
  • is_email Boolean
    default=<expr> args: 'Email'
  • is_print Boolean
    default=<expr> args: 'Print'
  • move_types Char
    compute='_compute_move_types' help='Technical field containing a textual representation of the selected move types, if multiple. It is used to inform the user in the window in such case.' readonly=True string='Move types'
  • printed Boolean
    default=False args: 'Is Printed'
  • template_id Many2one → mail.template
    domain="[('model', '=', 'account.move')]" index=True args: 'mail.template', 'Use template'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • onchange_is_email(self)
    @api.onchange('is_email')
  • onchange_template_id(self)
    @api.onchange('template_id')
  • save_as_template(self)
  • send_and_print_action(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (37)
  • account_control_ids Many2many → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" string='Allowed accounts' args: 'account.account', 'journal_account_control_rel', 'journal_id', 'account_id'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_domain Char
    compute='_compute_alias_domain' args: 'Alias domain'
  • alias_id Many2one → mail.alias
    copy=False help='Send one separate email for each invoice.\n\nAny file extension will be accepted.\n\nOnly PDF and XML files will be interpreted by Odoo' string='Email Alias' args: 'mail.alias'
  • alias_name Char
    compute='_compute_alias_name' copy=False help='It creates draft invoices and bills by sending an email.' inverse='_inverse_type' readonly=False args: 'Alias Name'
  • available_payment_method_ids Many2many → account.payment.method
    comodel_name='account.payment.method' compute='_compute_available_payment_method_ids'
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    check_company=True copy=False domain="[('partner_id','=', company_partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    help='Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.' required=True size=5 string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True readonly=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=_get_default_account_domain ondelete='restrict' string='Default Account'
  • default_account_type Many2one → account.account.type
    compute='_compute_default_account_type' args: 'account.account.type'
  • inbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_inbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by any method outside of Odoo.\nPayment Acquirers: Each payment acquirer has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Inbound Payment Methods'
  • invoice_reference_model Selection
    default=_default_invoice_reference_model help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Odoo'), ('euro', 'European')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('none', 'Open'), ('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • journal_group_ids Many2many → account.journal.group
    check_company=True domain="[('company_id', '=', company_id)]" string='Journal Groups' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=<expr> help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account'
  • name Char
    required=True string='Journal Name'
  • outbound_payment_method_line_ids One2many → account.payment.method.line
    check_company=True comodel_name='account.payment.method.line' compute='_compute_outbound_payment_method_line_ids' copy=False domain=[('payment_type', '=', 'outbound')] help='Manual: Pay by any method outside of Odoo.\nCheck: Pay bills by check and print it from Odoo.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\n' inverse_name='journal_id' readonly=False store=True string='Outbound Payment Methods'
  • profit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=<expr> help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • restrict_mode_hash_table Boolean
    help='If ticked, the accounting entry or invoice receives a hash as soon as it is posted and cannot be modified anymore.' string='Lock Posted Entries with Hash'
  • sale_activity_note Text
    args: 'Activity Summary'
  • sale_activity_type_id Many2one → mail.activity.type
    default=False help='Activity will be automatically scheduled on payment due date, improving collection process.' string='Schedule Activity' args: 'mail.activity.type'
  • sale_activity_user_id Many2one → res.users
    help='Leave empty to assign the Salesperson of the invoice.' string='Activity User' args: 'res.users'
  • secure_sequence_id Many2one → ir.sequence
    check_company=True copy=False help='Sequence to use to ensure the securisation of data' readonly=True args: 'ir.sequence'
  • selected_payment_method_codes Char
    compute='_compute_selected_payment_method_codes' help='Technical field used to hide or show payment method options if needed.'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_override_regex Text
    help='Technical field used to enforce complex sequence composition that the system would normally misunderstand.\nThis is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.\nThe prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).\ne.g: ^(?P<prefix1>.*?)(?P<year>\\d{4})(?P<prefix2>\\D*?)(?P<month>\\d{2})(?P<prefix3>\\D+?)(?P<seq>\\d+)(?P<suffix>\\D*?)$'
  • suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_suspense_account_id' domain=<expr> help='Bank statements transactions will be posted on the suspense account until the final reconciliation allowing finding the right account.' ondelete='restrict' readonly=False store=True string='Suspense Account'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." inverse='_inverse_type' required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
  • type_control_ids Many2many → account.account.type
    string='Allowed account types' args: 'account.account.type', 'journal_account_type_control_rel', 'journal_id', 'type_id'
Public methods (9)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • create_invoice_from_attachment(self, attachment_ids=None)
    Create invoices from the attachments (for instance a Factur-X XML file) and redirect the user to the newly created invoice(s). :param attachment_ids: list of attachment ids :return: action to open the created invoices
  • get_next_bank_cash_default_code(self, journal_type, company)
    @api.model
  • name_get(self)
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (6)
  • color Integer
    default=0 args: 'Color Index'
  • entries_count Integer
    compute='_compute_entries_count'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (19)
  • action_create_new(self)
  • action_create_vendor_bill(self)
    This function is called by the "Import" button of Vendor Bills, visible on dashboard if no bill has been created yet.
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
  • create_customer_payment(self)
    return action to create a customer payment
  • create_internal_transfer(self)
    return action to create a internal transfer
  • create_supplier_payment(self)
    return action to create a supplier payment
  • get_bar_graph_datas(self)
  • get_journal_dashboard_datas(self)
  • get_line_graph_datas(self)
    Computes the data used to display the graph for bank and cash journals in the accounting dashboard
  • mark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as done in the setup bar and in the company.
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_collect_money(self)
  • open_payments_action(self, payment_type, mode='tree')
  • open_spend_money(self)
  • open_transfer_money(self)
  • to_check_ids(self)
  • unmark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as not done in the setup bar and in the company.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • excluded_journal_ids Many2many → account.journal
    check_company=True domain="[('company_id', '=', company_id)]" string='Excluded Journals' args: 'account.journal'
  • name Char
    required=True translate=True args: 'Journal Group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (75)
  • always_tax_exigible Boolean
    compute='_compute_always_tax_exigible' help='Technical field used by cash basis taxes, telling the lines of the move are always exigible. This happens if the move contains no payable or receivable line.' readonly=False store=True
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_in_currency_signed Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=True store=True string='Total in Currency Signed'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • auto_post Boolean
    copy=False default=False help='If this checkbox is ticked, this entry will be automatically posted at its date.' string='Post Automatically'
  • bank_partner_id Many2one → res.partner
    compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank' args: 'res.partner'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=True store=True string='Company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    default=_get_default_currency readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True readonly=True required=True states={'draft': [('readonly', False)]} string='Date' tracking=True
  • display_inactive_currency_warning Boolean
    compute='_compute_display_inactive_currency_warning' help='Technical field used for tracking the status of the currency'
  • display_qr_code Boolean
    compute='_compute_display_qr_code' string='Display QR-code'
  • fiscal_position_id Many2one → account.fiscal.position
    check_company=True domain="[('company_id', '=', company_id)]" help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • highest_name Char
    compute='_compute_highest_name'
  • inalterable_hash Char
    copy=False readonly=True string='Inalterability Hash'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    help='Defines the smallest coinage of the currency that can be used to pay by cash.' readonly=True states={'draft': [('readonly', False)]} string='Cash Rounding Method' args: 'account.cash.rounding'
  • invoice_date Date
    copy=False index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice/Bill Date'
  • invoice_date_due Date
    copy=False index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain' help='Technical field used to have a dynamic domain on journal / taxes in the form view.'
  • invoice_has_matching_suspense_amount Boolean
    compute='_compute_has_matching_suspense_amount' groups='account.group_account_invoice,account.group_account_readonly' help='Technical field used to display an alert on invoices if there is at least a matching amount in any supsense account.'
  • invoice_has_outstanding Boolean
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_incoterm_id Many2one → account.incoterms
    default=_get_default_invoice_incoterm help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Incoterm' args: 'account.incoterms'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('exclude_from_invoice_tab', '=', False)] readonly=True states={'draft': [('readonly', False)]} string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Text
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_payment_term_id Many2one → account.payment.term
    check_company=True readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • invoice_payments_widget Text
    compute='_compute_payments_widget_reconciled_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    copy=False default=<expr> string='Salesperson' tracking=True args: 'res.users'
  • invoice_vendor_bill_id Many2one → account.move
    check_company=True help='Auto-complete from a past bill.' store=False string='Vendor Bill' args: 'account.move'
  • is_move_sent Boolean
    copy=False default=False help='It indicates that the invoice/payment has been sent.' readonly=True tracking=True
  • journal_id Many2one → account.journal
    check_company=True default=_get_default_journal domain="[('id', 'in', suitable_journal_ids)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True readonly=True states={'draft': [('readonly', False)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • move_type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] store=True string='Type' tracking=True
  • name Char
    compute='_compute_name' copy=False index=True readonly=False store=True string='Number' tracking=True
  • narration Html
    compute='_compute_narration' readonly=False store=True string='Terms and Conditions'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' string='Recipient Bank' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True check_company=True index=True ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Partner' tracking=True args: 'res.partner'
  • payment_id Many2one → account.payment
    check_company=True comodel_name='account.payment' copy=False index=True string='Payment'
  • payment_reference Char
    compute='_compute_payment_reference' copy=False help='The payment reference to set on journal items.' index=True readonly=False store=True string='Payment Reference'
  • payment_state Selection
    compute='_compute_amount' copy=False readonly=True store=True string='Payment Status' tracking=True args: PAYMENT_STATE_SELECTION
  • posted_before Boolean
    copy=False help='Technical field for knowing if the move has been posted before'
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for the payment of this invoice, when printing it. If left blank, the first available and usable method will be used.' selection=<expr> string='Payment QR-code'
  • ref Char
    copy=False string='Reference' tracking=True
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_id One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    check_company=True copy=False index=True readonly=True string='Reversal of' args: 'account.move'
  • secure_sequence_number Integer
    copy=False index=True readonly=True string='Inalteralbility No Gap Sequence #'
  • show_name_warning Boolean
    store=False
  • show_reset_to_draft_button Boolean
    compute='_compute_show_reset_to_draft_button'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_id Many2one
    copy=False help='Technical field used to open the linked bank statement from the edit button in a group by view, or via the smart button on journal entries.' readonly=True related='statement_line_id.statement_id'
  • statement_line_id Many2one → account.bank.statement.line
    check_company=True comodel_name='account.bank.statement.line' copy=False string='Statement Line'
  • string_to_hash Char
    compute='_compute_string_to_hash' readonly=True
  • suitable_journal_ids Many2many → account.journal
    compute='_compute_suitable_journal_ids' args: 'account.journal'
  • tax_cash_basis_created_move_ids One2many → account.move
    comodel_name='account.move' help='The cash basis entries created from the taxes on this entry, when reconciling its lines.' inverse_name='tax_cash_basis_origin_move_id' string='Cash Basis Entries'
  • tax_cash_basis_origin_move_id Many2one → account.move
    comodel_name='account.move' help='The journal entry from which this tax cash basis journal entry has been created.' index=True readonly=1 string='Cash Basis Origin'
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    help='Technical field used to keep track of the tax cash basis reconciliation. This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.' string='Tax Cash Basis Entry of' args: 'account.partial.reconcile'
  • tax_country_code Char
    compute='_compute_tax_country_code'
  • tax_country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_tax_country_id' help='Technical field to filter the available taxes depending on the fiscal country and fiscal position.'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message' help="Technical field used to display a message when the invoice's accounting date is prior of the tax lock date."
  • tax_totals_json Char
    compute='_compute_tax_totals_json' help='Edit Tax amounts if you encounter rounding issues.' readonly=False string='Invoice Totals JSON'
  • to_check Boolean
    default=False help='If this checkbox is ticked, it means that the user was not sure of all the related information at the time of the creation of the move and that the move needs to be checked again.' string='To Check' tracking=True
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    help='Technical field used to fit the generic behavior in mail templates.' related='invoice_user_id' string='User'
Public methods (41)
  • action_activate_currency(self)
  • action_duplicate(self)
  • action_invoice_paid(self)
    Hook to be overrided called when the invoice moves to the paid state.
  • action_invoice_print(self)
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_post(self)
  • action_register_payment(self)
    Open the account.payment.register wizard to pay the selected journal entries. :return: An action opening the account.payment.register wizard.
  • action_reverse(self)
  • action_send_and_print(self)
  • action_switch_invoice_into_refund_credit_note(self)
  • action_view_reverse_entry(self)
  • button_cancel(self)
  • button_draft(self)
  • button_set_checked(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • generate_qr_code(self)
    Generates and returns a QR-code generation URL for this invoice, raising an error message if something is misconfigured. The chosen QR generation method is the one set in qr_method field if there is one, or the first eligible one found. If this search had to be performed and and eligible method was found, qr_method field is set to this method before returning the URL. If no eligible QR method could be found, we return None.
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • init(self)
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False)
  • is_sale_document(self, include_receipts=False)
  • js_assign_outstanding_line(self, line_id)
    Called by the 'payment' widget to reconcile a suggested journal item to the present invoice. :param line_id: The id of the line to reconcile with the current invoice.
  • js_remove_outstanding_partial(self, partial_id)
    Called by the 'payment' widget to remove a reconciled entry to the present invoice. :param partial_id: The id of an existing partial reconciled with the current invoice.
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • name_get(self)
    @api.depends('name', 'state')
  • onchange(self, values, field_name, field_onchange)
  • open_bank_statement_view(self)
  • open_created_caba_entries(self)
  • open_payment_view(self)
  • open_reconcile_view(self)
  • post(self)
  • preview_invoice(self)
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (58)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id),('is_off_balance', '=', False)]" index=True ondelete='cascade' string='Account' tracking=True args: 'account.account'
  • account_internal_group Selection
    readonly=True related='account_id.user_type_id.internal_group' string='Internal Group'
  • account_internal_type Selection
    readonly=True related='account_id.user_type_id.type' string='Internal Type'
  • account_root_id Many2one
    readonly=True related='account_id.root_id' store=True string='Account Root'
  • amount_currency Monetary
    copy=True help='The amount expressed in an optional other currency if it is a multi-currency entry.' store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_compute_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_compute_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    check_company=True compute='_compute_analytic_account_id' copy=True index=True readonly=False store=True string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • analytic_tag_ids Many2many → account.analytic.tag
    check_company=True compute='_compute_analytic_tag_ids' copy=True readonly=False store=True string='Analytic Tags' args: 'account.analytic.tag'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True string='Balance'
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one
    readonly=True related='move_id.company_id' store=True
  • credit Monetary
    currency_field='company_currency_id' default=0.0 string='Credit'
  • cumulated_balance Monetary
    compute='_compute_cumulated_balance' currency_field='company_currency_id' help='Cumulated balance depending on the domain and the order chosen in the view.' store=False string='Cumulated Balance'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • date Date
    copy=False group_operator='min' index=True readonly=True related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date' tracking=True
  • debit Monetary
    currency_field='company_currency_id' default=0.0 string='Debit'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section'), ('line_note', 'Note')]
  • exclude_from_invoice_tab Boolean
    help='Technical field used to exclude some lines from the invoice_line_ids tab in the form view.'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False index=True readonly=True string='Matching' args: 'account.full.reconcile'
  • group_tax_id Many2one → account.tax
    comodel_name='account.tax' help='The group of taxes that generated this tax line' index=True string='Originator Group of Taxes'
  • is_rounding_line Boolean
    help='Technical field used to retrieve the cash rounding line.'
  • journal_id Many2one
    copy=False index=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    help='Credit journal items that are matched with this journal item.' readonly=True string='Matched Credits' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    help='Debit journal items that are matched with this journal item.' readonly=True string='Matched Debits' args: 'account.partial.reconcile', 'credit_move_id'
  • matching_number Char
    compute='_compute_matching_number' help="Matching number for this line, 'P' if it is only partially reconcile, or the name of the full reconcile if it exists." store=True string='Matching #'
  • move_id Many2one → account.move
    auto_join=True check_company=True help='The move of this entry line.' index=True ondelete='cascade' readonly=True required=True string='Journal Entry' args: 'account.move'
  • move_name Char
    index=True related='move_id.name' store=True string='Number'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label' tracking=True
  • parent_state Selection
    readonly=True related='move_id.state' store=True
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    help='The payment that created this entry' index=True related='move_id.payment_id' store=True string='Originator Payment' args: 'account.payment'
  • price_subtotal Monetary
    currency_field='currency_id' readonly=True store=True string='Subtotal'
  • price_total Monetary
    currency_field='currency_id' readonly=True store=True string='Total'
  • price_unit Float
    digits='Product Price' string='Unit Price'
  • product_id Many2one → product.product
    ondelete='restrict' string='Product' args: 'product.product'
  • product_uom_category_id Many2one → uom.category
    related='product_id.uom_id.category_id' args: 'uom.category'
  • product_uom_id Many2one → uom.uom
    domain="[('category_id', '=', product_uom_category_id)]" ondelete='restrict' string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    default=<expr> digits='Product Unit of Measure' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' string='Quantity'
  • recompute_tax_line Boolean
    help='Technical field used to know on which lines the taxes must be recomputed.' readonly=True store=False
  • reconcile_model_id Many2one → account.reconcile.model
    check_company=True copy=False readonly=True string='Reconciliation Model' args: 'account.reconcile.model'
  • reconciled Boolean
    compute='_compute_amount_residual' store=True
  • ref Char
    copy=False index=True readonly=True related='move_id.ref' store=True
  • sequence Integer
    default=10
  • statement_id Many2one
    copy=False help='The bank statement used for bank reconciliation' index=True related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    help='The statement line that created this entry' index=True related='move_id.statement_line_id' store=True string='Originator Statement Line' args: 'account.bank.statement.line'
  • tax_audit Char
    compute='_compute_tax_audit' help='Computed field, listing the tax grids impacted by this line, and the amount it applies to each of them.' store=True string='Tax Audit String'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True store=True string='Base Amount'
  • tax_group_id Many2one
    help='technical field for widget tax-group-custom-field' readonly=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' context={'active_test': False} help='Taxes that apply on the base amount' string='Taxes'
  • tax_line_id Many2one → account.tax
    compute='_compute_tax_line_id' help='Indicates that this journal item is a tax line' ondelete='restrict' store=True string='Originator Tax' args: 'account.tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    check_company=True comodel_name='account.tax.repartition.line' help='Tax distribution line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Distribution Line'
  • tax_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' context={'active_test': False} help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags' tracking=True
  • tax_tag_invert Boolean
    compute='_compute_tax_tag_invert' copy=False help='Technical field. True if the balance of this move line needs to be inverted when computing its total for each tag (for sales invoices, for example).' readonly=False store=True string='Invert Tags'
Public methods (16)
  • action_automatic_entry(self)
  • belongs_to_refund(self)
    Tells whether or not this move line corresponds to a refund operation.
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_analytic_lines(self)
    Create analytic items upon validation of an account.move.line having an analytic account or an analytic distribution.
  • default_get(self, default_fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • init(self)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • invalidate_cache(self, fnames=None, ids=None)
    @api.model
  • name_get(self)
    @api.depends('ref', 'move_id')
  • open_reconcile_view(self)
  • reconcile(self)
    Reconcile the current move lines all together. :return: A dictionary representing a summary of what has been done during the reconciliation: * partials: A recorset of all account.partial.reconcile created during the reconciliation. * full_reconcile: An account.full.reconcile record created when there is nothing left to reconcile in the involved lines. * tax_cash_basis_moves: An account.move recordset representing the tax cash basis journal entries.
  • remove_move_reconcile(self)
    Undo a reconciliation
  • search_read(self, domain=None, fields=None, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (13)
  • available_journal_ids Many2many → account.journal
    compute='_compute_available_journal_ids' args: 'account.journal'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today string='Reversal date'
  • date_mode Selection
    default='custom' required=True selection=[('custom', 'Specific'), ('entry', 'Journal Entry Date')]
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal_id' help='If empty, uses the journal of the journal entry to be reversed.' readonly=False required=True store=True string='Use Specific Journal'
  • move_ids Many2many → account.move
    domain=[('state', '=', 'posted')] args: 'account.move', 'account_move_reversal_move', 'reversal_id', 'move_id'
  • move_type Char
    compute='_compute_from_moves'
  • new_move_ids Many2many → account.move
    args: 'account.move', 'account_move_reversal_new_move', 'reversal_id', 'new_move_id'
  • reason Char
    string='Reason'
  • refund_method Selection
    help='Choose how you want to credit this invoice. You cannot "modify" nor "cancel" if the invoice is already reconciled.' required=True selection=[('refund', 'Partial Refund'), ('cancel', 'Full Refund'), ('modify', 'Full refund and new draft invoice')] string='Credit Method'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_moves(self)

New fields (11)
  • amount Monetary
    currency_field='company_currency_id' help='Always positive amount concerned by this matching expressed in the company currency.'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' help='Utility field to express amount currency' related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=False related='debit_move_id.company_id' store=True string='Company'
  • credit_amount_currency Monetary
    currency_field='credit_currency_id' help='Always positive amount concerned by this matching expressed in the credit line foreign currency.'
  • credit_currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_credit_currency_id' store=True string='Currency of the credit journal item.'
  • credit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • debit_amount_currency Monetary
    currency_field='debit_currency_id' help='Always positive amount concerned by this matching expressed in the debit line foreign currency.'
  • debit_currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_debit_currency_id' store=True string='Currency of the debit journal item.'
  • debit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False string='Full Reconcile'
  • max_date Date
    compute='_compute_max_date' help='Technical field used to determine at which date this reconciliation needs to be shown on the aged receivable/payable reports.' store=True string='Max Date of Matched Lines'
Public methods (1)
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (34)
  • amount Monetary
    currency_field='currency_id'
  • amount_company_currency_signed Monetary
    compute='_compute_amount_company_currency_signed' currency_field='company_currency_id'
  • amount_signed Monetary
    compute='_compute_amount_signed' currency_field='currency_id' help='Negative value of amount field if payment_type is outbound' tracking=True
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' help="The payment's currency." readonly=False store=True string='Currency' args: 'res.currency'
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_destination_account_id' domain="[('user_type_id.type', 'in', ('receivable', 'payable')), ('company_id', '=', company_id)]" readonly=False store=True string='Destination Account'
  • destination_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', 'in', ('bank','cash')), ('company_id', '=', company_id), ('id', '!=', journal_id)]" string='Destination Journal'
  • hide_payment_method_line Boolean
    compute='_compute_payment_method_line_fields' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • is_internal_transfer Boolean
    compute='_compute_is_internal_transfer' readonly=False store=True string='Internal Transfer' tracking=True
  • is_matched Boolean
    compute='_compute_reconciliation_status' help='Technical field indicating if the payment has been matched with a statement line.' store=True string='Is Matched With a Bank Statement'
  • is_reconciled Boolean
    compute='_compute_reconciliation_status' help='Technical field indicating if the payment is already reconciled.' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' ondelete='cascade' readonly=True required=True string='Journal Entry'
  • outstanding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_outstanding_account_id' store=True string='Outstanding Account'
  • paired_internal_transfer_payment_id Many2one → account.payment
    copy=False help='When an internal transfer is posted, a paired payment is created. They are cross referenced trough this field' args: 'account.payment'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account' tracking=True args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_id' domain="['|', ('parent_id','=', False), ('is_company','=', True)]" ondelete='restrict' readonly=False store=True string='Customer/Vendor' tracking=True
  • partner_type Selection
    default='customer' required=True tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' related='payment_method_line_id.code'
  • payment_method_id Many2one
    related='payment_method_line_id.payment_method_id' store=True string='Method' tracking=True
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' copy=False domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Acquirers: Each payment acquirer has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' string='Payment Reference' tracking=True
  • payment_type Selection
    default='inbound' required=True string='Payment Type' tracking=True args: [('outbound', 'Send'), ('inbound', 'Receive')]
  • qr_code Char
    compute='_compute_qr_code' help='QR-code report URL to use to generate the QR-code to scan with a banking app to perform this payment.' string='QR Code'
  • reconciled_bill_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Bills' args: 'account.move'
  • reconciled_bills_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Bills'
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Invoices'
  • reconciled_invoices_type Selection
    compute='_compute_stat_buttons_from_reconciliation' help="Technical field used to determine label 'invoice' or 'credit note' in view" args: [('credit_note', 'Credit Note'), ('invoice', 'Invoice')]
  • reconciled_statement_ids Many2many → account.bank.statement
    compute='_compute_stat_buttons_from_reconciliation' help='Statements matched to this payment' string='Reconciled Statements' args: 'account.bank.statement'
  • reconciled_statements_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Statements'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be required or not in the payments form views'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be displayed or not in the payments form views'
Public methods (15)
  • action_cancel(self)
    draft -> cancelled
  • action_draft(self)
    posted -> draft
  • action_open_destination_journal(self)
    Redirect the user to this destination journal. :return: An action on account.move.
  • action_post(self)
    draft -> posted
  • button_open_bills(self)
    Redirect the user to the bill(s) paid by this payment. :return: An action on account.move.
  • button_open_invoices(self)
    Redirect the user to the invoice(s) paid by this payment. :return: An action on account.move.
  • button_open_journal_entry(self)
    Redirect the user to this payment journal. :return: An action on account.move.
  • button_open_statements(self)
    Redirect the user to the statement line(s) reconciled to this payment. :return: An action on account.move.
  • create(self, vals_list)
    @api.model_create_multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • mark_as_sent(self)
  • name_get(self)
    @api.depends('move_id.name')
  • unlink(self)
  • unmark_as_sent(self)
  • write(self, vals)

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True selection=[('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (9)
  • available_payment_method_ids Many2many
    related='journal_id.available_payment_method_ids'
  • code Char
    related='payment_method_id.code'
  • company_id Many2one
    related='journal_id.company_id'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' ondelete='cascade'
  • name Char
    compute='_compute_name' readonly=False store=True
  • payment_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=<expr> ondelete='restrict'
  • payment_method_id Many2one → account.payment.method
    comodel_name='account.payment.method' domain="[('payment_type', '=?', payment_type), ('id', 'in', available_payment_method_ids)]" required=True string='Payment Method'
  • payment_type Selection
    related='payment_method_id.payment_type'
  • sequence Integer
    default=10
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
    Payment method lines which are used in a payment should not be deleted from the database, only the link betweend them and the journals must be broken.
  • write(self, vals)

New fields (29)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False store=True
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_line_ids Many2many → account.payment.method.line
    compute='_compute_payment_method_line_fields' args: 'account.payment.method.line'
  • can_edit_wizard Boolean
    compute='_compute_from_lines' copy=False help='Technical field used to indicate the user can edit the wizard content such as the amount.' store=True
  • can_group_payments Boolean
    compute='_compute_from_lines' copy=False help="Technical field used to indicate the user can see the 'group_payments' box." store=True
  • communication Char
    compute='_compute_communication' readonly=False store=True string='Memo'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    compute='_compute_from_lines' copy=False store=True args: 'res.company'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' help="The payment's currency." readonly=False store=True string='Currency' args: 'res.currency'
  • group_payment Boolean
    compute='_compute_group_payment' help='Only one payment will be created by partner (bank)/ currency.' readonly=False store=True string='Group Payments'
  • hide_payment_method_line Boolean
    compute='_compute_payment_method_line_fields' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • journal_id Many2one → account.journal
    compute='_compute_journal_id' domain="[('company_id', '=', company_id), ('type', 'in', ('bank', 'cash'))]" readonly=False store=True args: 'account.journal'
  • line_ids Many2many → account.move.line
    copy=False readonly=True string='Journal items' args: 'account.move.line', 'account_payment_register_move_line_rel', 'wizard_id', 'line_id'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account'
  • partner_id Many2one → res.partner
    compute='_compute_from_lines' copy=False ondelete='restrict' store=True string='Customer/Vendor' args: 'res.partner'
  • partner_type Selection
    compute='_compute_from_lines' copy=False store=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference'
  • payment_difference_handling Selection
    default='open' string='Payment Difference Handling' args: [('open', 'Keep open'), ('reconcile', 'Mark as fully paid')]
  • payment_method_line_id Many2one → account.payment.method.line
    compute='_compute_payment_method_line_id' domain="[('id', 'in', available_payment_method_line_ids)]" help='Manual: Pay or Get paid by any method outside of Odoo.\nPayment Acquirers: Each payment acquirer has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\nCheck: Pay bills by check and print it from Odoo.\nBatch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\nSEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_sepa is necessary.\nSEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_sepa is necessary.\n' readonly=False store=True string='Payment Method' args: 'account.payment.method.line'
  • payment_type Selection
    compute='_compute_from_lines' copy=False store=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be required or not in the payments form views'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be displayed or not in the payments form views'
  • source_amount Monetary
    compute='_compute_from_lines' copy=False currency_field='company_currency_id' store=True string='Amount to Pay (company currency)'
  • source_amount_currency Monetary
    compute='_compute_from_lines' copy=False currency_field='source_currency_id' store=True string='Amount to Pay (foreign currency)'
  • source_currency_id Many2one → res.currency
    compute='_compute_from_lines' copy=False help="The payment's currency." store=True string='Source Currency' args: 'res.currency'
  • writeoff_account_id Many2one → account.account
    copy=False domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Difference Account' args: 'account.account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (3)
  • action_create_payments(self)
  • default_get(self, fields_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model

New fields (6)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Html
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • compute(self, value, date_ref=False, currency=None)
  • unlink(self)

New fields (7)
  • day_of_the_month Integer
    help='Day of the month on which the invoice must come to its term. If zero or negative, this value will be ignored, and no specific day will be set. If greater than the last day of a month, this number will instead select the last day of this month.' string='Day of the month'
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'days after the invoice date'), ('after_invoice_month', 'days after the end of the invoice month'), ('day_following_month', 'of the following month'), ('day_current_month', 'of the current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment terms lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment terms line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits='Payment Terms' help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (2)
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • sort_selection Selection
    default='move_name' required=True args: [('date', 'Date'), ('move_name', 'Journal Entry Number')], 'Entries Sorted by'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (35)
  • active Boolean
    default=True
  • allow_payment_tolerance Boolean
    default=True help='Difference accepted in case of underpayment.' string='Payment Tolerance' tracking=True
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate' tracking=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • decimal_separator Char
    default=<expr> help='Every character that is nor a digit nor this separator will be removed from the matching string' tracking=True
  • line_ids One2many → account.reconcile.model.line
    copy=True args: 'account.reconcile.model.line', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount Condition' tracking=True
  • match_amount_max Float
    string='Amount Max Parameter' tracking=True
  • match_amount_min Float
    string='Amount Min Parameter' tracking=True
  • match_journal_ids Many2many → account.journal
    check_company=True domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" help='The reconciliation model will only be available from the selected journals.' string='Journals Availability' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label' tracking=True
  • match_label_param Char
    string='Label Parameter' tracking=True
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Received'), ('amount_paid', 'Paid'), ('both', 'Paid/Received')] string='Amount Type' tracking=True
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note' tracking=True
  • match_note_param Char
    string='Note Parameter' tracking=True
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner should be set' tracking=True
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Only Those Partner Categories' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Only Those Partners' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency' tracking=True
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference" tracking=True
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference" tracking=True
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference" tracking=True
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type' tracking=True
  • match_transaction_type_param Char
    string='Transaction Type Parameter' tracking=True
  • matching_order Selection
    default='old_first' required=True selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')] tracking=True
  • name Char
    required=True string='Name'
  • number_entries Integer
    compute='_compute_number_entries' string='Number of entries related to this model'
  • partner_mapping_line_ids One2many → account.reconcile.model.partner.mapping
    comodel_name='account.reconcile.model.partner.mapping' help='The mapping uses regular expressions.\n- To Match the text at the beginning of the line (in label or notes), simply fill in your text.\n- To Match the text anywhere (in label or notes), put your text between .*\n e.g: .*N°48748 abc123.*' inverse_name='model_id' string='Partner Mapping Lines'
  • past_months_limit Integer
    default=18 help='Number of months in the past to consider entries from when applying this model.' string='Search Months Limit' tracking=True
  • payment_tolerance_param Float
    compute='_compute_payment_tolerance_param' help='The sum of total residual amount propositions matches the statement line amount under this amount/percentage.' readonly=False store=True string='Gap' tracking=True
  • payment_tolerance_type Selection
    default='percentage' help='The sum of total residual amount propositions and the statement line amount allowed gap type.' required=True selection=[('percentage', 'in percentage'), ('fixed_amount', 'in amount')] tracking=True
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Button to generate counterpart entry'), ('writeoff_suggestion', 'Rule to suggest counterpart entry'), ('invoice_matching', 'Rule to match invoices/bills')] string='Type' tracking=True
  • sequence Integer
    default=10 required=True
  • show_decimal_separator Boolean
    compute='_compute_show_decimal_separator' help='Technical field to decide if we should show the decimal separator for the regex matching field.'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (1)
  • action_reconcile_stat(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (17)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" ondelete='cascade' required=True string='Account' args: 'account.account'
  • allow_payment_tolerance Boolean
    related='model_id.allow_payment_tolerance'
  • amount Float
    compute='_compute_float_amount' help='Technical shortcut to parse the amount to a float' store=True string='Float Amount'
  • amount_string Char
    default='100' help='Value for the amount of the writeoff line\n * Percentage: Percentage of the balance, between 0 and 100.\n * Fixed: The fixed value of the writeoff. The amount will count as a debit if it is negative, as a credit if it is positive.\n * From Label: There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)' required=True string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('percentage_st_line', 'Percentage of statement line'), ('regex', 'From label')]
  • analytic_account_id Many2one → account.analytic.account
    check_company=True ondelete='set null' string='Analytic Account' args: 'account.analytic.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    check_company=True relation='account_reconcile_model_analytic_tag_rel' string='Analytic Tags' args: 'account.analytic.tag'
  • company_id Many2one
    related='model_id.company_id' store=True
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label'
  • model_id Many2one → account.reconcile.model
    ondelete='cascade' readonly=True args: 'account.reconcile.model'
  • payment_tolerance_param Float
    related='model_id.payment_tolerance_param'
  • rule_type Selection
    related='model_id.rule_type'
  • sequence Integer
    default=10 required=True
  • show_force_tax_included Boolean
    compute='_compute_show_force_tax_included' help='Technical field used to show the force tax included button'
  • tax_ids Many2many → account.tax
    check_company=True ondelete='restrict' string='Taxes' args: 'account.tax'
Public methods (0)

No public methods.

New fields (8)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount_string Char
    string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • label Char
    string='Journal Item Label'
  • model_id Many2one → account.reconcile.model.template
    args: 'account.reconcile.model.template'
  • sequence Integer
    default=10 required=True
  • tax_ids Many2many → account.tax.template
    ondelete='restrict' string='Taxes' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (4)
  • model_id Many2one → account.reconcile.model
    comodel_name='account.reconcile.model' ondelete='cascade' readonly=True required=True
  • narration_regex Char
    string='Find Text in Notes'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='cascade' required=True string='Partner'
  • payment_ref_regex Char
    string='Find Text in Label'
Public methods (1)
  • validate_regex(self)
    @api.constrains('narration_regex', 'payment_ref_regex')

New fields (30)
  • allow_payment_tolerance Boolean
    default=True help='Difference accepted in case of underpayment.' string='Allow Payment Gap'
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • decimal_separator Char
    help='Every character that is nor a digit nor this separator will be removed from the matching string'
  • line_ids One2many → account.reconcile.model.line.template
    args: 'account.reconcile.model.line.template', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount Condition'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals Availability' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Type'
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note'
  • match_note_param Char
    string='Note Parameter'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency'
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference"
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference"
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference"
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type'
  • match_transaction_type_param Char
    string='Transaction Type Parameter'
  • matching_order Selection
    selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')]
  • name Char
    required=True string='Button Label'
  • payment_tolerance_param Float
    default=0.0 help='The sum of total residual amount propositions matches the statement line amount under this amount/percentage.' string='Gap'
  • payment_tolerance_type Selection
    default='percentage' help='The sum of total residual amount propositions and the statement line amount allowed gap type.' required=True selection=[('percentage', 'in percentage'), ('fixed_amount', 'in amount')]
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Button to generate counterpart entry'), ('writeoff_suggestion', 'Rule to suggest counterpart entry'), ('invoice_matching', 'Rule to match invoices/bills')] string='Type'
  • sequence Integer
    default=10 required=True
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    help='Date (inclusive) to which the numbers are resequenced. If not set, all Journal Entries up to the end of the period are resequenced.'
  • first_date Date
    help='Date (inclusive) from which the numbers are resequenced.'
  • first_name Char
    compute='_compute_first_name' readonly=False required=True store=True string='First New Sequence'
  • move_ids Many2many → account.move
    args: 'account.move'
  • new_values Text
    compute='_compute_new_values'
  • ordering Selection
    default='keep' required=True args: [('keep', 'Keep current order'), ('date', 'Reorder by accounting date')]
  • preview_moves Text
    compute='_compute_preview_moves'
  • sequence_number_reset Char
    compute='_compute_sequence_number_reset'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • resequence(self)

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company'
  • name Char
  • parent_id Many2one → account.root
    args: 'account.root'
Public methods (1)
  • init(self)

New fields (5)
  • bank_bic Char
    readonly=False related='bank_id.bic' string='Bic'
  • linked_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_linked_journal_id' domain="[('type','=','bank'), ('bank_account_id', '=', False), ('company_id', '=', company_id)]" inverse='set_linked_journal_id' string='Journal'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account Integer
    default=<expr>
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals)
    @api.model
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (22)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0.0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage of Price: The tax amount is a % of the price:\n e.g 100 * (1 + 10%) = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage of Price Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    check_company=True string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • country_code Char
    readonly=True related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' help='The country for which this tax is applicable.' required=True string='Country'
  • description Char
    string='Label on Invoices'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Base of Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Distribution when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Distribution for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Distribution when the tax is used on a refund' inverse_name='refund_tax_id' string='Distribution for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Exigibility' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    default=_default_tax_group domain="[('country_id', 'in', (country_id, False))]" required=True string='Tax Group' args: 'account.tax.group'
  • tax_scope Selection
    help='Restrict the use of taxes to a type of product.' string='Tax Scope' args: [('service', 'Services'), ('consu', 'Goods')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Type' args: TYPE_TAX_USE
Public methods (11)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False)
    Returns all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] 'handle_price_include' is used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }], }
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields_list)
    @api.model
  • flatten_taxes_hierarchy(self, create_map=False)
  • get_tax_tags(self, is_refund, repartition_type)
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None, is_refund=False, include_caba_tags=False)
    Called by the reconciliation to compute taxes on writeoff during bank reconciliation
  • name_get(self)
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')
  • validate_tax_group_id(self)
    @api.constrains('tax_group_id')

New fields (8)
  • amount Float
    default=0.0 required=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date Date
    default=fields.Date.context_today required=True
  • foreign_vat_fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' domain="[('company_id', '=', company_id), ('country_id', '=', tax_report_country_id), ('foreign_vat', '!=', False)]" help='The foreign fiscal position for which this carryover is made.' string='Fiscal position'
  • name Char
    required=True
  • tax_report_country_id Many2one
    related='tax_report_id.country_id'
  • tax_report_id Many2one
    related='tax_report_line_id.report_id'
  • tax_report_line_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' string='Tax report line'
Public methods (0)

No public methods.

New fields (7)
  • country_id Many2one → res.country
    comodel_name='res.country' help='The country for which this tax group is applicable.' string='Country'
  • name Char
    required=True translate=True
  • preceding_subtotal Char
    help="If set, this value will be used on documents as the label of a subtotal excluding this tax group before displaying it. If not set, the tax group will be displayed after the 'Untaxed amount' subtotal." string='Preceding Subtotal'
  • property_advance_tax_payment_account_id Many2one → account.account
    company_dependent=True string='Advance Tax payment account' args: 'account.account'
  • property_tax_payable_account_id Many2one → account.account
    company_dependent=True string='Tax current account (payable)' args: 'account.account'
  • property_tax_receivable_account_id Many2one → account.account
    company_dependent=True string='Tax current account (receivable)' args: 'account.account'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (12)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('internal_type', 'not in', ('receivable', 'payable'))]" help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company' help='The company this distribution line belongs to.' store=True string='Company'
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this distribution line' string='Factor Ratio'
  • factor_percent Float
    help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' help='The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id' ondelete='cascade'
  • refund_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' help='The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id' ondelete='cascade'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which distribution lines are displayed and matched. For refunds to work properly, invoice distribution lines should be arranged in the same order as the credit note distribution lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] string='Tax Grids'
  • tag_ids_domain Binary
    compute='_compute_tag_ids_domain' help='Dynamic domain used for the tag that can be set on tax' string='tag domain'
  • tax_id Many2one → account.tax
    comodel_name='account.tax' compute='_compute_tax_id'
  • use_in_tax_closing Boolean
    default=True string='Tax Closing Entry'
Public methods (1)
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (9)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' help='Account on which to post the tax amount' string='Account'
  • factor_percent Float
    help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id'
  • minus_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' copy=True help="Tax report lines whose '-' tag will be assigned to move lines by this repartition line" relation='account_tax_repartition_minus_report_line' string='Minus Report Lines'
  • plus_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' copy=True help="Tax report lines whose '+' tag will be assigned to move lines by this repartition line" relation='account_tax_repartition_plus_report_line' string='Plus Tax Report Lines'
  • refund_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True help='Additional tags that will be assigned by this repartition line for use in financial reports' relation='account_tax_repartition_financial_tags' string='Financial Tags'
  • use_in_tax_closing Boolean
    string='Tax Closing Entry'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_repartition_line_create_vals(self, company)
  • validate_tags(self)
    @api.constrains('plus_report_line_ids', 'minus_report_line_ids')
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (4)
  • country_id Many2one → res.country
    comodel_name='res.country' default=<expr> help='Country for which this report is available.' required=True string='Country'
  • line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='Content of this tax report' inverse_name='report_id' string='Report Lines'
  • name Char
    help='Name of this tax report' required=True string='Name'
  • root_line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' domain=[('parent_id', '=', None)] help='Subset of line_ids, containing the lines at the root of the report.' inverse_name='report_id' string='Root Report Lines'
Public methods (5)
  • copy(self, default=None)
  • get_checks_to_perform(self, amounts, carried_over)
    To override in localizations If value is a float, it will be formatted with format_value The line is not displayed if it is falsy (0, 0.0, False, ...) :param amounts: the mapping dictionary between codes and values :param carried_over: the mapping dictionary between codes and whether they are carried over :return: iterable of tuple (name, value)
  • get_lines_in_hierarchy(self)
    Returns an interator to the lines of this tax report, were parent lines ar all directly followed by their children.
  • validate_country_id(self)
  • write(self, vals)

New fields (16)
  • carry_over_condition_method Selection
    help='The method used to determine if this line should be carried over.' selection=[('no_negative_amount_carry_over_condition', 'No negative amount'), ('always_carry_over_and_set_to_0', 'Always carry over and set to 0')] string='Method'
  • carry_over_destination_line_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' domain="[('report_id', '=', report_id)]" help='The line to which the value of this line will be carried over to if needed. If left empty the line will carry over to itself.' string='Destination'
  • carryover_line_ids One2many → account.tax.carryover.line
    comodel_name='account.tax.carryover.line' inverse_name='tax_report_line_id' string='Carryover lines'
  • children_line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='Lines that should be rendered as children of this one' inverse_name='parent_id' string='Children Lines'
  • code Char
    help='Optional unique code to refer to this line in total formulas' string='Code'
  • formula Char
    help='Python expression used to compute the value of a total line. This field is mutually exclusive with tag_name, setting it turns the line to a total line. Tax report line codes can be used as variables in this expression to refer to the balance of the corresponding lines in the report. A formula cannot refer to another line using a formula.' string='Formula'
  • is_carryover_persistent Boolean
    default=True help='Defines how this report line creates carry over lines when performing tax closing. If true, the amounts carried over will always be added on top of each other: for example, a report line with a balance of 10 with an existing carryover of 50 will add an additional 10 to it when doing the closing, making a total carryover of 60. If false, the total carried over amount will be forced to the total of this report line: a report line with a balance of 10 with an existing carryover of 50 will create a new carryover line of -40, so that the total carryover becomes 10.' string='Persistent'
  • is_carryover_used_in_balance Boolean
    help='If set, the carryover amount for this line will be used when calculating its balance in the report. This means that the carryover could affect other lines if they are using this one in their computation.' string='Used in line balance'
  • name Char
    help='Complete name for this report line, to be used in report.' required=True string='Name'
  • parent_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' string='Parent Line'
  • parent_path Char
    index=True
  • report_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' help='The optional action to call when clicking on this line in accounting reports.' string='Report Action'
  • report_id Many2one → account.tax.report
    comodel_name='account.tax.report' help='The parent tax report of this line' ondelete='cascade' required=True string='Tax Report'
  • sequence Integer
    help='Sequence determining the order of the lines in the report (smaller ones come first). This order is applied locally per section (so, children of the same line are always rendered one after the other).' required=True string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' help='Tax tags populating this line' relation='account_tax_report_line_tags_rel' string='Tags'
  • tag_name Char
    help='Short name for the tax grid corresponding to this report line. Leave empty if this report line should not correspond to any such grid.' string='Tag Name'
Public methods (6)
  • action_view_carryover_lines(self, options)
    Action when clicking on the "View carryover lines" in the carryover info popup. Takes into account the report options, to get the correct lines depending on the current company/companies. :return: An action showing the account.tax.carryover.lines for the current tax report line.
  • always_carry_over_and_set_to_0(self, options, line_amount, carried_over_amount)
  • create(self, vals)
    @api.model
  • no_negative_amount_carry_over_condition(self, options, line_amount, carried_over_amount)
  • unlink(self)
  • write(self, vals)

New fields (19)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.' string='Affect Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Repartition for Invoices'
  • is_base_affected Boolean
    default=True help='If set, taxes with a lower sequence might affect this one, provided they try to do it.' string='Base Affected by Previous Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on a refund' inverse_name='refund_tax_id' string='Repartition for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • tax_scope Selection
    help='Restrict the use of taxes to a type of product.' args: [('service', 'Service'), ('consu', 'Consumable')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Type' args: TYPE_TAX_USE
Public methods (1)
  • name_get(self)
    @api.depends('name', 'description')

New fields (3)
  • attachment_ids Many2many → ir.attachment
    comodel_name='ir.attachment' relation='account_tour_upload_bill_ir_attachments_rel' string='Attachments'
  • preview_invoice Html
    compute='_compute_preview_invoice' string='Invoice Preview' translate=True
  • selection Selection
    default='sample' selection=<expr>
Public methods (1)
  • apply(self)

New fields (1)
  • email_alias Char
    readonly=True
Public methods (1)
  • apply(self)

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)

New fields (0)

No new fields.

Public methods (1)
  • document_layout_save(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • retrieve_attachment(self, record)

New fields (0)

No new fields.

Public methods (1)
  • write(self, values)
    Warn the user about updating account if they try to install account_reports with an out of date module A change in stable added a dependency between account_reports and a template update in account. It could cause a traceback when updating account_reports, or account_accountant with an out of date account module. This will inform the user about what to do in such case, by asking him to update invoicing.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (1)
  • tax_string Char
    compute='_compute_tax_string'
Public methods (0)

No public methods.

New fields (6)
  • account_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' domain="[('applicability', '=', 'products')]" help='Tags to be set on the base and tax journal items created for this product.' string='Account Tags'
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category.' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product.' string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • tax_string Char
    compute='_compute_tax_string'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product.' string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (1)
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • lines(self, target_move, journal_ids, sort_selection, data)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (59)
  • account_cash_basis_base_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • account_dashboard_onboarding_state Selection
    default='not_done' string='State of the account dashboard onboarding panel' args: DASHBOARD_ONBOARDING_STATES
  • account_default_pos_receivable_account_id Many2one → account.account
    string='Default PoS Receivable Account' args: 'account.account'
  • account_enabled_tax_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_account_enabled_tax_country_ids' help='Technical field containing the countries for which this company is using tax-related features(hence the ones for which l10n modules need to show tax-related fields).' string='l10n-used countries'
  • account_fiscal_country_id Many2one → res.country
    comodel_name='res.country' compute='compute_account_tax_fiscal_country' help='The country to use the tax reports from for this company' readonly=False store=True string='Fiscal Country'
  • account_invoice_onboarding_state Selection
    default='not_done' string='State of the account invoice onboarding panel' args: DASHBOARD_ONBOARDING_STATES
  • account_journal_payment_credit_account_id Many2one → account.account
    string='Journal Outstanding Payments Account' args: 'account.account'
  • account_journal_payment_debit_account_id Many2one → account.account
    string='Journal Outstanding Receipts Account' args: 'account.account'
  • account_journal_suspense_account_id Many2one → account.account
    string='Journal Suspense Account' args: 'account.account'
  • account_onboarding_create_invoice_state Selection
    default='not_done' string='State of the onboarding create invoice step' args: ONBOARDING_STEP_STATES
  • account_onboarding_invoice_layout_state Selection
    default='not_done' string='State of the onboarding invoice layout step' args: ONBOARDING_STEP_STATES
  • account_onboarding_sale_tax_state Selection
    default='not_done' string='State of the onboarding sale tax step' args: ONBOARDING_STEP_STATES
  • account_opening_date Date
    default=<expr> help='That is the date of the opening entry.' required=True string='Opening Entry'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_purchase_tax_id Many2one → account.tax
    string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    string='Default Sale Tax' args: 'account.tax'
  • account_setup_bank_data_state Selection
    default='not_done' string='State of the onboarding bank data step' args: ONBOARDING_STEP_STATES
  • account_setup_bill_state Selection
    default='not_done' string='State of the onboarding bill step' args: ONBOARDING_STEP_STATES
  • account_setup_coa_state Selection
    default='not_done' string='State of the onboarding charts of account step' args: ONBOARDING_STEP_STATES
  • account_setup_fy_data_state Selection
    default='not_done' string='State of the onboarding fiscal year step' args: ONBOARDING_STEP_STATES
  • account_setup_taxes_state Selection
    default='not_done' string='State of the onboarding Taxes step' args: ONBOARDING_STEP_STATES
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • automatic_entry_default_journal_id Many2one → account.journal
    domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • country_code Char
    related='country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    string='Cash Difference Expense Account' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    string='Cash Difference Income Account' args: 'account.account'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'liability'), ('internal_type', 'not in', ('receivable', 'payable')), ('company_id', '=', id)]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> string='Loss Exchange Rate Account'
  • fiscal_position_ids One2many → account.fiscal.position
    comodel_name='account.fiscal.position' inverse_name='company_id'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    default=True args: 'Email by default'
  • invoice_is_print Boolean
    default=True args: 'Print by default'
  • invoice_terms Html
    string='Default Terms and Conditions' translate=True
  • invoice_terms_html Html
    compute='_compute_invoice_terms_html' readonly=False sanitize_attributes=False store=True string='Default Terms and Conditions as a Web page' translate=True
  • multi_vat_foreign_country_ids Many2many → res.country
    comodel_name='res.country' compute='_compute_multi_vat_foreign_country' help='Countries for which the company has a VAT number' string='Foreign VAT countries'
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • qr_code Boolean
    string='Display QR-code on invoices'
  • revenue_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'asset'), ('internal_type', 'not in', ('receivable', 'payable')), ('company_id', '=', id)]" help='Account used to move the period of a revenue' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    comodel_name='account.journal' string='Cash Basis Journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help='No users can edit journal entries related to a tax prior and inclusive of this date.' args: 'Tax Lock Date'
  • terms_type Selection
    default='plain' string='Terms & Conditions format' args: [('plain', 'Add a Note'), ('html', 'Add a link to a Web Page')]
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (24)
  • action_close_account_dashboard_onboarding(self)
    @api.model
    Mark the dashboard onboarding panel as closed.
  • action_close_account_invoice_onboarding(self)
    @api.model
    Mark the invoice onboarding panel as closed.
  • action_open_account_onboarding_create_invoice(self)
    @api.model
  • action_open_account_onboarding_sale_tax(self)
    @api.model
    Onboarding step for the invoice layout.
  • action_open_taxes_onboarding(self)
    @api.model
    Called by the 'Taxes' button of the setup bar.
  • action_save_onboarding_invoice_layout(self)
    Set the onboarding step as done
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • compute_account_tax_fiscal_country(self)
    @api.depends('country_id')
  • compute_fiscalyear_dates(self, current_date)
    The role of this method is to provide a fallback when account_accounting is not installed. As the fiscal year is irrelevant when account_accounting is not installed, this method returns the calendar year. :param current_date: A datetime.date/datetime.datetime object. :return: A dictionary containing: * date_from * date_to
  • create_op_move_if_non_existant(self)
    @api.model
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_account_dashboard_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (account_winbooks_import in this case).
  • get_account_invoice_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (payment acquirer in this case).
  • get_and_update_account_dashboard_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_and_update_account_invoice_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_chart_of_accounts_action(self)
    @api.model
    Called by the 'Chart of Accounts' button of the setup bar.
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar.
  • setting_init_fiscal_year_action(self)
    @api.model
    Called by the 'Fiscal Year Opening' button of the setup bar.
  • write(self, values)

New fields (56)
  • account_cash_basis_base_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] readonly=False related='company_id.account_cash_basis_base_account_id' string='Base Tax Received Account'
  • account_fiscal_country_id Many2one
    readonly=False related='company_id.account_fiscal_country_id' store=False string='Fiscal Country Code'
  • account_journal_payment_credit_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> help='Outgoing Payments are posted on an Outstanding Payments Account. In the bank reconciliation widget, they appear as blue lines.\nBank transactions are then reconciled on the Outstanding Payments Account rather the Payable Account.' readonly=False related='company_id.account_journal_payment_credit_account_id' string='Outstanding Payments Account'
  • account_journal_payment_debit_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> help='Incoming payments are posted on an Outstanding Receipts Account. In the bank reconciliation widget, they appear as blue lines.\nBank transactions are then reconciled on the Outstanding Receipts Accounts rather than the Receivable Account.' readonly=False related='company_id.account_journal_payment_debit_account_id' string='Outstanding Receipts Account'
  • account_journal_suspense_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> help='Bank Transactions are posted immediately after import or synchronization. Their counterparty is the bank suspense account.\nReconciliation replaces the latter by the definitive account(s).' readonly=False related='company_id.account_journal_suspense_account_id' string='Bank Suspense Account'
  • chart_template_id Many2one → account.chart.template
    default=<expr> domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • country_code Char
    readonly=True related='company_id.account_fiscal_country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Currency Exchange Journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • expense_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> readonly=False related='company_id.expense_currency_exchange_account_id' string='Loss Account'
  • group_analytic_tags Boolean
    implied_group='analytic.group_analytic_tags' string='Analytic Tags'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_show_line_subtotals_tax_excluded Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_excluded' args: 'Show line subtotals without taxes (B2B)'
  • group_show_line_subtotals_tax_included Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_included' args: 'Show line subtotals with taxes (B2C)'
  • group_show_purchase_receipts Boolean
    implied_group='account.group_purchase_receipts' string='Purchase Receipt'
  • group_show_sale_receipts Boolean
    implied_group='account.group_sale_receipts' string='Sale Receipt'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • income_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> readonly=False related='company_id.income_currency_exchange_account_id' string='Gain Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    readonly=False related='company_id.invoice_is_email' string='Send Email'
  • invoice_is_print Boolean
    readonly=False related='company_id.invoice_is_print' string='Print'
  • invoice_terms Html
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • invoice_terms_html Html
    readonly=False related='company_id.invoice_terms_html' string='Terms & Conditions as a Web page'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    string='Bill Digitalization'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_oss Boolean
    string='EU Intra-community Distance Selling'
  • module_l10n_fr_fec_import Boolean
    help='Allows you to import FEC files.\n-This installs the l10n_fr_fec_import module.' args: 'Import FEC files'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • preview_ready Boolean
    compute='_compute_terms_preview' string='Display preview button'
  • purchase_tax_id Many2one → account.tax
    readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR-code'
  • sale_tax_id Many2one → account.tax
    readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • show_line_subtotals_tax_selection Selection
    config_parameter='account.show_line_subtotals_tax_selection' default='tax_excluded' required=True string='Line Subtotals Tax Display' args: [('tax_excluded', 'Tax-Excluded'), ('tax_included', 'Tax-Included')]
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_journal_id Many2one → account.journal
    readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • terms_type Selection
    readonly=False related='company_id.terms_type'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving from a liquidity account to another.' readonly=False related='company_id.transfer_account_id' string='Internal Transfer Account' args: 'account.account'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (4)
  • action_update_terms(self)
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • set_values(self)

New fields (1)
  • display_rounding_warning Boolean
    compute='_compute_display_rounding_warning' help="Technical field. Used to tell whether or not to display the rounding warning. The warning informs a rounding factor change might be dangerous on res.currency's form view." string='Display Rounding Warning'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • get_application_groups(self, domain)
    @api.model

New fields (22)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used instead of the default one as the payable account for the current partner' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True domain="[('company_id', '=', current_company_id)]" help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used instead of the default one as the receivable account for the current partner' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True domain="[('company_id', 'in', [current_company_id, False])]" help='This payment term will be used instead of the default one for sales orders and customer invoices' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True domain="[('company_id', 'in', [current_company_id, False])]" help='This payment term will be used instead of the default one for purchase orders and vendor bills' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice,account.group_account_readonly' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
Public methods (4)
  • action_view_partner_invoices(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • mark_as_reconciled(self)

New fields (0)

No new fields.

Public methods (3)
  • build_qr_code_base64(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • build_qr_code_url(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • get_available_qr_methods_in_sequence(self)
    @api.model
    Same as _get_available_qr_methods but without returning the sequence, and using it directly to order the returned list.

New fields (1)
  • journal_id One2many → account.journal
    domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
Public methods (1)
  • default_get(self, fields_list)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sequence_number Integer
    compute='_compute_split_sequence' store=True
  • sequence_prefix Char
    compute='_compute_split_sequence' store=True
Public methods (1)
  • init(self)

New fields (10)
  • adjustment_type Selection
    required=True string='Adjustment Type' args: [('debit', 'Applied on debit journal item'), ('credit', 'Applied on credit journal item')]
  • amount Monetary
    currency_field='company_currency_id' required=True
  • company_currency_id Many2one → res.currency
    default=<expr> readonly=True args: 'res.currency'
  • credit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('is_off_balance', '=', False)]" required=True string='Credit account' args: 'account.account'
  • date Date
    default=fields.Date.context_today required=True
  • debit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('is_off_balance', '=', False)]" required=True string='Debit account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain=[('type', '=', 'general')] required=True string='Journal' args: 'account.journal'
  • reason Char
    required=True string='Justification'
  • report_id Many2one
    related='tax_report_line_id.report_id' string='Report'
  • tax_report_line_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' domain=_domain_tax_report help='The report line to make an adjustment for.' required=True string='Report Line'
Public methods (1)
  • create_move(self)

New fields (1)
  • force_post Boolean
    help='Entries in the future are set to be auto-posted by default. Check this checkbox to post them now.' string='Force'
Public methods (1)
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Stéphane Bidoul, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Mohammed Shekha, Cedric Snauwaert, Ravi Gohil, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, qdp-odoo, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, Sylvain LE GAL, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, SEINLET Nicolas, Nicolas Seinlet, Pierre Masereel, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Nans Lefebvre, jev-odoo, Adrian Torres, Nathan de Pryck, wan, mreficent, Julien Castiaux, Xavier-Do, Denis Roussel, jvm-odoo, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, William Henrotin, Sébastien Theys, Akim Juillerat, Nasreddin (bon), alt-odoo, oco-odoo, Florent de Labarre, Julien Mougenot, Jason Van Malder, fw-bot, Anh Thao Pham (pta), Katherine Zaoral, svs-odoo, Alvaro Fuentes, Rémy Baranx (bar), Achraf (abz), Carlos Lopez, Brice bib Bartoletti, Adrien Widart, Ivan Yelizariev, Hubert (huvw), Naglis Jonaitis, Nasreddin Boulif (bon), Touati Djamel (otd), Nicolas Galler, Swapnesh Shah, nie, Nathan Marotte (nama), IEL, Rémy Voet (ryv), Andrius Laukavičius, Mathieu Duckerts-Antoine, Pierre Paridans, Luc De Meyer, snd, Julien CHEVREAU (JCU), jbw, remi-filament, Djamel (otd), Jalpesh Patel, Yenthe666, Benjamin Frantzen (bfr), Aurélien (avd), Arnaud Joset, Jinal Patel, Elmeri Niemelä, root, Kevin Baptiste, Pratima Gupta, Pierre Verkest, Guillaume (guva), Raf Geens, Stefan-Calin Crainiciuc (stcc), Pablo Paez, roen-odoo, Stanislas Sobieski, Hubert Van de Walle (huvw), Hardik Prajapati, Miquel Raïch, momegahed, jdoutreloux, Mitali Patel, Jigar Vaghela, Ricardo Gomes Rodrigues (rigr), laa, Bruno-brsy, Nicolas (vin), william-andre, Paolo (pgi), Julien Van Roy, Merlin (megu), MerlinGuillaume, tranngocson1996, Ankita Raval, yhu-odoo, thcl-odoo, nicolas, aliya, william, Agustín Castro Bugallo, Nshimiyimana Séna, Louis Baudoux, Anang Aji Rahmawan, John (jol), Ernesto Tejeda, BVE, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), Pouya Malekinejad, Thomas (det), John Laterre (jol), Florian Gilbert, Ruben Gomes, Thomas Beckers, Adrien Minet, Swapnesh, Jesús Alan Ramos Rodríguez, Antoine Vandevenne (anv), Jinjiu Liu, gawa-odoo, dbkosky, Michael Mattiello (mcm), Florian(flg), niyasraphy, jbw-odoo, Jose Lopez, Sébastien BEAU, bve-odoo, Habib (ayh), baa, Matheus Leal Viana (malv), François Honoré, Louis Wicket (wil), Mylyna Hy, Maximilien (malb), Shawcker, Gauthier Wala (gawa), maximilien(malb), Andrew Gavgavian, Claire Bretton (clbr), Antoine Dupuis (andu), mhabboush, Elmeri Niemela, Kshitij Nariya, Hbto [ Vauxoo ], Carsten Wolff (cawo), Antoine Boonen, Ravi Singh, Camille Spiritus, Michael Tietz, Dylan Kiss (dyki), Hansun (hale), Jinane Maksoud, emilkholod, PoMa, arsi, Jesús Alan Ramos Rodríguez, Sébastien Geelen (sge), smdc-odoo, jadir-bs, hupo-odoo, Paolo Gatti
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (173)
XML IDNameModelTypeStatus
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
account_automatic_entry_wizard_form account.automatic.entry.wizard.form account.automatic.entry.wizard form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_dashboard_onboarding_panel account.dashboard.onboarding.panel ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_onboarding_panel account.invoice.onboarding.panel ir.ui.view qweb New
account_invoice_onboarding_sale_tax_form account.invoice.layout.onboarding.form res.company form New
account_invoice_send_wizard_form account.invoice.send.form account.invoice.send form New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_resequence_view Re-sequence Journal Entries account.resequence.wizard form New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag tree New
account_tax_report_form account.tax.report.form account.tax.report form New
account_tax_report_line_form account.tax.report.line.form account.tax.report.line form New
account_tax_report_line_tree account.tax.report.line.tree account.tax.report.line tree New
account_tax_report_search account.tax.report.search account.tax.report search New
account_tax_report_tree account.tax.report.tree account.tax.report tree New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax tree New
account_tour_upload_bill account.tour.upload.bill account.tour.upload.bill form New
account_tour_upload_bill_email_confirm account.tour.upload.bill.email.confirm account.tour.upload.bill.email.confirm form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
assets_frontend account assets ir.ui.view qweb Inherits web.assets_frontend
assets_tests Account Assets Tests ir.ui.view qweb Inherits web.assets_tests
cash_box_out_form cash_box_out cash.box.out form New
dashboard_onboarding_bill_step dashboard_onboarding_bill_step ir.ui.view qweb New
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
onboarding_bank_account_step onboarding_bank_account_step ir.ui.view qweb New
onboarding_chart_of_account_step onboarding_chart_of_account_step ir.ui.view qweb New
onboarding_create_invoice_step onboarding_create_invoice_step ir.ui.view qweb New
onboarding_fiscal_year_step onboarding_fiscal_year_step ir.ui.view qweb New
onboarding_invoice_layout_step onboarding_invoice_layout_step ir.ui.view qweb New
onboarding_sale_tax_step onboarding_sale_tax_step ir.ui.view qweb New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Show Invoices & Bills ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
product_template_view_tree product.template.tree product.template tree New
qunit_suite account tests ir.ui.view qweb Inherits web.qunit_suite_tests
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_currency_form_inherit res.currency.form.inherit res.currency xpath Inherits base.view_currency_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_adjustments_wizard tax.adjustments.wizard.form tax.adjustments.wizard form New
tax_repartition_line_tree account.tax.repartition.line.tree account.tax.repartition.line tree New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_analytic_default_form account.analytic.default.form account.analytic.default form New
view_account_analytic_default_form_search account.analytic.default.search account.analytic.default search New
view_account_analytic_default_kanban account.analytic.default.kanban account.analytic.default kanban New
view_account_analytic_default_tree account.analytic.default.tree account.analytic.default tree New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_cashbox_footer account.bnk_stmt_cashbox.form account.bank.statement.cashbox xpath Inherits view_account_bnk_stmt_cashbox
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_invoice_report_search_analytic_accounting account.invoice.report.search_analytic_accounting account.invoice.report filter Inherits account.view_account_invoice_report_search
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.tree account.journal.group tree New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_line_filter_with_root_selection account.move.line.search account.move.line xpath Inherits account.view_account_move_line_filter
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_register_form account.payment.register.form account.payment.register form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_line_form account.reconcile.model.line.form account.reconcile.model.line form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_form res.company.form.inherit.account res.company xpath Inherits base.view_company_form
view_company_partner_bank_form company.res.partner.bank.form res.partner.bank xpath Inherits base.view_partner_bank_form
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_in_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_incoterms_tree account.incoterms.tree account.incoterms tree New
view_invoice_tree account.invoice.tree account.move tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_grouped account.move.line.tree.grouped account.move.line tree New
view_move_line_tree_grouped_bank_cash account.move.line.tree.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_general account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_misc account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_partner account.move.line.tree.grouped.partner account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_sales_purchases account.move.line.tree.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree_grouped
view_move_tree account.move.tree account.move tree New
view_out_invoice_tree account.out.invoice.tree account.move xpath Inherits account.view_invoice_tree
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_group_tree account.tax.group.tree account.tax.group tree New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
Models touched (83)

New fields (20)
  • allowed_journal_ids Many2many → account.journal
    help='Define in which journals this account can be used. If empty, can be used in all journals.' string='Allowed Journals' args: 'account.journal'
  • code Char
    index=True required=True size=64
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this account currency.' string='Account Currency' args: 'res.currency'
  • deprecated Boolean
    default=False index=True
  • group_id Many2one → account.group
    compute='_compute_account_group' readonly=True store=True args: 'account.group'
  • internal_group Selection
    readonly=True related='user_type_id.internal_group' store=True string='Internal Group'
  • internal_type Selection
    readonly=True related='user_type_id.type' store=True string='Internal Type'
  • is_off_balance Boolean
    compute='_compute_is_off_balance' default=False readonly=True store=True
  • name Char
    index=True required=True string='Account Name'
  • note Text
    args: 'Internal Notes'
  • opening_balance Monetary
    compute='_compute_opening_debit_credit' help='Opening balance value for this account.' string='Opening Balance'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' help='Opening credit value for this account.' inverse='_set_opening_credit' string='Opening Credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' help='Opening debit value for this account.' inverse='_set_opening_debit' string='Opening Debit'
  • reconcile Boolean
    default=False help='Check this box if this account allows invoices & payments matching of journal items.' string='Allow Reconciliation'
  • root_id Many2one → account.root
    compute='_compute_account_root' store=True args: 'account.root'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_account_account_tag'
  • tax_ids Many2many → account.tax
    check_company=True context={'append_type_to_tax_name': True} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
  • user_type_id Many2one → account.account.type
    help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' required=True string='Type' args: 'account.account.type'
Public methods (8)
  • action_duplicate_accounts(self)
  • action_read_account(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • load(self, fields, data)
    @api.model
    Overridden for better performances when importing a list of account with opening debit/credit. In that case, the auto-balance is postpone until the whole file has been imported.
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes')]
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True args: 'Tag Name'
  • tax_negate Boolean
    help='Check this box to negate the absolute value of the balance of the lines associated with this tag in tax report computation.' string='Negate Tax Balance'
  • tax_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='The tax report lines using this tag' relation='account_tax_report_line_tags_rel' string='Tax Report Lines'
Public methods (0)

No public methods.

New fields (10)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.depends('name', 'code')

New fields (5)
  • include_initial_balance Boolean
    help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' string='Bring Accounts Balance Forward'
  • internal_group Selection
    help="The 'Internal Group' is used to filter accounts based on the internal group set on the account type." required=True string='Internal Group' args: [('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off_balance', 'Off Balance')]
  • name Char
    required=True string='Account Type' translate=True
  • note Text
    string='Description'
  • type Selection
    default='other' help="The 'Internal Type' is used for features available on different types of accounts: liquidity type is for cash or bank accounts, payable/receivable is for vendor/customer accounts." required=True args: [('other', 'Regular'), ('receivable', 'Receivable'), ('payable', 'Payable'), ('liquidity', 'Liquidity')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (10)
  • account_id Many2one → account.account
    help='Select an accounting account which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this account, it will automatically take this as an analytic account)' ondelete='cascade' string='Account' args: 'account.account'
  • analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • company_id Many2one → res.company
    help='Select a company which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this company, it will automatically take this as an analytic account)' ondelete='cascade' string='Company' args: 'res.company'
  • date_start Date
    help='Default start date for this Analytic Account.' string='Start Date'
  • date_stop Date
    help='Default end date for this Analytic Account.' string='End Date'
  • partner_id Many2one → res.partner
    help='Select a partner which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this partner, it will automatically take this as an analytic account)' ondelete='cascade' string='Partner' args: 'res.partner'
  • product_id Many2one → product.product
    help='Select a product which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)' ondelete='cascade' string='Product' args: 'product.product'
  • sequence Integer
    help='Gives the sequence order when displaying a list of analytic distribution' string='Sequence'
  • user_id Many2one → res.users
    help='Select a user which will use analytic account specified in analytic default.' ondelete='cascade' string='User' args: 'res.users'
Public methods (1)
  • account_get(self, product_id=None, partner_id=None, account_id=None, user_id=None, date=None, company_id=None)
    @api.model

New fields (5)
  • code Char
    size=8
  • general_account_id Many2one → account.account
    compute_sudo=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    check_company=True index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • product_id Many2one → product.product
    check_company=True string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • account_type Selection
    compute='_compute_account_type' store=True args: [('income', 'Revenue'), ('expense', 'Expense')]
  • action Selection
    required=True args: [('change_period', 'Change Period'), ('change_account', 'Change Account')]
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • date Date
    default=<expr> required=True
  • destination_account_id Many2one → account.account
    comodel_name='account.account' help='Account to transfer to.' string='To'
  • display_currency_helper Boolean
    compute='_compute_display_currency_helper' help='Technical field. Used to indicate whether or not to display the currency conversion tooltip. The tooltip informs a currency conversion will be performed with the transfer.' string='Currency Conversion Helper'
  • expense_accrual_account Many2one → account.account
    compute='_compute_expense_accrual_account' domain="[('company_id', '=', company_id),('internal_type', 'not in', ('receivable', 'payable')),('is_off_balance', '=', False)]" inverse='_inverse_expense_accrual_account' readonly=False args: 'account.account'
  • journal_id Many2one → account.journal
    compute='_compute_journal_id' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='Journal where to create the entry.' inverse='_inverse_journal_id' readonly=False required=True string='Journal' args: 'account.journal'
  • move_data Text
    compute='_compute_move_data' help='JSON value of the moves to be created'
  • move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • percentage Float
    compute='_compute_percentage' help='Percentage of each line to execute the action on.' readonly=False store=True args: 'Percentage'
  • preview_move_data Text
    compute='_compute_preview_move_data' help='JSON value of the data to be displayed in the previewer'
  • revenue_accrual_account Many2one → account.account
    compute='_compute_revenue_accrual_account' domain="[('company_id', '=', company_id),('internal_type', 'not in', ('receivable', 'payable')),('is_off_balance', '=', False)]" inverse='_inverse_revenue_accrual_account' readonly=False args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id' help='Total amount impacted by the automatic entry.' readonly=False store=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • do_action(self)

New fields (25)
  • all_lines_reconciled Boolean
    compute='_compute_all_lines_reconciled' help='Technical field indicating if all statement lines are fully reconciled.'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    compute='_compute_ending_balance' readonly=False states={'confirm': [('readonly', True)]} store=True tracking=True args: 'Ending Balance'
  • balance_start Monetary
    compute='_compute_starting_balance' readonly=False states={'confirm': [('readonly', True)]} store=True string='Starting Balance' tracking=True
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • is_valid_balance_start Boolean
    compute='_compute_is_valid_balance_start' help='Technical field to display a warning message in case starting balance is different than previous ending balance' store=True string='Is Valid Balance Start'
  • journal_id Many2one → account.journal
    check_company=True default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_count Integer
    compute='_get_move_line_count'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • previous_statement_id Many2one → account.bank.statement
    compute='_get_previous_statement' help='technical field to compute starting balance correctly' store=True args: 'account.bank.statement'
  • reference Char
    copy=False help='Used to hold the reference of the external mean that created this statement (name of imported file, reference of online synchronization...)' readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' help='The current state of your bank statement:- New: Fully editable with draft Journal Entries.- Processing: No longer editable with posted Journal entries, ready for the reconciliation.- Validated: All lines are reconciled. There is nothing left to process.' readonly=True required=True selection=[('open', 'New'), ('posted', 'Processing'), ('confirm', 'Validated')] string='Status' tracking=True
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (11)
  • button_journal_entries(self)
  • button_post(self)
    Move the bank statements from 'draft' to 'posted'.
  • button_reopen(self)
    Move the bank statements back to the 'open' state.
  • button_reprocess(self)
    Move the bank statements back to the 'posted' state.
  • button_validate(self)
  • button_validate_or_action(self)
  • create(self, values)
    @api.model_create_multi
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
  • unlink(self)
  • write(self, values)

New fields (5)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
  • currency_id Many2one → res.currency
    compute='_compute_currency' args: 'res.currency'
  • end_bank_stmt_ids One2many → account.bank.statement
    args: 'account.bank.statement', 'cashbox_end_id'
  • start_bank_stmt_ids One2many → account.bank.statement
    args: 'account.bank.statement', 'cashbox_start_id'
  • total Float
    compute='_compute_total'
Public methods (4)
  • create(self, vals)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • name_get(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • validate(self)

New fields (17)
  • account_number Char
    help="Technical field used to store the bank account number before its creation, upon the line's processing" string='Bank Account Number'
  • amount Monetary
    currency_field='currency_id'
  • amount_currency Monetary
    currency_field='foreign_currency_id' help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • amount_residual Float
    compute='_compute_is_reconciled' help="The amount left to be reconciled on this statement line (signed according to its move lines' balance), expressed in its currency. This is a technical field use to speedup the application of reconciliation models." store=True string='Residual Amount'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    string='Journal Currency' args: 'res.currency'
  • foreign_currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Foreign Currency' args: 'res.currency'
  • is_reconciled Boolean
    compute='_compute_is_reconciled' help='Technical field indicating if the statement line is already reconciled.' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    auto_join=True check_company=True comodel_name='account.move' ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' domain="['|', ('parent_id','=', False), ('is_company','=',True)]" ondelete='restrict' string='Partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • payment_ids Many2many → account.payment
    comodel_name='account.payment' help='Payments generated during the reconciliation of this bank statement lines.' relation='account_payment_account_bank_statement_line_rel' string='Auto-generated Payments'
  • payment_ref Char
    required=True string='Label'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    check_company=True comodel_name='account.bank.statement' index=True ondelete='cascade' required=True string='Statement'
  • transaction_type Char
    string='Transaction Type'
Public methods (5)
  • button_undo_reconciliation(self)
    Undo the reconciliation mades on the statement line and reset their journal items to their original states.
  • create(self, vals_list)
    @api.model_create_multi
  • reconcile(self, lines_vals_list, to_check=False)
    Perform a reconciliation on the current account.bank.statement.line with some counterpart account.move.line. If the statement line entry is not fully balanced after the reconciliation, an open balance will be created using the partner. :param lines_vals_list: A list of python dictionary containing: 'id': Optional id of an existing account.move.line. For each line having an 'id', a new line will be created in the current statement line. 'balance': Optional amount to consider during the reconciliation. If a foreign currency is set on the counterpart line in the same foreign currency as the statement line, then this amount is considered as the amount in foreign currency. If not specified, the full balance is taken. This value must be provided if 'id' is not. **kwargs: Custom values to be set on the newly created account.move.line. :param to_check: Mark the current statement line as "to_check" (see field for more details).
  • unlink(self)
  • write(self, vals)

New fields (7)
  • company_id Many2one → res.company
    related='profit_account_id.company_id' args: 'res.company'
  • loss_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • profit_account_id Many2one → account.account
    company_dependent=True domain="[('deprecated', '=', False), ('company_id', '=', current_company_id)]" string='Profit Account' args: 'account.account'
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'UP'), ('DOWN', 'DOWN'), ('HALF-UP', 'HALF-UP')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (5)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • currency_id Many2one → res.currency
    related='cashbox_id.currency_id' args: 'res.currency'
  • number Integer
    help='Opening Unit Numbers' string='#Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (31)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • account_journal_suspense_account_id Many2one → account.account.template
    string='Journal Suspense Account' args: 'account.account.template'
  • bank_account_code_prefix Char
    required=True string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    required=True string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • default_cash_difference_expense_account_id Many2one → account.account.template
    string='Cash Difference Expense Account' args: 'account.account.template'
  • default_cash_difference_income_account_id Many2one → account.account.template
    string='Cash Difference Income Account' args: 'account.account.template'
  • default_pos_receivable_account_id Many2one → account.account.template
    string='PoS receivable account' args: 'account.account.template'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    string='Receivable Account' args: 'account.account.template'
  • property_advance_tax_payment_account_id Many2one → account.account.template
    string='Advance tax payment account' args: 'account.account.template'
  • property_cash_basis_base_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • property_stock_account_input_categ_id Many2one → account.account.template
    string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • property_tax_payable_account_id Many2one → account.account.template
    string='Tax current account (payable)' args: 'account.account.template'
  • property_tax_receivable_account_id Many2one → account.account.template
    string='Tax current account (receivable)' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_code_prefix Char
    required=True string='Prefix of the main transfer accounts'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (10)
  • create_record_with_xmlid(self, company, template, model, vals)
  • existing_accounting(self, company_id)
    @api.model
    Returns True iff some accounting entries have already been made for the provided company (meaning hence that its chart of accounts cannot be changed anymore).
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    This method generates accounts from account templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary containing the mapping between the account templates and generated accounts (will be populated) :param code_digits: number of digits to use for account code. :param company_id: company to generate accounts for. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_groups(self, company)
    This method generates account groups from account groups templates. :param company: company to generate the account groups for
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    This method creates account reconcile models :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mapping between the account templates and the real accounts. :param company_id: company to create models for :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    This method generates Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: the company to generate fiscal position data for :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param acc_template_ref: Account templates reference. :param company_id: company to generate journals for. :returns: True
  • generate_properties(self, acc_template_ref, company)
    This method used for creating properties. :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company to generate properties for. :returns: True
  • open_select_template_wizard(self)
  • try_loading(self, company=False)
    Installs this chart of accounts for the current company if not chart of accounts had been created for it yet.

New fields (1)
  • amount_currency Boolean
    help='Print Report with the currency column if the currency differs from the company currency.' args: 'With Currency'
Public methods (1)
  • pre_print_report(self, data)

New fields (5)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
  • write(self, vals)

New fields (15)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position'
  • note Text
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (6)
  • create(self, vals)
    @api.model
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
    :return: fiscal position found (recordset) :rtype: :class:`account.fiscal.position`
  • map_account(self, account)
  • map_accounts(self, accounts)
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes, product=None, partner=None)
  • write(self, vals)

New fields (4)
  • account_dest_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" required=True string='Account on Product' args: 'account.account'
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (4)
  • company_id Many2one → res.company
    related='position_id.company_id' store=True string='Company' args: 'res.company'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_id Many2one → account.tax
    check_company=True string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    check_company=True required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (13)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery country matches the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery country matches.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (0)

No public methods.

New fields (4)
  • exchange_move_id Many2one → account.move
    index=True args: 'account.move'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (6)
  • code_prefix_end Char
  • code_prefix_start Char
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • name Char
    required=True
  • parent_id Many2one → account.group
    index=True ondelete='cascade' readonly=True args: 'account.group'
  • parent_path Char
    index=True
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (5)
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • code_prefix_end Char
  • code_prefix_start Char
  • name Char
    required=True
  • parent_id Many2one → account.group.template
    index=True ondelete='cascade' args: 'account.group.template'
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (22)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • analytic_account_id Many2one → account.analytic.account
    groups='analytic.group_analytic_accounting' string='Analytic Account' args: 'account.analytic.account'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • move_type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_state Selection
    readonly=True selection=[('not_paid', 'Not Paid'), ('in_payment', 'In Payment'), ('paid', 'paid')] string='Payment Status'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_subtotal Float
    readonly=True string='Untaxed Total'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
Public methods (0)

No public methods.

New fields (7)
  • composer_id Many2one → mail.compose.message
    ondelete='cascade' required=True string='Composer' args: 'mail.compose.message'
  • invoice_ids Many2many → account.move
    string='Invoices' args: 'account.move', 'account_move_account_invoice_send_rel'
  • invoice_without_email Text
    compute='_compute_invoice_without_email' string='invoice(s) that will not be sent'
  • is_email Boolean
    default=<expr> args: 'Email'
  • is_print Boolean
    default=<expr> args: 'Print'
  • printed Boolean
    default=False args: 'Is Printed'
  • template_id Many2one → mail.template
    domain="[('model', '=', 'account.move')]" index=True args: 'mail.template', 'Use template'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • onchange_is_email(self)
    @api.onchange('is_email')
  • onchange_template_id(self)
    @api.onchange('template_id')
  • save_as_template(self)
  • send_and_print_action(self)

New fields (39)
  • account_control_ids Many2many → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" string='Allowed accounts' args: 'account.account', 'journal_account_control_rel', 'journal_id', 'account_id'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_domain Char
    compute='_compute_alias_domain' compute_sudo=True default=_default_alias_domain args: 'Alias domain'
  • alias_id Many2one → mail.alias
    copy=False help='Send one separate email for each invoice.\n\nAny file extension will be accepted.\n\nOnly PDF and XML files will be interpreted by Odoo' string='Email Alias' args: 'mail.alias'
  • alias_name Char
    compute='_compute_alias_name' copy=False help='It creates draft invoices and bills by sending an email.' inverse='_inverse_type' readonly=False args: 'Alias Name'
  • at_least_one_inbound Boolean
    compute='_methods_compute' store=True
  • at_least_one_outbound Boolean
    compute='_methods_compute' store=True
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    check_company=True copy=False domain="[('partner_id','=', company_partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    help='Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.' required=True size=5 string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True readonly=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • country_code Char
    readonly=True related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain="[('deprecated', '=', False), ('company_id', '=', company_id),'|', ('user_type_id', '=', default_account_type), ('user_type_id', 'in', type_control_ids),('user_type_id.type', 'not in', ('receivable', 'payable'))]" ondelete='restrict' string='Default Account'
  • default_account_type Many2one → account.account.type
    compute='_compute_default_account_type' args: 'account.account.type'
  • inbound_payment_method_ids Many2many → account.payment.method
    column1='journal_id' column2='inbound_payment_method' comodel_name='account.payment.method' compute='_compute_inbound_payment_method_ids' domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings.' readonly=False relation='account_journal_inbound_payment_method_rel' store=True string='Inbound Payment Methods'
  • invoice_reference_model Selection
    default=_default_invoice_reference_model help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Odoo'), ('euro', 'European')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('none', 'Free'), ('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • journal_group_ids Many2many → account.journal.group
    check_company=True domain="[('company_id', '=', company_id)]" string='Journal Groups' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=<expr> help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account'
  • name Char
    required=True string='Journal Name'
  • outbound_payment_method_ids Many2many → account.payment.method
    column1='journal_id' column2='outbound_payment_method' comodel_name='account.payment.method' compute='_compute_outbound_payment_method_ids' domain=[('payment_type', '=', 'outbound')] help='Manual:Pay bill by cash or any other method outside of Odoo.\nCheck:Pay bill by check and print it from Odoo.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. Enable this option from the settings.' readonly=False relation='account_journal_outbound_payment_method_rel' store=True string='Outbound Payment Methods'
  • payment_credit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=<expr> help='Outgoing payments entries triggered by bills/credit notes will be posted on the Outstanding Payments Account and displayed as blue lines in the bank reconciliation widget. During the reconciliation process, concerned transactions will be reconciled with entries on the Outstanding Payments Account instead of the payable account.' ondelete='restrict' string='Outstanding Payments Account'
  • payment_debit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' copy=False domain=<expr> help='Incoming payments entries triggered by invoices/refunds will be posted on the Outstanding Receipts Account and displayed as blue lines in the bank reconciliation widget. During the reconciliation process, concerned transactions will be reconciled with entries on the Outstanding Receipts Account instead of the receivable account.' ondelete='restrict' string='Outstanding Receipts Account'
  • profit_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain=<expr> help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • restrict_mode_hash_table Boolean
    help='If ticked, the accounting entry or invoice receives a hash as soon as it is posted and cannot be modified anymore.' string='Lock Posted Entries with Hash'
  • sale_activity_note Text
    args: 'Activity Summary'
  • sale_activity_type_id Many2one → mail.activity.type
    default=False help='Activity will be automatically scheduled on payment due date, improving collection process.' string='Schedule Activity' args: 'mail.activity.type'
  • sale_activity_user_id Many2one → res.users
    help='Leave empty to assign the Salesperson of the invoice.' string='Activity User' args: 'res.users'
  • secure_sequence_id Many2one → ir.sequence
    check_company=True copy=False help='Sequence to use to ensure the securisation of data' readonly=True args: 'ir.sequence'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_override_regex Text
    help='Technical field used to enforce complex sequence composition that the system would normally misunderstand.\nThis is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.\nThe prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).\ne.g: ^(?P<prefix1>.*?)(?P<year>\\d{4})(?P<prefix2>\\D*?)(?P<month>\\d{2})(?P<prefix3>\\D+?)(?P<seq>\\d+)(?P<suffix>\\D*?)$'
  • suspense_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_suspense_account_id' domain=<expr> help='Bank statements transactions will be posted on the suspense account until the final reconciliation allowing finding the right account.' ondelete='restrict' readonly=False store=True string='Suspense Account'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." inverse='_inverse_type' required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
  • type_control_ids Many2many → account.account.type
    string='Allowed account types' args: 'account.account.type', 'journal_account_type_control_rel', 'journal_id', 'type_id'
Public methods (9)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • create_invoice_from_attachment(self, attachment_ids=None)
    Create invoices from the attachments (for instance a Factur-X XML file) and redirect the user to the newly created invoice(s). :param attachment_ids: list of attachment ids :return: action to open the created invoices
  • get_next_bank_cash_default_code(self, journal_type, company)
    @api.model
  • name_get(self)
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank (if not exists) and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (5)
  • color Integer
    default=0 args: 'Color Index'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (18)
  • action_create_new(self)
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
  • create_customer_payment(self)
    return action to create a customer payment
  • create_internal_transfer(self)
    return action to create a internal transfer
  • create_supplier_payment(self)
    return action to create a supplier payment
  • get_bar_graph_datas(self)
  • get_journal_dashboard_datas(self)
  • get_line_graph_datas(self)
    Computes the data used to display the graph for bank and cash journals in the accounting dashboard
  • mark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as done in the setup bar and in the company.
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_collect_money(self)
  • open_payments_action(self, payment_type, mode='tree')
  • open_spend_money(self)
  • open_transfer_money(self)
  • to_check_ids(self)
  • unmark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as not done in the setup bar and in the company.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • excluded_journal_ids Many2many → account.journal
    check_company=True domain="[('company_id', '=', company_id)]" string='Excluded Journals' args: 'account.journal'
  • name Char
    required=True translate=True args: 'Journal Group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (68)
  • amount_by_group Binary
    compute='_compute_invoice_taxes_by_group' help='Edit Tax amounts if you encounter rounding issues.' string='Tax amount by group'
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • auto_post Boolean
    copy=False default=False help='If this checkbox is ticked, this entry will be automatically posted at its date.' string='Post Automatically'
  • bank_partner_id Many2one → res.partner
    compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank' args: 'res.partner'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=True store=True string='Company'
  • country_code Char
    readonly=True related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    default=_get_default_currency readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True readonly=True required=True states={'draft': [('readonly', False)]} string='Date'
  • display_qr_code Boolean
    compute='_compute_display_qr_code' string='Display QR-code'
  • fiscal_position_id Many2one → account.fiscal.position
    check_company=True domain="[('company_id', '=', company_id)]" help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • highest_name Char
    compute='_compute_highest_name'
  • inalterable_hash Char
    copy=False readonly=True string='Inalterability Hash'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    help='Defines the smallest coinage of the currency that can be used to pay by cash.' readonly=True states={'draft': [('readonly', False)]} string='Cash Rounding Method' args: 'account.cash.rounding'
  • invoice_date Date
    copy=False index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice/Bill Date'
  • invoice_date_due Date
    copy=False index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain' help='Technical field used to have a dynamic domain on journal / taxes in the form view.'
  • invoice_has_matching_suspense_amount Boolean
    compute='_compute_has_matching_suspense_amount' groups='account.group_account_invoice,account.group_account_readonly' help='Technical field used to display an alert on invoices if there is at least a matching amount in any supsense account.'
  • invoice_has_outstanding Boolean
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_incoterm_id Many2one → account.incoterms
    default=_get_default_invoice_incoterm help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Incoterm' args: 'account.incoterms'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('exclude_from_invoice_tab', '=', False)] readonly=True states={'draft': [('readonly', False)]} string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Text
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_payment_term_id Many2one → account.payment.term
    check_company=True readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • invoice_payments_widget Text
    compute='_compute_payments_widget_reconciled_info' groups='account.group_account_invoice,account.group_account_readonly'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    copy=False default=<expr> string='Salesperson' tracking=True args: 'res.users'
  • invoice_vendor_bill_id Many2one → account.move
    check_company=True help='Auto-complete from a past bill.' store=False string='Vendor Bill' args: 'account.move'
  • is_move_sent Boolean
    copy=False default=False help='It indicates that the invoice/payment has been sent.' readonly=True tracking=True
  • journal_id Many2one → account.journal
    check_company=True default=_get_default_journal domain="[('id', 'in', suitable_journal_ids)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True readonly=True states={'draft': [('readonly', False)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • move_type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] store=True string='Type' tracking=True
  • name Char
    compute='_compute_name' copy=False index=True readonly=False store=True string='Number' tracking=True
  • narration Text
    string='Terms and Conditions'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' readonly=False store=True string='Recipient Bank' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True check_company=True ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Partner' tracking=True args: 'res.partner'
  • payment_id Many2one → account.payment
    check_company=True comodel_name='account.payment' copy=False index=True string='Payment'
  • payment_reference Char
    compute='_compute_payment_reference' copy=False help='The payment reference to set on journal items.' index=True readonly=False store=True string='Payment Reference'
  • payment_state Selection
    compute='_compute_amount' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('in_payment', 'In Payment'), ('paid', 'Paid'), ('partial', 'Partially Paid'), ('reversed', 'Reversed'), ('invoicing_legacy', 'Invoicing App Legacy')] store=True string='Payment Status' tracking=True
  • posted_before Boolean
    copy=False help='Technical field for knowing if the move has been posted before'
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for the payment of this invoice, when printing it. If left blank, the first available and usable method will be used.' selection=<expr> string='Payment QR-code'
  • ref Char
    copy=False string='Reference' tracking=True
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_id One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    check_company=True copy=False index=True readonly=True string='Reversal of' args: 'account.move'
  • secure_sequence_number Integer
    copy=False index=True readonly=True string='Inalteralbility No Gap Sequence #'
  • show_name_warning Boolean
    store=False
  • show_reset_to_draft_button Boolean
    compute='_compute_show_reset_to_draft_button'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • statement_line_id Many2one → account.bank.statement.line
    check_company=True comodel_name='account.bank.statement.line' copy=False string='Statement Line'
  • string_to_hash Char
    compute='_compute_string_to_hash' readonly=True
  • suitable_journal_ids Many2many → account.journal
    compute='_compute_suitable_journal_ids' args: 'account.journal'
  • tax_cash_basis_move_id Many2one → account.move
    comodel_name='account.move' help='The journal entry from which this tax cash basis journal entry has been created.' index=True string='Origin Tax Cash Basis Entry'
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    help='Technical field used to keep track of the tax cash basis reconciliation. This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.' string='Tax Cash Basis Entry of' args: 'account.partial.reconcile'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message' help="Technical field used to display a message when the invoice's accounting date is prior of the tax lock date."
  • to_check Boolean
    default=False help='If this checkbox is ticked, it means that the user was not sure of all the related information at the time of the creation of the move and that the move needs to be checked again.' string='To Check'
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    help='Technical field used to fit the generic behavior in mail templates.' related='invoice_user_id' string='User'
Public methods (37)
  • action_duplicate(self)
  • action_invoice_paid(self)
    Hook to be overrided called when the invoice moves to the paid state.
  • action_invoice_print(self)
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_post(self)
  • action_register_payment(self)
    Open the account.payment.register wizard to pay the selected journal entries. :return: An action opening the account.payment.register wizard.
  • action_reverse(self)
  • action_switch_invoice_into_refund_credit_note(self)
  • action_view_reverse_entry(self)
  • button_cancel(self)
  • button_draft(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • generate_qr_code(self)
    Generates and returns a QR-code generation URL for this invoice, raising an error message if something is misconfigured. The chosen QR generation method is the one set in qr_method field if there is one, or the first eligible one found. If this search had to be performed and and eligible method was found, qr_method field is set to this method before returning the URL. If no eligible QR method could be found, we return None.
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • init(self)
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False)
  • is_sale_document(self, include_receipts=False)
  • js_assign_outstanding_line(self, line_id)
    Called by the 'payment' widget to reconcile a suggested journal item to the present invoice. :param line_id: The id of the line to reconcile with the current invoice.
  • js_remove_outstanding_partial(self, partial_id)
    Called by the 'payment' widget to remove a reconciled entry to the present invoice. :param partial_id: The id of an existing partial reconciled with the current invoice.
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • name_get(self)
    @api.depends('name', 'state')
  • onchange(self, values, field_name, field_onchange)
  • open_reconcile_view(self)
  • post(self)
  • preview_invoice(self)
  • setting_upload_bill_wizard(self)
    @api.model
    Called by the 'First Bill' button of the setup bar.
  • unlink(self)
  • update_lines_tax_exigibility(self)
  • write(self, vals)

New fields (58)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', 'company_id'),('is_off_balance', '=', False)]" index=True ondelete='cascade' string='Account' tracking=True args: 'account.account'
  • account_internal_group Selection
    readonly=True related='account_id.user_type_id.internal_group' string='Internal Group'
  • account_internal_type Selection
    readonly=True related='account_id.user_type_id.type' string='Internal Type'
  • account_root_id Many2one
    readonly=True related='account_id.root_id' store=True string='Account Root'
  • amount_currency Monetary
    copy=True help='The amount expressed in an optional other currency if it is a multi-currency entry.' store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_compute_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_compute_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    check_company=True compute='_compute_analytic_account_id' copy=True index=True readonly=False store=True string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • analytic_tag_ids Many2many → account.analytic.tag
    check_company=True compute='_compute_analytic_tag_ids' copy=True readonly=False store=True string='Analytic Tags' args: 'account.analytic.tag'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True string='Balance'
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one
    default=<expr> readonly=True related='move_id.company_id' store=True
  • credit Monetary
    currency_field='company_currency_id' default=0.0 string='Credit'
  • cumulated_balance Monetary
    compute='_compute_cumulated_balance' currency_field='company_currency_id' help='Cumulated balance depending on the domain and the order chosen in the view.' store=False string='Cumulated Balance'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • date Date
    copy=False group_operator='min' index=True readonly=True related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date' tracking=True
  • debit Monetary
    currency_field='company_currency_id' default=0.0 string='Debit'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section'), ('line_note', 'Note')]
  • exclude_from_invoice_tab Boolean
    help='Technical field used to exclude some lines from the invoice_line_ids tab in the form view.'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False index=True readonly=True string='Matching' args: 'account.full.reconcile'
  • is_rounding_line Boolean
    help='Technical field used to retrieve the cash rounding line.'
  • journal_id Many2one
    copy=False index=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    help='Credit journal items that are matched with this journal item.' readonly=True string='Matched Credits' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    help='Debit journal items that are matched with this journal item.' readonly=True string='Matched Debits' args: 'account.partial.reconcile', 'credit_move_id'
  • matching_number Char
    compute='_compute_matching_number' help="Matching number for this line, 'P' if it is only partially reconcile, or the name of the full reconcile if it exists." store=True string='Matching #'
  • move_id Many2one → account.move
    auto_join=True check_company=True help='The move of this entry line.' index=True ondelete='cascade' readonly=True required=True string='Journal Entry' args: 'account.move'
  • move_name Char
    index=True related='move_id.name' store=True string='Number'
  • name Char
    compute='_compute_name' readonly=False store=True string='Label' tracking=True
  • parent_state Selection
    readonly=True related='move_id.state' store=True
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    help='The payment that created this entry' index=True related='move_id.payment_id' store=True string='Originator Payment' args: 'account.payment'
  • price_subtotal Monetary
    currency_field='currency_id' readonly=True store=True string='Subtotal'
  • price_total Monetary
    currency_field='currency_id' readonly=True store=True string='Total'
  • price_unit Float
    digits='Product Price' string='Unit Price'
  • product_id Many2one → product.product
    ondelete='restrict' string='Product' args: 'product.product'
  • product_uom_category_id Many2one → uom.category
    related='product_id.uom_id.category_id' args: 'uom.category'
  • product_uom_id Many2one → uom.uom
    domain="[('category_id', '=', product_uom_category_id)]" string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    default=<expr> digits='Product Unit of Measure' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' string='Quantity'
  • recompute_tax_line Boolean
    help='Technical field used to know on which lines the taxes must be recomputed.' readonly=True store=False
  • reconcile_model_id Many2one → account.reconcile.model
    check_company=True copy=False readonly=True string='Reconciliation Model' args: 'account.reconcile.model'
  • reconciled Boolean
    compute='_compute_amount_residual' store=True
  • ref Char
    copy=False index=True readonly=True related='move_id.ref' store=True
  • sequence Integer
    default=10
  • statement_id Many2one
    copy=False help='The bank statement used for bank reconciliation' index=True related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    help='The statement line that created this entry' index=True related='move_id.statement_line_id' store=True string='Originator Statement Line' args: 'account.bank.statement.line'
  • tax_audit Char
    compute='_compute_tax_audit' help='Computed field, listing the tax grids impacted by this line, and the amount it applies to each of them.' store=True string='Tax Audit String'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True store=True string='Base Amount'
  • tax_exigible Boolean
    default=True help='Technical field used to mark a tax line as exigible in the vat report or not (only exigible journal items are displayed). By default all new journal items are directly exigible, but with the feature cash_basis on taxes, some will become exigible only when the payment is recorded.' readonly=True string='Appears in VAT report'
  • tax_fiscal_country_id Many2one → res.country
    comodel_name='res.country' related='move_id.company_id.account_tax_fiscal_country_id'
  • tax_group_id Many2one
    help='technical field for widget tax-group-custom-field' readonly=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' context={'active_test': False} help='Taxes that apply on the base amount' string='Taxes'
  • tax_line_id Many2one → account.tax
    compute='_compute_tax_line_id' help='Indicates that this journal item is a tax line' ondelete='restrict' store=True string='Originator Tax' args: 'account.tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    check_company=True comodel_name='account.tax.repartition.line' help='Tax distribution line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Distribution Line'
  • tax_tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' context={'active_test': False} help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags' tracking=True
Public methods (15)
  • action_automatic_entry(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_analytic_lines(self)
    Create analytic items upon validation of an account.move.line having an analytic account or an analytic distribution.
  • default_get(self, default_fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • init(self)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • invalidate_cache(self, fnames=None, ids=None)
    @api.model
  • name_get(self)
    @api.depends('ref', 'move_id')
  • open_reconcile_view(self)
  • reconcile(self)
    Reconcile the current move lines all together. :return: A dictionary representing a summary of what has been done during the reconciliation: * partials: A recorset of all account.partial.reconcile created during the reconciliation. * full_reconcile: An account.full.reconcile record created when there is nothing left to reconcile in the involved lines. * tax_cash_basis_moves: An account.move recordset representing the tax cash basis journal entries.
  • remove_move_reconcile(self)
    Undo a reconciliation
  • search_read(self, domain=None, fields=None, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (12)
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today string='Reversal date'
  • date_mode Selection
    default='custom' required=True selection=[('custom', 'Specific'), ('entry', 'Journal Entry Date')]
  • journal_id Many2one → account.journal
    check_company=True help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
  • move_ids Many2many → account.move
    domain=[('state', '=', 'posted')] args: 'account.move', 'account_move_reversal_move', 'reversal_id', 'move_id'
  • move_type Char
    compute='_compute_from_moves'
  • new_move_ids Many2many → account.move
    args: 'account.move', 'account_move_reversal_new_move', 'reversal_id', 'new_move_id'
  • reason Char
    string='Reason'
  • refund_method Selection
    help='Choose how you want to credit this invoice. You cannot "modify" nor "cancel" if the invoice is already reconciled.' required=True selection=[('refund', 'Partial Refund'), ('cancel', 'Full Refund'), ('modify', 'Full refund and new draft invoice')] string='Credit Method'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_moves(self)

New fields (11)
  • amount Monetary
    currency_field='company_currency_id' help='Always positive amount concerned by this matching expressed in the company currency.'
  • company_currency_id Many2one → res.currency
    comodel_name='res.currency' help='Utility field to express amount currency' related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=False related='debit_move_id.company_id' store=True string='Company'
  • credit_amount_currency Monetary
    currency_field='credit_currency_id' help='Always positive amount concerned by this matching expressed in the credit line foreign currency.'
  • credit_currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_credit_currency_id' store=True string='Currency of the credit journal item.'
  • credit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • debit_amount_currency Monetary
    currency_field='debit_currency_id' help='Always positive amount concerned by this matching expressed in the debit line foreign currency.'
  • debit_currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_debit_currency_id' store=True string='Currency of the debit journal item.'
  • debit_move_id Many2one → account.move.line
    comodel_name='account.move.line' index=True required=True
  • full_reconcile_id Many2one → account.full.reconcile
    comodel_name='account.full.reconcile' copy=False string='Full Reconcile'
  • max_date Date
    compute='_compute_max_date' help='Technical field used to determine at which date this reconciliation needs to be shown on the aged receivable/payable reports.' store=True string='Max Date of Matched Lines'
Public methods (1)
  • unlink(self)

New fields (27)
  • amount Monetary
    currency_field='currency_id'
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_ids Many2many → account.payment.method
    compute='_compute_payment_method_fields' args: 'account.payment.method'
  • country_code Char
    related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' help="The payment's currency." readonly=False store=True string='Currency' args: 'res.currency'
  • destination_account_id Many2one → account.account
    check_company=True comodel_name='account.account' compute='_compute_destination_account_id' domain="[('user_type_id.type', 'in', ('receivable', 'payable')), ('company_id', '=', company_id)]" readonly=False store=True string='Destination Account'
  • hide_payment_method Boolean
    compute='_compute_payment_method_fields' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • is_internal_transfer Boolean
    compute='_compute_is_internal_transfer' readonly=False store=True string='Is Internal Transfer'
  • is_matched Boolean
    compute='_compute_reconciliation_status' help='Technical field indicating if the payment has been matched with a statement line.' store=True string='Is Matched With a Bank Statement'
  • is_reconciled Boolean
    compute='_compute_reconciliation_status' help='Technical field indicating if the payment is already reconciled.' store=True string='Is Reconciled'
  • move_id Many2one → account.move
    check_company=True comodel_name='account.move' ondelete='cascade' readonly=True required=True string='Journal Entry'
  • partner_bank_id Many2one → res.partner.bank
    check_company=True compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' compute='_compute_partner_id' domain="['|', ('parent_id','=', False), ('is_company','=', True)]" ondelete='restrict' readonly=False store=True string='Customer/Vendor'
  • partner_type Selection
    default='customer' required=True tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' related='payment_method_id.code'
  • payment_method_id Many2one → account.payment.method
    compute='_compute_payment_method_id' domain="[('id', 'in', available_payment_method_ids)]" help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nCheck: Pay bill by check and print it from Odoo.\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ' readonly=False store=True string='Payment Method' args: 'account.payment.method'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' string='Payment Reference'
  • payment_type Selection
    default='inbound' required=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • qr_code Char
    compute='_compute_qr_code' help='QR-code report URL to use to generate the QR-code to scan with a banking app to perform this payment.' string='QR Code'
  • reconciled_bill_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Bills' args: 'account.move'
  • reconciled_bills_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Bills'
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_stat_buttons_from_reconciliation' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Invoices'
  • reconciled_statement_ids Many2many → account.bank.statement
    compute='_compute_stat_buttons_from_reconciliation' help='Statements matched to this payment' string='Reconciled Statements' args: 'account.bank.statement'
  • reconciled_statements_count Integer
    compute='_compute_stat_buttons_from_reconciliation' string='# Reconciled Statements'
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be required or not in the payments form views'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be displayed or not in the payments form views'
Public methods (13)
  • action_cancel(self)
    draft -> cancelled
  • action_draft(self)
    posted -> draft
  • action_post(self)
    draft -> posted
  • button_open_bills(self)
    Redirect the user to the bill(s) paid by this payment. :return: An action on account.move.
  • button_open_invoices(self)
    Redirect the user to the invoice(s) paid by this payment. :return: An action on account.move.
  • button_open_statements(self)
    Redirect the user to the statement line(s) reconciled to this payment. :return: An action on account.move.
  • create(self, vals_list)
    @api.model_create_multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • mark_as_sent(self)
  • name_get(self)
    @api.depends('move_id.name')
  • unlink(self)
  • unmark_as_sent(self)
  • write(self, vals)

New fields (4)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
  • sequence Integer
    default=10 help='Used to order Methods in the form view'
Public methods (0)

No public methods.

New fields (29)
  • amount Monetary
    compute='_compute_amount' currency_field='currency_id' readonly=False store=True
  • available_partner_bank_ids Many2many → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_available_partner_bank_ids'
  • available_payment_method_ids Many2many → account.payment.method
    compute='_compute_payment_method_fields' args: 'account.payment.method'
  • can_edit_wizard Boolean
    compute='_compute_from_lines' copy=False help='Technical field used to indicate the user can edit the wizard content such as the amount.' store=True
  • can_group_payments Boolean
    compute='_compute_from_lines' copy=False help="Technical field used to indicate the user can see the 'group_payments' box." store=True
  • communication Char
    compute='_compute_communication' readonly=False store=True string='Memo'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    compute='_compute_from_lines' copy=False store=True args: 'res.company'
  • country_code Char
    readonly=True related='company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' help="The payment's currency." readonly=False store=True string='Currency' args: 'res.currency'
  • group_payment Boolean
    compute='_compute_group_payment' help='Only one payment will be created by partner (bank)/ currency.' readonly=False store=True string='Group Payments'
  • hide_payment_method Boolean
    compute='_compute_payment_method_fields' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • journal_id Many2one → account.journal
    compute='_compute_journal_id' domain="[('company_id', '=', company_id), ('type', 'in', ('bank', 'cash'))]" readonly=False store=True args: 'account.journal'
  • line_ids Many2many → account.move.line
    copy=False readonly=True string='Journal items' args: 'account.move.line', 'account_payment_register_move_line_rel', 'wizard_id', 'line_id'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' compute='_compute_partner_bank_id' domain="[('id', 'in', available_partner_bank_ids)]" readonly=False store=True string='Recipient Bank Account'
  • partner_id Many2one → res.partner
    compute='_compute_from_lines' copy=False ondelete='restrict' store=True string='Customer/Vendor' args: 'res.partner'
  • partner_type Selection
    compute='_compute_from_lines' copy=False store=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference'
  • payment_difference_handling Selection
    default='open' string='Payment Difference Handling' args: [('open', 'Keep open'), ('reconcile', 'Mark as fully paid')]
  • payment_method_id Many2one → account.payment.method
    compute='_compute_payment_method_id' domain="[('id', 'in', available_payment_method_ids)]" help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nCheck: Pay bill by check and print it from Odoo.\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ' readonly=False store=True string='Payment Method' args: 'account.payment.method'
  • payment_type Selection
    compute='_compute_from_lines' copy=False store=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • require_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be required or not in the payments form views'
  • show_partner_bank_account Boolean
    compute='_compute_show_require_partner_bank' help='Technical field used to know whether the field `partner_bank_id` needs to be displayed or not in the payments form views'
  • source_amount Monetary
    compute='_compute_from_lines' copy=False currency_field='company_currency_id' store=True string='Amount to Pay (company currency)'
  • source_amount_currency Monetary
    compute='_compute_from_lines' copy=False currency_field='source_currency_id' store=True string='Amount to Pay (foreign currency)'
  • source_currency_id Many2one → res.currency
    compute='_compute_from_lines' copy=False help="The payment's currency." store=True string='Source Currency' args: 'res.currency'
  • writeoff_account_id Many2one → account.account
    copy=False domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Difference Account' args: 'account.account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (3)
  • action_create_payments(self)
  • default_get(self, fields_list)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model

New fields (6)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Text
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • compute(self, value, date_ref=False, currency=None)
  • unlink(self)

New fields (7)
  • day_of_the_month Integer
    help='Day of the month on which the invoice must come to its term. If zero or negative, this value will be ignored, and no specific day will be set. If greater than the last day of a month, this number will instead select the last day of this month.' string='Day of the month'
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'days after the invoice date'), ('after_invoice_month', 'days after the end of the invoice month'), ('day_following_month', 'of the following month'), ('day_current_month', 'of the current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment terms lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment terms line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits='Payment Terms' help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (2)
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • sort_selection Selection
    default='move_name' required=True args: [('date', 'Date'), ('move_name', 'Journal Entry Number')], 'Entries Sorted by'
Public methods (0)

No public methods.

New fields (34)
  • active Boolean
    default=True
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True string='Company'
  • decimal_separator Char
    default=<expr> help='Every character that is nor a digit nor this separator will be removed from the matching string'
  • line_ids One2many → account.reconcile.model.line
    copy=True args: 'account.reconcile.model.line', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    check_company=True domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Nature'
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note'
  • match_note_param Char
    string='Note Parameter'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency Matching'
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference"
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference"
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference"
  • match_total_amount Boolean
    default=True help='The sum of total residual amount propositions matches the statement line amount.' string='Amount Matching'
  • match_total_amount_param Float
    default=100 help='The sum of total residual amount propositions matches the statement line amount under this percentage.' string='Amount Matching %'
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type'
  • match_transaction_type_param Char
    string='Transaction Type Parameter'
  • matching_order Selection
    default='old_first' required=True selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')]
  • name Char
    required=True string='Name'
  • number_entries Integer
    compute='_compute_number_entries' string='Number of entries related to this model'
  • partner_mapping_line_ids One2many → account.reconcile.model.partner.mapping
    comodel_name='account.reconcile.model.partner.mapping' help='The mapping uses regular expressions.\n- To Match the text at the beginning of the line (in label or notes), simply fill in your text.\n- To Match the text anywhere (in label or notes), put your text between .*\n e.g: .*N°48748 abc123.*' inverse_name='model_id' string='Partner Mapping Lines'
  • past_months_limit Integer
    default=18 help='Number of months in the past to consider entries from when applying this model.' string='Past Months Limit'
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Manually create a write-off on clicked button'), ('writeoff_suggestion', 'Suggest counterpart values'), ('invoice_matching', 'Match existing invoices/bills')] string='Type'
  • sequence Integer
    default=10 required=True
  • show_decimal_separator Boolean
    compute='_compute_show_decimal_separator' help='Technical field to decide if we should show the decimal separator for the regex matching field.'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (1)
  • action_reconcile_stat(self)

New fields (17)
  • account_id Many2one → account.account
    check_company=True domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('is_off_balance', '=', False)]" ondelete='cascade' required=True string='Account' args: 'account.account'
  • amount Float
    compute='_compute_float_amount' help='Technical shortcut to parse the amount to a float' store=True string='Float Amount'
  • amount_string Char
    default='100' help='Value for the amount of the writeoff line\n * Percentage: Percentage of the balance, between 0 and 100.\n * Fixed: The fixed value of the writeoff. The amount will count as a debit if it is negative, as a credit if it is positive.\n * From Label: There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)' required=True string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • analytic_account_id Many2one → account.analytic.account
    check_company=True ondelete='set null' string='Analytic Account' args: 'account.analytic.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    check_company=True relation='account_reconcile_model_analytic_tag_rel' string='Analytic Tags' args: 'account.analytic.tag'
  • company_id Many2one
    default=<expr> related='model_id.company_id' store=True
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • journal_id Many2one → account.journal
    check_company=True domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label'
  • match_total_amount Boolean
    related='model_id.match_total_amount'
  • match_total_amount_param Float
    related='model_id.match_total_amount_param'
  • model_id Many2one → account.reconcile.model
    ondelete='cascade' readonly=True args: 'account.reconcile.model'
  • rule_type Selection
    related='model_id.rule_type'
  • sequence Integer
    default=10 required=True
  • show_force_tax_included Boolean
    compute='_compute_show_force_tax_included' help='Technical field used to show the force tax included button'
  • tax_ids Many2many → account.tax
    check_company=True ondelete='restrict' string='Taxes' args: 'account.tax'
Public methods (0)

No public methods.

New fields (8)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount_string Char
    string='Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • label Char
    string='Journal Item Label'
  • model_id Many2one → account.reconcile.model.template
    args: 'account.reconcile.model.template'
  • sequence Integer
    default=10 required=True
  • tax_ids Many2many → account.tax.template
    ondelete='restrict' string='Taxes' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (4)
  • model_id Many2one → account.reconcile.model
    comodel_name='account.reconcile.model' ondelete='cascade' readonly=True required=True
  • narration_regex Char
    string='Find Text in Notes'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' ondelete='cascade' required=True string='Partner'
  • payment_ref_regex Char
    string='Find Text in Label'
Public methods (1)
  • validate_regex(self)
    @api.constrains('narration_regex', 'payment_ref_regex')

New fields (29)
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • decimal_separator Char
    help='Every character that is nor a digit nor this separator will be removed from the matching string'
  • line_ids One2many → account.reconcile.model.line.template
    args: 'account.reconcile.model.line.template', 'model_id'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Nature'
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note'
  • match_note_param Char
    string='Note Parameter'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency Matching'
  • match_text_location_label Boolean
    default=True help="Search in the Statement's Label to find the Invoice/Payment's reference"
  • match_text_location_note Boolean
    default=False help="Search in the Statement's Note to find the Invoice/Payment's reference"
  • match_text_location_reference Boolean
    default=False help="Search in the Statement's Reference to find the Invoice/Payment's reference"
  • match_total_amount Boolean
    default=True help='The sum of total residual amount propositions matches the statement line amount.' string='Amount Matching'
  • match_total_amount_param Float
    default=100 help='The sum of total residual amount propositions matches the statement line amount under this percentage.' string='Amount Matching %'
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type'
  • match_transaction_type_param Char
    string='Transaction Type Parameter'
  • matching_order Selection
    selection=[('old_first', 'Oldest first'), ('new_first', 'Newest first')]
  • name Char
    required=True string='Button Label'
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Manually create a write-off on clicked button'), ('writeoff_suggestion', 'Suggest a write-off'), ('invoice_matching', 'Match existing invoices/bills')] string='Type'
  • sequence Integer
    default=10 required=True
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the information of the counterpart.' string='To Check'
Public methods (0)

No public methods.

New fields (8)
  • end_date Date
    help='Date (inclusive) to which the numbers are resequenced. If not set, all Journal Entries up to the end of the period are resequenced.'
  • first_date Date
    help='Date (inclusive) from which the numbers are resequenced.'
  • first_name Char
    compute='_compute_first_name' readonly=False required=True store=True string='First New Sequence'
  • move_ids Many2many → account.move
    args: 'account.move'
  • new_values Text
    compute='_compute_new_values'
  • ordering Selection
    default='keep' required=True args: [('keep', 'Keep current order'), ('date', 'Reorder by accounting date')]
  • preview_moves Text
    compute='_compute_preview_moves'
  • sequence_number_reset Char
    compute='_compute_sequence_number_reset'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • resequence(self)

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company'
  • name Char
  • parent_id Many2one → account.root
    args: 'account.root'
Public methods (1)
  • init(self)

New fields (5)
  • bank_bic Char
    readonly=False related='bank_id.bic' string='Bic'
  • linked_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_linked_journal_id' domain="[('type','=','bank'), ('bank_account_id', '=', False), ('company_id', '=', company_id)]" inverse='set_linked_journal_id' string='Journal'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account Integer
    default=<expr>
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals)
    @api.model
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (21)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0.0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage of Price: The tax amount is a % of the price:\n e.g 100 * (1 + 10%) = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage of Price Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    check_company=True string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True string='Company' args: 'res.company'
  • country_code Char
    readonly=True related='company_id.country_id.code'
  • description Char
    string='Label on Invoices'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Base of Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Distribution when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Distribution for Invoices'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Distribution when the tax is used on a refund' inverse_name='refund_tax_id' string='Distribution for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_fiscal_country_id Many2one → res.country
    comodel_name='res.country' help='Technical field used to restrict the domain of account tags for tax repartition lines created for this tax.' related='company_id.account_tax_fiscal_country_id' string='Fiscal Country'
  • tax_group_id Many2one → account.tax.group
    default=_default_tax_group required=True string='Tax Group' args: 'account.tax.group'
  • tax_scope Selection
    help='Restrict the use of taxes to a type of product.' string='Tax Scope' args: [('service', 'Services'), ('consu', 'Goods')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Type' args: TYPE_TAX_USE
Public methods (10)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True)
    Returns all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] 'handle_price_include' is used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }], }
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields_list)
    @api.model
  • flatten_taxes_hierarchy(self, create_map=False)
  • get_tax_tags(self, is_refund, repartition_type)
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None, is_refund=False)
    Called by the reconciliation to compute taxes on writeoff during bank reconciliation
  • name_get(self)
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')

New fields (5)
  • name Char
    required=True translate=True
  • property_advance_tax_payment_account_id Many2one → account.account
    company_dependent=True string='Advance Tax payment account' args: 'account.account'
  • property_tax_payable_account_id Many2one → account.account
    company_dependent=True string='Tax current account (payable)' args: 'account.account'
  • property_tax_receivable_account_id Many2one → account.account
    company_dependent=True string='Tax current account (receivable)' args: 'account.account'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (12)
  • account_id Many2one → account.account
    check_company=True comodel_name='account.account' domain="[('deprecated', '=', False), ('company_id', '=', company_id), ('internal_type', 'not in', ('receivable', 'payable'))]" help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company' help='The company this distribution line belongs to.' store=True string='Company'
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this distribution line' string='Factor Ratio'
  • factor_percent Float
    help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' help='The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id' ondelete='cascade'
  • refund_tax_id Many2one → account.tax
    check_company=True comodel_name='account.tax' help='The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id' ondelete='cascade'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which distribution lines are displayed and matched. For refunds to work properly, invoice distribution lines should be arranged in the same order as the credit note distribution lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] string='Tax Grids'
  • tax_fiscal_country_id Many2one → res.country
    comodel_name='res.country' help='Technical field used to restrict tags domain in form view.' related='company_id.account_tax_fiscal_country_id' string='Fiscal Country'
  • tax_id Many2one → account.tax
    comodel_name='account.tax' compute='_compute_tax_id'
  • use_in_tax_closing Boolean
    string='Tax Closing Entry'
Public methods (1)
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (9)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' help='Account on which to post the tax amount' string='Account'
  • factor_percent Float
    help='Factor to apply on the account move lines generated from this distribution line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id'
  • minus_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' copy=True help="Tax report lines whose '-' tag will be assigned to move lines by this repartition line" relation='account_tax_repartition_minus_report_line' string='Minus Report Lines'
  • plus_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' copy=True help="Tax report lines whose '+' tag will be assigned to move lines by this repartition line" relation='account_tax_repartition_plus_report_line' string='Plus Tax Report Lines'
  • refund_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True help='Additional tags that will be assigned by this repartition line for use in financial reports' relation='account_tax_repartition_financial_tags' string='Financial Tags'
  • use_in_tax_closing Boolean
    string='Tax Closing Entry'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_repartition_line_create_vals(self, company)
  • validate_tags(self)
    @api.constrains('plus_report_line_ids', 'minus_report_line_ids')
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (4)
  • country_id Many2one → res.country
    comodel_name='res.country' default=<expr> help='Country for which this report is available.' required=True string='Country'
  • line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='Content of this tax report' inverse_name='report_id' string='Report Lines'
  • name Char
    help='Name of this tax report' required=True string='Name'
  • root_line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' domain=[('parent_id', '=', None)] help='Subset of line_ids, containing the lines at the root of the report.' inverse_name='report_id' string='Root Report Lines'
Public methods (5)
  • copy(self, default=None)
  • get_checks_to_perform(self, d)
    To override in localizations If value is a float, it will be formatted with format_value The line is not displayed if it is falsy (0, 0.0, False, ...) :param d: the mapping dictionay between codes and values :return: iterable of tuple (name, value)
  • get_lines_in_hierarchy(self)
    Returns an interator to the lines of this tax report, were parent lines ar all directly followed by their children.
  • validate_country_id(self)
  • write(self, vals)

New fields (11)
  • children_line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='Lines that should be rendered as children of this one' inverse_name='parent_id' string='Children Lines'
  • code Char
    help='Optional unique code to refer to this line in total formulas' string='Code'
  • formula Char
    help='Python expression used to compute the value of a total line. This field is mutually exclusive with tag_name, setting it turns the line to a total line. Tax report line codes can be used as variables in this expression to refer to the balance of the corresponding lines in the report. A formula cannot refer to another line using a formula.' string='Formula'
  • name Char
    help='Complete name for this report line, to be used in report.' required=True string='Name'
  • parent_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' string='Parent Line'
  • parent_path Char
    index=True
  • report_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' help='The optional action to call when clicking on this line in accounting reports.' string='Report Action'
  • report_id Many2one → account.tax.report
    comodel_name='account.tax.report' help='The parent tax report of this line' ondelete='cascade' required=True string='Tax Report'
  • sequence Integer
    help='Sequence determining the order of the lines in the report (smaller ones come first). This order is applied locally per section (so, children of the same line are always rendered one after the other).' required=True string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' help='Tax tags populating this line' relation='account_tax_report_line_tags_rel' string='Tags'
  • tag_name Char
    help='Short name for the tax grid corresponding to this report line. Leave empty if this report line should not correspond to any such grid.' string='Tag Name'
Public methods (3)
  • create(self, vals)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (18)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • cash_basis_transition_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Repartition for Invoices'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on a refund' inverse_name='refund_tax_id' string='Repartition for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • tax_scope Selection
    help='Restrict the use of taxes to a type of product.' args: [('service', 'Service'), ('consu', 'Consumable')]
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Type' args: TYPE_TAX_USE
Public methods (1)
  • name_get(self)
    @api.depends('name', 'description')

New fields (3)
  • composer_id Many2one → mail.compose.message
    ondelete='cascade' required=True string='Composer' args: 'mail.compose.message'
  • sample_bill_preview Binary
    compute='_compute_sample_bill_image' readonly=True
  • selection Selection
    default='sample' selection=<expr>
Public methods (1)
  • apply(self)

New fields (1)
  • email_alias Char
    readonly=True
Public methods (1)
  • apply(self)

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)

New fields (0)

No new fields.

Public methods (1)
  • document_layout_save(self)

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • retrieve_attachment(self, record)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='This account will be used when validating a customer invoice.' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=ACCOUNT_DOMAIN help='Keep this field empty to use the default value from the product category.' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product.' string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product.' string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (1)
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • lines(self, target_move, journal_ids, sort_selection, data)

New fields (51)
  • account_cash_basis_base_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account'
  • account_dashboard_onboarding_state Selection
    default='not_done' string='State of the account dashboard onboarding panel' args: DASHBOARD_ONBOARDING_STATES
  • account_default_pos_receivable_account_id Many2one → account.account
    string='Default PoS Receivable Account' args: 'account.account'
  • account_invoice_onboarding_state Selection
    default='not_done' string='State of the account invoice onboarding panel' args: DASHBOARD_ONBOARDING_STATES
  • account_journal_suspense_account_id Many2one → account.account
    string='Journal Suspense Account' args: 'account.account'
  • account_onboarding_create_invoice_state Selection
    default='not_done' string='State of the onboarding create invoice step' args: ONBOARDING_STEP_STATES
  • account_onboarding_invoice_layout_state Selection
    default='not_done' string='State of the onboarding invoice layout step' args: ONBOARDING_STEP_STATES
  • account_onboarding_sale_tax_state Selection
    default='not_done' string='State of the onboarding sale tax step' args: ONBOARDING_STEP_STATES
  • account_opening_date Date
    default=<expr> help='That is the date of the opening entry.' required=True string='Opening Entry'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_purchase_tax_id Many2one → account.tax
    string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    string='Default Sale Tax' args: 'account.tax'
  • account_setup_bank_data_state Selection
    default='not_done' string='State of the onboarding bank data step' args: ONBOARDING_STEP_STATES
  • account_setup_bill_state Selection
    default='not_done' string='State of the onboarding bill step' args: ONBOARDING_STEP_STATES
  • account_setup_coa_state Selection
    default='not_done' string='State of the onboarding charts of account step' args: ONBOARDING_STEP_STATES
  • account_setup_fy_data_state Selection
    default='not_done' string='State of the onboarding fiscal year step' args: ONBOARDING_STEP_STATES
  • account_tax_fiscal_country_id Many2one → res.country
    compute='compute_account_tax_fiscal_country' help='The country to use the tax reports from for this company' readonly=False store=True string='Fiscal Country' args: 'res.country'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • automatic_entry_default_journal_id Many2one → account.journal
    domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • country_code Char
    related='country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    string='Cash Difference Expense Account' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    string='Cash Difference Income Account' args: 'account.account'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'liability'), ('internal_type', 'not in', ('receivable', 'payable')), ('company_id', '=', id)]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> string='Loss Exchange Rate Account'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> string='Gain Exchange Rate Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    default=True args: 'Email by default'
  • invoice_is_print Boolean
    default=True args: 'Print by default'
  • invoice_terms Text
    string='Default Terms and Conditions' translate=True
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • qr_code Boolean
    string='Display QR-code on invoices'
  • revenue_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'asset'), ('internal_type', 'not in', ('receivable', 'payable')), ('company_id', '=', id)]" help='Account used to move the period of a revenue' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    comodel_name='account.journal' string='Cash Basis Journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help='No users can edit journal entries related to a tax prior and inclusive of this date.' args: 'Tax Lock Date'
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (23)
  • action_close_account_dashboard_onboarding(self)
    @api.model
    Mark the dashboard onboarding panel as closed.
  • action_close_account_invoice_onboarding(self)
    @api.model
    Mark the invoice onboarding panel as closed.
  • action_open_account_onboarding_create_invoice(self)
    @api.model
  • action_open_account_onboarding_sale_tax(self)
    @api.model
    Onboarding step for the invoice layout.
  • action_save_onboarding_invoice_layout(self)
    Set the onboarding step as done
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • compute_account_tax_fiscal_country(self)
    @api.depends('country_id')
  • compute_fiscalyear_dates(self, current_date)
    The role of this method is to provide a fallback when account_accounting is not installed. As the fiscal year is irrelevant when account_accounting is not installed, this method returns the calendar year. :param current_date: A datetime.date/datetime.datetime object. :return: A dictionary containing: * date_from * date_to
  • create_op_move_if_non_existant(self)
    @api.model
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_account_dashboard_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (account_winbooks_import in this case).
  • get_account_invoice_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (payment acquirer in this case).
  • get_and_update_account_dashboard_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_and_update_account_invoice_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_chart_of_accounts_action(self)
    @api.model
    Called by the 'Chart of Accounts' button of the setup bar.
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar.
  • setting_init_fiscal_year_action(self)
    @api.model
    Called by the 'Fiscal Year Opening' button of the setup bar.
  • write(self, values)

New fields (50)
  • account_cash_basis_base_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] readonly=False related='company_id.account_cash_basis_base_account_id' string='Base Tax Received Account'
  • chart_template_id Many2one → account.chart.template
    default=<expr> domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • country_code Char
    readonly=True related='company_id.country_id.code'
  • currency_exchange_journal_id Many2one → account.journal
    comodel_name='account.journal' domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Currency Exchange Journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • expense_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> readonly=False related='company_id.expense_currency_exchange_account_id' string='Loss Account'
  • group_analytic_accounting Boolean
    implied_group='analytic.group_analytic_accounting' string='Analytic Accounting'
  • group_analytic_tags Boolean
    implied_group='analytic.group_analytic_tags' string='Analytic Tags'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_show_line_subtotals_tax_excluded Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_excluded' args: 'Show line subtotals without taxes (B2B)'
  • group_show_line_subtotals_tax_included Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_included' args: 'Show line subtotals with taxes (B2C)'
  • group_show_purchase_receipts Boolean
    implied_group='account.group_purchase_receipts' string='Purchase Receipt'
  • group_show_sale_receipts Boolean
    implied_group='account.group_sale_receipts' string='Sale Receipt'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • income_currency_exchange_account_id Many2one → account.account
    comodel_name='account.account' domain=<expr> readonly=False related='company_id.income_currency_exchange_account_id' string='Gain Account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    readonly=False related='company_id.invoice_is_email' string='Send Email'
  • invoice_is_print Boolean
    readonly=False related='company_id.invoice_is_print' string='Print'
  • invoice_terms Text
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    string='Bill Digitalization'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_plaid Boolean
    string='Plaid Connector'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_account_yodlee Boolean
    args: 'Bank Interface - Sync your bank feeds automatically'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_service Boolean
    string='EU Intra-community Distance Selling'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • purchase_tax_id Many2one → account.tax
    readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR-code'
  • sale_tax_id Many2one → account.tax
    readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • show_line_subtotals_tax_selection Selection
    config_parameter='account.show_line_subtotals_tax_selection' default='tax_excluded' required=True string='Line Subtotals Tax Display' args: [('tax_excluded', 'Tax-Excluded'), ('tax_included', 'Tax-Included')]
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method'
  • tax_cash_basis_journal_id Many2one → account.journal
    readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (4)
  • onchange_account_yodlee(self)
    @api.onchange('module_account_yodlee')
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • set_values(self)

New fields (1)
  • display_rounding_warning Boolean
    compute='_compute_display_rounding_warning' help="Technical field. Used to tell whether or not to display the rounding warning. The warning informs a rounding factor change might be dangerous on res.currency's form view." string='Display Rounding Warning'
Public methods (1)
  • write(self, vals)

New fields (22)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used instead of the default one as the payable account for the current partner' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True domain="[('company_id', '=', current_company_id)]" help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used instead of the default one as the receivable account for the current partner' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True domain="[('company_id', 'in', [current_company_id, False])]" help='This payment term will be used instead of the default one for sales orders and customer invoices' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True domain="[('company_id', 'in', [current_company_id, False])]" help='This payment term will be used instead of the default one for purchase orders and vendor bills' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice,account.group_account_readonly' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
Public methods (5)
  • action_view_partner_invoices(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • mark_as_reconciled(self)
  • unlink(self)
    Prevent the deletion of a partner "Individual", child of a company if: - partner in 'account.move' - state: all states (draft and posted)

New fields (0)

No new fields.

Public methods (3)
  • build_qr_code_base64(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • build_qr_code_url(self, amount, free_communication, structured_communication, currency, debtor_partner, qr_method=None, silent_errors=True)
  • get_available_qr_methods_in_sequence(self)
    @api.model
    Same as _get_available_qr_methods but without returning the sequence, and using it directly to order the returned list.

New fields (1)
  • journal_id One2many → account.journal
    domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
Public methods (1)
  • default_get(self, fields_list)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • sequence_number Integer
    compute='_compute_split_sequence' store=True
  • sequence_prefix Char
    compute='_compute_split_sequence' store=True
Public methods (1)
  • init(self)

New fields (10)
  • adjustment_type Selection
    required=True string='Adjustment Type' args: [('debit', 'Applied on debit journal item'), ('credit', 'Applied on credit journal item')]
  • amount Monetary
    currency_field='company_currency_id' required=True
  • company_currency_id Many2one → res.currency
    default=<expr> readonly=True args: 'res.currency'
  • credit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('is_off_balance', '=', False)]" required=True string='Credit account' args: 'account.account'
  • date Date
    default=fields.Date.context_today required=True
  • debit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('is_off_balance', '=', False)]" required=True string='Debit account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain=[('type', '=', 'general')] required=True string='Journal' args: 'account.journal'
  • reason Char
    required=True string='Justification'
  • report_id Many2one
    related='tax_report_line_id.report_id' string='Report'
  • tax_report_line_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' domain=_domain_tax_report help='The report line to make an adjustment for.' required=True string='Report Line'
Public methods (1)
  • create_move(self)

New fields (1)
  • force_post Boolean
    help='Entries in the future are set to be auto-posted by default. Check this checkbox to post them now.' string='Force'
Public methods (1)
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting/Accounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Xavier ALT, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Mohammed Shekha, Cedric Snauwaert, Simon Lejeune, Ravi Gohil, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, qdp-odoo, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Olivier Colson, David Arnold, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Nicolas Seinlet, Pierre Masereel, Romain Derie, Laurent Smet, jem-odoo, Adrien Dieudonne, RomainLibert, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Nans Lefebvre, Johan Demaret Rivarola, Alexandre Kühn, jev-odoo, Toufik Ben Jaa, Nicolas Vannieuwerburgh, Arnold Moyaux, Adrian Torres, wan, mreficent, XavierDo, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, jvm-odoo, Luis Torres, jerome hanke (jhk), Carlos Dauden, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Fanny He, William Henrotin, Sébastien Theys, Akim Juillerat, Shreya Modi, Nasreddin (bon), alt-odoo, Humberto Arocha, oco-odoo, Florent de Labarre, Julien Mougenot, Jason Van Malder, Vincent Schippefilt, fw-bot, Anh Thao Pham (pta), Adrien Horgnies, Katherine Zaoral, Lois Rilo, Samuel Degueldre, Rémy Baranx (bar), Achraf (abz), Lucas Lefèvre, Brice bib Bartoletti, Adrien Widart, Ivan Yelizariev, Naglis Jonaitis, Baptiste Vergote, Nasreddin Boulif (bon), Prakash Prajapati, Nicolas Galler, Swapnesh Shah, nie, IEL, Andrius Laukavičius, Thanh Dodeur, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Bhavesh Odedra, Luc De Meyer, snd, Varun Raval, Julien CHEVREAU (JCU), jbw, remi-filament, Djamel (otd), Yenthe666, jbm-odoo, Hetashree Chauhan, root, Jordi Ballester Alomar, Kevin Baptiste, Pierre Verkest, Guillaume (guva), Jordi Ballester, Arnaud Baes, Pablo Paez, roen-odoo, Dhruv Patel, Stanislas Sobieski, Hubert Van de Walle (huvw), Hardik Prajapati, Miquel Raïch, asa-odoo, Geoffroy Larue, jdoutreloux, mcm-odoo, Mitali Patel, Jigar Vaghela, Nicolas (vin), william-andre, Paolo (pgi), Julien Van Roy, Víctor Martínez, Hetal Dhanak, MerlinGuillaume, Ankita Raval, thcl-odoo, nicolas, Meghna Jaswani, Csaba Tóth, jpr-odoo, william, Sapan Zaveri, Nshimiyimana Séna, Louis Baudoux, Anang Aji Rahmawan, John (jol), Ernesto Tejeda, BVE, Walid HANNICHE (waha), Yolann Sabaux, Jérémy Van Driessche, Nik Jmaeff, Abdelouahab (abla), Pouya Malekinejad, Thomas (det), John Laterre (jol), jol, Florian Gilbert, Ruben Gomes, Thomas Beckers, Rachid Al Assir, Adrien Minet, Swapnesh, Goaman, Jesús Alan Ramos Rodríguez, Mélanie Cruypeninck (crm), Vishnu Vanneri, Nicolas Bayet, Antoine Vandevenne (anv), assellalou
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (170)
XML IDNameModelTypeStatus
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
account_accrual_accounting_wizard_form_view account.accrual.accounting.wizard.form account.accrual.accounting.wizard form New
account_bank_journal_view_kanban account.bank.journal.kanban account.journal kanban New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_dashboard_onboarding_panel account.dashboard.onboarding.panel ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_onboarding_panel account.invoice.onboarding.panel ir.ui.view qweb New
account_invoice_onboarding_sale_tax_form account.invoice.layout.onboarding.form res.company form New
account_invoice_send_wizard_form account.invoice.send.form account.invoice.send form New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_tag_view_form Tags account.account.tag form New
account_tag_view_search account.tag.view.search account.account.tag search New
account_tag_view_tree Tags account.account.tag tree New
account_tax_report_line_form account.tax.report.line.form account.tax.report.line form New
account_tax_report_line_search account.tax.report.line.search account.tax.report.line search New
account_tax_report_line_tree account.tax.report.line.tree account.tax.report.line tree New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax tree New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
action_account_fiscal_year_form account.fiscal.year.form account.fiscal.year form New
action_account_fiscal_year_search account.fiscal.year.search account.fiscal.year search New
action_account_fiscal_year_tree account.fiscal.year.tree account.fiscal.year tree New
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
assets_frontend account assets ir.ui.view qweb Inherits web.assets_frontend
assets_tests Account Assets Tests ir.ui.view qweb Inherits web.assets_tests
cash_box_out_form cash_box_out cash.box.out form New
dashboard_onboarding_company_step dashboard_onboarding_company_step ir.ui.view qweb Inherits base.onboarding_company_step
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
email_compose_onboarding_sample_invoice mail.compose.message.form.account_invoice_onboarding_sample_invoice mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
onboarding_bank_account_step onboarding_bank_account_step ir.ui.view qweb New
onboarding_chart_of_account_step onboarding_chart_of_account_step ir.ui.view qweb New
onboarding_fiscal_year_step onboarding_fiscal_year_step ir.ui.view qweb New
onboarding_invoice_layout_step onboarding_invoice_layout_step ir.ui.view qweb New
onboarding_sale_tax_step onboarding_sale_tax_step ir.ui.view qweb New
onboarding_sample_invoice_step onboarding_sample_invoice_step ir.ui.view qweb New
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
partner_view_short_extra partner.short.view.account res.partner field Inherits base.view_partner_short_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Portal My Home : invoice entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
product_template_view_tree product.template.tree product.template tree New
qunit_suite account tests ir.ui.view qweb Inherits web.qunit_suite
report_agedpartnerbalance report_agedpartnerbalance ir.ui.view qweb New
report_hash_integrity report_hash_integrity ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_document_with_payments report_invoice_document_with_payments ir.ui.view qweb Inherits account.report_invoice_document
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_original_vendor_bill report_original_vendor_bill ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
report_statement report_statement ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_search res.partner.search.inherit res.partner xpath Inherits base.view_res_partner_filter
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_adjustments_wizard tax.adjustments.wizard.form tax.adjustments.wizard form New
tax_repartition_line_tree account.tax.repartition.line.tree account.tax.repartition.line tree New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bank_journal_form account.bank.journal.form account.journal form New
view_account_bank_journal_tree account.bank.journal.tree account.journal tree New
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_cashbox_footer account.bnk_stmt_cashbox.form account.bank.statement.cashbox xpath Inherits view_account_bnk_stmt_cashbox
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.move search New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_invoice_report_search_analytic_accounting account.invoice.report.search_analytic_accounting account.invoice.report filter Inherits account.view_account_invoice_report_search
view_account_journal_form account.journal.form account.journal form New
view_account_journal_group_form account.journal.group.form account.journal.group form New
view_account_journal_group_tree account.journal.group.tree account.journal.group tree New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter account.move.line.search account.move.line search New
view_account_move_line_filter_with_root_selection account.move.line.search account.move.line xpath Inherits account.view_account_move_line_filter
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_form_multi account.payment.form.multi account.payment.register form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_invoice_form account.payment.invoice.form account.payment xpath Inherits view_account_payment_form
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment field Inherits account.view_account_payment_tree
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_partner_bank_form company.res.partner.bank.form res.partner.bank xpath Inherits base.view_partner_bank_form
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_incoterms_tree account.incoterms.tree account.incoterms tree New
view_invoice_tree account.invoice.tree account.move tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_grouped account.move.line.tree.grouped account.move.line tree New
view_move_line_tree_grouped_bank_cash account.move.line.tree.grouped.bank.cash account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_general account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_misc account.move.line.tree.grouped.misc account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_partner account.move.line.tree.grouped.partner account.move.line field Inherits account.view_move_line_tree_grouped
view_move_line_tree_grouped_sales_purchases account.move.line.tree.grouped.sales.purchase account.move.line field Inherits account.view_move_line_tree_grouped
view_move_tree account.move.tree account.move tree New
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_group_tree account.tax.group.tree account.tax.group tree New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
Models touched (73)

New fields (17)
  • code Char
    index=True required=True size=64
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this account currency.' string='Account Currency' args: 'res.currency'
  • deprecated Boolean
    default=False index=True
  • group_id Many2one → account.group
    args: 'account.group'
  • internal_group Selection
    readonly=True related='user_type_id.internal_group' store=True string='Internal Group'
  • internal_type Selection
    readonly=True related='user_type_id.type' store=True string='Internal Type'
  • name Char
    index=True required=True
  • note Text
    args: 'Internal Notes'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' help='Opening credit value for this account.' inverse='_set_opening_credit' string='Opening credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' help='Opening debit value for this account.' inverse='_set_opening_debit' string='Opening debit'
  • reconcile Boolean
    default=False help='Check this box if this account allows invoices & payments matching of journal items.' string='Allow Reconciliation'
  • root_id Many2one → account.root
    compute='_compute_account_root' store=True args: 'account.root'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_account_account_tag'
  • tax_ids Many2many → account.tax
    context={'append_type_to_tax_name': True} string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • used Boolean
    compute='_compute_used' search='_search_used'
  • user_type_id Many2one → account.account.type
    help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' required=True string='Type' args: 'account.account.type'
Public methods (10)
  • action_duplicate_accounts(self)
  • action_open_reconcile(self)
  • action_read_account(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • load(self, fields, data)
    @api.model
    Overridden for better performances when importing a list of account with opening debit/credit. In that case, the auto-balance is postpone until the whole file has been imported.
  • name_get(self)
  • onchange_code(self)
    @api.onchange('code')
  • unlink(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes')]
  • color Integer
    args: 'Color Index'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Country for which this tag is available, when applied on taxes.' string='Country'
  • name Char
    required=True args: 'Tag Name'
  • tax_negate Boolean
    help='Check this box to negate the absolute value of the balance of the lines associated with this tag in tax report computation.' string='Negate Tax Balance'
  • tax_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='The tax report lines using this tag' relation='account_tax_report_line_tags_rel' string='Tax Report Lines'
Public methods (0)

No public methods.

New fields (12)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • group_id Many2one → account.group
    args: 'account.group'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • root_id Many2one → account.root
    args: 'account.root'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.depends('name', 'code')

New fields (5)
  • include_initial_balance Boolean
    help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' string='Bring Accounts Balance Forward'
  • internal_group Selection
    help="The 'Internal Group' is used to filter accounts based on the internal group set on the account type." required=True string='Internal Group' args: [('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense'), ('off_balance', 'Off Balance')]
  • name Char
    required=True string='Account Type' translate=True
  • note Text
    string='Description'
  • type Selection
    default='other' help="The 'Internal Type' is used for features available on different types of accounts: liquidity type is for cash or bank accounts, payable/receivable is for vendor/customer accounts." required=True args: [('other', 'Regular'), ('receivable', 'Receivable'), ('payable', 'Payable'), ('liquidity', 'Liquidity')]
Public methods (0)

No public methods.

New fields (10)
  • account_type Selection
    args: [('income', 'Revenue'), ('expense', 'Expense')]
  • active_move_line_ids Many2many → account.move.line
    args: 'account.move.line'
  • company_currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    required=True args: 'res.company'
  • date Date
    required=True
  • expense_accrual_account Many2one → account.account
    domain="[('company_id', '=', company_id), ('internal_type', 'not in', ('receivable', 'payable')), ('internal_group', '=', 'liability'), ('reconcile', '=', True)]" readonly=False related='company_id.expense_accrual_account_id' args: 'account.account'
  • journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id), ('type', '=', 'general')]" readonly=False related='company_id.accrual_default_journal_id' required=True args: 'account.journal'
  • percentage Float
    default=100.0 args: 'Percentage'
  • revenue_accrual_account Many2one → account.account
    domain="[('company_id', '=', company_id), ('internal_type', 'not in', ('receivable', 'payable')), ('internal_group', '=', 'asset'), ('reconcile', '=', True)]" readonly=False related='company_id.revenue_accrual_account_id' args: 'account.account'
  • total_amount Monetary
    compute='_compute_total_amount' currency_field='company_currency_id'
Public methods (2)
  • amend_entries(self)
  • default_get(self, fields)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • code Char
    size=8
  • general_account_id Many2one → account.account
    compute_sudo=True domain=[('deprecated', '=', False)] ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • product_id Many2one → product.product
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (23)
  • accounting_date Date
    help='If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\nThis is useful if the accounting period in which the entries should normally be booked is already closed.' readonly=True states={'open': [('readonly', False)]} string='Accounting Date'
  • all_lines_reconciled Boolean
    compute='_check_lines_reconciled'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    states={'confirm': [('readonly', True)]} tracking=True args: 'Ending Balance'
  • balance_start Monetary
    default=_default_opening_balance states={'confirm': [('readonly', True)]} string='Starting Balance' tracking=True
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • journal_id Many2one → account.journal
    default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_count Integer
    compute='_get_move_line_count'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • reference Char
    copy=False help='Used to hold the reference of the external mean that created this statement (name of imported file, reference of online synchronization...)' readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' tracking=True args: [('open', 'New'), ('confirm', 'Validated')]
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (9)
  • action_bank_reconcile_bank_statements(self)
  • button_confirm_bank(self)
  • button_journal_entries(self)
  • button_open(self)
    Changes statement state to Running.
  • button_reopen(self)
  • check_confirm_bank(self)
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
  • unlink(self)

New fields (5)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
  • currency_id Many2one → res.currency
    compute='_compute_currency' args: 'res.currency'
  • end_bank_stmt_ids One2many → account.bank.statement
    args: 'account.bank.statement', 'cashbox_end_id'
  • start_bank_stmt_ids One2many → account.bank.statement
    args: 'account.bank.statement', 'cashbox_start_id'
  • total Float
    compute='_compute_total'
Public methods (4)
  • create(self, vals)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • name_get(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • validate(self)

New fields (21)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account' string='Counterpart Account' args: 'account.account'
  • account_number Char
    help="Technical field used to store the bank account number before its creation, upon the line's processing" string='Bank Account Number'
  • amount Monetary
    currency_field='journal_currency_id'
  • amount_currency Monetary
    help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • bank_account_id Many2one → res.partner.bank
    help='Bank account that was used in this transaction.' string='Bank Account' args: 'res.partner.bank'
  • company_id Many2one → res.company
    readonly=True related='statement_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    default=<expr> required=True
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='statement_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • journal_entry_ids One2many → account.move.line
    copy=False readonly=True args: 'account.move.line', 'statement_line_id', 'Journal Items'
  • journal_id Many2one → account.journal
    readonly=True related='statement_id.journal_id' store=True string='Journal' args: 'account.journal'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • name Char
    required=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    index=True ondelete='cascade' required=True string='Statement' args: 'account.bank.statement'
  • transaction_type Char
    string='Transaction Type'
Public methods (6)
  • button_cancel_reconciliation(self)
  • button_confirm_bank(self)
  • create(self, vals)
    @api.model
  • fast_counterpart_creation(self)
    This function is called when confirming a bank statement and will allow to automatically process lines without going in the bank reconciliation widget. By setting an account_id on bank statement lines, it will create a journal entry using that account to counterpart the bank account
  • process_reconciliation(self, counterpart_aml_dicts=None, payment_aml_rec=None, new_aml_dicts=None)
    Match statement lines with existing payments (eg. checks) and/or payables/receivables (eg. invoices and credit notes) and/or new move lines (eg. write-offs). If any new journal item needs to be created (via new_aml_dicts or counterpart_aml_dicts), a new journal entry will be created and will contain those items, as well as a journal item for the bank statement line. Finally, mark the statement line as reconciled by putting the matched moves ids in the column journal_entry_ids. :param self: browse collection of records that are supposed to have no accounting entries already linked. :param (list of dicts) counterpart_aml_dicts: move lines to create to reconcile with existing payables/receivables. The expected keys are : - 'name' - 'debit' - 'credit' - 'move_line' # The move line to reconcile (partially if specified debit/credit is lower than move line's credit/debit) :param (list of recordsets) payment_aml_rec: recordset move lines representing existing payments (which are already fully reconciled) :param (list of dicts) new_aml_dicts: move lines to create. The expected keys are : - 'name' - 'debit' - 'credit' - 'account_id' - (optional) 'tax_ids' - (optional) Other account.move.line fields like analytic_account_id or analytics_id - (optional) 'reconcile_model_id' :returns: The journal entries with which the transaction was matched. If there was at least an entry in counterpart_aml_dicts or new_aml_dicts, this list contains the move created by the reconciliation, containing entries for the statement.line (1), the counterpart move lines (0..*) and the new move lines (0..*).
  • unlink(self)

New fields (6)
  • account_id Many2one → account.account
    string='Account' args: 'account.account'
  • company_id Many2one → res.company
    related='account_id.company_id' args: 'res.company'
  • name Char
    required=True string='Name' translate=True
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'UP'), ('DOWN', 'DOWN'), ('HALF-UP', 'HALF-UP')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (5)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • currency_id Many2one → res.currency
    related='cashbox_id.currency_id' args: 'res.currency'
  • number Integer
    help='Opening Unit Numbers' string='#Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (29)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • bank_account_code_prefix Char
    required=True string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    required=True string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • default_cash_difference_expense_account_id Many2one → account.account.template
    string='Cash Difference Expense Account' args: 'account.account.template'
  • default_cash_difference_income_account_id Many2one → account.account.template
    string='Cash Difference Income Account' args: 'account.account.template'
  • default_pos_receivable_account_id Many2one → account.account.template
    string='PoS receivable account' args: 'account.account.template'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    string='Receivable Account' args: 'account.account.template'
  • property_advance_tax_payment_account_id Many2one → account.account.template
    string='Advance tax payment account' args: 'account.account.template'
  • property_stock_account_input_categ_id Many2one → account.account.template
    string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • property_tax_payable_account_id Many2one → account.account.template
    string='Tax current account (payable)' args: 'account.account.template'
  • property_tax_receivable_account_id Many2one → account.account.template
    string='Tax current account (receivable)' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_code_prefix Char
    required=True string='Prefix of the main transfer accounts'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (10)
  • create_record_with_xmlid(self, company, template, model, vals)
  • existing_accounting(self, company_id)
    @api.model
    Returns True iff some accounting entries have already been made for the provided company (meaning hence that its chart of accounts cannot be changed anymore).
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    This method generates accounts from account templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary containing the mapping between the account templates and generated accounts (will be populated) :param code_digits: number of digits to use for account code. :param company_id: company to generate accounts for. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    This method creates account reconcile models :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mapping between the account templates and the real accounts. :param company_id: company to create models for :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    This method generates Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: the company to generate fiscal position data for :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param acc_template_ref: Account templates reference. :param company_id: company to generate journals for. :returns: True
  • generate_properties(self, acc_template_ref, company)
    This method used for creating properties. :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company to generate properties for. :returns: True
  • get_countries_posting_at_bank_rec(self)
    Returns the list of the country codes of the countries for which, by default, payments made on bank journals should be creating draft account.move objects, which get in turn posted when their payment gets reconciled with a bank statement line. This function is an extension hook for localization modules.
  • open_select_template_wizard(self)
  • try_loading(self, company=False)
    Installs this chart of accounts for the current company if not chart of accounts had been created for it yet.

New fields (1)
  • amount_currency Boolean
    help='Print Report with the currency column if the currency differs from the company currency.' args: 'With Currency'
Public methods (1)
  • pre_print_report(self, data)

New fields (5)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be used if the chosen day doesn't exist." readonly=False related='company_id.fiscalyear_last_month' required=True selection=[(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
  • write(self, vals)

New fields (15)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invoicing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position'
  • note Text
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (6)
  • create(self, vals)
    @api.model
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
  • map_account(self, account)
    @api.model
  • map_accounts(self, accounts)
    @api.model
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes, product=None, partner=None)
    @api.model
  • write(self, vals)

New fields (3)
  • account_dest_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account on Product' args: 'account.account'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_id Many2one → account.tax
    string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (13)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invoicing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Char
    string='Zip Range From'
  • zip_to Char
    string='Zip Range To'
Public methods (0)

No public methods.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date_from Date
    help='Start Date, included in the fiscal year.' required=True string='Start Date'
  • date_to Date
    help='Ending Date, included in the fiscal year.' required=True string='End Date'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (4)
  • exchange_move_id Many2one → account.move
    args: 'account.move'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (4)
  • code_prefix Char
  • name Char
    required=True
  • parent_id Many2one → account.group
    index=True ondelete='cascade' args: 'account.group'
  • parent_path Char
    index=True
Public methods (1)
  • name_get(self)

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (28)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • amount_total Float
    readonly=True string='Total'
  • analytic_account_id Many2one → account.analytic.account
    groups='analytic.group_analytic_accounting' string='Analytic Account' args: 'account.analytic.account'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • fiscal_position_id Many2one → account.fiscal.position
    readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • invoice_date Date
    readonly=True string='Invoice Date'
  • invoice_date_due Date
    readonly=True string='Due Date'
  • invoice_partner_bank_id Many2one → res.partner.bank
    readonly=True string='Bank Account' args: 'res.partner.bank'
  • invoice_payment_state Selection
    readonly=True selection=[('not_paid', 'Not Paid'), ('in_payment', 'In Payment'), ('paid', 'paid')] string='Payment Status'
  • invoice_payment_term_id Many2one → account.payment.term
    readonly=True string='Payment Terms' args: 'account.payment.term'
  • invoice_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    readonly=True args: 'account.move'
  • name Char
    readonly=True args: 'Invoice #'
  • nbr_lines Integer
    readonly=True string='Line Count'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_subtotal Float
    readonly=True string='Untaxed Total'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    readonly=True string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    readonly=True string='Product Quantity'
  • residual Float
    readonly=True string='Due Amount'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('posted', 'Open'), ('cancel', 'Cancelled')]
  • type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
Public methods (2)
  • init(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model

New fields (7)
  • composer_id Many2one → mail.compose.message
    ondelete='cascade' required=True string='Composer' args: 'mail.compose.message'
  • invoice_ids Many2many → account.move
    string='Invoices' args: 'account.move', 'account_move_account_invoice_send_rel'
  • invoice_without_email Text
    compute='_compute_invoice_without_email' string='invoice(s) that will not be sent'
  • is_email Boolean
    default=<expr> args: 'Email'
  • is_print Boolean
    default=<expr> args: 'Print'
  • printed Boolean
    default=False args: 'Is Printed'
  • template_id Many2one → mail.template
    domain="[('model', '=', 'account.move')]" index=True args: 'mail.template', 'Use template'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • onchange_is_email(self)
    @api.onchange('is_email')
  • onchange_template_id(self)
    @api.onchange('template_id')
  • save_as_template(self)
  • send_and_print_action(self)

New fields (36)
  • account_control_ids Many2many → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Accounts Allowed' args: 'account.account', 'account_account_type_rel', 'journal_id', 'account_id'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_domain Char
    compute='_compute_alias_domain' default=<expr> args: 'Alias domain'
  • alias_id Many2one → mail.alias
    copy=False string='Alias' args: 'mail.alias'
  • alias_name Char
    compute='_compute_alias_name' help='It creates draft invoices and bills by sending an email.' inverse='_inverse_alias_name' readonly=False args: 'Alias Name'
  • at_least_one_inbound Boolean
    compute='_methods_compute' store=True
  • at_least_one_outbound Boolean
    compute='_methods_compute' store=True
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    copy=False domain="[('partner_id','=', company_partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • code Char
    help='The journal entries of this journal will be named using this prefix.' required=True size=5 string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' string='Currency' args: 'res.currency'
  • default_credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='It acts as a default account for credit amount' ondelete='restrict' string='Default Credit Account' args: 'account.account'
  • default_debit_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" help='It acts as a default account for debit amount' ondelete='restrict' string='Default Debit Account' args: 'account.account'
  • inbound_payment_method_ids Many2many → account.payment.method
    default=<expr> domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings.' string='For Incoming Payments' args: 'account.payment.method', 'account_journal_inbound_payment_method_rel', 'journal_id', 'inbound_payment_method'
  • invoice_reference_model Selection
    default='odoo' help='You can choose different models for each type of reference. The default one is the Odoo reference.' required=True selection=[('odoo', 'Odoo'), ('euro', 'European')] string='Communication Standard'
  • invoice_reference_type Selection
    default='invoice' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' required=True selection=[('none', 'Free'), ('partner', 'Based on Customer'), ('invoice', 'Based on Invoice')] string='Communication Type'
  • journal_group_ids Many2many → account.journal.group
    domain="[('company_id', '=', company_id)]" string='Journal Groups' args: 'account.journal.group'
  • loss_account_id Many2one → account.account
    domain="[('company_id', '=', company_id)]" help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Journal Name'
  • outbound_payment_method_ids Many2many → account.payment.method
    default=<expr> domain=[('payment_type', '=', 'outbound')] help='Manual:Pay bill by cash or any other method outside of Odoo.\nCheck:Pay bill by check and print it from Odoo.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. Enable this option from the settings.' string='For Outgoing Payments' args: 'account.payment.method', 'account_journal_outbound_payment_method_rel', 'journal_id', 'outbound_payment_method'
  • post_at Selection
    default='pay_val' string='Post At' args: [('pay_val', 'Payment Validation'), ('bank_rec', 'Bank Reconciliation')]
  • profit_account_id Many2one → account.account
    domain="[('company_id', '=', company_id)]" help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account' args: 'account.account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • refund_sequence_id Many2one → ir.sequence
    copy=False help='This field contains the information related to the numbering of the credit note entries of this journal.' string='Credit Note Entry Sequence' args: 'ir.sequence'
  • refund_sequence_number_next Integer
    compute='_compute_refund_seq_number_next' help='The next sequence number will be used for the next credit note.' inverse='_inverse_refund_seq_number_next' string='Credit Notes Next Number'
  • restrict_mode_hash_table Boolean
    help='If ticked, the accounting entry or invoice receives a hash as soon as it is posted and cannot be modified anymore.' string='Lock Posted Entries with Hash'
  • secure_sequence_id Many2one → ir.sequence
    copy=False help='Sequence to use to ensure the securisation of data' readonly=True args: 'ir.sequence'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_id Many2one → ir.sequence
    copy=False help='This field contains the information related to the numbering of the journal entries of this journal.' required=True string='Entry Sequence' args: 'ir.sequence'
  • sequence_number_next Integer
    compute='_compute_seq_number_next' help='The next sequence number will be used for the next invoice.' inverse='_inverse_seq_number_next' string='Next Number'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." inverse='_inverse_type' required=True args: [('sale', 'Sales'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
  • type_control_ids Many2many → account.account.type
    string='Account Types Allowed' args: 'account.account.type', 'account_journal_type_rel', 'journal_id', 'type_id'
Public methods (11)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • create_invoice_from_attachment(self, attachment_ids=[])
    Create the invoices from files. :return: A action redirecting to account.move tree/form view.
  • get_next_bank_cash_default_code(self, journal_type, company_id)
    @api.model
  • name_get(self)
  • onchange_credit_account_id(self)
    @api.onchange('default_credit_account_id')
  • onchange_debit_account_id(self)
    @api.onchange('default_debit_account_id')
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank and set it as value of the field bank_account_id
  • unlink(self)
  • write(self, vals)

New fields (5)
  • color Integer
    default=0 args: 'Color Index'
  • json_activity_data Text
    compute='_get_json_activity_data'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (20)
  • action_create_new(self)
  • action_open_reconcile(self)
  • action_open_to_check(self)
  • create_bank_statement(self)
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
  • create_customer_payment(self)
    return action to create a customer payment
  • create_internal_transfer(self)
    return action to create a internal transfer
  • create_supplier_payment(self)
    return action to create a supplier payment
  • get_bar_graph_datas(self)
  • get_journal_dashboard_datas(self)
  • get_line_graph_datas(self)
    Computes the data used to display the graph for bank and cash journals in the accounting dashboard
  • mark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as done in the setup bar and in the company.
  • open_action(self)
    return action based on type for related journals
  • open_action_with_context(self)
  • open_collect_money(self)
  • open_payments_action(self, payment_type, mode='tree')
  • open_spend_money(self)
  • open_transfer_money(self)
  • to_check_ids(self)
  • unmark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as not done in the setup bar and in the company.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • excluded_journal_ids Many2many → account.journal
    domain="[('company_id', '=', company_id)]" string='Excluded Journals' args: 'account.journal'
  • name Char
    required=True translate=True args: 'Journal Group'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (61)
  • amount_by_group Binary
    compute='_compute_invoice_taxes_by_group' string='Tax amount by group'
  • amount_residual Monetary
    compute='_compute_amount' store=True string='Amount Due'
  • amount_residual_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' store=True string='Amount Due Signed'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Tax Signed'
  • amount_total Monetary
    compute='_compute_amount' inverse='_inverse_amount_total' readonly=True store=True string='Total'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Total Signed'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' tracking=True
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount Signed'
  • auto_post Boolean
    default=False help='If this checkbox is ticked, this entry will be automatically posted at its date.' string='Post Automatically'
  • bank_partner_id Many2one → res.partner
    compute='_compute_bank_partner_id' help='Technical field to get the domain on the bank' args: 'res.partner'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner_id' ondelete='restrict' readonly=True store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one
    readonly=True related='company_id.currency_id' string='Company Currency'
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=True store=True string='Company'
  • currency_id Many2one → res.currency
    default=_get_default_currency readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Currency' tracking=True args: 'res.currency'
  • date Date
    default=fields.Date.context_today index=True readonly=True required=True states={'draft': [('readonly', False)]} string='Date'
  • fiscal_position_id Many2one → account.fiscal.position
    domain="[('company_id', '=', company_id)]" help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_reconciled_entries Boolean
    compute='_compute_has_reconciled_entries'
  • inalterable_hash Char
    copy=False readonly=True string='Inalterability Hash'
  • invoice_cash_rounding_id Many2one → account.cash.rounding
    help='Defines the smallest coinage of the currency that can be used to pay by cash.' readonly=True states={'draft': [('readonly', False)]} string='Cash Rounding Method' args: 'account.cash.rounding'
  • invoice_date Date
    copy=False default=_get_default_invoice_date index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice/Bill Date'
  • invoice_date_due Date
    copy=False index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • invoice_filter_type_domain Char
    compute='_compute_invoice_filter_type_domain' help='Technical field used to have a dynamic domain on journal / taxes in the form view.'
  • invoice_has_matching_suspense_amount Boolean
    compute='_compute_has_matching_suspense_amount' groups='account.group_account_invoice' help='Technical field used to display an alert on invoices if there is at least a matching amount in any supsense account.'
  • invoice_has_outstanding Boolean
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice'
  • invoice_incoterm_id Many2one → account.incoterms
    default=_get_default_invoice_incoterm help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Incoterm' args: 'account.incoterms'
  • invoice_line_ids One2many → account.move.line
    copy=False domain=[('exclude_from_invoice_tab', '=', False)] readonly=True states={'draft': [('readonly', False)]} string='Invoice lines' args: 'account.move.line', 'move_id'
  • invoice_origin Char
    help='The document(s) that generated the invoice.' readonly=True string='Origin' tracking=True
  • invoice_outstanding_credits_debits_widget Text
    compute='_compute_payments_widget_to_reconcile_info' groups='account.group_account_invoice'
  • invoice_partner_bank_id Many2one → res.partner.bank
    compute='_compute_invoice_partner_bank_id' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' readonly=False store=True string='Bank Account' args: 'res.partner.bank'
  • invoice_partner_display_name Char
    compute='_compute_invoice_partner_display_info' store=True
  • invoice_partner_icon Char
    compute='_compute_invoice_partner_display_info' compute_sudo=True store=False
  • invoice_payment_ref Char
    copy=False help='The payment reference to set on journal items.' index=True string='Payment Reference'
  • invoice_payment_state Selection
    compute='_compute_amount' copy=False readonly=True selection=[('not_paid', 'Not Paid'), ('in_payment', 'In Payment'), ('paid', 'Paid')] store=True string='Payment' tracking=True
  • invoice_payment_term_id Many2one → account.payment.term
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • invoice_payments_widget Text
    compute='_compute_payments_widget_reconciled_info' groups='account.group_account_invoice'
  • invoice_sent Boolean
    copy=False default=False help='It indicates that the invoice has been sent.' readonly=True
  • invoice_sequence_number_next Char
    compute='_compute_invoice_sequence_number_next' inverse='_inverse_invoice_sequence_number_next' string='Next Number'
  • invoice_sequence_number_next_prefix Char
    compute='_compute_invoice_sequence_number_next' string='Next Number Prefix'
  • invoice_source_email Char
    string='Source Email' tracking=True
  • invoice_user_id Many2one → res.users
    copy=False default=<expr> string='Salesperson' tracking=True args: 'res.users'
  • invoice_vendor_bill_id Many2one → account.move
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Auto-complete from a past bill.' store=False string='Vendor Bill' args: 'account.move'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain="[('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True readonly=True states={'draft': [('readonly', False)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • name Char
    copy=False default='/' readonly=True required=True string='Number'
  • narration Text
    string='Terms and Conditions'
  • partner_id Many2one → res.partner
    change_default=True domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Partner' tracking=True args: 'res.partner'
  • ref Char
    copy=False string='Reference'
  • restrict_mode_hash_table Boolean
    related='journal_id.restrict_mode_hash_table'
  • reversal_move_id One2many → account.move
    args: 'account.move', 'reversed_entry_id'
  • reversed_entry_id Many2one → account.move
    copy=False readonly=True string='Reversal of' args: 'account.move'
  • secure_sequence_number Integer
    copy=False readonly=True string='Inalteralbility No Gap Sequence #'
  • state Selection
    copy=False default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('posted', 'Posted'), ('cancel', 'Cancelled')] string='Status' tracking=True
  • string_to_hash Char
    compute='_compute_string_to_hash' readonly=True
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    help='Technical field used to keep track of the tax cash basis reconciliation. This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.' string='Tax Cash Basis Entry of' args: 'account.partial.reconcile'
  • tax_lock_date_message Char
    compute='_compute_tax_lock_date_message' help="Technical field used to display a message when the invoice's accounting date is prior of the tax lock date."
  • to_check Boolean
    default=False help='If this checkbox is ticked, it means that the user was not sure of all the related informations at the time of the creation of the move and that the move needs to be checked again.' string='To Check'
  • type Selection
    change_default=True default='entry' index=True readonly=True required=True selection=[('entry', 'Journal Entry'), ('out_invoice', 'Customer Invoice'), ('out_refund', 'Customer Credit Note'), ('in_invoice', 'Vendor Bill'), ('in_refund', 'Vendor Credit Note'), ('out_receipt', 'Sales Receipt'), ('in_receipt', 'Purchase Receipt')] store=True string='Type' tracking=True
  • type_name Char
    compute='_compute_type_name' args: 'Type Name'
  • user_id Many2one
    related='invoice_user_id' string='User'
  • user_id Many2one
    help='Technical field used to fit the generic behavior in mail templates.' related='invoice_user_id' string='User'
Public methods (34)
  • action_duplicate(self)
  • action_invoice_paid(self)
    Hook to be overrided called when the invoice moves to the paid state.
  • action_invoice_print(self)
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • action_invoice_register_payment(self)
  • action_invoice_sent(self)
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_open_matching_suspense_moves(self)
  • action_post(self)
  • action_reverse(self)
  • action_switch_invoice_into_refund_credit_note(self)
  • action_view_reverse_entry(self)
  • button_cancel(self)
  • button_draft(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • get_inbound_types(self, include_receipts=True)
    @api.model
  • get_invoice_types(self, include_receipts=False)
    @api.model
  • get_outbound_types(self, include_receipts=True)
    @api.model
  • get_purchase_types(self, include_receipts=False)
    @api.model
  • get_sale_types(self, include_receipts=False)
    @api.model
  • is_inbound(self, include_receipts=True)
  • is_invoice(self, include_receipts=False)
  • is_outbound(self, include_receipts=True)
  • is_purchase_document(self, include_receipts=False)
  • is_sale_document(self, include_receipts=False)
  • js_assign_outstanding_line(self, line_id)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • name_get(self)
    @api.depends('name', 'state')
  • onchange(self, values, field_name, field_onchange)
  • open_reconcile_view(self)
  • post(self)
  • preview_invoice(self)
  • unlink(self)
  • update_lines_tax_exigibility(self)
  • write(self, vals)

New fields (55)
  • account_id Many2one → account.account
    check_company=True domain=[('deprecated', '=', False)] index=True ondelete='restrict' string='Account' args: 'account.account'
  • account_internal_type Selection
    readonly=True related='account_id.user_type_id.type' store=True string='Internal Type'
  • account_root_id Many2one
    readonly=True related='account_id.root_id' store=True string='Account Root'
  • always_set_currency_id Many2one → res.currency
    compute='_compute_always_set_currency_id' help='Technical field used to compute the monetary field. As currency_id is not a required field, we need to use either the foreign currency, either the company one.' string='Foreign Currency' args: 'res.currency'
  • amount_currency Monetary
    copy=True help='The amount expressed in an optional other currency if it is a multi-currency entry.' store=True string='Amount in Currency'
  • amount_residual Monetary
    compute='_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    index=True string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • balance Monetary
    compute='_compute_balance' currency_field='company_currency_id' help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True string='Balance'
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency'
  • company_id Many2one
    readonly=True related='move_id.company_id' store=True
  • country_id Many2one → res.country
    comodel_name='res.country' related='move_id.company_id.country_id'
  • credit Monetary
    currency_field='company_currency_id' default=0.0 string='Credit'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • date Date
    copy=False group_operator='min' index=True readonly=True related='move_id.date' store=True
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True string='Due Date'
  • debit Monetary
    currency_field='company_currency_id' default=0.0 string='Debit'
  • discount Float
    default=0.0 digits='Discount' string='Discount (%)'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section'), ('line_note', 'Note')]
  • exclude_from_invoice_tab Boolean
    help='Technical field used to exclude some lines from the invoice_line_ids tab in the form view.'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False index=True readonly=True string='Matching #' args: 'account.full.reconcile'
  • is_rounding_line Boolean
    help='Technical field used to retrieve the cash rounding line.'
  • journal_id Many2one
    copy=False index=True related='move_id.journal_id' store=True
  • matched_credit_ids One2many → account.partial.reconcile
    help='Credit journal items that are matched with this journal item.' readonly=True string='Matched Credits' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    help='Debit journal items that are matched with this journal item.' readonly=True string='Matched Debits' args: 'account.partial.reconcile', 'credit_move_id'
  • move_id Many2one → account.move
    auto_join=True help='The move of this entry line.' index=True ondelete='cascade' readonly=True required=True string='Journal Entry' args: 'account.move'
  • move_name Char
    index=True related='move_id.name' store=True string='Number'
  • name Char
    string='Label'
  • parent_state Selection
    readonly=True related='move_id.state' store=True
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    copy=False help='Payment that created this entry' string='Originator Payment' args: 'account.payment'
  • price_subtotal Monetary
    currency_field='always_set_currency_id' readonly=True store=True string='Subtotal'
  • price_total Monetary
    currency_field='always_set_currency_id' readonly=True store=True string='Total'
  • price_unit Float
    digits='Product Price' string='Unit Price'
  • product_id Many2one → product.product
    ondelete='restrict' string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    default=1.0 digits='Product Unit of Measure' help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.' string='Quantity'
  • recompute_tax_line Boolean
    help='Technical field used to know on which lines the taxes must be recomputed.' readonly=True store=False
  • reconcile_model_id Many2one → account.reconcile.model
    copy=False readonly=True string='Reconciliation Model' args: 'account.reconcile.model'
  • reconciled Boolean
    compute='_amount_residual' store=True
  • ref Char
    copy=False index=True readonly=True related='move_id.ref' store=True
  • sequence Integer
    default=10
  • statement_id Many2one
    copy=False help='The bank statement used for bank reconciliation' index=True related='statement_line_id.statement_id' store=True
  • statement_line_id Many2one → account.bank.statement.line
    copy=False index=True readonly=True string='Bank statement line reconciled with this entry' args: 'account.bank.statement.line'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' help='Tags assigned to this line by the tax creating it, if any. It determines its impact on financial reports.' ondelete='restrict' string='Tags'
  • tax_audit Char
    compute='_compute_tax_audit' help='Computed field, listing the tax grids impacted by this line, and the amount it applies to each of them.' store=True string='Tax Audit String'
  • tax_base_amount Monetary
    currency_field='company_currency_id' readonly=True store=True string='Base Amount'
  • tax_exigible Boolean
    default=True help='Technical field used to mark a tax line as exigible in the vat report or not (only exigible journal items are displayed). By default all new journal items are directly exigible, but with the feature cash_basis on taxes, some will become exigible only when the payment is recorded.' readonly=True string='Appears in VAT report'
  • tax_group_id Many2one
    help='technical field for widget tax-group-custom-field' readonly=True related='tax_line_id.tax_group_id' store=True string='Originator tax group'
  • tax_ids Many2many → account.tax
    comodel_name='account.tax' context={'active_test': False} help='Taxes that apply on the base amount' string='Taxes'
  • tax_line_id Many2one → account.tax
    compute='_compute_tax_line_id' help='Indicates that this journal item is a tax line' ondelete='restrict' store=True string='Originator Tax' args: 'account.tax'
  • tax_repartition_line_id Many2one → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' help='Tax repartition line that caused the creation of this move line, if any' ondelete='restrict' readonly=True string='Originator Tax Repartition Line'
Public methods (15)
  • action_accrual_entry(self)
  • auto_reconcile_lines(self)
  • check_full_reconcile(self)
    This method check if a move is totally reconciled and if we need to create exchange rate entries for the move. In case exchange rate entries needs to be created, one will be created per currency present. In case of full reconciliation, all moves belonging to the reconciliation will belong to the same account_full_reconcile object.
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_analytic_lines(self)
    Create analytic items upon validation of an account.move.line having an analytic account or an analytic distribution.
  • default_get(self, default_fields)
    @api.model
  • init(self)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • invalidate_cache(self, fnames=None, ids=None)
    @api.model
  • name_get(self)
    @api.depends('ref', 'move_id')
  • open_reconcile_view(self)
  • reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False)
  • remove_move_reconcile(self)
    Undo a reconciliation
  • unlink(self)
  • write(self, vals)

New fields (9)
  • country_code Char
    related='move_id.company_id.country_id.code'
  • currency_id Many2one → res.currency
    compute='_compute_from_moves' args: 'res.currency'
  • date Date
    default=fields.Date.context_today required=True string='Reversal date'
  • journal_id Many2one → account.journal
    help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
  • move_id Many2one → account.move
    domain=[('state', '=', 'posted'), ('type', 'not in', ('out_refund', 'in_refund'))] string='Journal Entry' args: 'account.move'
  • move_type Char
    compute='_compute_from_moves'
  • reason Char
    string='Reason'
  • refund_method Selection
    help='Choose how you want to credit this invoice. You cannot "modify" nor "cancel" if the invoice is already reconciled.' required=True selection=[('refund', 'Partial Refund'), ('cancel', 'Full Refund'), ('modify', 'Full refund and new draft invoice')] string='Credit Method'
  • residual Monetary
    compute='_compute_from_moves'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reverse_moves(self)

New fields (9)
  • amount Monetary
    currency_field='company_currency_id' help='Amount concerned by this matching. Assumed to be always positive'
  • amount_currency Monetary
    string='Amount in Currency'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=False related='debit_move_id.company_id' store=True string='Company' args: 'res.company'
  • credit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • debit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Full Reconcile' args: 'account.full.reconcile'
  • max_date Date
    compute='_compute_max_date' copy=False help='Technical field used to determine at which date this reconciliation needs to be shown on the aged receivable/payable reports.' readonly=True store=True string='Max Date of Matched Lines'
Public methods (3)
  • create_exchange_rate_entry(self, aml_to_fix, move)
    @api.model
    Automatically create a journal items to book the exchange rate differences that can occur in multi-currencies environment. That new journal item will be made into the given `move` in the company `currency_exchange_journal_id`, and one of its journal items is matched with the other lines to balance the full reconciliation. :param aml_to_fix: recordset of account.move.line (possible several but sharing the same currency) :param move: account.move :return: tuple. [0]: account.move.line created to balance the `aml_to_fix` [1]: recordset of account.partial.reconcile created between the tuple first element and the `aml_to_fix`
  • create_tax_cash_basis_entry(self, percentage_before_rec)
  • unlink(self)
    When removing a partial reconciliation, also unlink its full reconciliation if it exists

New fields (31)
  • amount Monetary
    readonly=True required=True states={'draft': [('readonly', False)]} string='Amount' tracking=True
  • communication Char
    readonly=True states={'draft': [('readonly', False)]} string='Memo'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Currency' args: 'res.currency'
  • destination_account_id Many2one → account.account
    compute='_compute_destination_account_id' readonly=True args: 'account.account'
  • destination_journal_id Many2one → account.journal
    domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Transfer To' args: 'account.journal'
  • has_invoices Boolean
    compute='_compute_reconciled_invoice_ids' help='Technical field used for usability purposes'
  • hide_payment_method Boolean
    compute='_compute_hide_payment_method' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • invoice_ids Many2many → account.move
    copy=False help='Technical field containing the invoice for which the payment has been generated.\n This does not especially correspond to the invoices reconciled with the payment,\n as it can have been generated first, and reconciled later' readonly=True string='Invoices' args: 'account.move', 'account_invoice_payment_rel', 'payment_id', 'invoice_id'
  • journal_id Many2one → account.journal
    domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' tracking=True args: 'account.journal'
  • move_line_ids One2many → account.move.line
    copy=False ondelete='restrict' readonly=True args: 'account.move.line', 'payment_id'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • move_reconciled Boolean
    compute='_get_move_reconciled' readonly=True
  • name Char
    copy=False readonly=True
  • partner_bank_account_id Many2one → res.partner.bank
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Recipient Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=True states={'draft': [('readonly', False)]} string='Partner' tracking=True args: 'res.partner'
  • partner_type Selection
    readonly=True states={'draft': [('readonly', False)]} tracking=True args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    copy=False default=fields.Date.context_today readonly=True required=True states={'draft': [('readonly', False)]} string='Date' tracking=True
  • payment_difference Monetary
    compute='_compute_payment_difference' readonly=True
  • payment_difference_handling Selection
    copy=False default='open' string='Payment Difference Handling' args: [('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')]
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' readonly=True related='payment_method_id.code'
  • payment_method_id Many2one → account.payment.method
    help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nCheck: Pay bill by check and print it from Odoo.\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ' readonly=True required=True states={'draft': [('readonly', False)]} string='Payment Method' args: 'account.payment.method'
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' readonly=True
  • payment_type Selection
    readonly=True required=True states={'draft': [('readonly', False)]} string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money'), ('transfer', 'Internal Transfer')]
  • reconciled_invoice_ids Many2many → account.move
    compute='_compute_reconciled_invoice_ids' help='Invoices whose journal items have been reconciled with these payments.' string='Reconciled Invoices' args: 'account.move'
  • reconciled_invoices_count Integer
    compute='_compute_reconciled_invoice_ids'
  • require_partner_bank_account Boolean
    compute='_compute_show_partner_bank' help='Technical field used to know whether the field `partner_bank_account_id` needs to be required or not in the payments form views'
  • show_partner_bank_account Boolean
    compute='_compute_show_partner_bank' help='Technical field used to know whether the field `partner_bank_account_id` needs to be displayed or not in the payments form views'
  • state Selection
    copy=False default='draft' readonly=True string='Status' args: [('draft', 'Draft'), ('posted', 'Validated'), ('sent', 'Sent'), ('reconciled', 'Reconciled'), ('cancelled', 'Cancelled')]
  • writeoff_account_id Many2one → account.account
    copy=False domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" string='Difference Account' args: 'account.account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (11)
  • action_draft(self)
  • action_register_payment(self)
  • button_invoices(self)
  • button_journal_entries(self)
  • cancel(self)
  • default_get(self, default_fields)
    @api.model
  • name_get(self)
  • open_payment_matching_screen(self)
  • post(self)
    Create the journal items for the payment and update the payment's state to 'posted'. A journal entry is created containing an item in the source liquidity account (selected journal's default_debit or default_credit) and another in the destination reconcilable account (see _compute_destination_account_id). If invoice_ids is not empty, there will be one reconcilable move line per invoice to reconcile with. If the payment is a transfer, a second journal entry is created in the destination journal to receive money from the transfer account.
  • unlink(self)
  • unreconcile(self)
    Set back the payments in 'posted' or 'sent' state, without deleting the journal entries. Called when cancelling a bank statement line linked to a pre-registered payment.

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (0)

No public methods.

New fields (5)
  • group_payment Boolean
    help='Only one payment will be created by partner (bank)/ currency.'
  • invoice_ids Many2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'account_invoice_payment_rel_transient', 'payment_id', 'invoice_id'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True args: 'account.journal'
  • payment_date Date
    default=fields.Date.context_today required=True
  • payment_method_id Many2one → account.payment.method
    help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nCheck: Pay bill by check and print it from Odoo.\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ' required=True string='Payment Method Type' args: 'account.payment.method'
Public methods (3)
  • create_payments(self)
    Create payments according to the invoices. Having invoices with different commercial_partner_id or different type (Vendor bills with customer invoices) leads to multiple payments. In case of all the invoices are related to the same commercial_partner_id and have the same type, only one payment will be created. :return: The ir.actions.act_window to show created payments.
  • default_get(self, fields)
    @api.model
  • get_payments_vals(self)
    Compute the values for payments. :return: a list of payment values (dictionary).

New fields (6)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Text
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • compute(self, value, date_ref=False, currency=None)
  • unlink(self)

New fields (7)
  • day_of_the_month Integer
    help='Day of the month on which the invoice must come to its term. If zero or negative, this value will be ignored, and no specific day will be set. If greater than the last day of a month, this number will instead select the last day of this month.' string='Day of the month'
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'days after the invoice date'), ('after_invoice_month', 'days after the end of the invoice month'), ('day_following_month', 'of the following month'), ('day_current_month', 'of the current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment terms lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment terms line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits='Payment Terms' help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (2)
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • sort_selection Selection
    default='move_name' required=True args: [('date', 'Date'), ('move_name', 'Journal Entry Number')], 'Entries Sorted by'
Public methods (0)

No public methods.

New fields (48)
  • account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='cascade' string='Account' args: 'account.account'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Write-off Amount'
  • amount_from_label_regex Char
    default='([\\d\\.,]+)' help='There is no need for regex delimiter, only the regex is needed. For instance if you want to extract the amount from\nR:9672938 10/07 AX 9415126318 T:5L:NA BRT: 3358,07 C:\nYou could enter\nBRT: ([\\d,]+)' string='Amount from Label (regex)'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • analytic_account_id Many2one → account.analytic.account
    ondelete='set null' string='Analytic Account' args: 'account.analytic.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" relation='account_reconcile_model_analytic_tag_rel' string='Analytic Tags' args: 'account.analytic.tag'
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • decimal_separator Char
    default=<expr> help='Every character that is nor a digit nor this separator will be removed from the matching string'
  • force_second_tax_included Boolean
    help='Force the second tax to be managed as a price included tax.' string='Second Tax Included in Price'
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • has_second_line Boolean
    default=False string='Add a second line'
  • journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id)]" help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Nature'
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note'
  • match_note_param Char
    string='Note Parameter'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency Matching'
  • match_total_amount Boolean
    default=True help='The sum of total residual amount propositions matches the statement line amount.' string='Amount Matching'
  • match_total_amount_param Float
    default=100 help='The sum of total residual amount propositions matches the statement line amount under this percentage.' string='Amount Matching %'
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type'
  • match_transaction_type_param Char
    string='Transaction Type Parameter'
  • name Char
    required=True string='Name'
  • number_entries Integer
    compute='_compute_number_entries' string='Number of entries related to this model'
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Manually create a write-off on clicked button.'), ('writeoff_suggestion', 'Suggest counterpart values.'), ('invoice_matching', 'Match existing invoices/bills.')] string='Type'
  • second_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='cascade' string='Second Account' args: 'account.account'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Write-off Amount'
  • second_amount_from_label_regex Char
    default='([\\d\\.,]+)' string='Second Amount from Label (regex)'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • second_analytic_account_id Many2one → account.analytic.account
    ondelete='set null' string='Second Analytic Account' args: 'account.analytic.account'
  • second_analytic_tag_ids Many2many → account.analytic.tag
    domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" relation='account_reconcile_model_second_analytic_tag_rel' string='Second Analytic Tags' args: 'account.analytic.tag'
  • second_journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id)]" help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Second Journal' args: 'account.journal'
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_ids Many2many → account.tax
    ondelete='restrict' relation='account_reconcile_model_account_tax_bis_rel' string='Second Taxes' args: 'account.tax'
  • sequence Integer
    default=10 required=True
  • show_force_tax_included Boolean
    compute='_compute_show_force_tax_included' help='Technical field used to show the force tax included button'
  • show_second_force_tax_included Boolean
    compute='_compute_show_second_force_tax_included' help='Technical field used to show the force tax included button'
  • tax_ids Many2many → account.tax
    ondelete='restrict' string='Taxes' args: 'account.tax'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the informations of the counterpart.' string='To Check'
Public methods (1)
  • action_reconcile_stat(self)

New fields (39)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Write-off Amount'
  • amount_from_label_regex Char
    default='([\\d\\.,]+)' string='Amount from Label (regex)'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance'), ('regex', 'From label')]
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • decimal_separator Char
    help='Every character that is nor a digit nor this separator will be removed from the matching string'
  • force_second_tax_included Boolean
    help='Force the second tax to be managed as a price included tax.' string='Second Tax Included in Price'
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • has_second_line Boolean
    default=False string='Add a second line'
  • label Char
    string='Journal Item Label'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Nature'
  • match_note Selection
    help='The reconciliation model will only be applied when the note:\n * Contains: The proposition note must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Note'
  • match_note_param Char
    string='Note Parameter'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency Matching'
  • match_total_amount Boolean
    default=True help='The sum of total residual amount propositions matches the statement line amount.' string='Amount Matching'
  • match_total_amount_param Float
    default=100 help='The sum of total residual amount propositions matches the statement line amount under this percentage.' string='Amount Matching %'
  • match_transaction_type Selection
    help='The reconciliation model will only be applied when the transaction type:\n * Contains: The proposition transaction type must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Transaction Type'
  • match_transaction_type_param Char
    string='Transaction Type Parameter'
  • name Char
    required=True string='Button Label'
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', 'Manually create a write-off on clicked button.'), ('writeoff_suggestion', 'Suggest a write-off.'), ('invoice_matching', 'Match existing invoices/bills.')] string='Type'
  • second_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Second Account' args: 'account.account.template'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Write-off Amount'
  • second_amount_from_label_regex Char
    default='([\\d\\.,]+)' string='Second Amount from Label (regex)'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of amount'), ('regex', 'From label')]
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_ids Many2many → account.tax.template
    ondelete='restrict' relation='account_reconcile_model_tmpl_account_tax_bis_rel' string='Second Taxes' args: 'account.tax.template'
  • sequence Integer
    default=10 required=True
  • tax_ids Many2many → account.tax.template
    ondelete='restrict' string='Taxes' args: 'account.tax.template'
  • to_check Boolean
    default=False help='This matching rule is used when the user is not certain of all the informations of the counterpart.' string='To Check'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (8)
  • get_all_data_for_manual_reconciliation(self, partner_ids, account_ids)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts. If an argument is None, fetch all related reconciliations. Use [] to fetch nothing.
  • get_bank_statement_data(self, bank_statement_line_ids, srch_domain=[])
    @api.model
    Get statement lines of the specified statements or all unreconciled statement lines and try to automatically reconcile them / find them a partner. Return ids of statement lines left to reconcile and other data for the reconciliation widget. :param bank_statement_line_ids: ids of the bank statement lines
  • get_bank_statement_line_data(self, st_line_ids, excluded_ids=None)
    @api.model
    Returns the data required to display a reconciliation widget, for each statement line in self :param st_line_id: ids of the statement lines :param excluded_ids: optional move lines ids excluded from the result
  • get_data_for_manual_reconciliation(self, res_type, res_ids=None, account_type=None)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts (list of dicts). If no res_ids is passed, returns data for all partners/accounts that can be reconciled. :param res_type: either 'partner' or 'account' :param res_ids: ids of the partners/accounts to reconcile, use None to fetch data indiscriminately of the id, use [] to prevent from fetching any data at all. :param account_type: if a partner is both customer and vendor, you can use 'payable' to reconcile the vendor-related journal entries and 'receivable' for the customer-related entries.
  • get_move_lines_for_bank_statement_line(self, st_line_id, partner_id=None, excluded_ids=None, search_str=False, offset=0, limit=None, mode=None)
    @api.model
    Returns move lines for the bank statement reconciliation widget, formatted as a list of dicts :param st_line_id: ids of the statement lines :param partner_id: optional partner id to select only the moves line corresponding to the partner :param excluded_ids: optional move lines ids excluded from the result :param search_str: optional search (can be the amout, display_name, partner name, move line name) :param offset: useless but kept in stable to preserve api :param limit: number of the result to search :param mode: 'rp' for receivable/payable or 'other'
  • get_move_lines_for_manual_reconciliation(self, account_id, partner_id=False, excluded_ids=None, search_str=False, offset=0, limit=None, target_currency_id=False)
    @api.model
    Returns unreconciled move lines for an account or a partner+account, formatted for the manual reconciliation widget
  • process_bank_statement_line(self, st_line_ids, data)
    @api.model
    Handles data sent from the bank statement reconciliation widget (and can otherwise serve as an old-API bridge) :param st_line_ids :param list of dicts data: must contains the keys 'counterpart_aml_dicts', 'payment_aml_ids' and 'new_aml_dicts', whose value is the same as described in process_reconciliation except that ids are used instead of recordsets. :returns dict: used as a hook to add additional keys.
  • process_move_lines(self, data)
    @api.model
    Used to validate a batch of reconciliations in a single call :param data: list of dicts containing: - 'type': either 'partner' or 'account' - 'id': id of the affected res.partner or account.account - 'mv_line_ids': ids of existing account.move.line to reconcile - 'new_mv_line_dicts': list of dicts containing values suitable for account_move_line.create()

New fields (3)
  • company_id Many2one → res.company
    args: 'res.company'
  • name Char
  • parent_id Many2one → account.root
    args: 'account.root'
Public methods (1)
  • init(self)

New fields (6)
  • linked_journal_id Many2one → account.journal
    comodel_name='account.journal' compute='_compute_linked_journal_id' inverse='set_linked_journal_id' string='Journal'
  • new_journal_code Char
    default=<expr> required=True string='Code'
  • new_journal_name Char
    default=<expr> help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • num_journals_without_account Integer
    default=<expr>
  • related_acc_type Selection
    compute='_compute_related_acc_type' selection=<expr> string='Account Type'
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (4)
  • create(self, vals)
    @api.model
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • default_linked_journal_id(self)
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (20)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' help='\n - Group of Taxes: The tax is a set of sub taxes.\n - Fixed: The tax amount stays the same whatever the price.\n - Percentage of Price: The tax amount is a % of the price:\n e.g 100 * 10% = 110 (not price included)\n e.g 110 / (1 + 10%) = 100 (price included)\n - Percentage of Price Tax Included: The tax amount is a division of the price:\n e.g 180 / (1 - 10%) = 200 (not price included)\n e.g 200 * (1 - 10%) = 180 (price included)\n ' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_base_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account' args: 'account.account'
  • cash_basis_transition_account_id Many2one → account.account
    comodel_name='account.account' domain=[('deprecated', '=', False)] help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • children_tax_ids Many2many → account.tax
    string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Technical field used to restrict the domain of account tags for tax repartition lines created for this tax.' related='company_id.country_id' string='Country'
  • description Char
    string='Label on Invoices'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Base of Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Repartition when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Repartition for Invoices'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line
    comodel_name='account.tax.repartition.line' copy=True help='Repartition when the tax is used on a refund' inverse_name='refund_tax_id' string='Repartition for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    default=_default_tax_group required=True string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Scope' args: TYPE_TAX_USE
Public methods (10)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True)
    Returns all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] 'handle_price_include' is used when we need to ignore all tax included in price. If False, it means the amount passed to this method will be considered as the base of all computations. RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'total_void' : 0.0, # Total with those taxes, that don't have an account set 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }], }
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, vals)
    @api.model
  • flatten_taxes_hierarchy(self, create_map=False)
  • get_tax_tags(self, is_refund, repartition_type)
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None, is_refund=False)
    Called by the reconciliation to compute taxes on writeoff during bank reconciliation
  • name_get(self)
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')

New fields (5)
  • name Char
    required=True translate=True
  • property_advance_tax_payment_account_id Many2one → account.account
    company_dependent=True string='Advance Tax payment account' args: 'account.account'
  • property_tax_payable_account_id Many2one → account.account
    company_dependent=True string='Tax current account (payable)' args: 'account.account'
  • property_tax_receivable_account_id Many2one → account.account
    company_dependent=True string='Tax current account (receivable)' args: 'account.account'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (11)
  • account_id Many2one → account.account
    comodel_name='account.account' help='Account on which to post the tax amount' string='Account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> help='The company this repartition line belongs to.' required=True string='Company'
  • country_id Many2one → res.country
    comodel_name='res.country' help='Technical field used to restrict tags domain in form view.' related='company_id.country_id' string='Country'
  • factor Float
    compute='_compute_factor' help='Factor to apply on the account move lines generated from this repartition line' string='Factor Ratio'
  • factor_percent Float
    help='Factor to apply on the account move lines generated from this repartition line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax
    comodel_name='account.tax' help='The tax set to apply this repartition on invoices. Mutually exclusive with refund_tax_id' ondelete='cascade'
  • refund_tax_id Many2one → account.tax
    comodel_name='account.tax' help='The tax set to apply this repartition on refund invoices. Mutually exclusive with invoice_tax_id' ondelete='cascade'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • sequence Integer
    default=1 help='The order in which display and match repartition lines. For refunds to work properly, invoice repartition lines should be arranged in the same order as the credit note repartition lines they correspond to.' string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True domain=[('applicability', '=', 'taxes')] string='Tax Grids'
  • tax_id Many2one → account.tax
    comodel_name='account.tax' compute='_compute_tax_id'
Public methods (1)
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (8)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' help='Account on which to post the tax amount' string='Account'
  • factor_percent Float
    help='Factor to apply on the account move lines generated from this repartition line, in percents' required=True string='%'
  • invoice_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this repartition on invoices. Mutually exclusive with refund_tax_id'
  • minus_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' copy=True help="Tax report lines whose '-' tag will be assigned to move lines by this repartition line" relation='account_tax_repartition_minus_report_line' string='Minus Report Lines'
  • plus_report_line_ids Many2many → account.tax.report.line
    comodel_name='account.tax.report.line' copy=True help="Tax report lines whose '+' tag will be assigned to move lines by this repartition line" relation='account_tax_repartition_plus_report_line' string='Plus Tax Report Lines'
  • refund_tax_id Many2one → account.tax.template
    comodel_name='account.tax.template' help='The tax set to apply this repartition on refund invoices. Mutually exclusive with invoice_tax_id'
  • repartition_type Selection
    default='tax' help='Base on which the factor will be applied.' required=True selection=[('base', 'Base'), ('tax', 'of tax')] string='Based On'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' copy=True help='Additional tags that will be assigned by this repartition line for use in financial reports' relation='account_tax_repartition_financial_tags' string='Financial Tags'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_repartition_line_create_vals(self, company)
  • validate_tags(self)
    @api.constrains('plus_report_line_ids', 'minus_report_line_ids')
  • validate_tax_template_link(self)
    @api.constrains('invoice_tax_id', 'refund_tax_id')

New fields (11)
  • children_line_ids One2many → account.tax.report.line
    comodel_name='account.tax.report.line' help='Lines that should be rendered as children of this one' inverse_name='parent_id' string='Children Lines'
  • code Char
    help='Optional unique code to refer to this line in total formulas' string='Code'
  • country_id Many2one → res.country
    comodel_name='res.country' default=<expr> help='Country for which this line is available.' required=True string='Country'
  • formula Char
    help='Python expression used to compute the value of a total line. This field is mutually exclusive with tag_name, setting it turns the line to a total line. Tax report line codes can be used as variables in this expression to refer to the balance of the corresponding lines in the report. A formula cannot refer to another line using a formula.' string='Formula'
  • name Char
    help='Complete name for this report line, to be used in report.' required=True string='Name'
  • parent_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' string='Parent Line'
  • parent_path Char
    index=True
  • report_action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' help='The optional action to call when clicking on this line in accounting reports.' string='Report Action'
  • sequence Integer
    help='Sequence determining the order of the lines in the report (smaller ones come first). This order is applied locally per section (so, children of the same line are always rendered one after the other).' required=True string='Sequence'
  • tag_ids Many2many → account.account.tag
    comodel_name='account.account.tag' help='Tax tags populating this line' relation='account_tax_report_line_tags_rel' string='Tags'
  • tag_name Char
    help='Short name for the tax grid corresponding to this report line. Leave empty if this report line should not correspond to any such grid.' string='Tag Name'
Public methods (3)
  • create(self, vals)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (18)
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    default=0 digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • cash_basis_base_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account' args: 'account.account.template'
  • cash_basis_transition_account_id Many2one → account.account.template
    comodel_name='account.account.template' domain=[('deprecated', '=', False)] help='Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.' string='Cash Basis Transition Account'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Subsequent Taxes'
  • invoice_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on an invoice' inverse_name='invoice_tax_id' string='Repartition for Invoices'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_repartition_line_ids One2many → account.tax.repartition.line.template
    comodel_name='account.tax.repartition.line.template' copy=True help='Repartition when the tax is used on a refund' inverse_name='refund_tax_id' string='Repartition for Refund Invoices'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Scope' args: TYPE_TAX_USE
Public methods (1)
  • name_get(self)
    @api.depends('name', 'description')

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)

New fields (0)

No new fields.

Public methods (1)
  • document_layout_save(self)

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (1)
  • compute_kpis_actions(self, company, user)

New fields (0)

No new fields.

Public methods (3)
  • postprocess_pdf_report(self, record, buffer)
  • render_qweb_pdf(self, res_ids=None, data=None)
  • retrieve_attachment(self, record)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain="['&', ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain="['&', ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='This account will be used when validating a customer invoice.' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain="['&', ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain="['&', ('deprecated', '=', False), ('company_id', '=', current_company_id)]" help='Keep this field empty to use the default value from the product category.' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product.' string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product.' string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (1)
  • get_product_accounts(self, fiscal_pos=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • lines(self, target_move, journal_ids, sort_selection, data)

New fields (47)
  • account_bank_reconciliation_start Date
    help="The bank reconciliation widget won't ask to reconcile payments older than this date.\n This is useful if you install accounting after having used invoicing for some time and\n don't want to reconcile all the past payments with bank statements." string='Bank Reconciliation Threshold'
  • account_dashboard_onboarding_state Selection
    default='not_done' string='State of the account dashboard onboarding panel' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
  • account_default_pos_receivable_account_id Many2one → account.account
    string='Default PoS Receivable Account' args: 'account.account'
  • account_invoice_onboarding_state Selection
    default='not_done' string='State of the account invoice onboarding panel' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
  • account_onboarding_invoice_layout_state Selection
    default='not_done' string='State of the onboarding invoice layout step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_onboarding_sale_tax_state Selection
    default='not_done' string='State of the onboarding sale tax step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_onboarding_sample_invoice_state Selection
    default='not_done' string='State of the onboarding sample invoice step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_opening_date Date
    help="Date at which the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.date' string='Opening Date'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_purchase_tax_id Many2one → account.tax
    string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    string='Default Sale Tax' args: 'account.tax'
  • account_setup_bank_data_state Selection
    default='not_done' string='State of the onboarding bank data step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_setup_coa_state Selection
    default='not_done' string='State of the onboarding charts of account step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_setup_fy_data_state Selection
    default='not_done' string='State of the onboarding fiscal year step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • accrual_default_journal_id Many2one → account.journal
    domain="[('type', '=', 'general')]" help='Journal used by default for moving the period of an entry' args: 'account.journal'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • bank_account_code_prefix Char
    string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • default_cash_difference_expense_account_id Many2one → account.account
    string='Cash Difference Expense Account' args: 'account.account'
  • default_cash_difference_income_account_id Many2one → account.account
    string='Cash Difference Income Account' args: 'account.account'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'liability'), ('internal_type', 'not in', ('receivable', 'payable')), ('reconcile', '=', True), ('company_id', '=', id)]" help='Account used to move the period of an expense' args: 'account.account'
  • expense_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" readonly=False related='currency_exchange_journal_id.default_debit_account_id' string='Loss Exchange Rate Account' args: 'account.account'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default='12' required=True args: MONTH_SELECTION
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" readonly=False related='currency_exchange_journal_id.default_credit_account_id' string='Gain Exchange Rate Account' args: 'account.account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    default=True args: 'Email by default'
  • invoice_is_print Boolean
    default=True args: 'Print by default'
  • invoice_terms Text
    string='Default Terms and Conditions' translate=True
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • qr_code Boolean
    string='Display SEPA QR code'
  • revenue_accrual_account_id Many2one → account.account
    domain="[('internal_group', '=', 'asset'), ('internal_type', 'not in', ('receivable', 'payable')), ('reconcile', '=', True), ('company_id', '=', id)]" help='Account used to move the period of a revenue' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    string='Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • tax_lock_date Date
    help='No users can edit journal entries related to a tax prior and inclusive of this date.' args: 'Tax Lock Date'
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (23)
  • action_close_account_dashboard_onboarding(self)
    @api.model
    Mark the dashboard onboarding panel as closed.
  • action_close_account_invoice_onboarding(self)
    @api.model
    Mark the invoice onboarding panel as closed.
  • action_open_account_onboarding_sale_tax(self)
    @api.model
    Onboarding step for the invoice layout.
  • action_open_account_onboarding_sample_invoice(self)
    @api.model
    Onboarding step for sending a sample invoice. Open a window to compose an email, with the edi_invoice_template message loaded by default.
  • action_save_onboarding_invoice_layout(self)
    Set the onboarding step as done
  • action_save_onboarding_sale_tax(self)
    Set the onboarding step as done
  • compute_fiscalyear_dates(self, current_date)
    Computes the start and end dates of the fiscal year where the given 'date' belongs to. :param current_date: A datetime.date/datetime.datetime object. :return: A dictionary containing: * date_from * date_to * [Optionally] record: The fiscal year record.
  • create_op_move_if_non_existant(self)
    @api.model
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_account_dashboard_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (account_winbooks_import in this case).
  • get_account_invoice_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (payment acquirer in this case).
  • get_and_update_account_dashboard_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_and_update_account_invoice_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_chart_of_accounts_or_fail(self)
  • get_fiscal_country(self)
    Returns the country to be used for this company's tax report. By default, it'll be the one from the address; but a config parameter may be used for each company to customize that behavior.
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_chart_of_accounts_action(self)
    @api.model
    Called by the 'Chart of Accounts' button of the setup bar.
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar.
  • setting_init_fiscal_year_action(self)
    @api.model
    Called by the 'Fiscal Year Opening' button of the setup bar.
  • write(self, values)

New fields (46)
  • account_bank_reconciliation_start Date
    help="The bank reconciliation widget won't ask to reconcile payments older than this date.\n This is useful if you install accounting after having used invoicing for some time and\n don't want to reconcile all the past payments with bank statements." readonly=False related='company_id.account_bank_reconciliation_start' string='Bank Reconciliation Threshold'
  • chart_template_id Many2one → account.chart.template
    default=<expr> domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Exchange Gain or Loss Journal' args: 'account.journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • group_analytic_accounting Boolean
    implied_group='analytic.group_analytic_accounting' string='Analytic Accounting'
  • group_analytic_tags Boolean
    implied_group='analytic.group_analytic_tags' string='Analytic Tags'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_fiscal_year Boolean
    implied_group='account.group_fiscal_year' string='Fiscal Years'
  • group_show_line_subtotals_tax_excluded Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_excluded' args: 'Show line subtotals without taxes (B2B)'
  • group_show_line_subtotals_tax_included Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_included' args: 'Show line subtotals with taxes (B2C)'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' readonly=False related='company_id.incoterm_id' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    readonly=False related='company_id.invoice_is_email' string='Send Email'
  • invoice_is_print Boolean
    readonly=False related='company_id.invoice_is_print' string='Print'
  • invoice_terms Text
    readonly=False related='company_id.invoice_terms' string='Terms & Conditions'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    string='Bill Digitalization'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_plaid Boolean
    string='Plaid Connector'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_account_yodlee Boolean
    args: 'Bank Interface - Sync your bank feeds automatically'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_service Boolean
    string='EU Intra-community Distance Selling'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • module_snailmail_account Boolean
    string='Snailmail'
  • purchase_tax_id Many2one → account.tax
    readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR code'
  • sale_tax_id Many2one → account.tax
    readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • show_line_subtotals_tax_selection Selection
    config_parameter='account.show_line_subtotals_tax_selection' default='tax_excluded' required=True string='Line Subtotals Tax Display' args: [('tax_excluded', 'Tax-Excluded'), ('tax_included', 'Tax-Included')]
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method' args: [('round_per_line', 'Round calculation of taxes per line'), ('round_globally', 'Round globally calculation of taxes ')]
  • tax_cash_basis_journal_id Many2one → account.journal
    readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
  • use_invoice_terms Boolean
    config_parameter='account.use_invoice_terms' string='Default Terms & Conditions'
Public methods (5)
  • create(self, values)
    @api.model
  • onchange_account_yodlee(self)
    @api.onchange('module_account_yodlee')
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • set_values(self)

New fields (22)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • customer_rank Integer
    copy=False default=0
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.move
    copy=False readonly=True string='Invoices' args: 'account.move', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items' type='integer'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position determines the taxes/accounts used for this contact.' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sales orders and customer invoices' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • supplier_rank Integer
    copy=False default=0
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
Public methods (5)
  • action_view_partner_invoices(self)
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • create(self, vals_list)
    @api.model_create_multi
  • mark_as_reconciled(self)
  • unlink(self)
    Prevent the deletion of a partner "Individual", child of a company if: - partner in 'account.move' - state: all states (draft and posted)

New fields (1)
  • journal_id One2many → account.journal
    domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (10)
  • adjustment_type Selection
    required=True string='Adjustment Type' args: [('debit', 'Applied on debit journal item'), ('credit', 'Applied on credit journal item')]
  • amount Monetary
    currency_field='company_currency_id' required=True
  • company_currency_id Many2one → res.currency
    default=<expr> readonly=True args: 'res.currency'
  • country_id Many2one → res.country
    comodel_name='res.country' default=<expr> readonly=True string='Country'
  • credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Credit account' args: 'account.account'
  • date Date
    default=fields.Date.context_today required=True
  • debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Debit account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain=[('type', '=', 'general')] required=True string='Journal' args: 'account.journal'
  • reason Char
    required=True string='Justification'
  • tax_report_line_id Many2one → account.tax.report.line
    comodel_name='account.tax.report.line' help='The report line to make an adjustment for.' required=True string='Report Line'
Public methods (1)
  • create_move(self)

New fields (0)

No new fields.

Public methods (1)
  • validate_move(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYInvoicing Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Xavier ALT, Christophe Simonis, Xavier Morel, Goffin Simon, Cedric Snauwaert, Nicolas Martinelli, Yannick Vaucher, Nicolas Lempereur, qdp-odoo, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Olivier Colson, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Nicolas Seinlet, Pierre Masereel, Romain Derie, Laurent Smet, De Paoli Quentin, Toufik Benjaa, jem-odoo, Adrien Dieudonne, RomainLibert, Christophe Monniez, len-odoo, Julien (juc) Castiaux, Jorge Pinna Puissant, Nans Lefebvre, Alexandre Kühn, jev-odoo, Toufik Ben Jaa, Adrian Torres, wan, XavierDo, Julien Castiaux, Abridbus, Rémi Rahir, Aurélien Warnon, Xavier-Do, Luis Torres, jerome hanke (jhk), Florimond Husquinet (fhu), Andrea Grazioso (agr-odoo), Hugo Adan, Paul Morelle, Moisés López, Fanny He, Sébastien Theys, Sanjay Jamod, Akim Juillerat, eco-odoo, david, Nasreddin (bon), alt-odoo, Humberto Arocha, oco-odoo, Florent de Labarre, Vincent Schippefilt, fw-bot, Anh Thao Pham (pta), Adrien Horgnies, Luis González, goliveirab, Kinjal Mehta, Quentin Smetz (qsm), David Beguin, Adrien Widart, Ivan Yelizariev, Baptiste Vergote, Nasreddin Boulif (bon), Touati Djamel (otd), Swapnesh Shah, nie, TWA, Bhavesh Odedra, Luc De Meyer, snd, Hoang Tran, Florian Daloze, Varun Raval, Kamen Zhekov, Julien CHEVREAU (JCU), jbw, Sergio Zanchetta, sed-odoo, remi-filament, Djamel (otd)
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (167)
XML IDNameModelTypeStatus
_assets_backend_helpers _assets_backend_helpers ir.ui.view qweb Inherits web._assets_backend_helpers
account_bank_journal_view_kanban account.bank.journal.kanban account.journal kanban New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_dashboard_onboarding_panel account.dashboard.onboarding.panel ir.ui.view qweb New
account_incoterms_form account.incoterms.form account.incoterms form New
account_incoterms_view_search account.incoterms.search account.incoterms search New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_invoice_import_wizard_form_view account.invoice.import.wizard.form account.invoice.import.wizard form New
account_invoice_onboarding_invoice_layout_form account.invoice.layout.onboarding.form res.company xpath Inherits base.view_company_document_template_form
account_invoice_onboarding_panel account.invoice.onboarding.panel ir.ui.view qweb New
account_invoice_onboarding_sale_tax_form account.invoice.layout.onboarding.form res.company form New
account_invoice_send_wizard_form account.invoice.send.form account.invoice.send form New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_graph_date_cash_basis account.move.line.graph account.move.line graph New
account_move_line_view_kanban account.move.line.kanban account.move.line kanban New
account_tag_view_form Tags account.account.tag form New
account_tax_view_search account.tax.search.filters account.tax search New
account_tax_view_tree account.invoice.line.tax.search account.tax tree New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
action_account_fiscal_year_form account.fiscal.year.form account.fiscal.year form New
action_account_fiscal_year_search account.fiscal.year.search account.fiscal.year search New
action_account_fiscal_year_tree account.fiscal.year.tree account.fiscal.year tree New
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
assets_frontend account assets ir.ui.view qweb Inherits web.assets_frontend
cash_box_in_form cash_box_in cash.box.in form New
cash_box_out_form cash_box_out cash.box.out form New
dashboard_onboarding_company_step dashboard_onboarding_company_step ir.ui.view qweb Inherits base.onboarding_company_step
digest_digest_view_form digest.digest.view.form.inherit.account.account digest.digest xpath Inherits digest.digest_digest_view_form
email_compose_onboarding_sample_invoice mail.compose.message.form.account_invoice_onboarding_sample_invoice mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
invoice_form account.invoice.form account.invoice form New
invoice_kanban account.invoice.kanban account.invoice kanban New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_supplier_tree account.invoice.supplier.tree account.invoice tree New
invoice_tree account.invoice.tree account.invoice tree New
invoice_tree_with_onboarding account.invoice.tree.with.onboarding account.invoice xpath Inherits invoice_tree
onboarding_bank_account_step onboarding_bank_account_step ir.ui.view qweb New
onboarding_chart_of_account_step onboarding_chart_of_account_step ir.ui.view qweb New
onboarding_fiscal_year_step onboarding_fiscal_year_step ir.ui.view qweb New
onboarding_invoice_layout_step onboarding_invoice_layout_step ir.ui.view qweb New
onboarding_sale_tax_step onboarding_sale_tax_step ir.ui.view qweb New
onboarding_sample_invoice_step onboarding_sample_invoice_step ir.ui.view qweb New
partner_view_button_contracts_count partner.view.button.contracts_count res.partner button Inherits base.view_partner_form
partner_view_buttons partner.view.buttons res.partner button Inherits base.view_partner_form
partner_view_short_extra partner.short.view.account res.partner field Inherits base.view_partner_short_form
portal_invoice_chatter Allow Comments & History ir.ui.view qweb Inherits account.portal_invoice_page
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Portal My Home : invoice entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_product_view_tree product.product.tree product.product tree New
product_template_form_view product.template.form.inherit product.template xpath Inherits product.product_template_form_view
qunit_suite account tests ir.ui.view qweb Inherits web.qunit_suite
report_agedpartnerbalance report_agedpartnerbalance ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_document_with_payments report_invoice_document_with_payments ir.ui.view qweb Inherits account.report_invoice_document
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_payment_receipt_document report_payment_receipt_document ir.ui.view qweb New
res_company_form_view_inherit_account_intrastat res.company.form.inherit.account.intrastat res.company xpath Inherits base.view_company_form
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_account_wizard account.online.sync.res.partner.bank.setup.form account.setup.bank.manual.config form New
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
tax_adjustments_wizard tax.adjustments.wizard.form tax.adjustments.wizard form New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bank_journal_form account.bank.journal.form account.journal form New
view_account_bank_journal_tree account.bank.journal.tree account.journal tree New
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_from_invoices account.register.payments.wizard account.register.payments form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_invoice_form account.payment.invoice.form account.payment form New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_filter account.fiscal.position.filter account.fiscal.position search New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment tree New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_partner_bank_form company.res.partner.bank.form res.partner.bank xpath Inherits base.view_partner_bank_form
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_incoterms_tree account.incoterms.tree account.incoterms tree New
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_pivot account.invoice.pivot account.invoice pivot New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_tree account.move.tree account.move tree New
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
Models touched (68)

New fields (19)
  • amount Monetary
    required=True string='Payment Amount'
  • communication Char
    string='Memo'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • hide_payment_method Boolean
    compute='_compute_hide_payment_method' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • invoice_ids Many2many → account.invoice
    copy=False string='Invoices' args: 'account.invoice'
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True string='Payment Journal' args: 'account.journal'
  • multi Boolean
    help='Technical field indicating if the registering payment will generate multiple payments or not.' string='Multi'
  • partner_bank_account_id Many2one → res.partner.bank
    string='Recipient Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_type Selection
    args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    copy=False default=fields.Date.context_today required=True string='Payment Date'
  • payment_difference Monetary
    compute='_compute_payment_difference' readonly=True
  • payment_difference_handling Selection
    copy=False default='open' string='Payment Difference Handling' args: [('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')]
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' readonly=True related='payment_method_id.code'
  • payment_method_id Many2one → account.payment.method
    help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nCheck: Pay bill by check and print it from Odoo.\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit, module account_batch_payment must be installed.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ' oldname='payment_method' required=True string='Payment Method Type' args: 'account.payment.method'
  • payment_type Selection
    required=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
  • show_partner_bank_account Boolean
    compute='_compute_show_partner_bank' help='Technical field used to know whether the field `partner_bank_account_id` needs to be displayed or not in the payments form views'
  • writeoff_account_id Many2one → account.account
    copy=False domain=[('deprecated', '=', False)] string='Difference Account' args: 'account.account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • is_multi(self, invoices)
    @api.model

New fields (16)
  • code Char
    index=True required=True size=64
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this account currency.' string='Account Currency' args: 'res.currency'
  • deprecated Boolean
    default=False index=True
  • group_id Many2one → account.group
    args: 'account.group'
  • internal_group Selection
    readonly=True related='user_type_id.internal_group' store=True string='Internal Group'
  • internal_type Selection
    readonly=True related='user_type_id.type' store=True string='Internal Type'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed on this account. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit Or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • name Char
    index=True required=True
  • note Text
    args: 'Internal Notes'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' help='Opening credit value for this account.' inverse='_set_opening_credit' string='Opening credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' help='Opening debit value for this account.' inverse='_set_opening_debit' string='Opening debit'
  • reconcile Boolean
    default=False help='Check this box if this account allows invoices & payments matching of journal items.' string='Allow Reconciliation'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_account_account_tag'
  • tax_ids Many2many → account.tax
    string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' oldname='user_type' required=True string='Type' args: 'account.account.type'
Public methods (10)
  • action_open_reconcile(self)
    @api.multi
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • load(self, fields, data)
    @api.model
    Overridden for better performances when importing a list of account with opening debit/credit. In that case, the auto-balance is postpone until the whole file has been imported.
  • mark_as_reconciled(self)
    @api.multi
  • name_get(self)
    @api.multi
  • onchange_code(self)
    @api.onchange('code')
  • onchange_internal_type(self)
    @api.onchange('internal_type')
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (4)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes')]
  • color Integer
    args: 'Color Index'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (11)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • group_id Many2one → account.group
    args: 'account.group'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' oldname='user_type' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'code')

New fields (5)
  • include_initial_balance Boolean
    help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' string='Bring Accounts Balance Forward'
  • internal_group Selection
    help="The 'Internal Group' is used to filter accounts based on the internal group set on the account type." string='Internal Group' args: [('equity', 'Equity'), ('asset', 'Asset'), ('liability', 'Liability'), ('income', 'Income'), ('expense', 'Expense')]
  • name Char
    required=True string='Account Type' translate=True
  • note Text
    string='Description'
  • type Selection
    default='other' help="The 'Internal Type' is used for features available on different types of accounts: liquidity type is for cash or bank accounts, payable/receivable is for vendor/customer accounts." required=True args: [('other', 'Regular'), ('receivable', 'Receivable'), ('payable', 'Payable'), ('liquidity', 'Liquidity')]
Public methods (0)

No public methods.

New fields (5)
  • code Char
    size=8
  • general_account_id Many2one → account.account
    compute_sudo=True domain=[('deprecated', '=', False)] ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    index=True ondelete='cascade' string='Journal Item' args: 'account.move.line'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.v8@api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (23)
  • accounting_date Date
    help='If set, the accounting entries created during the bank statement reconciliation process will be created at this date.\nThis is useful if the accounting period in which the entries should normally be booked is already closed.' readonly=True states={'open': [('readonly', False)]} string='Accounting Date'
  • all_lines_reconciled Boolean
    compute='_check_lines_reconciled'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    states={'confirm': [('readonly', True)]} args: 'Ending Balance'
  • balance_start Monetary
    default=_default_opening_balance states={'confirm': [('readonly', True)]} string='Starting Balance'
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' oldname='currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • journal_id Many2one → account.journal
    default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' readonly=False related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_count Integer
    compute='_get_move_line_count'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • reference Char
    copy=False help='Used to hold the reference of the external mean that created this statement (name of imported file, reference of online synchronization...)' readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (7)
  • button_confirm_bank(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • button_open(self)
    @api.multi
    Changes statement state to Running.
  • check_confirm_bank(self)
    @api.multi
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (1)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
Public methods (1)
  • validate(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate(self)
    @api.multi

New fields (20)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account' string='Counterpart Account' args: 'account.account'
  • account_number Char
    help="Technical field used to store the bank account number before its creation, upon the line's processing" string='Bank Account Number'
  • amount Monetary
    currency_field='journal_currency_id' digits=0
  • amount_currency Monetary
    help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • bank_account_id Many2one → res.partner.bank
    help='Bank account that was used in this transaction.' string='Bank Account' args: 'res.partner.bank'
  • company_id Many2one → res.company
    readonly=True related='statement_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    default=<expr> required=True
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='statement_id.currency_id' string="Journal's Currency" args: 'res.currency'
  • journal_entry_ids One2many → account.move.line
    copy=False readonly=True args: 'account.move.line', 'statement_line_id', 'Journal Items'
  • journal_id Many2one → account.journal
    readonly=True related='statement_id.journal_id' store=True string='Journal' args: 'account.journal'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • name Char
    required=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    index=True ondelete='cascade' required=True string='Statement' args: 'account.bank.statement'
Public methods (5)
  • button_cancel_reconciliation(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fast_counterpart_creation(self)
    @api.multi
    This function is called when confirming a bank statement and will allow to automatically process lines without going in the bank reconciliation widget. By setting an account_id on bank statement lines, it will create a journal entry using that account to counterpart the bank account
  • process_reconciliation(self, counterpart_aml_dicts=None, payment_aml_rec=None, new_aml_dicts=None)
    Match statement lines with existing payments (eg. checks) and/or payables/receivables (eg. invoices and credit notes) and/or new move lines (eg. write-offs). If any new journal item needs to be created (via new_aml_dicts or counterpart_aml_dicts), a new journal entry will be created and will contain those items, as well as a journal item for the bank statement line. Finally, mark the statement line as reconciled by putting the matched moves ids in the column journal_entry_ids. :param self: browse collection of records that are supposed to have no accounting entries already linked. :param (list of dicts) counterpart_aml_dicts: move lines to create to reconcile with existing payables/receivables. The expected keys are : - 'name' - 'debit' - 'credit' - 'move_line' # The move line to reconcile (partially if specified debit/credit is lower than move line's credit/debit) :param (list of recordsets) payment_aml_rec: recordset move lines representing existing payments (which are already fully reconciled) :param (list of dicts) new_aml_dicts: move lines to create. The expected keys are : - 'name' - 'debit' - 'credit' - 'account_id' - (optional) 'tax_ids' - (optional) Other account.move.line fields like analytic_account_id or analytics_id :returns: The journal entries with which the transaction was matched. If there was at least an entry in counterpart_aml_dicts or new_aml_dicts, this list contains the move created by the reconciliation, containing entries for the statement.line (1), the counterpart move lines (0..*) and the new move lines (0..*).
  • unlink(self)
    @api.multi

New fields (5)
  • account_id Many2one → account.account
    string='Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • rounding Float
    default=0.01 help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'UP'), ('DOWN', 'DOWN'), ('HALF-UP', 'HALF-UP')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    @api.multi
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    @api.multi
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (4)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • number Integer
    help='Opening Unit Numbers' string='Number of Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (23)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' required=True string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    required=True string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    oldname='property_account_expense_categ' string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    oldname='property_account_expense' string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    oldname='property_account_income_categ' string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    oldname='property_account_income' string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    oldname='property_account_payable' string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    oldname='property_account_receivable' string='Receivable Account' args: 'account.account.template'
  • property_stock_account_input_categ_id Many2one → account.account.template
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_code_prefix Char
    required=True string='Prefix of the main transfer accounts'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (11)
  • create_record_with_xmlid(self, company, template, model, vals)
    @api.multi
  • existing_accounting(self, company_id)
    @api.model
    Returns True iff some accounting entries have already been made for the provided company (meaning hence that its chart of accounts cannot be changed anymore).
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    @api.multi
    This method generates accounts from account templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary containing the mapping between the account templates and generated accounts (will be populated) :param code_digits: number of digits to use for account code. :param company_id: company to generate accounts for. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method creates account reconcile models :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mapping between the account templates and the real accounts. :param company_id: company to create models for :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method generates Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: the company to generate fiscal position data for :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param acc_template_ref: Account templates reference. :param company_id: company to generate journals for. :returns: True
  • generate_properties(self, acc_template_ref, company)
    @api.multi
    This method used for creating properties. :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company to generate properties for. :returns: True
  • get_countries_posting_at_bank_rec(self)
    Returns the list of the country codes of the countries for which, by default, payments made on bank journals should be creating draft account.move objects, which get in turn posted when their payment gets reconciled with a bank statement line. This function is an extension hook for localization modules.
  • load_for_current_company(self, sale_tax_rate, purchase_tax_rate)
    Installs this chart of accounts on the current company, replacing the existing one if it had already one defined. If some accounting entries had already been made, this function fails instead, triggering a UserError. Also, note that this function can only be run by someone with administration rights.
  • open_select_template_wizard(self)
    @api.multi
  • try_loading_for_current_company(self)
    @api.one
    Installs this chart of accounts for the current company if not chart of accounts had been created for it yet.

New fields (1)
  • amount_currency Boolean
    help='Print Report with the currency column if the currency differs from the company currency.' args: 'With Currency'
Public methods (1)
  • pre_print_report(self, data)
    @api.multi

New fields (5)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)
    @api.multi

New fields (5)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help='Fiscal year last day.' readonly=False related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help='Fiscal year last month.' readonly=False related='company_id.fiscalyear_last_month' required=True selection=[(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' readonly=False related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • action_save_onboarding_fiscal_year(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (15)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invoicing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position'
  • note Text
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Integer
    default=0 string='Zip Range From'
  • zip_to Integer
    default=0 string='Zip Range To'
Public methods (4)
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
  • map_account(self, account)
    @api.model
  • map_accounts(self, accounts)
    @api.model
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes, product=None, partner=None)
    @api.model

New fields (3)
  • account_dest_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account on Product' args: 'account.account'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_id Many2one → account.tax
    string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (13)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invoicing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Integer
    default=0 string='Zip Range From'
  • zip_to Integer
    default=0 string='Zip Range To'
Public methods (0)

No public methods.

New fields (4)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • date_from Date
    help='Start Date, included in the fiscal year.' required=True string='Start Date'
  • date_to Date
    help='Ending Date, included in the fiscal year.' required=True string='End Date'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (4)
  • exchange_move_id Many2one → account.move
    args: 'account.move'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    @api.multi
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completely cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (4)
  • code_prefix Char
  • name Char
    required=True
  • parent_id Many2one → account.group
    index=True ondelete='cascade' args: 'account.group'
  • parent_path Char
    index=True
Public methods (1)
  • name_get(self)

New fields (3)
  • active Boolean
    default=True help='By unchecking the active field, you may hide an INCOTERM you will not use.' args: 'Active'
  • code Char
    help='Incoterm Standard Code' required=True size=3 args: 'Code'
  • name Char
    help='Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.' required=True translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (54)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='The partner account used for this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Account' args: 'account.account'
  • amount_by_group Binary
    compute='_amount_by_group' help='type: [(name, amount, base, formated amount, formated base)]' string='Tax amount by group'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_tax_signed Monetary
    compute='_compute_sign_taxes' currency_field='currency_id' readonly=True string='Tax in Invoice Currency'
  • amount_total Monetary
    compute='_compute_amount' readonly=True store=True string='Total'
  • amount_total_company_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit notes.' readonly=True store=True string='Total in Company Currency'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='currency_id' help='Total amount in the currency of the invoice, negative for credit notes.' readonly=True store=True string='Total in Invoice Currency'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' track_visibility='always'
  • amount_untaxed_invoice_signed Monetary
    compute='_compute_sign_taxes' currency_field='currency_id' readonly=True string='Untaxed Amount in Invoice Currency'
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount in Company Currency'
  • cash_rounding_id Many2one → account.cash.rounding
    help='Defines the smallest coinage of the currency that can be used to pay by cash.' readonly=True states={'draft': [('readonly', False)]} string='Cash Rounding Method' args: 'account.cash.rounding'
  • comment Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Additional Information'
  • commercial_partner_id Many2one → res.partner
    compute_sudo=True help='The commercial entity that will be used on Journal Entries for this invoice' readonly=True related='partner_id.commercial_partner_id' store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=_default_currency readonly=True required=True states={'draft': [('readonly', False)]} string='Currency' track_visibility='always' args: 'res.currency'
  • date Date
    copy=False help='Keep empty to use the invoice date.' readonly=True states={'draft': [('readonly', False)]} string='Accounting Date'
  • date_due Date
    copy=False help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The Payment terms may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the Payment terms and the due date empty, it means direct payment.' index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • date_invoice Date
    copy=False help='Keep empty to use the current date' index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_outstanding Boolean
    compute='_get_outstanding_info_JSON' groups='account.group_account_invoice'
  • incoterm_id Many2one → account.incoterms
    default=_get_default_incoterm help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Incoterm' args: 'account.incoterms'
  • invoice_icon Char
    compute='_get_vendor_display_info' store=False
  • invoice_line_ids One2many → account.invoice.line
    copy=True oldname='invoice_line' readonly=True states={'draft': [('readonly', False)]} string='Invoice Lines' args: 'account.invoice.line', 'invoice_id'
  • journal_id Many2one → account.journal
    default=_default_journal domain="[('type', 'in', {'out_invoice': ['sale'], 'out_refund': ['sale'], 'in_refund': ['purchase'], 'in_invoice': ['purchase']}.get(type, [])), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    copy=False help='Link to the automatically generated Journal Items.' index=True ondelete='restrict' readonly=True string='Journal Entry' args: 'account.move'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated.' readonly=False string='Journal Entry Name'
  • name Char
    copy=False help='The name that will be used on account move lines' index=True readonly=True states={'draft': [('readonly', False)]} string='Reference/Description'
  • number Char
    copy=False readonly=True related='move_id.name' store=True
  • origin Char
    help='Reference of the document that produced this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Source Document'
  • outstanding_credits_debits_widget Text
    compute='_get_outstanding_info_JSON' groups='account.group_account_invoice'
  • partner_bank_id Many2one → res.partner.bank
    help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' readonly=True states={'draft': [('readonly', False)]} string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True help='You can find a contact by its Name, TIN, Email or Internal Reference.' ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Partner' track_visibility='always' args: 'res.partner'
  • payment_ids Many2many → account.payment
    copy=False readonly=True string='Payments' args: 'account.payment', 'account_invoice_payment_rel', 'invoice_id', 'payment_id'
  • payment_move_line_ids Many2many → account.move.line
    compute='_compute_payments' store=True string='Payment Move Lines' args: 'account.move.line'
  • payment_term_id Many2one → account.payment.term
    help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment terms and the due date empty, it means direct payment. The payment terms may compute several due dates, for example 50% now, 50% in one month.' oldname='payment_term' readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • payments_widget Text
    compute='_get_payment_info_JSON' groups='account.group_account_invoice'
  • reconciled Boolean
    compute='_compute_residual' help='It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment.' readonly=True store=True string='Paid/Reconciled'
  • reference Char
    copy=False help='The payment communication that will be automatically populated once the invoice validation. You can also write a free communication.' readonly=True states={'draft': [('readonly', False)]} string='Payment Ref.'
  • refund_invoice_id Many2one → account.invoice
    string='Invoice for which this invoice is the credit note' args: 'account.invoice'
  • refund_invoice_ids One2many → account.invoice
    readonly=True string='Refund Invoices' args: 'account.invoice', 'refund_invoice_id'
  • residual Monetary
    compute='_compute_residual' help='Remaining amount due.' store=True string='Amount Due'
  • residual_company_signed Monetary
    compute='_compute_residual' currency_field='company_currency_id' help='Remaining amount due in the currency of the company.' store=True string='Amount Due in Company Currency'
  • residual_signed Monetary
    compute='_compute_residual' currency_field='currency_id' help='Remaining amount due in the currency of the invoice.' store=True string='Amount Due in Invoice Currency'
  • sent Boolean
    copy=False default=False help='It indicates that the invoice has been sent.' readonly=True
  • sequence_number_next Char
    compute='_get_sequence_number_next' inverse='_set_sequence_next' string='Next Number'
  • sequence_number_next_prefix Char
    compute='_get_sequence_prefix' string='Next Number Prefix'
  • source_email Char
    string='Source Email' track_visibility='onchange'
  • state Selection
    copy=False default='draft' help=" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n * The 'Open' status is used when user creates invoice, an invoice number is generated. It stays in the open status till the user pays the invoice.\n * The 'In Payment' status is used when payments have been registered for the entirety of the invoice in a journal configured to post entries at bank reconciliation only, and some of them haven't been reconciled with a bank statement line yet.\n * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n * The 'Cancelled' status is used when user cancel invoice." index=True readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Draft'), ('open', 'Open'), ('in_payment', 'In Payment'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • tax_line_ids One2many → account.invoice.tax
    copy=True oldname='tax_line' readonly=True states={'draft': [('readonly', False)]} string='Tax Lines' args: 'account.invoice.tax', 'invoice_id'
  • type Selection
    change_default=True default=<expr> index=True readonly=True states={'draft': [('readonly', False)]} track_visibility='always' args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • user_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)]} string='Salesperson' track_visibility='onchange' args: 'res.users'
  • vendor_bill_id Many2one → account.invoice
    help='Auto-complete from a past bill.' string='Vendor Bill' args: 'account.invoice'
  • vendor_display_name Char
    compute='_get_vendor_display_info' store=True
Public methods (36)
  • action_cancel(self)
    @api.multi
  • action_date_assign(self)
    @api.multi
  • action_invoice_cancel(self)
    @api.multi
  • action_invoice_draft(self)
    @api.multi
  • action_invoice_open(self)
    @api.multi
  • action_invoice_paid(self)
    @api.multi
  • action_invoice_re_open(self)
    @api.multi
  • action_invoice_sent(self)
    @api.multi
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_move_create(self)
    @api.multi
    Creates invoice related analytics and financial move lines
  • assign_outstanding_credit(self, credit_aml_id)
    @api.multi
  • complete_empty_list_help(self)
    @api.model
  • compute_invoice_totals(self, company_currency, invoice_move_lines)
    @api.multi
  • compute_taxes(self)
    @api.multi
    Function used in other module to compute the taxes on a fresh invoice created (onchanges did not applied)
  • create(self, vals)
    @api.model
  • default_get(self, default_fields)
    @api.model
    Compute default partner_bank_id field for 'out_invoice' type, using the default values computed for the other fields.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • get_delivery_partner_id(self)
    @api.multi
  • get_formview_id(self, access_uid=None)
    @api.multi
    Update form view id of action to open the invoice
  • get_taxes_values(self)
    @api.multi
  • group_lines(self, iml, line)
    Merge account move lines (and hence analytic lines) if invoice line hashcodes are equals
  • inv_line_characteristic_hashcode(self, invoice_line)
    Overridable hashcode generation for invoice lines. Lines having the same hashcode will be grouped together if the journal has the 'group line' option. Of course a module can add fields to invoice lines that would need to be tested too before merging lines or not.
  • invoice_line_move_line_get(self)
    @api.model
  • invoice_print(self)
    @api.multi
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • invoice_validate(self)
    @api.multi
  • line_get_convert(self, line, part)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Overrides mail_thread message_new(), called by the mailgateway through message_process, to complete values for vendor bills created by mails.
  • message_post(self, **kwargs)
    @api.multi@api.returns('mail.message', <expr>)
  • name_get(self)
    @api.multi
  • pay_and_reconcile(self, pay_journal, pay_amount=None, date=None, writeoff_acc=None)
    @api.multi
    Create and post an account.payment for the invoice self, which creates a journal entry that reconciles the invoice. :param pay_journal: journal in which the payment entry will be created :param pay_amount: amount of the payment to register, defaults to the residual of the invoice :param date: payment date, defaults to fields.Date.context_today(self) :param writeoff_acc: account in which to create a writeoff if pay_amount < self.residual, so that the invoice is fully paid
  • preview_invoice(self)
    @api.multi
  • refund(self, date_invoice=None, date=None, description=None, journal_id=None)
    @api.multi@api.returns('self')
  • register_payment(self, payment_line, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
    Reconcile payable/receivable lines from the invoice with payment_line
  • tax_line_move_line_get(self)
    @api.model
  • unlink(self)
    @api.multi
  • validate_partner_bank_id(self)
    @api.constrains('partner_id', 'partner_bank_id')

New fields (0)

No new fields.

Public methods (1)
  • invoice_confirm(self)
    @api.multi

New fields (2)
  • attachment_ids Many2many → ir.attachment
    string='Files' args: 'ir.attachment'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_get_default_journal_id domain="[('type', '=', 'purchase')]" help='Journal where to generate the bills' required=True string='Journal'
Public methods (1)
  • create_invoices(self)
    @api.multi
    Create the invoices from files. :return: A action redirecting to account.invoice tree/form view.

New fields (25)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    default=_default_account domain=[('deprecated', '=', False)] help='The income or expense account related to the selected product.' string='Account' args: 'account.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • company_currency_id Many2one → res.currency
    readonly=True related='invoice_id.company_currency_id' related_sudo=False args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True related='invoice_id.company_id' related_sudo=False store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=False related='invoice_id.currency_id' related_sudo=False store=True args: 'res.currency'
  • discount Float
    default=0.0 digits=dp.get_precision('Discount') string='Discount (%)'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section'), ('line_note', 'Note')]
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice Reference' args: 'account.invoice'
  • invoice_line_tax_ids Many2many → account.tax
    domain=[('type_tax_use', '!=', 'none'), '|', ('active', '=', False), ('active', '=', True)] oldname='invoice_line_tax_id' string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • invoice_type Selection
    readonly=True related='invoice_id.type'
  • is_rounding_line Boolean
    help='Is a rounding line in case of cash rounding.' string='Rounding Line'
  • name Text
    required=True string='Description'
  • origin Char
    help='Reference of the document that produced this invoice.' string='Source Document'
  • partner_id Many2one → res.partner
    readonly=True related='invoice_id.partner_id' related_sudo=False store=True string='Partner' args: 'res.partner'
  • price_subtotal Monetary
    compute='_compute_price' help='Total amount without taxes' readonly=True store=True string='Amount (without Taxes)'
  • price_subtotal_signed Monetary
    compute='_compute_price' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit note.' readonly=True store=True string='Amount Signed'
  • price_tax Monetary
    compute='_get_price_tax' store=False string='Tax Amount'
  • price_total Monetary
    compute='_compute_price' help='Total amount with taxes' readonly=True store=True string='Amount (with Taxes)'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True string='Unit Price'
  • product_id Many2one → product.product
    index=True ondelete='restrict' string='Product' args: 'product.product'
  • product_image Binary
    readonly=True related='product_id.image' store=False args: 'Product Image'
  • quantity Float
    default=1 digits=dp.get_precision('Product Unit of Measure') required=True string='Quantity'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the invoice.'
  • uom_id Many2one → uom.uom
    index=True oldname='uos_id' ondelete='set null' string='Unit of Measure' args: 'uom.uom'
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_invoice_line_account(self, type, product, fpos, company)
    @api.v8
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (5)
  • date Date
    string='Accounting Date'
  • date_invoice Date
    default=fields.Date.context_today required=True string='Credit Note Date'
  • description Char
    default=_get_reason required=True string='Reason'
  • filter_refund Selection
    default='refund' help='Choose how you want to credit this invoice. You cannot Modify and Cancel if the invoice is already reconciled' required=True string='Credit Method' args: [('refund', 'Create a draft credit note'), ('cancel', 'Cancel: create credit note and reconcile'), ('modify', 'Modify: create credit note, reconcile and create a new draft invoice')]
  • refund_only Boolean
    compute='_get_refund_only' string='Technical field to hide filter_refund in case invoice is partially paid'
Public methods (2)
  • compute_refund(self, mode='refund')
    @api.multi
  • invoice_refund(self)
    @api.multi

New fields (32)
  • account_analytic_id Many2one → account.analytic.account
    groups='analytic.group_analytic_accounting' string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Receivable/Payable Account' args: 'account.account'
  • account_line_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Revenue/Expense Account' args: 'account.account'
  • amount_total Float
    readonly=True string='Total'
  • categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string="Partner Company's Country" args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • currency_rate Float
    group_operator='avg' groups='base.group_multi_currency' readonly=True string='Currency Rate'
  • date Date
    readonly=True string='Invoice Date'
  • date_due Date
    readonly=True string='Due Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • invoice_id Many2one → account.invoice
    readonly=True args: 'account.invoice'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • nbr Integer
    readonly=True string='Line Count'
  • number Char
    readonly=True args: 'Invoice #'
  • partner_bank_id Many2one → res.partner.bank
    readonly=True string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_term_id Many2one → account.payment.term
    oldname='payment_term' readonly=True string='Payment Terms' args: 'account.payment.term'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_total Float
    readonly=True string='Untaxed Total'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_qty Float
    readonly=True string='Product Quantity'
  • residual Float
    readonly=True string='Due Amount'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('open', 'Open'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • uom_name Char
    readonly=True string='Reference Unit of Measure'
  • user_currency_price_average Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Average Price in Currency'
  • user_currency_price_total Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Without Tax in Currency'
  • user_currency_residual Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Residual'
  • user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
Public methods (1)
  • init(self)
    @api.model_cr

New fields (7)
  • composer_id Many2one → mail.compose.message
    ondelete='cascade' required=True string='Composer' args: 'mail.compose.message'
  • invoice_ids Many2many → account.invoice
    string='Invoices' args: 'account.invoice', 'account_invoice_account_invoice_send_rel'
  • invoice_without_email Text
    compute='_compute_invoice_without_email' string='invoice(s) that will not be sent'
  • is_email Boolean
    default=<expr> args: 'Email'
  • is_print Boolean
    default=<expr> args: 'Print'
  • printed Boolean
    default=False args: 'Is Printed'
  • template_id Many2one → mail.template
    domain="[('model', '=', 'account.invoice')]" index=True args: 'mail.template', 'Use template'
Public methods (4)
  • default_get(self, fields)
    @api.model
  • onchange_template_id(self)
    @api.onchange('template_id')
  • save_as_template(self)
    @api.multi
  • send_and_print_action(self)
    @api.multi

New fields (14)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Tax Account' args: 'account.account'
  • amount Monetary
    args: 'Tax Amount'
  • amount_rounding Monetary
    args: 'Amount Delta'
  • amount_total Monetary
    compute='_compute_amount_total' string='Amount Total'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • base Monetary
    compute='_compute_base_amount' store=True string='Base'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True related='invoice_id.currency_id' store=True args: 'res.currency'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice' args: 'account.invoice'
  • manual Boolean
    default=True
  • name Char
    required=True string='Tax Description'
  • sequence Integer
    help='Gives the sequence order when displaying a list of invoice tax.'
  • tax_id Many2one → account.tax
    ondelete='restrict' string='Tax' args: 'account.tax'
Public methods (0)

No public methods.

New fields (34)
  • account_control_ids Many2many → account.account
    domain=[('deprecated', '=', False)] string='Accounts Allowed' args: 'account.account', 'account_account_type_rel', 'journal_id', 'account_id'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • alias_domain Char
    compute='_compute_alias_domain' default=<expr> args: 'Alias domain'
  • alias_id Many2one → mail.alias
    copy=False string='Alias' args: 'mail.alias'
  • alias_name Char
    help='It creates draft vendor bill by sending an email.' readonly=False related='alias_id.alias_name' args: 'Alias Name for Vendor Bills'
  • at_least_one_inbound Boolean
    compute='_methods_compute' store=True
  • at_least_one_outbound Boolean
    compute='_methods_compute' store=True
  • bank_acc_number Char
    readonly=False related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    copy=False domain="[('partner_id','=', company_partner_id)]" ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    readonly=False related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' help='Defines how the bank statements will be registered' selection=_get_bank_statements_available_sources string='Bank Feeds'
  • belongs_to_company Boolean
    compute='_belong_to_company' search='_search_company_journals' args: "Belong to the user's current company"
  • code Char
    help='The journal entries of this journal will be named using this prefix.' required=True size=5 string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True required=True string='Company' args: 'res.company'
  • company_partner_id Many2one → res.partner
    readonly=True related='company_id.partner_id' store=False string='Account Holder' args: 'res.partner'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' oldname='currency' string='Currency' args: 'res.currency'
  • default_credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='It acts as a default account for credit amount' string='Default Credit Account' args: 'account.account'
  • default_debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='It acts as a default account for debit amount' string='Default Debit Account' args: 'account.account'
  • group_invoice_lines Boolean
    help='If this box is checked, the system will try to group the accounting lines when generating them from invoices.' string='Group Invoice Lines'
  • inbound_payment_method_ids Many2many → account.payment.method
    default=<expr> domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings.' string='For Incoming Payments' args: 'account.payment.method', 'account_journal_inbound_payment_method_rel', 'journal_id', 'inbound_payment_method'
  • loss_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Journal Name'
  • outbound_payment_method_ids Many2many → account.payment.method
    default=<expr> domain=[('payment_type', '=', 'outbound')] help='Manual:Pay bill by cash or any other method outside of Odoo.\nCheck:Pay bill by check and print it from Odoo.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. Enable this option from the settings.' string='For Outgoing Payments' args: 'account.payment.method', 'account_journal_outbound_payment_method_rel', 'journal_id', 'outbound_payment_method'
  • post_at_bank_rec Boolean
    help='Whether or not the payments made in this journal should be generated in draft state, so that the related journal entries are only posted when performing bank reconciliation.' string='Post At Bank Reconciliation'
  • profit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account' args: 'account.account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • refund_sequence_id Many2one → ir.sequence
    copy=False help='This field contains the information related to the numbering of the credit note entries of this journal.' string='Credit Note Entry Sequence' args: 'ir.sequence'
  • refund_sequence_number_next Integer
    compute='_compute_refund_seq_number_next' help='The next sequence number will be used for the next credit note.' inverse='_inverse_refund_seq_number_next' string='Credit Notes: Next Number'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_id Many2one → ir.sequence
    copy=False help='This field contains the information related to the numbering of the journal entries of this journal.' required=True string='Entry Sequence' args: 'ir.sequence'
  • sequence_number_next Integer
    compute='_compute_seq_number_next' help='The next sequence number will be used for the next invoice.' inverse='_inverse_seq_number_next' string='Next Number'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." required=True args: [('sale', 'Sale'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
  • type_control_ids Many2many → account.account.type
    string='Account Types Allowed' args: 'account.account.type', 'account_journal_type_rel', 'journal_id', 'type_id'
  • update_posted Boolean
    help='Check this box if you want to allow the cancellation the entries related to this journal or of the invoice related to this journal' string='Allow Cancelling Entries'
Public methods (10)
  • action_configure_bank_journal(self)
    This function is called by the "configure" button of bank journals, visible on dashboard if no bank statement source has been defined yet
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • get_next_bank_cash_default_code(self, journal_type, company_id)
    @api.model
  • name_get(self)
    @api.multi
  • onchange_credit_account_id(self)
    @api.onchange('default_credit_account_id')
  • onchange_debit_account_id(self)
    @api.onchange('default_debit_account_id')
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank and set it as value of the field bank_account_id
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (4)
  • color Integer
    default=0 args: 'Color Index'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (18)
  • action_create_new(self)
    @api.multi
  • action_open_reconcile(self)
    @api.multi
  • create_bank_statement(self)
    @api.multi
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
    @api.multi
  • create_customer_payment(self)
    @api.multi
    return action to create a customer payment
  • create_internal_transfer(self)
    @api.multi
    return action to create a internal transfer
  • create_supplier_payment(self)
    @api.multi
    return action to create a supplier payment
  • get_bar_graph_datas(self)
    @api.multi
  • get_journal_dashboard_datas(self)
    @api.multi
  • get_line_graph_datas(self)
    @api.multi
    Computes the data used to display the graph for bank and cash journals in the accounting dashboard
  • mark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as done in the setup bar and in the company.
  • open_action(self)
    @api.multi
    return action based on type for related journals
  • open_action_with_context(self)
    @api.multi
  • open_collect_money(self)
    @api.multi
  • open_payments_action(self, payment_type, mode='tree')
    @api.multi
  • open_spend_money(self)
    @api.multi
  • open_transfer_money(self)
    @api.multi
  • unmark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as not done in the setup bar and in the company.

New fields (18)
  • amount Monetary
    compute='_amount_compute' store=True
  • auto_reverse Boolean
    default=False help='If this checkbox is ticked, this entry will be automatically reversed at the reversal date you defined.' string='Reverse Automatically'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' store=True string='Currency' args: 'res.currency'
  • date Date
    default=fields.Date.context_today index=True required=True states={'posted': [('readonly', True)]}
  • dummy_account_id Many2one → account.account
    readonly=True related='line_ids.account_id' store=False string='Account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal required=True states={'posted': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True states={'posted': [('readonly', True)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • matched_percentage Float
    compute='_compute_matched_percentage' digits=0 help='Technical field used in cash basis method' readonly=True store=True args: 'Percentage Matched'
  • name Char
    copy=False default='/' required=True string='Number'
  • narration Text
    string='Internal Note'
  • partner_id Many2one → res.partner
    compute='_compute_partner_id' readonly=True store=True string='Partner' args: 'res.partner'
  • ref Char
    copy=False string='Reference'
  • reverse_date Date
    help='Date of the reverse accounting entry.' string='Reversal Date'
  • reverse_entry_id Many2one → account.move
    String='Reverse entry' copy=False readonly=True store=True args: 'account.move'
  • state Selection
    copy=False default='draft' help="All manually created new journal entries are usually in the status 'Unposted', but you can set the option to skip that status on the related journal. In that case, they will behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in 'Posted' status." readonly=True required=True string='Status' args: [('draft', 'Unposted'), ('posted', 'Posted')]
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    help='Technical field used to keep track of the tax cash basis reconciliation. This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.' string='Tax Cash Basis Entry of' args: 'account.partial.reconcile'
  • tax_type_domain Char
    help='Technical field used to have a dynamic taxes domain on the form view.' store=False
Public methods (14)
  • action_duplicate(self)
    @api.multi
  • action_post(self)
    @api.multi
  • action_view_reverse_entry(self)
    @api.multi
  • assert_balanced(self)
    @api.multi
  • button_cancel(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'state')
  • open_reconcile_view(self)
    @api.multi
  • post(self, invoice=False)
    @api.multi
  • reverse_moves(self, date=None, journal_id=None, auto=False)
    @api.multi
  • unlink(self)
    @api.multi
  • update_lines_tax_exigibility(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (45)
  • account_id Many2one → account.account
    auto_join=True default=<expr> domain=[('deprecated', '=', False)] index=True ondelete='restrict' required=True string='Account' args: 'account.account'
  • amount_currency Monetary
    default=0.0 help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • amount_residual Monetary
    compute='_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    index=True string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    oldname='analytic_lines' string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • balance Monetary
    compute='_store_balance' currency_field='company_currency_id' help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True
  • balance_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' help='Technical field holding the debit_cash_basis - credit_cash_basis in order to open meaningful graph views from reports' store=True
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • counterpart Char
    compute='_get_counterpart' help='Compute the counter part accounts of this journal item for this journal entry. This can be needed in reports.' args: 'Counterpart'
  • credit Monetary
    currency_field='company_currency_id' default=0.0
  • credit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' store=True
  • currency_id Many2one → res.currency
    default=_get_currency help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    copy=False index=True readonly=False related='move_id.date' store=True string='Date'
  • date_maturity Date
    copy=False help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True required=True string='Due date'
  • debit Monetary
    currency_field='company_currency_id' default=0.0
  • debit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' store=True
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Matching Number' args: 'account.full.reconcile'
  • invoice_id Many2one → account.invoice
    copy=False oldname='invoice' args: 'account.invoice'
  • journal_id Many2one → account.journal
    copy=False index=True readonly=False related='move_id.journal_id' store=True string='Journal' args: 'account.journal'
  • matched_credit_ids One2many → account.partial.reconcile
    String='Matched Credits' help='Credit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    String='Matched Debits' help='Debit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'credit_move_id'
  • move_id Many2one → account.move
    auto_join=True help='The move of this entry line.' index=True ondelete='cascade' required=True string='Journal Entry' args: 'account.move'
  • name Char
    string='Label'
  • narration Text
    readonly=False related='move_id.narration' string='Narration'
  • parent_state Char
    compute='_compute_parent_state' help='State of the parent account.move'
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    copy=False help='Payment that created this entry' string='Originator Payment' args: 'account.payment'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    string='Unit of Measure' args: 'uom.uom'
  • quantity Float
    digits=dp.get_precision('Product Unit of Measure') help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.'
  • recompute_tax_line Boolean
    help='Technical field used to know if the tax_ids field has been modified in the UI.' store=False
  • reconciled Boolean
    compute='_amount_residual' store=True
  • ref Char
    copy=False index=True readonly=False related='move_id.ref' store=True string='Reference'
  • statement_id Many2one → account.bank.statement
    copy=False help='The bank statement used for bank reconciliation' index=True related='statement_line_id.statement_id' store=True string='Statement' args: 'account.bank.statement'
  • statement_line_id Many2one → account.bank.statement.line
    copy=False index=True readonly=True string='Bank statement line reconciled with this entry' args: 'account.bank.statement.line'
  • tax_base_amount Monetary
    compute='_compute_tax_base_amount' currency_field='company_currency_id' store=True string='Base Amount'
  • tax_exigible Boolean
    default=True help='Technical field used to mark a tax line as exigible in the vat report or not (only exigible journal items are displayed). By default all new journal items are directly exigible, but with the feature cash_basis on taxes, some will become exigible only when the payment is recorded.' string='Appears in VAT report'
  • tax_ids Many2many → account.tax
    domain=['|', ('active', '=', False), ('active', '=', True)] help='Taxes that apply on the base amount' string='Taxes Applied' args: 'account.tax'
  • tax_line_grouping_key Char
    help='Technical field used to store the old values of fields used to compute tax lines (in account.move form view) between the moment the user changed it and the moment the ORM reflects that change in its one2many' store=False string='Old Taxes'
  • tax_line_id Many2one → account.tax
    help='Indicates that this journal item is a tax line' ondelete='restrict' string='Originator tax' args: 'account.tax'
  • user_type_id Many2one → account.account.type
    index=True oldname='user_type' readonly=True related='account_id.user_type_id' store=True args: 'account.account.type'
Public methods (13)
  • auto_reconcile_lines(self)
    @api.multi
  • check_full_reconcile(self)
    @api.multi
    This method check if a move is totally reconciled and if we need to create exchange rate entries for the move. In case exchange rate entries needs to be created, one will be created per currency present. In case of full reconciliation, all moves belonging to the reconciliation will belong to the same account_full_reconcile object.
  • create(self, vals_list)
    @api.model_create_multi
    :context's key `check_move_validity`: check data consistency after move line creation. Eg. set to false to disable verification that the move debit-credit == 0 while creating the move lines composing the move.
  • create_analytic_lines(self)
    @api.multi
    Create analytic items upon validation of an account.move.line having an analytic account or an analytic distribution.
  • default_get(self, fields)
    @api.model
  • init(self)
    @api.model_cr
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • name_get(self)
    @api.multi@api.depends('ref', 'move_id')
  • onchange_tax_ids_create_aml(self)
    @api.onchange('debit', 'credit', 'tax_ids', 'analytic_account_id', 'analytic_tag_ids')
  • open_reconcile_view(self)
    @api.multi
  • reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
  • remove_move_reconcile(self)
    @api.multi
    Undo a reconciliation
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • date Date
    default=fields.Date.context_today required=True string='Reversal date'
  • journal_id Many2one → account.journal
    help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
Public methods (1)
  • reverse_moves(self)
    @api.multi

New fields (9)
  • amount Monetary
    currency_field='company_currency_id' help='Amount concerned by this matching. Assumed to be always positive'
  • amount_currency Monetary
    string='Amount in Currency'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=False related='debit_move_id.company_id' store=True string='Company' args: 'res.company'
  • credit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • debit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Full Reconcile' args: 'account.full.reconcile'
  • max_date Date
    compute='_compute_max_date' copy=False help='Technical field used to determine at which date this reconciliation needs to be shown on the aged receivable/payable reports.' readonly=True store=True string='Max Date of Matched Lines'
Public methods (3)
  • create_exchange_rate_entry(self, aml_to_fix, move)
    @api.model
    Automatically create a journal items to book the exchange rate differences that can occur in multi-currencies environment. That new journal item will be made into the given `move` in the company `currency_exchange_journal_id`, and one of its journal items is matched with the other lines to balance the full reconciliation. :param aml_to_fix: recordset of account.move.line (possible several but sharing the same currency) :param move: account.move :return: tuple. [0]: account.move.line created to balance the `aml_to_fix` [1]: recordset of account.partial.reconcile created between the tuple first element and the `aml_to_fix`
  • create_tax_cash_basis_entry(self, percentage_before_rec)
  • unlink(self)
    @api.multi
    When removing a partial reconciliation, also unlink its full reconciliation if it exists

New fields (13)
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' string='Company' args: 'res.company'
  • destination_account_id Many2one → account.account
    compute='_compute_destination_account_id' readonly=True args: 'account.account'
  • destination_journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] string='Transfer To' args: 'account.journal'
  • has_invoices Boolean
    compute='_compute_reconciled_invoice_ids' help='Technical field used for usability purposes'
  • invoice_ids Many2many → account.invoice
    copy=False help='Technical field containing the invoices for which the payment has been generated.\n This does not especially correspond to the invoices reconciled with the payment,\n as it can have been generated first, and reconciled later' readonly=True string='Invoices' args: 'account.invoice', 'account_invoice_payment_rel', 'payment_id', 'invoice_id'
  • move_line_ids One2many → account.move.line
    copy=False ondelete='restrict' readonly=True args: 'account.move.line', 'payment_id'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • move_reconciled Boolean
    compute='_get_move_reconciled' readonly=True
  • name Char
    copy=False readonly=True
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' readonly=True
  • payment_type Selection
    selection_add=[('transfer', 'Internal Transfer')]
  • reconciled_invoice_ids Many2many → account.invoice
    compute='_compute_reconciled_invoice_ids' help="Invoices whose journal items have been reconciled with this payment's." string='Reconciled Invoices' args: 'account.invoice'
  • state Selection
    copy=False default='draft' readonly=True string='Status' args: [('draft', 'Draft'), ('posted', 'Posted'), ('sent', 'Sent'), ('reconciled', 'Reconciled'), ('cancelled', 'Cancelled')]
Public methods (12)
  • action_draft(self)
    @api.multi
  • action_validate_invoice_payment(self)
    Posts a payment used to pay an invoice. This function only posts the payment by default but can be overridden to apply specific post or pre-processing. It is called by the "validate" button of the popup window triggered on invoice form by the "Register Payment" button.
  • button_dummy(self)
    @api.multi
  • button_invoices(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • cancel(self)
    @api.multi
  • create(self, vals)
    @api.model
  • default_get(self, fields)
    @api.model
  • open_payment_matching_screen(self)
  • post(self)
    @api.multi
    Create the journal items for the payment and update the payment's state to 'posted'. A journal entry is created containing an item in the source liquidity account (selected journal's default_debit or default_credit) and another in the destination reconcilable account (see _compute_destination_account_id). If invoice_ids is not empty, there will be one reconcilable move line per invoice to reconcile with. If the payment is a transfer, a second journal entry is created in the destination journal to receive money from the transfer account.
  • unlink(self)
    @api.multi
  • unreconcile(self)
    @api.multi
    Set back the payments in 'posted' or 'sent' state, without deleting the journal entries. Called when cancelling a bank statement line linked to a pre-registered payment.

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Text
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • compute(self, value, date_ref=False)
    @api.one
  • unlink(self)
    @api.multi

New fields (7)
  • day_of_the_month Integer
    help='Day of the month on which the invoice must come to its term. If zero or negative, this value will be ignored, and no specific day will be set. If greater than the last day of a month, this number will instead select the last day of this month.' string='Day of the month'
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'day(s) after the invoice date'), ('after_invoice_month', 'day(s) after the end of the invoice month'), ('day_following_month', 'of the following month'), ('day_current_month', 'of the current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment terms lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment terms line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits=dp.get_precision('Payment Terms') help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (2)
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • sort_selection Selection
    default='move_name' required=True args: [('date', 'Date'), ('move_name', 'Journal Entry Number')], 'Entries Sorted by'
Public methods (0)

No public methods.

New fields (41)
  • account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='cascade' string='Account' args: 'account.account'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Write-off Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance')]
  • analytic_account_id Many2one → account.analytic.account
    domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='set null' string='Analytic Account' args: 'account.analytic.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" string='Analytic Tags' args: 'account.analytic.tag'
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • force_second_tax_included Boolean
    help='Force the second tax to be managed as a price included tax.' string='Second Tax Included in Price'
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • has_second_line Boolean
    default=False string='Add a second line'
  • is_second_tax_price_included Boolean
    help='Technical field used inside the view to make the force_second_tax_included field readonly if the tax is already price included.' related='second_tax_id.price_include' string='Is Second Tax Included in Price'
  • is_tax_price_included Boolean
    help='Technical field used inside the view to make the force_tax_included field readonly if the tax is already price included.' related='tax_id.price_include' string='Is Tax Included in Price'
  • journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id)]" help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id)]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Nature'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency Matching'
  • match_total_amount Boolean
    default=True help='The sum of total residual amount propositions matches the statement line amount.' string='Amount Matching'
  • match_total_amount_param Float
    default=100 help='The sum of total residual amount propositions matches the statement line amount under this percentage.' string='Amount Matching %'
  • name Char
    required=True string='Name'
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', _('Manually create a write-off on clicked button.')), ('writeoff_suggestion', _('Suggest counterpart values.')), ('invoice_matching', _('Match existing invoices/bills.'))] string='Type'
  • second_account_id Many2one → account.account
    domain="[('deprecated', '=', False), ('company_id', '=', company_id)]" ondelete='cascade' string='Second Account' args: 'account.account'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Write-off Amount'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of amount')]
  • second_analytic_account_id Many2one → account.analytic.account
    domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='set null' string='Second Analytic Account' args: 'account.analytic.account'
  • second_analytic_tag_ids Many2many → account.analytic.tag
    domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" string='Second Analytic Tags' args: 'account.analytic.tag'
  • second_journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id)]" help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Second Journal' args: 'account.journal'
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_amount_type Selection
    help='Technical field used inside the view to make the force_second_tax_included field invisible if the tax is a group.' related='second_tax_id.amount_type' string='Second Tax Amount Type'
  • second_tax_id Many2one → account.tax
    domain="[('type_tax_use', '=', 'purchase'), ('company_id', '=', company_id)]" ondelete='restrict' string='Second Tax' args: 'account.tax'
  • sequence Integer
    default=10 required=True
  • tax_amount_type Selection
    help='Technical field used inside the view to make the force_tax_included field invisible if the tax is a group.' related='tax_id.amount_type' string='Tax Amount Type'
  • tax_id Many2one → account.tax
    domain="[('company_id', '=', company_id)]" ondelete='restrict' string='Tax' args: 'account.tax'
Public methods (1)
  • onchange_name(self)
    @api.onchange('name')

New fields (31)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Write-off Amount'
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance')]
  • auto_reconcile Boolean
    help='Validate the statement line automatically (reconciliation based on your rule).' string='Auto-validate'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • force_second_tax_included Boolean
    help='Force the second tax to be managed as a price included tax.' string='Second Tax Included in Price'
  • force_tax_included Boolean
    help='Force the tax to be managed as a price included tax.' string='Tax Included in Price'
  • has_second_line Boolean
    default=False string='Add a second line'
  • label Char
    string='Journal Item Label'
  • match_amount Selection
    help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).' selection=[('lower', 'Is Lower Than'), ('greater', 'Is Greater Than'), ('between', 'Is Between')] string='Amount'
  • match_amount_max Float
    string='Amount Max Parameter'
  • match_amount_min Float
    string='Amount Min Parameter'
  • match_journal_ids Many2many → account.journal
    domain="[('type', 'in', ('bank', 'cash'))]" help='The reconciliation model will only be available from the selected journals.' string='Journals' args: 'account.journal'
  • match_label Selection
    help='The reconciliation model will only be applied when the label:\n * Contains: The proposition label must contains this string (case insensitive).\n * Not Contains: Negation of "Contains".\n * Match Regex: Define your own regular expression.' selection=[('contains', 'Contains'), ('not_contains', 'Not Contains'), ('match_regex', 'Match Regex')] string='Label'
  • match_label_param Char
    string='Label Parameter'
  • match_nature Selection
    default='both' help='The reconciliation model will only be applied to the selected transaction type:\n * Amount Received: Only applied when receiving an amount.\n * Amount Paid: Only applied when paying an amount.\n * Amount Paid/Received: Applied in both cases.' required=True selection=[('amount_received', 'Amount Received'), ('amount_paid', 'Amount Paid'), ('both', 'Amount Paid/Received')] string='Amount Nature'
  • match_partner Boolean
    help='The reconciliation model will only be applied when a customer/vendor is set.' string='Partner Is Set'
  • match_partner_category_ids Many2many → res.partner.category
    help='The reconciliation model will only be applied to the selected customer/vendor categories.' string='Restrict Partner Categories to' args: 'res.partner.category'
  • match_partner_ids Many2many → res.partner
    help='The reconciliation model will only be applied to the selected customers/vendors.' string='Restrict Partners to' args: 'res.partner'
  • match_same_currency Boolean
    default=True help='Restrict to propositions having the same currency as the statement line.' string='Same Currency Matching'
  • match_total_amount Boolean
    default=True help='The sum of total residual amount propositions matches the statement line amount.' string='Amount Matching'
  • match_total_amount_param Float
    default=100 help='The sum of total residual amount propositions matches the statement line amount under this percentage.' string='Amount Matching %'
  • name Char
    required=True string='Button Label'
  • rule_type Selection
    default='writeoff_button' required=True selection=[('writeoff_button', _('Manually create a write-off on clicked button.')), ('writeoff_suggestion', _('Suggest a write-off.')), ('invoice_matching', _('Match existing invoices/bills.'))] string='Type'
  • second_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Second Account' args: 'account.account.template'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Write-off Amount'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of amount')]
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_id Many2one → account.tax.template
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Second Tax' args: 'account.tax.template'
  • sequence Integer
    default=10 required=True
  • tax_id Many2one → account.tax.template
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Tax' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (8)
  • get_all_data_for_manual_reconciliation(self, partner_ids, account_ids)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts. If an argument is None, fetch all related reconciliations. Use [] to fetch nothing.
  • get_bank_statement_data(self, bank_statement_ids)
    @api.model
    Get statement lines of the specified statements or all unreconciled statement lines and try to automatically reconcile them / find them a partner. Return ids of statement lines left to reconcile and other data for the reconciliation widget. :param st_line_id: ids of the bank statement
  • get_bank_statement_line_data(self, st_line_ids, excluded_ids=None)
    @api.model
    Returns the data required to display a reconciliation widget, for each statement line in self :param st_line_id: ids of the statement lines :param excluded_ids: optional move lines ids excluded from the result
  • get_data_for_manual_reconciliation(self, res_type, res_ids=None, account_type=None)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts (list of dicts). If no res_ids is passed, returns data for all partners/accounts that can be reconciled. :param res_type: either 'partner' or 'account' :param res_ids: ids of the partners/accounts to reconcile, use None to fetch data indiscriminately of the id, use [] to prevent from fetching any data at all. :param account_type: if a partner is both customer and vendor, you can use 'payable' to reconcile the vendor-related journal entries and 'receivable' for the customer-related entries.
  • get_move_lines_for_bank_statement_line(self, st_line_id, partner_id=None, excluded_ids=None, search_str=False, offset=0, limit=None)
    @api.model
    Returns move lines for the bank statement reconciliation widget, formatted as a list of dicts :param st_line_id: ids of the statement lines :param partner_id: optional partner id to select only the moves line corresponding to the partner :param excluded_ids: optional move lines ids excluded from the result :param search_str: optional search (can be the amout, display_name, partner name, move line name) :param offset: offset of the search result (to display pager) :param limit: number of the result to search
  • get_move_lines_for_manual_reconciliation(self, account_id, partner_id=False, excluded_ids=None, search_str=False, offset=0, limit=None, target_currency_id=False)
    @api.model
    Returns unreconciled move lines for an account or a partner+account, formatted for the manual reconciliation widget
  • process_bank_statement_line(self, st_line_ids, data)
    @api.model
    Handles data sent from the bank statement reconciliation widget (and can otherwise serve as an old-API bridge) :param st_line_ids :param list of dicts data: must contains the keys 'counterpart_aml_dicts', 'payment_aml_ids' and 'new_aml_dicts', whose value is the same as described in process_reconciliation except that ids are used instead of recordsets.
  • process_move_lines(self, data)
    @api.model
    Used to validate a batch of reconciliations in a single call :param data: list of dicts containing: - 'type': either 'partner' or 'account' - 'id': id of the affected res.partner or account.account - 'mv_line_ids': ids of existing account.move.line to reconcile - 'new_mv_line_dicts': list of dicts containing values suitable for account_move_line.create()

New fields (2)
  • group_invoices Boolean
    help='If enabled, groups invoices by commercial partner, invoice account,\n type and recipient bank account in the generated payments. If disabled,\n a distinct payment will be generated for each invoice.' string='Group Invoices'
  • show_communication_field Boolean
    compute='_compute_show_communication_field'
Public methods (3)
  • create_payments(self)
    @api.multi
    Create payments according to the invoices. Having invoices with different commercial_partner_id or different type (Vendor bills with customer invoices) leads to multiple payments. In case of all the invoices are related to the same commercial_partner_id and have the same type, only one payment will be created. :return: The ir.actions.act_window to show created payments.
  • default_get(self, fields)
    @api.model
  • get_payments_vals(self)
    @api.multi
    Compute the values for payments. :return: a list of payment values (dictionary).

New fields (6)
  • create_or_link_option Selection
    default='new' selection=[('new', 'Create new journal'), ('link', 'Link to an existing journal')]
  • linked_journal_id Many2one → account.journal
    comodel_name='account.journal' compute='compute_linked_journal_id' inverse='set_linked_journal_id' string='Journal'
  • new_journal_code Char
    default=<expr> required=True string='Code'
  • new_journal_name Char
    compute='compute_new_journal_related_data' help='Will be used to name the Journal related to this bank account' inverse='set_linked_journal_id' required=True
  • related_acc_type Selection
    compute='_compute_related_acc_type' selection=<expr> string='Account Type'
  • res_partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' ondelete='cascade' required=True
Public methods (5)
  • compute_linked_journal_id(self)
    @api.depends('journal_id')
  • compute_new_journal_related_data(self)
    @api.depends('linked_journal_id')
  • create(self, vals)
    @api.model
    This wizard is only used to setup an account for the current active company, so we always inject the corresponding partner when creating the model.
  • set_linked_journal_id(self)
    Called when saving the wizard.
  • validate(self)
    Called by the validation button of this wizard. Serves as an extension hook in account_bank_statement_import.

New fields (20)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account.' oldname='account_collected_id' ondelete='restrict' string='Tax Account' args: 'account.account'
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' oldname='type' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account used as counterpart for the journal entry, for taxes eligible based on payments.' oldname='cash_basis_account' string='Tax Received Account' args: 'account.account'
  • cash_basis_base_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account' args: 'account.account'
  • children_tax_ids Many2many → account.tax
    string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • description Char
    string='Label on Invoices'
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Base of Subsequent Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account that will be set on invoice tax lines for credit notes. Leave empty to use the expense account.' oldname='account_paid_id' ondelete='restrict' string='Tax Account on Credit Notes' args: 'account.account'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_tax_account_tag'
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' oldname='use_cash_basis' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    default=_default_tax_group required=True string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Scope' args: [('sale', 'Sales'), ('purchase', 'Purchases'), ('none', 'None'), ('adjustment', 'Adjustment')]
Public methods (9)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None)
    @api.multi
    Returns all information required to apply taxes (in self + their children in case of a tax group). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • get_grouping_key(self, invoice_tax_val)
    Returns a string that will be used to group account.invoice.tax sharing the same properties
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None)
    @api.multi
    Just converts parameters in browse records and calls for compute_all, because js widgets can't serialize browse records
  • name_get(self)
  • onchange_account_id(self)
    @api.onchange('account_id')
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')

New fields (2)
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (19)
  • account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account.' oldname='account_collected_id' ondelete='restrict' string='Tax Account' args: 'account.account.template'
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • cash_basis_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] help='Account used as counterpart for the journal entry, for taxes eligible based on payments.' oldname='cash_basis_account' string='Tax Received Account' args: 'account.account.template'
  • cash_basis_base_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] help='Account that will be set on lines created in cash basis journal entry and used to keep track of the tax base amount.' string='Base Tax Received Account' args: 'account.account.template'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Subsequent Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account.' oldname='account_paid_id' ondelete='restrict' string='Tax Account on Refunds' args: 'account.account.template'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag'
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' oldname='use_cash_basis' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment." required=True string='Tax Scope' args: [('sale', 'Sales'), ('purchase', 'Purchases'), ('none', 'None'), ('adjustment', 'Adjustment')]
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'description')

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)
    @api.multi

New fields (2)
  • kpi_account_total_revenue Boolean
    args: 'Revenue'
  • kpi_account_total_revenue_value Monetary
    compute='_compute_kpi_account_total_revenue_value'
Public methods (1)
  • compute_kpis_actions(self, company, user)

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' oldname='property_account_expense_categ' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used when validating a customer invoice.' oldname='property_account_income_categ' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.' oldname='property_account_expense' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='Keep this field empty to use the default value from the product category.' oldname='property_account_income' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'purchase')] help='Default taxes used when buying the product.' string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • taxes_id Many2many → account.tax
    default=<expr> domain=[('type_tax_use', '=', 'sale')] help='Default taxes used when selling the product.' string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (1)
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • lines(self, target_move, journal_ids, sort_selection, data)

New fields (41)
  • account_bank_reconciliation_start Date
    help="The bank reconciliation widget won't ask to reconcile payments older than this date.\n This is useful if you install accounting after having used invoicing for some time and\n don't want to reconcile all the past payments with bank statements." string='Bank Reconciliation Threshold'
  • account_dashboard_onboarding_state Selection
    default='not_done' string='State of the account dashboard onboarding panel' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
  • account_invoice_onboarding_state Selection
    default='not_done' string='State of the account invoice onboarding panel' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
  • account_onboarding_invoice_layout_state Selection
    default='not_done' string='State of the onboarding invoice layout step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_onboarding_sale_tax_state Selection
    default='not_done' string='State of the onboarding sale tax step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_onboarding_sample_invoice_state Selection
    default='not_done' string='State of the onboarding sample invoice step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_opening_date Date
    help="Date at which the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.date' string='Opening Date'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." readonly=False related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_purchase_tax_id Many2one → account.tax
    string='Default Purchase Tax' args: 'account.tax'
  • account_sale_tax_id Many2one → account.tax
    string='Default Sale Tax' args: 'account.tax'
  • account_setup_bank_data_state Selection
    default='not_done' string='State of the onboarding bank data step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_setup_coa_state Selection
    default='not_done' string='State of the onboarding charts of account step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • account_setup_fy_data_state Selection
    default='not_done' string='State of the onboarding fiscal year step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" readonly=False related='currency_exchange_journal_id.default_debit_account_id' string='Loss Exchange Rate Account' args: 'account.account'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default=12 required=True args: [(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" readonly=False related='currency_exchange_journal_id.default_credit_account_id' string='Gain Exchange Rate Account' args: 'account.account'
  • incoterm_id Many2one → account.incoterms
    help='International Commercial Terms are a series of predefined commercial terms used in international transactions.' string='Default incoterm' args: 'account.incoterms'
  • invoice_is_email Boolean
    default=True args: 'Email by default'
  • invoice_is_print Boolean
    default=True args: 'Print by default'
  • invoice_reference_type Selection
    default='invoice_number' help='You can set here the default communication that will appear on customer invoices, once validated, to help the customer to refer to that particular invoice when making the payment.' selection='_get_invoice_reference_types' string='Default Communication Type'
  • overdue_msg Text
    default=<expr> string='Overdue Payments Message' translate=True
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • qr_code Boolean
    string='Display SEPA QR code'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    string='Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • transfer_account_code_prefix Char
    string='Prefix of the transfer accounts'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (22)
  • action_close_account_dashboard_onboarding(self)
    @api.model
    Mark the dashboard onboarding panel as closed.
  • action_close_account_invoice_onboarding(self)
    @api.model
    Mark the invoice onboarding panel as closed.
  • action_open_account_onboarding_invoice_layout(self)
    @api.model
    Onboarding step for the invoice layout.
  • action_open_account_onboarding_sale_tax(self)
    @api.model
    Onboarding step for the invoice layout.
  • action_open_account_onboarding_sample_invoice(self)
    @api.model
    Onboarding step for sending a sample invoice. Open a window to compose an email, with the edi_invoice_template message loaded by default.
  • action_save_onboarding_invoice_layout(self)
    @api.multi
    Set the onboarding step as done
  • action_save_onboarding_sale_tax(self)
    @api.multi
    Set the onboarding step as done
  • compute_fiscalyear_dates(self, current_date)
    @api.multi
    Computes the start and end dates of the fiscal year where the given 'date' belongs to. :param current_date: A datetime.date/datetime.datetime object. :return: A dictionary containing: * date_from * date_to * [Optionally] record: The fiscal year record.
  • create_op_move_if_non_existant(self)
    @api.model
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_account_invoice_onboarding_steps_states_names(self)
    Necessary to add/edit steps from other modules (payment acquirer in this case).
  • get_and_update_account_dashboard_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_and_update_account_invoice_onboarding_state(self)
    This method is called on the controller rendering method and ensures that the animations are displayed only one time.
  • get_chart_of_accounts_or_fail(self)
  • get_new_account_code(self, current_code, old_prefix, new_prefix)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_prefix_change(self, old_code, new_code)
  • setting_chart_of_accounts_action(self)
    @api.model
    Called by the 'Chart of Accounts' button of the setup bar.
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar.
  • setting_init_fiscal_year_action(self)
    @api.model
    Called by the 'Fiscal Year Opening' button of the setup bar.
  • write(self, values)
    @api.multi

New fields (47)
  • account_bank_reconciliation_start Date
    help="The bank reconciliation widget won't ask to reconcile payments older than this date.\n This is useful if you install accounting after having used invoicing for some time and\n don't want to reconcile all the past payments with bank statements." readonly=False related='company_id.account_bank_reconciliation_start' string='Bank Reconciliation Threshold'
  • chart_template_id Many2one → account.chart.template
    domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' readonly=False related='company_id.currency_exchange_journal_id' string='Exchange Gain or Loss Journal' args: 'account.journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' readonly=False related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • group_analytic_accounting Boolean
    implied_group='analytic.group_analytic_accounting' string='Analytic Accounting'
  • group_analytic_tags Boolean
    implied_group='analytic.group_analytic_tags' string='Analytic Tags'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_fiscal_year Boolean
    implied_group='account.group_fiscal_year' string='Fiscal Years'
  • group_products_in_bills Boolean
    group='base.group_user' help='Disable this option to use a simplified versions of vendor bills, where products are hidden.' implied_group='account.group_products_in_bills' string='Use products in vendor bills'
  • group_show_line_subtotals_tax_excluded Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_excluded' args: 'Show line subtotals without taxes (B2B)'
  • group_show_line_subtotals_tax_included Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_show_line_subtotals_tax_included' args: 'Show line subtotals with taxes (B2C)'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings in Invoices'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • invoice_is_email Boolean
    readonly=False related='company_id.invoice_is_email' string='Send Email'
  • invoice_is_print Boolean
    readonly=False related='company_id.invoice_is_print' string='Print'
  • invoice_reference_type Selection
    help='Default Reference Type on Invoices.' readonly=False related='company_id.invoice_reference_type' string='Communication'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_asset Boolean
    string='Assets Management'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_payment Boolean
    help='This allows you grouping payments into a single batch and eases the reconciliation process.\n-This installs the account_batch_payment module.' string='Use batch payments'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_account_deferred_revenue Boolean
    string='Revenue Recognition'
  • module_account_intrastat Boolean
    string='Intrastat'
  • module_account_invoice_extract Boolean
    string='Automate Bill Processing'
  • module_account_payment Boolean
    string='Invoice Online Payment'
  • module_account_plaid Boolean
    string='Plaid Connector'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_reports_followup Boolean
    args: 'Follow-up Levels'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_account_yodlee Boolean
    args: 'Bank Interface - Sync your bank feeds automatically'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_service Boolean
    string='EU Digital Goods VAT'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • purchase_tax_id Many2one → account.tax
    readonly=False related='company_id.account_purchase_tax_id' string='Default Purchase Tax' args: 'account.tax'
  • qr_code Boolean
    readonly=False related='company_id.qr_code' string='Display SEPA QR code'
  • sale_tax_id Many2one → account.tax
    readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • show_line_subtotals_tax_selection Selection
    config_parameter='account.show_line_subtotals_tax_selection' default='tax_excluded' required=True string='Line Subtotals Tax Display' args: [('tax_excluded', 'Tax-Excluded'), ('tax_included', 'Tax-Included')]
  • tax_calculation_rounding_method Selection
    readonly=False related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method' args: [('round_per_line', 'Round calculation of taxes per line'), ('round_globally', 'Round globally calculation of taxes ')]
  • tax_cash_basis_journal_id Many2one → account.journal
    readonly=False related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    readonly=False related='company_id.tax_exigibility' string='Cash Basis'
Public methods (5)
  • create(self, values)
    @api.model
  • onchange_account_yodlee(self)
    @api.onchange('module_account_yodlee')
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • set_values(self)
    @api.multi

New fields (21)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Partner Contracts' args: 'account.analytic.account', 'partner_id'
  • contracts_count Integer
    compute='_compute_contracts_count' string='Contracts Count' type='integer'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items' type='integer'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' oldname='last_reconciliation_date' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' oldname='property_account_payable' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position determines the taxes/accounts used for this contact.' oldname='property_account_position' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' oldname='property_account_receivable' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sales orders and customer invoices' oldname='property_payment_term' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' oldname='property_supplier_payment_term' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    oldname='ref_companies' string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
Public methods (4)
  • action_view_partner_invoices(self)
    @api.multi
  • can_edit_vat(self)
    Can't edit `vat` if there is (non draft) issued invoices.
  • get_followup_lines_domain(self, date, overdue_only=False, only_unblocked=False)
  • mark_as_reconciled(self)
    @api.multi

New fields (1)
  • journal_id One2many → account.journal
    domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (9)
  • adjustment_type Selection
    required=True store=False string='Adjustment Type' args: [('debit', 'Applied on debit journal item'), ('credit', 'Applied on credit journal item')]
  • amount Monetary
    currency_field='company_currency_id' required=True
  • company_currency_id Many2one → res.currency
    default=<expr> readonly=True args: 'res.currency'
  • credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Credit account' args: 'account.account'
  • date Date
    default=fields.Date.context_today required=True
  • debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Debit account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain=[('type', '=', 'general')] required=True string='Journal' args: 'account.journal'
  • reason Char
    required=True string='Justification'
  • tax_id Many2one → account.tax
    domain=[('type_tax_use', '=', 'adjustment')] ondelete='restrict' required=True string='Adjustment Tax' args: 'account.tax'
Public methods (3)
  • create_move(self)
  • create_move_credit(self)
    @api.multi
  • create_move_debit(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate_move(self)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Xavier ALT, Christophe Simonis, Xavier Morel, Goffin Simon, Cedric Snauwaert, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Olivier Colson, Wolfgang Taferner, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Odoo Online, Pierre Masereel, Laurent Smet, Denis Vermylen (dve), De Paoli Quentin, Toufik Benjaa, DVE, jem-odoo, Adrien Dieudonne, len-odoo, Julien (juc) Castiaux, Jorge Pinna Puissant, Nans Lefebvre, Denis Vermylen, Johan Demaret Rivarola, jev-odoo, fda-odoo, wan, mreficent, Rémi Rahir, Luis Torres, Carlos Dauden, rar-odoo, Florimond Husquinet (fhu), Andrea Grazioso (agr-odoo), Moisés López, Fanny He, Enric Tobella, alt-odoo, Humberto Arocha, oco-odoo, support@claresco.nl, Florent de Labarre
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Core mechanisms for the accounting modules. To display the menuitems, install the module account_invoicing.
    

Code Analysis

Views touched (163)
XML IDNameModelTypeStatus
account.report_overdue_document account.report_overdue_document ir.ui.view qweb New
account_aged_balance_view Aged Partner Balance account.aged.trial.balance form New
account_bank_journal_view_kanban account.bank.journal.kanban account.journal kanban New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_journal_dashboard_kanban_view_js account.journal.dashboard.kanban.js account.journal xpath Inherits account.account_journal_dashboard_kanban_view
account_journal_view_kanban account.journal.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_graph_date_cash_basis account.move.line.graph account.move.line graph New
account_move_line_reconcile_writeoff account.move.line.reconcile.writeoff.form account.move.line.reconcile.writeoff form New
account_planner account_planner ir.ui.view qweb New
account_report_balance_view Trial Balance account.balance.report data Inherits account_common_report_view
account_report_general_ledger_view General Ledger account.report.general.ledger data Inherits account_common_report_view
account_report_partner_ledger_view Partner Ledger account.report.partner.ledger data Inherits account.account_common_report_view
account_report_print_journal_view Journals Audit account.print.journal data Inherits account.account_common_report_view
account_tag_view_form Tags account.account.tag form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
accounting_report_view Accounting Report accounting.report field Inherits account.account_common_report_view
accounting_tax_report_view Tax Reports account.tax.report data Inherits account.account_common_report_view
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
cash_box_in_form cash_box_in cash.box.in form New
cash_box_out_form cash_box_out cash.box.out form New
init_accounts_tree account.setup.opening.move.line.tree account.account tree New
invoice_form account.invoice.form account.invoice form New
invoice_kanban account.invoice.kanban account.invoice kanban New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_supplier_tree account.invoice.supplier.tree account.invoice tree New
invoice_tree account.invoice.tree account.invoice tree New
partner_view_button_contracts_count partner.view.button.contracts_count res.partner button Inherits base.view_partner_form
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
partner_view_short_extra partner.short.view.account res.partner field Inherits base.view_partner_short_form
portal_invoice_error Invoice error/warning display ir.ui.view qweb New
portal_invoice_page Invoice Portal Template ir.ui.view qweb New
portal_invoice_report Invoice Portal Report ir.ui.view qweb New
portal_invoice_success Invoice success display ir.ui.view qweb New
portal_my_home_invoice Portal My Home : invoice entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_invoice Portal layout : invoice menu entries ir.ui.view qweb Inherits portal.portal_layout
portal_my_invoices My Invoices and Payments ir.ui.view qweb New
product_product_view_tree product.product.tree product.product tree New
product_template_form_view product.template.form.inherit product.template page Inherits product.product_template_form_view
qunit_suite account_reconciliation tests ir.ui.view qweb Inherits web.qunit_suite
report_agedpartnerbalance report_agedpartnerbalance ir.ui.view qweb New
report_financial report_financial ir.ui.view qweb New
report_generalledger report_generalledger ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_invoice_document_with_payments report_invoice_document_with_payments ir.ui.view qweb Inherits account.report_invoice_document
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_overdue report_overdue ir.ui.view qweb New
report_partnerledger report_partnerledger ir.ui.view qweb New
report_payment_receipt report_payment_receipt ir.ui.view qweb New
report_tax report_tax ir.ui.view qweb New
report_trialbalance report_trialbalance ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.account res.config.settings xpath Inherits base.res_config_settings_view_form
rounding_form_view account.cash.rounding.form account.cash.rounding form New
rounding_search_view account.cash.rounding.search account.cash.rounding search New
rounding_tree_view account.cash.rounding.tree account.cash.rounding tree New
setup_bank_journal_form account.setup.bank.journal.form account.journal xpath Inherits account.view_account_bank_journal_form
setup_financial_year_opening_form account.financial.year.op.setup.wizard.form account.financial.year.op form New
setup_opening_move_lines_tree account.setup.opening.move.lines.tree account.move.line tree New
setup_opening_move_wizard_form account.setup.opening.move.wizard.form account.opening form New
setup_posted_move_form account.setup.posted.move.form account.move xpath Inherits account.view_move_form
setup_view_company_form account.setup.company.form res.company xpath Inherits base.view_company_form
tax_adjustments_wizard tax.adjustments.wizard.form tax.adjustments.wizard form New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_account_kanban account.account.kanban account.account kanban New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bank_journal_form account.bank.journal.form account.journal form New
view_account_bank_journal_tree account.bank.journal.tree account.journal tree New
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_financial_report_form account.financial.report.form account.financial.report form New
view_account_financial_report_search account.financial.report.search account.financial.report search New
view_account_financial_report_tree account.financial.report.tree account.financial.report tree New
view_account_form account.account.form account.account form New
view_account_group_form account.group.form account.group form New
view_account_group_search account.group.search account.group search New
view_account_group_tree account.group.tree account.group tree New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_filter_inherit_credit_notes account.invoice.select.credit.notes account.invoice data Inherits view_account_invoice_filter
view_account_invoice_filter_inherit_invoices account.invoice.select.invoices account.invoice data Inherits view_account_invoice_filter
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_kanban account.move.kanban account.move kanban New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_line_reconcile_full account.move.line.reconcile.full.form account.move.line.reconcile form New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_from_invoices account.register.payments.wizard account.register.payments form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_invoice_form account.payment.invoice.form account.payment form New
view_account_payment_kanban account.payment.kanban account.payment kanban New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_term_kanban account.payment.term.kanban account.payment.term kanban New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment tree New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_pivot account.invoice.pivot account.invoice pivot New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tax_audit_tree account.move.line.tax.audit.tree account.move.line field Inherits account.view_move_line_tree
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_tree account.move.tree account.move tree New
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_payment_term_tree account.payment.term.tree account.payment.term tree New
view_tax_form account.tax.form account.tax form New
view_tax_kanban account.tax.kanban account.tax kanban New
view_tax_tree account.tax.tree account.tax tree New
view_wizard_multi_chart Choose Accounting Template wizard.multi.charts.accounts form Inherits base.res_config_view_base
Models touched (81)

New fields (12)
  • amount Monetary
    required=True string='Payment Amount'
  • communication Char
    string='Memo'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • hide_payment_method Boolean
    compute='_compute_hide_payment_method' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True string='Payment Journal' args: 'account.journal'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_type Selection
    args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    copy=False default=fields.Date.context_today required=True string='Payment Date'
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' readonly=True related='payment_method_id.code'
  • payment_method_id Many2one → account.payment.method
    help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nCheck: Pay bill by check and print it from Odoo.\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo, you are suggested to reconcile the transaction with the batch deposit.To enable batch deposit,module account_batch_deposit must be installed.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. To enable sepa credit transfer, module account_sepa must be installed ' oldname='payment_method' required=True string='Payment Method Type' args: 'account.payment.method'
  • payment_type Selection
    required=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
Public methods (0)

No public methods.

New fields (15)
  • code Char
    index=True required=True size=64
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this account currency.' string='Account Currency' args: 'res.currency'
  • deprecated Boolean
    default=False index=True
  • group_id Many2one → account.group
    args: 'account.group'
  • internal_type Selection
    readonly=True related='user_type_id.type' store=True string='Internal Type'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed on this account. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit Or if you click the "Done" button.' readonly=True string='Latest Invoices & Payments Matching Date'
  • name Char
    index=True required=True
  • note Text
    args: 'Internal Notes'
  • opening_credit Monetary
    compute='_compute_opening_debit_credit' help='Opening credit value for this account.' inverse='_set_opening_credit' string='Opening credit'
  • opening_debit Monetary
    compute='_compute_opening_debit_credit' help='Opening debit value for this account.' inverse='_set_opening_debit' string='Opening debit'
  • reconcile Boolean
    default=False help='Check this box if this account allows invoices & payments matching of journal items.' string='Allow Reconciliation'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_account_account_tag'
  • tax_ids Many2many → account.tax
    string='Default Taxes' args: 'account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='Account Type is used for information purpose, to generate country-specific legal reports, and set the rules to close a fiscal year and generate opening entries.' oldname='user_type' required=True string='Type' args: 'account.account.type'
Public methods (11)
  • action_open_reconcile(self)
    @api.multi
  • copy(self, default=None)
    @api.one@api.returns('self', <expr>)
  • default_get(self, default_fields)
    @api.model
    If we're creating a new account through a many2one, there are chances that we typed the account code instead of its name. In that case, switch both fields values.
  • load(self, fields, data)
    @api.model
    Overridden for better performances when importing a list of account with opening debit/credit. In that case, the auto-balance is postpone untill the whole file has been imported.
  • mark_as_reconciled(self)
    @api.multi
  • name_get(self)
    @api.multi@api.depends('name', 'code')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • onchange_code(self)
    @api.onchange('code')
  • onchange_internal_type(self)
    @api.onchange('internal_type')
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (4)
  • active Boolean
    default=True help='Set active to false to hide the Account Tag without removing it.'
  • applicability Selection
    default='accounts' required=True args: [('accounts', 'Accounts'), ('taxes', 'Taxes')]
  • color Integer
    default=10 args: 'Color Index'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (11)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • group_id Many2one → account.group
    args: 'account.group'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' oldname='user_type' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'code')

New fields (4)
  • include_initial_balance Boolean
    help='Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.' string='Bring Accounts Balance Forward'
  • name Char
    required=True string='Account Type' translate=True
  • note Text
    string='Description'
  • type Selection
    default='other' help="The 'Internal Type' is used for features available on different types of accounts: liquidity type is for cash or bank accounts, payable/receivable is for vendor/customer accounts." required=True args: [('other', 'Regular'), ('receivable', 'Receivable'), ('payable', 'Payable'), ('liquidity', 'Liquidity')]
Public methods (0)

No public methods.

New fields (3)
  • date_from Date
    default=<expr>
  • journal_ids Many2many → account.journal
    required=True string='Journals' args: 'account.journal'
  • period_length Integer
    default=30 required=True string='Period Length (days)'
Public methods (0)

No public methods.

New fields (12)
  • amount Monetary
    currency_field='company_currency_id'
  • amount_currency Monetary
    help='The amount expressed in the related account currency if not equal to the company one.' readonly=True related='move_id.amount_currency' store=True
  • analytic_amount_currency Monetary
    compute='_get_analytic_amount_currency' help='The amount expressed in the related account currency if not equal to the company one.' readonly=True string='Amount Currency'
  • code Char
    size=8
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' args: 'res.currency'
  • currency_id Many2one → res.currency
    help='The related account currency if not equal to the company one.' readonly=True related='move_id.currency_id' store=True string='Account Currency' args: 'res.currency'
  • general_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    index=True ondelete='cascade' string='Move Line' args: 'account.move.line'
  • partner_id Many2one → res.partner
    readonly=True related='account_id.partner_id' store=True string='Partner' args: 'res.partner'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → product.uom
    string='Unit of Measure' args: 'product.uom'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.v8@api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (1)
  • journal_ids Many2many → account.journal
    default=[] required=True string='Journals' args: 'account.journal', 'account_balance_report_journal_rel', 'account_id', 'journal_id'
Public methods (0)

No public methods.

New fields (4)
  • acc_name Char
    required=True string='Account Name.'
  • account_type Selection
    args: [('cash', 'Cash'), ('bank', 'Bank')]
  • bank_account_id Many2one → wizard.multi.charts.accounts
    ondelete='cascade' required=True string='Bank Account' args: 'wizard.multi.charts.accounts'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
Public methods (0)

No public methods.

New fields (22)
  • all_lines_reconciled Boolean
    compute='_check_lines_reconciled'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    states={'confirm': [('readonly', True)]} args: 'Ending Balance'
  • balance_start Monetary
    default=_default_opening_balance states={'confirm': [('readonly', True)]} string='Starting Balance'
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' oldname='currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • journal_id Many2one → account.journal
    default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_count Integer
    compute='_get_move_line_count'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • reference Char
    copy=False help='Used to hold the reference of the external mean that created this statement (name of imported file, reference of online synchronization...)' readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (9)
  • button_confirm_bank(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • button_open(self)
    @api.multi
    Changes statement state to Running.
  • check_confirm_bank(self)
    @api.multi
  • link_bank_to_partner(self)
    @api.multi
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
    @api.multi
  • reconciliation_widget_preprocess(self)
    @api.multi
    Get statement lines of the specified statements or all unreconciled statement lines and try to automatically reconcile them / find them a partner. Return ids of statement lines left to reconcile and other data for the reconciliation widget.
  • unlink(self)
    @api.multi

New fields (1)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
Public methods (1)
  • validate(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate(self)
    @api.multi

New fields (19)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account' string='Counterpart Account' args: 'account.account'
  • amount Monetary
    currency_field='journal_currency_id' digits=0
  • amount_currency Monetary
    help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • bank_account_id Many2one → res.partner.bank
    string='Bank Account' args: 'res.partner.bank'
  • company_id Many2one → res.company
    readonly=True related='statement_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    default=<expr> required=True
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='statement_id.currency_id' args: 'res.currency'
  • journal_entry_ids One2many → account.move.line
    copy=False readonly=True args: 'account.move.line', 'statement_line_id', 'Journal Items'
  • journal_id Many2one → account.journal
    readonly=True related='statement_id.journal_id' store=True string='Journal' args: 'account.journal'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • name Char
    required=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    index=True ondelete='cascade' required=True string='Statement' args: 'account.bank.statement'
Public methods (13)
  • auto_reconcile(self)
    @api.multi
    Try to automatically reconcile the statement.line ; return the counterpart journal entry/ies if the automatic reconciliation succeeded, False otherwise. TODO : this method could be greatly improved and made extensible
  • button_cancel_reconciliation(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fast_counterpart_creation(self)
  • get_data_for_reconciliation_widget(self, excluded_ids=None)
    @api.multi
    Returns the data required to display a reconciliation widget, for each statement line in self
  • get_move_lines_for_reconciliation(self, partner_id=None, excluded_ids=None, str=False, offset=0, limit=None, additional_domain=None, overlook_partner=False)
    Return account.move.line records which can be used for bank statement reconciliation. :param partner_id: :param excluded_ids: :param str: :param offset: :param limit: :param additional_domain: :param overlook_partner:
  • get_move_lines_for_reconciliation_widget(self, partner_id=None, excluded_ids=None, str=False, offset=0, limit=None)
    @api.multi
    Returns move lines for the bank statement reconciliation widget, formatted as a list of dicts
  • get_reconciliation_proposition(self, excluded_ids=None)
    Returns move lines that constitute the best guess to reconcile a statement line Note: it only looks for move lines in the same currency as the statement line.
  • get_statement_line_for_reconciliation_widget(self)
    Returns the data required by the bank statement reconciliation widget to display a statement line
  • process_reconciliation(self, counterpart_aml_dicts=None, payment_aml_rec=None, new_aml_dicts=None)
    Match statement lines with existing payments (eg. checks) and/or payables/receivables (eg. invoices and credit notes) and/or new move lines (eg. write-offs). If any new journal item needs to be created (via new_aml_dicts or counterpart_aml_dicts), a new journal entry will be created and will contain those items, as well as a journal item for the bank statement line. Finally, mark the statement line as reconciled by putting the matched moves ids in the column journal_entry_ids. :param self: browse collection of records that are supposed to have no accounting entries already linked. :param (list of dicts) counterpart_aml_dicts: move lines to create to reconcile with existing payables/receivables. The expected keys are : - 'name' - 'debit' - 'credit' - 'move_line' # The move line to reconcile (partially if specified debit/credit is lower than move line's credit/debit) :param (list of recordsets) payment_aml_rec: recordset move lines representing existing payments (which are already fully reconciled) :param (list of dicts) new_aml_dicts: move lines to create. The expected keys are : - 'name' - 'debit' - 'credit' - 'account_id' - (optional) 'tax_ids' - (optional) Other account.move.line fields like analytic_account_id or analytics_id :returns: The journal entries with which the transaction was matched. If there was at least an entry in counterpart_aml_dicts or new_aml_dicts, this list contains the move created by the reconciliation, containing entries for the statement.line (1), the counterpart move lines (0..*) and the new move lines (0..*).
  • process_reconciliations(self, data)
    @api.multi
    Handles data sent from the bank statement reconciliation widget (and can otherwise serve as an old-API bridge) :param list of dicts data: must contains the keys 'counterpart_aml_dicts', 'payment_aml_ids' and 'new_aml_dicts', whose value is the same as described in process_reconciliation except that ids are used instead of recordsets.
  • reconciliation_widget_auto_reconcile(self, num_already_reconciled_lines)
    @api.multi
  • unlink(self)
    @api.multi

New fields (5)
  • account_id Many2one → account.account
    string='Account' args: 'account.account'
  • name Char
    required=True string='Name' translate=True
  • rounding Float
    help='Represent the non-zero value smallest coinage (for example, 0.05).' required=True string='Rounding Precision'
  • rounding_method Selection
    default='HALF-UP' help='The tie-breaking rule used for float rounding operations' required=True selection=[('UP', 'UP'), ('DOWN', 'DOWN'), ('HALF-UP', 'HALF-UP')] string='Rounding Method'
  • strategy Selection
    default='add_invoice_line' help='Specify which way will be used to round the invoice amount to the rounding precision' required=True string='Rounding Strategy' args: [('biggest_tax', 'Modify tax amount'), ('add_invoice_line', 'Add a rounding line')]
Public methods (3)
  • compute_difference(self, currency, amount)
    @api.multi
    Compute the difference between the base_amount and the amount after rounding. For example, base_amount=23.91, after rounding=24.00, the result will be 0.09. :param currency: The currency. :param amount: The amount :return: round(difference)
  • round(self, amount)
    @api.multi
    Compute the rounding on the amount passed as parameter. :param amount: the amount to round :return: the rounded amount depending the rounding value and the rounding method
  • validate_rounding(self)
    @api.constrains('rounding')

New fields (4)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • number Integer
    help='Opening Unit Numbers' string='Number of Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (24)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    oldname='property_account_expense_categ' string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    oldname='property_account_expense' string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    oldname='property_account_income_categ' string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    oldname='property_account_income' string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    oldname='property_account_payable' string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    oldname='property_account_receivable' string='Receivable Account' args: 'account.account.template'
  • property_stock_account_input_categ_id Many2one → account.account.template
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_id Many2one → account.account.template
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' required=True string='Transfer Account' args: 'account.account.template'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (8)
  • create_record_with_xmlid(self, company, template, model, vals)
    @api.multi
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    @api.multi
    This method for generating accounts from templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mappping between the account templates and the real accounts. :param code_digits: number of digits got from wizard.multi.charts.accounts, this is use for account code. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method for generating accounts from templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mappping between the account templates and the real accounts. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method generate Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param chart_temp_id: Chart Template Id. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param chart_temp_id: Chart Template Id. :param acc_template_ref: Account templates reference. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • generate_properties(self, acc_template_ref, company)
    @api.multi
    This method used for creating properties. :param self: chart templates for which we need to create properties :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • open_select_template_wizard(self)
    @api.multi
  • try_loading_for_current_company(self)
    @api.one

New fields (1)
  • display_account Selection
    default='movement' required=True string='Display Accounts' args: [('all', 'All'), ('movement', 'With movements'), ('not_zero', 'With balance is not equal to 0')]
Public methods (1)
  • pre_print_report(self, data)
    @api.multi

New fields (1)
  • amount_currency Boolean
    help='Print Report with the currency column if the currency differs from the company currency.' args: 'With Currency'
Public methods (1)
  • pre_print_report(self, data)
    @api.multi

New fields (1)
  • result_selection Selection
    default='customer' required=True string="Partner's" args: [('customer', 'Receivable Accounts'), ('supplier', 'Payable Accounts'), ('customer_supplier', 'Receivable and Payable Accounts')]
Public methods (1)
  • pre_print_report(self, data)

New fields (5)
  • company_id Many2one → res.company
    default=<expr> readonly=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)
    @api.multi

New fields (12)
  • account_ids Many2many → account.account
    args: 'account.account', 'account_account_financial_report', 'report_line_id', 'account_id', 'Accounts'
  • account_report_id Many2one → account.financial.report
    args: 'account.financial.report', 'Report Value'
  • account_type_ids Many2many → account.account.type
    args: 'account.account.type', 'account_account_financial_report_type', 'report_id', 'account_type_id', 'Account Types'
  • children_ids One2many → account.financial.report
    args: 'account.financial.report', 'parent_id', 'Account Report'
  • display_detail Selection
    default='detail_flat' args: [('no_detail', 'No detail'), ('detail_flat', 'Display children flat'), ('detail_with_hierarchy', 'Display children with hierarchy')], 'Display details'
  • level Integer
    compute='_get_level' store=True string='Level'
  • name Char
    required=True translate=True args: 'Report Name'
  • parent_id Many2one → account.financial.report
    args: 'account.financial.report', 'Parent'
  • sequence Integer
    args: 'Sequence'
  • sign Selection
    default=1 help='For accounts that are typically more debited than credited and that you would like to print as negative amounts in your reports, you should reverse the sign of the balance; e.g.: Expense account. The same applies for accounts that are typically more credited than debited and that you would like to print as positive amounts in your reports; e.g.: Income account.' required=True args: [(-1, 'Reverse balance sign'), (1, 'Preserve balance sign')], 'Sign on Reports'
  • style_overwrite Selection
    default=0 help="You can set up here the format you want this record to be displayed. If you leave the automatic formatting, it will be computed based on the financial reports hierarchy (auto-computed field 'level')." args: [(0, 'Automatic formatting'), (1, 'Main Title 1 (bold, underlined)'), (2, 'Title 2 (bold)'), (3, 'Title 3 (bold, smaller)'), (4, 'Normal Text'), (5, 'Italic Text (smaller)'), (6, 'Smallest Text')], 'Financial Report Style'
  • type Selection
    default='sum' args: [('sum', 'View'), ('accounts', 'Accounts'), ('account_type', 'Account Type'), ('account_report', 'Report Value')], 'Type'
Public methods (0)

No public methods.

New fields (6)
  • account_setup_fy_data_done Boolean
    compute='_compute_setup_marked_done' string='Financial year setup marked as done'
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • fiscalyear_last_day Integer
    help="The last day of the month will be taken if the chosen day doesn't exist." related='company_id.fiscalyear_last_day' required=True
  • fiscalyear_last_month Selection
    help="The last day of the month will be taken if the chosen day doesn't exist." related='company_id.fiscalyear_last_month' required=True selection=[(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • opening_date Date
    help='Date from which the accounting is managed in Odoo. It is the date of the opening entry.' related='company_id.account_opening_date' required=True string='Opening Date'
  • opening_move_posted Boolean
    compute='_compute_opening_move_posted' string='Opening Move Posted'
Public methods (2)
  • mark_as_done(self)
    Forces fiscal year setup state to 'done'.
  • unmark_as_done(self)
    Forces fiscal year setup state to 'undone'.

New fields (15)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invocing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position'
  • note Text
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Integer
    default=0 string='Zip Range From'
  • zip_to Integer
    default=0 string='Zip Range To'
Public methods (4)
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
  • map_account(self, account)
    @api.model
  • map_accounts(self, accounts)
    @api.model
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes, product=None, partner=None)
    @api.model

New fields (3)
  • account_dest_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account on Product' args: 'account.account'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_id Many2one → account.tax
    string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (13)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invoicing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Integer
    default=0 string='Zip Range From'
  • zip_to Integer
    default=0 string='Zip Range To'
Public methods (0)

No public methods.

New fields (4)
  • exchange_move_id Many2one → account.move
    args: 'account.move'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    @api.multi
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completly cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (5)
  • code_prefix Char
  • name Char
    required=True
  • parent_id Many2one → account.group
    index=True ondelete='cascade' args: 'account.group'
  • parent_left Integer
    index=True args: 'Left Parent'
  • parent_right Integer
    index=True args: 'Right Parent'
Public methods (2)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model

New fields (48)
  • access_token Char
    copy=False default=_get_default_access_token args: 'Security Token'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='The partner account used for this invoice.' readonly=True required=True states={'draft': [('readonly', False)]} string='Account' args: 'account.account'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_total Monetary
    compute='_compute_amount' readonly=True store=True string='Total'
  • amount_total_company_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit notes.' readonly=True store=True string='Total in Company Currency'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='currency_id' help='Total amount in the currency of the invoice, negative for credit notes.' readonly=True store=True string='Total in Invoice Currency'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' track_visibility='always'
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount in Company Currency'
  • cash_rounding_id Many2one → account.cash.rounding
    help='Defines the smallest coinage of the currency that can be used to pay by cash.' readonly=True states={'draft': [('readonly', False)]} string='Cash Rounding Method' args: 'account.cash.rounding'
  • comment Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Additional Information'
  • commercial_partner_id Many2one → res.partner
    compute_sudo=True help='The commercial entity that will be used on Journal Entries for this invoice' readonly=True related='partner_id.commercial_partner_id' store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=_default_currency readonly=True required=True states={'draft': [('readonly', False)]} string='Currency' track_visibility='always' args: 'res.currency'
  • date Date
    copy=False help='Keep empty to use the invoice date.' readonly=True states={'draft': [('readonly', False)]} string='Accounting Date'
  • date_due Date
    copy=False help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The Payment terms may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the Payment terms and the due date empty, it means direct payment.' index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • date_invoice Date
    copy=False help='Keep empty to use the current date' index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_outstanding Boolean
    compute='_get_outstanding_info_JSON' groups='account.group_account_invoice'
  • invoice_line_ids One2many → account.invoice.line
    copy=True oldname='invoice_line' readonly=True states={'draft': [('readonly', False)]} string='Invoice Lines' args: 'account.invoice.line', 'invoice_id'
  • journal_id Many2one → account.journal
    default=_default_journal domain="[('type', 'in', {'out_invoice': ['sale'], 'out_refund': ['sale'], 'in_refund': ['purchase'], 'in_invoice': ['purchase']}.get(type, [])), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    copy=False help='Link to the automatically generated Journal Items.' index=True ondelete='restrict' readonly=True string='Journal Entry' args: 'account.move'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated.' readonly=False string='Journal Entry Name'
  • name Char
    copy=False help='The name that will be used on account move lines' index=True readonly=True states={'draft': [('readonly', False)]} string='Reference/Description'
  • number Char
    copy=False readonly=True related='move_id.name' store=True
  • origin Char
    help='Reference of the document that produced this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Source Document'
  • outstanding_credits_debits_widget Text
    compute='_get_outstanding_info_JSON' groups='account.group_account_invoice'
  • partner_bank_id Many2one → res.partner.bank
    help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Credit Note, otherwise a Partner bank account number.' readonly=True states={'draft': [('readonly', False)]} string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True readonly=True required=True states={'draft': [('readonly', False)]} string='Partner' track_visibility='always' args: 'res.partner'
  • payment_ids Many2many → account.payment
    copy=False readonly=True string='Payments' args: 'account.payment', 'account_invoice_payment_rel', 'invoice_id', 'payment_id'
  • payment_move_line_ids Many2many → account.move.line
    compute='_compute_payments' store=True string='Payment Move Lines' args: 'account.move.line'
  • payment_term_id Many2one → account.payment.term
    help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment terms and the due date empty, it means direct payment. The payment terms may compute several due dates, for example 50% now, 50% in one month.' oldname='payment_term' readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • payments_widget Text
    compute='_get_payment_info_JSON' groups='account.group_account_invoice'
  • reconciled Boolean
    compute='_compute_residual' help='It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment.' readonly=True store=True string='Paid/Reconciled'
  • reference Char
    copy=False help='The partner reference of this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Vendor Reference'
  • reference_type Selection
    default='none' readonly=True required=True states={'draft': [('readonly', False)]} string='Payment Reference' args: '_get_reference_type'
  • refund_invoice_id Many2one → account.invoice
    string='Invoice for which this invoice is the credit note' args: 'account.invoice'
  • refund_invoice_ids One2many → account.invoice
    readonly=True string='Refund Invoices' args: 'account.invoice', 'refund_invoice_id'
  • residual Monetary
    compute='_compute_residual' help='Remaining amount due.' store=True string='Amount Due'
  • residual_company_signed Monetary
    compute='_compute_residual' currency_field='company_currency_id' help='Remaining amount due in the currency of the company.' store=True string='Amount Due in Company Currency'
  • residual_signed Monetary
    compute='_compute_residual' currency_field='currency_id' help='Remaining amount due in the currency of the invoice.' store=True string='Amount Due in Invoice Currency'
  • sent Boolean
    copy=False default=False help='It indicates that the invoice has been sent.' readonly=True
  • sequence_number_next Char
    compute='_get_sequence_number_next' inverse='_set_sequence_next' string='Next Number'
  • sequence_number_next_prefix Char
    compute='_get_sequence_prefix' string='Next Number'
  • state Selection
    copy=False default='draft' help=" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n * The 'Open' status is used when user creates invoice, an invoice number is generated. It stays in the open status till the user pays the invoice.\n * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n * The 'Cancelled' status is used when user cancel invoice." index=True readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Draft'), ('open', 'Open'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • tax_line_ids One2many → account.invoice.tax
    copy=True oldname='tax_line' readonly=True states={'draft': [('readonly', False)]} string='Tax Lines' args: 'account.invoice.tax', 'invoice_id'
  • type Selection
    change_default=True default=<expr> index=True readonly=True track_visibility='always' args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • user_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)]} string='Salesperson' track_visibility='onchange' args: 'res.users'
Public methods (34)
  • action_cancel(self)
    @api.multi
  • action_date_assign(self)
    @api.multi
  • action_invoice_cancel(self)
    @api.multi
  • action_invoice_draft(self)
    @api.multi
  • action_invoice_open(self)
    @api.multi
  • action_invoice_paid(self)
    @api.multi
  • action_invoice_re_open(self)
    @api.multi
  • action_invoice_sent(self)
    @api.multi
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_move_create(self)
    @api.multi
    Creates invoice related analytics and financial move lines
  • assign_outstanding_credit(self, credit_aml_id)
    @api.multi
  • compute_invoice_totals(self, company_currency, invoice_move_lines)
    @api.multi
  • compute_taxes(self)
    @api.multi
    Function used in other module to compute the taxes on a fresh invoice created (onchanges did not applied)
  • create(self, vals)
    @api.model
  • default_get(self, default_fields)
    @api.model
    Compute default partner_bank_id field for 'out_invoice' type, using the default values computed for the other fields.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • get_access_action(self, access_uid=None)
    @api.multi
    Instead of the classic form view, redirect to the online invoice for portal users.
  • get_delivery_partner_id(self)
    @api.multi
  • get_formview_id(self, access_uid=None)
    @api.multi
    Update form view id of action to open the invoice
  • get_mail_url(self)
  • get_taxes_values(self)
    @api.multi
  • group_lines(self, iml, line)
    Merge account move lines (and hence analytic lines) if invoice line hashcodes are equals
  • inv_line_characteristic_hashcode(self, invoice_line)
    Overridable hashcode generation for invoice lines. Lines having the same hashcode will be grouped together if the journal has the 'group line' option. Of course a module can add fields to invoice lines that would need to be tested too before merging lines or not.
  • invoice_line_move_line_get(self)
    @api.model
  • invoice_print(self)
    @api.multi
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • invoice_validate(self)
    @api.multi
  • line_get_convert(self, line, part)
    @api.model
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • pay_and_reconcile(self, pay_journal, pay_amount=None, date=None, writeoff_acc=None)
    @api.multi
    Create and post an account.payment for the invoice self, which creates a journal entry that reconciles the invoice. :param pay_journal: journal in which the payment entry will be created :param pay_amount: amount of the payment to register, defaults to the residual of the invoice :param date: payment date, defaults to fields.Date.context_today(self) :param writeoff_acc: account in which to create a writeoff if pay_amount < self.residual, so that the invoice is fully paid
  • refund(self, date_invoice=None, date=None, description=None, journal_id=None)
    @api.multi@api.returns('self')
  • register_payment(self, payment_line, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
    Reconcile payable/receivable lines from the invoice with payment_line
  • tax_line_move_line_get(self)
    @api.model
  • unlink(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • invoice_confirm(self)
    @api.multi

New fields (23)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    default=_default_account domain=[('deprecated', '=', False)] help='The income or expense account related to the selected product.' required=True string='Account' args: 'account.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • company_currency_id Many2one → res.currency
    readonly=True related='invoice_id.company_currency_id' related_sudo=False args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True related='invoice_id.company_id' related_sudo=False store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' related_sudo=False store=True args: 'res.currency'
  • discount Float
    default=0.0 digits=dp.get_precision('Discount') string='Discount (%)'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice Reference' args: 'account.invoice'
  • invoice_line_tax_ids Many2many → account.tax
    domain=[('type_tax_use', '!=', 'none'), '|', ('active', '=', False), ('active', '=', True)] oldname='invoice_line_tax_id' string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • invoice_type Selection
    readonly=True related='invoice_id.type'
  • is_rounding_line Boolean
    help='Is a rounding line in case of cash rounding.' string='Rounding Line'
  • name Text
    required=True string='Description'
  • origin Char
    help='Reference of the document that produced this invoice.' string='Source Document'
  • partner_id Many2one → res.partner
    readonly=True related='invoice_id.partner_id' related_sudo=False store=True string='Partner' args: 'res.partner'
  • price_subtotal Monetary
    compute='_compute_price' help='Total amount without taxes' readonly=True store=True string='Amount'
  • price_subtotal_signed Monetary
    compute='_compute_price' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit note.' readonly=True store=True string='Amount Signed'
  • price_total Monetary
    compute='_compute_price' help='Total amount with taxes' readonly=True store=True string='Amount'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True string='Unit Price'
  • product_id Many2one → product.product
    index=True ondelete='restrict' string='Product' args: 'product.product'
  • product_image Binary
    readonly=True related='product_id.image' store=False args: 'Product Image'
  • quantity Float
    default=1 digits=dp.get_precision('Product Unit of Measure') required=True string='Quantity'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the invoice.'
  • uom_id Many2one → product.uom
    index=True oldname='uos_id' ondelete='set null' string='Unit of Measure' args: 'product.uom'
Public methods (3)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_invoice_line_account(self, type, product, fpos, company)
    @api.v8
  • unlink(self)
    @api.multi

New fields (5)
  • date Date
    string='Accounting Date'
  • date_invoice Date
    default=fields.Date.context_today required=True string='Credit Note Date'
  • description Char
    default=_get_reason required=True string='Reason'
  • filter_refund Selection
    default='refund' help='Refund base on this type. You can not Modify and Cancel if the invoice is already reconciled' required=True string='Refund Method' args: [('refund', 'Create a draft credit note'), ('cancel', 'Cancel: create credit note and reconcile'), ('modify', 'Modify: create credit note, reconcile and create a new draft invoice')]
  • refund_only Boolean
    compute='_get_refund_only' string='Technical field to hide filter_refund in case invoice is partially paid'
Public methods (2)
  • compute_refund(self, mode='refund')
    @api.multi
  • invoice_refund(self)
    @api.multi

New fields (29)
  • account_analytic_id Many2one → account.analytic.account
    groups='analytic.group_analytic_accounting' string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Account' args: 'account.account'
  • account_line_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Account Line' args: 'account.account'
  • categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country of the Partner Company' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • currency_rate Float
    group_operator='avg' groups='base.group_multi_currency' readonly=True string='Currency Rate'
  • date Date
    readonly=True
  • date_due Date
    readonly=True string='Due Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • nbr Integer
    readonly=True string='# of Lines'
  • partner_bank_id Many2one → res.partner.bank
    readonly=True string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_term_id Many2one → account.payment.term
    oldname='payment_term' readonly=True string='Payment Terms' args: 'account.payment.term'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_total Float
    readonly=True string='Total Without Tax'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_qty Float
    readonly=True string='Product Quantity'
  • residual Float
    readonly=True string='Due Amount'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('open', 'Open'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Credit Note'), ('in_refund', 'Vendor Credit Note')]
  • uom_name Char
    readonly=True string='Reference Unit of Measure'
  • user_currency_price_average Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Average Price'
  • user_currency_price_total Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Without Tax'
  • user_currency_residual Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Residual'
  • user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
Public methods (1)
  • init(self)
    @api.model_cr

New fields (13)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Tax Account' args: 'account.account'
  • amount Monetary
  • amount_rounding Monetary
  • amount_total Monetary
    compute='_compute_amount_total' string='Amount'
  • base Monetary
    compute='_compute_base_amount' store=True string='Base'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True related='invoice_id.currency_id' store=True args: 'res.currency'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice' args: 'account.invoice'
  • manual Boolean
    default=True
  • name Char
    required=True string='Tax Description'
  • sequence Integer
    help='Gives the sequence order when displaying a list of invoice tax.'
  • tax_id Many2one → account.tax
    ondelete='restrict' string='Tax' args: 'account.tax'
Public methods (0)

No public methods.

New fields (29)
  • account_control_ids Many2many → account.account
    domain=[('deprecated', '=', False)] string='Accounts Allowed' args: 'account.account', 'account_account_type_rel', 'journal_id', 'account_id'
  • active Boolean
    default=True help='Set active to false to hide the Journal without removing it.'
  • at_least_one_inbound Boolean
    compute='_methods_compute' store=True
  • at_least_one_outbound Boolean
    compute='_methods_compute' store=True
  • bank_acc_number Char
    related='bank_account_id.acc_number'
  • bank_account_id Many2one → res.partner.bank
    copy=False ondelete='restrict' string='Bank Account' args: 'res.partner.bank'
  • bank_id Many2one → res.bank
    related='bank_account_id.bank_id' args: 'res.bank'
  • bank_statements_source Selection
    default='undefined' string='Bank Feeds' args: [('undefined', 'Undefined Yet'), ('manual', 'Record Manually')]
  • belongs_to_company Boolean
    compute='_belong_to_company' search='_search_company_journals' args: "Belong to the user's current company"
  • code Char
    help='The journal entries of this journal will be named using this prefix.' required=True size=5 string='Short Code'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this journal' index=True required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='The currency used to enter statement' oldname='currency' string='Currency' args: 'res.currency'
  • default_credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='It acts as a default account for credit amount' string='Default Credit Account' args: 'account.account'
  • default_debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='It acts as a default account for debit amount' string='Default Debit Account' args: 'account.account'
  • group_invoice_lines Boolean
    help='If this box is checked, the system will try to group the accounting lines when generating them from invoices.' string='Group Invoice Lines'
  • inbound_payment_method_ids Many2many → account.payment.method
    default=<expr> domain=[('payment_type', '=', 'inbound')] help='Manual: Get paid by cash, check or any other method outside of Odoo.\nElectronic: Get paid automatically through a payment acquirer by requesting a transaction on a card saved by the customer when buying or subscribing online (payment token).\nBatch Deposit: Encase several customer checks at once by generating a batch deposit to submit to your bank. When encoding the bank statement in Odoo,you are suggested to reconcile the transaction with the batch deposit. Enable this option from the settings.' string='Debit Methods' args: 'account.payment.method', 'account_journal_inbound_payment_method_rel', 'journal_id', 'inbound_payment_method'
  • loss_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Used to register a loss when the ending balance of a cash register differs from what the system computes' string='Loss Account' args: 'account.account'
  • name Char
    required=True string='Journal Name'
  • outbound_payment_method_ids Many2many → account.payment.method
    default=<expr> domain=[('payment_type', '=', 'outbound')] help='Manual:Pay bill by cash or any other method outside of Odoo.\nCheck:Pay bill by check and print it from Odoo.\nSEPA Credit Transfer: Pay bill from a SEPA Credit Transfer file you submit to your bank. Enable this option from the settings.' string='Payment Methods' args: 'account.payment.method', 'account_journal_outbound_payment_method_rel', 'journal_id', 'outbound_payment_method'
  • profit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Used to register a profit when the ending balance of a cash register differs from what the system computes' string='Profit Account' args: 'account.account'
  • refund_sequence Boolean
    default=False help="Check this box if you don't want to share the same sequence for invoices and credit notes made from this journal" string='Dedicated Credit Note Sequence'
  • refund_sequence_id Many2one → ir.sequence
    copy=False help='This field contains the information related to the numbering of the credit note entries of this journal.' string='Credit Note Entry Sequence' args: 'ir.sequence'
  • refund_sequence_number_next Integer
    compute='_compute_refund_seq_number_next' help='The next sequence number will be used for the next credit note.' inverse='_inverse_refund_seq_number_next' string='Credit Notes: Next Number'
  • sequence Integer
    default=10 help='Used to order Journals in the dashboard view'
  • sequence_id Many2one → ir.sequence
    copy=False help='This field contains the information related to the numbering of the journal entries of this journal.' required=True string='Entry Sequence' args: 'ir.sequence'
  • sequence_number_next Integer
    compute='_compute_seq_number_next' help='The next sequence number will be used for the next invoice.' inverse='_inverse_seq_number_next' string='Next Number'
  • type Selection
    help="Select 'Sale' for customer invoices journals.\nSelect 'Purchase' for vendor bills journals.\nSelect 'Cash' or 'Bank' for journals that are used in customer or vendor payments.\nSelect 'General' for miscellaneous operations journals." required=True args: [('sale', 'Sale'), ('purchase', 'Purchase'), ('cash', 'Cash'), ('bank', 'Bank'), ('general', 'Miscellaneous')]
  • type_control_ids Many2many → account.account.type
    string='Account Types Allowed' args: 'account.account.type', 'account_journal_type_rel', 'journal_id', 'type_id'
  • update_posted Boolean
    help='Check this box if you want to allow the cancellation the entries related to this journal or of the invoice related to this journal' string='Allow Cancelling Entries'
Public methods (10)
  • copy(self, default=None)
    @api.one@api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'currency_id', 'company_id', 'company_id.currency_id')
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • onchange_credit_account_id(self)
    @api.onchange('default_credit_account_id')
  • onchange_debit_account_id(self)
    @api.onchange('default_debit_account_id')
  • set_bank_account(self, acc_number, bank_id=None)
    Create a res.partner.bank and set it as value of the field bank_account_id
  • setup_save_journal_and_create_more(self)
    This function is triggered by the button allowing to create more bank accounts, displayed in the "Bank Accounts" wizard of the setup bar. Button execution is done in Python, so that the model is validated and saved before executing the action.
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • account_setup_bank_data_done Boolean
    help='Technical field used in the special view for the setup bar step.' related='company_id.account_setup_bank_data_done' string='Bank setup marked as done'
  • color Integer
    default=0 args: 'Color Index'
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (16)
  • action_create_new(self)
    @api.multi
  • action_open_reconcile(self)
    @api.multi
  • create_bank_statement(self)
    @api.multi
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
    @api.multi
  • get_bar_graph_datas(self)
    @api.multi
  • get_journal_dashboard_datas(self)
    @api.multi
  • get_line_graph_datas(self)
    @api.multi
  • mark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as done in the setup bar and in the company.
  • open_action(self)
    @api.multi
    return action based on type for related journals
  • open_action_with_context(self)
    @api.multi
  • open_collect_money(self)
    @api.multi
  • open_payments_action(self, payment_type)
    @api.multi
  • open_spend_money(self)
    @api.multi
  • open_transfer_money(self)
    @api.multi
  • retrieve_account_dashboard_setup_bar(self)
    @api.model
    Returns the data used by the setup bar on the Accounting app dashboard.
  • unmark_bank_setup_as_done_action(self)
    Marks the 'bank setup' step as not done in the setup bar and in the company.

New fields (14)
  • amount Monetary
    compute='_amount_compute' store=True
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' store=True string='Currency' args: 'res.currency'
  • date Date
    default=fields.Date.context_today index=True required=True states={'posted': [('readonly', True)]}
  • dummy_account_id Many2one → account.account
    readonly=True related='line_ids.account_id' store=False string='Account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal required=True states={'posted': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True states={'posted': [('readonly', True)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • matched_percentage Float
    compute='_compute_matched_percentage' digits=0 help='Technical field used in cash basis method' readonly=True store=True args: 'Percentage Matched'
  • name Char
    copy=False default='/' required=True string='Number'
  • narration Text
    string='Internal Note'
  • partner_id Many2one → res.partner
    compute='_compute_partner_id' readonly=True store=True string='Partner' args: 'res.partner'
  • ref Char
    copy=False string='Reference'
  • state Selection
    copy=False default='draft' help="All manually created new journal entries are usually in the status 'Unposted', but you can set the option to skip that status on the related journal. In that case, they will behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in 'Posted' status." readonly=True required=True string='Status' args: [('draft', 'Unposted'), ('posted', 'Posted')]
  • tax_cash_basis_rec_id Many2one → account.partial.reconcile
    help='Technical field used to keep track of the tax cash basis reconciliation. This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.' string='Tax Cash Basis Entry of' args: 'account.partial.reconcile'
Public methods (12)
  • action_duplicate(self)
    @api.multi
  • assert_balanced(self)
    @api.multi
  • button_cancel(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'state')
  • open_reconcile_view(self)
    @api.multi
  • post(self)
    @api.multi
  • reverse_moves(self, date=None, journal_id=None)
    @api.multi
  • unlink(self)
    @api.multi
  • update_lines_tax_exigibility(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (44)
  • account_id Many2one → account.account
    default=<expr> domain=[('deprecated', '=', False)] index=True ondelete='cascade' required=True string='Account' args: 'account.account'
  • amount_currency Monetary
    default=0.0 help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • amount_residual Monetary
    compute='_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    oldname='analytic_lines' string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic tags' args: 'account.analytic.tag'
  • balance Monetary
    compute='_store_balance' currency_field='company_currency_id' help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True
  • balance_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' help='Technical field holding the debit_cash_basis - credit_cash_basis in order to open meaningful graph views from reports' store=True
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • counterpart Char
    compute='_get_counterpart' help='Compute the counter part accounts of this journal item for this journal entry. This can be needed in reports.' args: 'Counterpart'
  • credit Monetary
    currency_field='company_currency_id' default=0.0
  • credit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' store=True
  • currency_id Many2one → res.currency
    default=_get_currency help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    copy=False index=True related='move_id.date' store=True string='Date'
  • date_maturity Date
    copy=False help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True required=True string='Due date'
  • debit Monetary
    currency_field='company_currency_id' default=0.0
  • debit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' store=True
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Matching Number' args: 'account.full.reconcile'
  • invoice_id Many2one → account.invoice
    copy=False oldname='invoice' args: 'account.invoice'
  • is_unaffected_earnings_line Boolean
    compute='_compute_is_unaffected_earnings_line' help='Tells whether or not this line belongs to an unaffected earnings account' string='Is Unaffected Earnings Line'
  • journal_id Many2one → account.journal
    copy=False index=True related='move_id.journal_id' store=True string='Journal' args: 'account.journal'
  • matched_credit_ids One2many → account.partial.reconcile
    String='Matched Credits' help='Credit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    String='Matched Debits' help='Debit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'credit_move_id'
  • move_id Many2one → account.move
    auto_join=True help='The move of this entry line.' index=True ondelete='cascade' required=True string='Journal Entry' args: 'account.move'
  • name Char
    string='Label'
  • narration Text
    related='move_id.narration' string='Narration'
  • parent_state Char
    compute='_compute_parent_state' help='State of the parent account.move'
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    copy=False help='Payment that created this entry' string='Originator Payment' args: 'account.payment'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → product.uom
    string='Unit of Measure' args: 'product.uom'
  • quantity Float
    digits=dp.get_precision('Product Unit of Measure') help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.'
  • reconciled Boolean
    compute='_amount_residual' store=True
  • ref Char
    copy=False index=True related='move_id.ref' store=True string='Reference'
  • statement_id Many2one → account.bank.statement
    copy=False help='The bank statement used for bank reconciliation' index=True related='statement_line_id.statement_id' store=True string='Statement' args: 'account.bank.statement'
  • statement_line_id Many2one → account.bank.statement.line
    copy=False index=True readonly=True string='Bank statement line reconciled with this entry' args: 'account.bank.statement.line'
  • tax_base_amount Monetary
    compute='_compute_tax_base_amount' currency_field='company_currency_id' store=True string='Base Amount'
  • tax_exigible Boolean
    default=True help='Technical field used to mark a tax line as exigible in the vat report or not (only exigible journal items are displayed). By default all new journal items are directly exigible, but with the feature cash_basis on taxes, some will become exigible only when the payment is recorded.' string='Appears in VAT report'
  • tax_ids Many2many → account.tax
    domain=['|', ('active', '=', False), ('active', '=', True)] string='Taxes' args: 'account.tax'
  • tax_line_id Many2one → account.tax
    ondelete='restrict' string='Originator tax' args: 'account.tax'
  • user_type_id Many2one → account.account.type
    index=True oldname='user_type' readonly=True related='account_id.user_type_id' store=True args: 'account.account.type'
Public methods (21)
  • auto_reconcile_lines(self)
    This function iterates on the recordset given as parameter as long as it can find a debit and a credit to reconcile together. It returns the recordset of the account move lines that were not reconciled during the process. :return: account.move.line recordset
  • compute_amount_fields(self, amount, src_currency, company_currency, invoice_currency=False)
    @api.model
    Method kept for compatibility reason
  • create(self, vals)
    @api.model
    :context's key apply_taxes: set to True if you want vals['tax_ids'] to result in the creation of move lines for taxes and eventual adjustment of the line amount (in case of a tax included in price). :context's key `check_move_validity`: check data consistency after move line creation. Eg. set to false to disable verification that the move debit-credit == 0 while creating the move lines composing the move.
  • create_analytic_lines(self)
    @api.multi
    Create analytic items upon validation of an account.move.line having an analytic account. This method first remove any existing analytic item related to the line before creating any new one.
  • default_get(self, fields)
    @api.model
  • domain_move_lines_for_reconciliation(self, str)
    @api.model
    Returns the domain from the str search :param str: search string
  • force_full_reconcile(self)
    After running the manual reconciliation wizard and making full reconciliation, we need to run this method to create potentially exchange rate entries that will balance the remaining amount_residual_currency (possibly several aml in different currencies). This ensure that all aml in the full reconciliation are reconciled (amount_residual = amount_residual_currency = 0).
  • get_data_for_manual_reconciliation(self, res_type, res_ids=None, account_type=None)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts (list of dicts). If no res_ids is passed, returns data for all partners/accounts that can be reconciled. :param res_type: either 'partner' or 'account' :param res_ids: ids of the partners/accounts to reconcile, use None to fetch data indiscriminately of the id, use [] to prevent from fetching any data at all. :param account_type: if a partner is both customer and vendor, you can use 'payable' to reconcile the vendor-related journal entries and 'receivable' for the customer-related entries.
  • get_data_for_manual_reconciliation_widget(self, partner_ids, account_ids)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts. If an argument is None, fetch all related reconciliations. Use [] to fetch nothing.
  • get_move_lines_for_manual_reconciliation(self, account_id, partner_id=False, excluded_ids=None, str=False, offset=0, limit=None, target_currency_id=False)
    @api.model
    Returns unreconciled move lines for an account or a partner+account, formatted for the manual reconciliation widget
  • get_reconciliation_proposition(self, account_id, partner_id=False)
    @api.model
    Returns two lines whose amount are opposite
  • init(self)
    @api.model_cr
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • name_get(self)
    @api.multi@api.depends('ref', 'move_id')
  • open_reconcile_view(self)
    @api.multi
  • prepare_move_lines_for_reconciliation_widget(self, target_currency=False, target_date=False)
    @api.multi
    Returns move lines formatted for the manual/bank reconciliation widget :param target_currency: currency (Model or ID) you want the move line debit/credit converted into :param target_date: date to use for the monetary conversion
  • process_reconciliation(self, new_mv_line_dicts)
    @api.multi
    Create new move lines from new_mv_line_dicts (if not empty) then call reconcile_partial on self and new move lines :param new_mv_line_dicts: list of dicts containing values suitable fot account_move_line.create()
  • process_reconciliations(self, data)
    @api.model
    Used to validate a batch of reconciliations in a single call :param data: list of dicts containing: - 'type': either 'partner' or 'account' - 'id': id of the affected res.partner or account.account - 'mv_line_ids': ids of exisiting account.move.line to reconcile - 'new_mv_line_dicts': list of dicts containing values suitable for account_move_line.create()
  • reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
  • remove_move_reconcile(self)
    @api.multi
    Undo a reconciliation
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • credit Float
    digits=0 readonly=True string='Credit amount'
  • debit Float
    digits=0 readonly=True string='Debit amount'
  • trans_nbr Integer
    readonly=True string='# of Transaction'
  • writeoff Float
    digits=0 readonly=True string='Write-Off amount'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • trans_rec_addendum_writeoff(self)
    @api.multi
  • trans_rec_get(self)
    @api.multi
  • trans_rec_reconcile_full(self)
    @api.multi
  • trans_rec_reconcile_partial_reconcile(self)
    @api.multi

New fields (5)
  • analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • comment Char
    default='Write-off' required=True
  • date_p Date
    default=fields.Date.context_today string='Date'
  • journal_id Many2one → account.journal
    required=True string='Write-Off Journal' args: 'account.journal'
  • writeoff_acc_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Write-Off account' args: 'account.account'
Public methods (3)
  • trans_rec_addendum(self)
    @api.multi
  • trans_rec_reconcile(self)
    @api.multi
  • trans_rec_reconcile_partial(self)
    @api.multi

New fields (2)
  • date Date
    default=fields.Date.context_today required=True string='Reversal date'
  • journal_id Many2one → account.journal
    help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
Public methods (1)
  • reverse_moves(self)
    @api.multi

New fields (6)
  • company_id Many2one → res.company
    comodel_name='res.company' required=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' related='opening_move_id.currency_id'
  • date Date
    related='opening_move_id.date' required=True string='Opening Date'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' related='opening_move_id.journal_id' required=True string='Journal'
  • opening_move_id Many2one → account.move
    comodel_name='account.move' related='company_id.account_opening_move_id' string='Opening Journal Entry'
  • opening_move_line_ids One2many
    related='opening_move_id.line_ids' string='Opening Journal Items'
Public methods (2)
  • opening_move_line_ids_changed(self)
    @api.onchange('opening_move_line_ids')
  • validate(self)

New fields (9)
  • amount Monetary
    currency_field='company_currency_id' help='Amount concerned by this matching. Assumed to be always positive'
  • amount_currency Monetary
    string='Amount in Currency'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    related='debit_move_id.company_id' store=True string='Currency' args: 'res.company'
  • credit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • debit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Full Reconcile' args: 'account.full.reconcile'
  • max_date Date
    compute='_compute_max_date' copy=False help='Technical field used to determine at which date this reconciliation needs to be shown on the aged receivable/payable reports.' readonly=True store=True string='Max Date of Matched Lines'
Public methods (4)
  • create(self, vals)
    @api.model
  • create_exchange_rate_entry(self, aml_to_fix, amount_diff, diff_in_currency, currency, move)
    @api.model
    Automatically create a journal items to book the exchange rate differences that can occure in multi-currencies environment. That new journal item will be made into the given `move` in the company `currency_exchange_journal_id`, and one of its journal items is matched with the other lines to balance the full reconciliation. :param aml_to_fix: recordset of account.move.line (possible several but sharing the same currency) :param amount_diff: float. Amount in company currency to fix :param diff_in_currency: float. Amount in foreign currency `currency` to fix :param currency: res.currency :param move: account.move :return: tuple. [0]: account.move.line created to balance the `aml_to_fix` [1]: recordset of account.partial.reconcile created between the tuple first element and the `aml_to_fix`
  • create_tax_cash_basis_entry(self, percentage_before_rec)
  • unlink(self)
    @api.multi
    When removing a partial reconciliation, also unlink its full reconciliation if it exists

New fields (16)
  • company_id Many2one
    store=True
  • destination_account_id Many2one → account.account
    compute='_compute_destination_account_id' readonly=True args: 'account.account'
  • destination_journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] string='Transfer To' args: 'account.journal'
  • has_invoices Boolean
    compute='_get_has_invoices' help='Technical field used for usability purposes'
  • invoice_ids Many2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'account_invoice_payment_rel', 'payment_id', 'invoice_id'
  • move_line_ids One2many → account.move.line
    copy=False ondelete='restrict' readonly=True args: 'account.move.line', 'payment_id'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • move_reconciled Boolean
    compute='_get_move_reconciled' readonly=True
  • name Char
    copy=False readonly=True
  • payment_difference Monetary
    compute='_compute_payment_difference' readonly=True
  • payment_difference_handling Selection
    copy=False default='open' string='Payment Difference' args: [('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')]
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' readonly=True
  • payment_type Selection
    selection_add=[('transfer', 'Internal Transfer')]
  • state Selection
    copy=False default='draft' readonly=True string='Status' args: [('draft', 'Draft'), ('posted', 'Posted'), ('sent', 'Sent'), ('reconciled', 'Reconciled'), ('cancelled', 'Cancelled')]
  • writeoff_account_id Many2one → account.account
    copy=False domain=[('deprecated', '=', False)] string='Difference Account' args: 'account.account'
  • writeoff_label Char
    default='Write-Off' help='Change label of the counterpart that will hold the payment difference' string='Journal Item Label'
Public methods (11)
  • action_draft(self)
    @api.multi
  • action_validate_invoice_payment(self)
    Posts a payment used to pay an invoice. This function only posts the payment by default but can be overridden to apply specific post or pre-processing. It is called by the "validate" button of the popup window triggered on invoice form by the "Register Payment" button.
  • button_dummy(self)
    @api.multi
  • button_invoices(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • cancel(self)
    @api.multi
  • default_get(self, fields)
    @api.model
  • open_payment_matching_screen(self)
  • post(self)
    @api.multi
    Create the journal items for the payment and update the payment's state to 'posted'. A journal entry is created containing an item in the source liquidity account (selected journal's default_debit or default_credit) and another in the destination reconciliable account (see _compute_destination_account_id). If invoice_ids is not empty, there will be one reconciliable move line per invoice to reconcile with. If the payment is a transfer, a second journal entry is created in the destination journal to receive money from the transfer account.
  • unlink(self)
    @api.multi
  • unreconcile(self)
    @api.multi
    Set back the payments in 'posted' or 'sent' state, without deleting the journal entries. Called when cancelling a bank statement line linked to a pre-registered payment.

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment terms without removing it.'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Text
    string='Description on the Invoice' translate=True
  • sequence Integer
    default=10 required=True
Public methods (2)
  • compute(self, value, date_ref=False)
    @api.one
  • unlink(self)
    @api.multi

New fields (6)
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'Day(s) after the invoice date'), ('fix_day_following_month', 'Day(s) after the end of the invoice month (Net EOM)'), ('last_day_following_month', 'Last day of following month'), ('last_day_current_month', 'Last day of current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment terms lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment terms line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits=dp.get_precision('Payment Terms') help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (2)
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • sort_selection Selection
    default='move_name' required=True args: [('date', 'Date'), ('move_name', 'Journal Entry Number')], 'Entries Sorted by'
Public methods (0)

No public methods.

New fields (18)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance')]
  • analytic_account_id Many2one → account.analytic.account
    ondelete='set null' string='Analytic Account' args: 'account.analytic.account'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • has_second_line Boolean
    default=False string='Add a second line'
  • journal_id Many2one → account.journal
    help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Journal' args: 'account.journal'
  • label Char
    string='Journal Item Label'
  • name Char
    required=True string='Button Label'
  • second_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Second Account' args: 'account.account'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Amount'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of amount')]
  • second_analytic_account_id Many2one → account.analytic.account
    ondelete='set null' string='Second Analytic Account' args: 'account.analytic.account'
  • second_journal_id Many2one → account.journal
    help='This field is ignored in a bank statement reconciliation.' ondelete='cascade' string='Second Journal' args: 'account.journal'
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_id Many2one → account.tax
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Second Tax' args: 'account.tax'
  • sequence Integer
    default=10 required=True
  • tax_id Many2one → account.tax
    ondelete='restrict' string='Tax' args: 'account.tax'
Public methods (1)
  • onchange_name(self)
    @api.onchange('name')

New fields (14)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance')]
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • has_second_line Boolean
    default=False string='Add a second line'
  • label Char
    string='Journal Item Label'
  • name Char
    required=True string='Button Label'
  • second_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Second Account' args: 'account.account.template'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Amount'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of amount')]
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_id Many2one → account.tax.template
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Second Tax' args: 'account.tax.template'
  • sequence Integer
    default=10 required=True
  • tax_id Many2one → account.tax.template
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Tax' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (2)
  • invoice_ids Many2many → account.invoice
    copy=False string='Invoices' args: 'account.invoice'
  • multi Boolean
    help='Technical field indicating if the user selected invoices from multiple partners or from different types.' string='Multi'
Public methods (3)
  • create_payments(self)
    @api.multi
    Create payments according to the invoices. Having invoices with different commercial_partner_id or different type (Vendor bills with customer invoices) leads to multiple payments. In case of all the invoices are related to the same commercial_partner_id and have the same type, only one payment will be created. :return: The ir.actions.act_window to show created payments.
  • default_get(self, fields)
    @api.model
  • get_payments_vals(self)
    @api.multi
    Compute the values for payments. :return: a list of payment values (dictionary).

New fields (3)
  • initial_balance Boolean
    help="If you selected date, this field allow you to add a row to display the amount of debit/credit/balance that precedes the filter you've set." string='Include Initial Balances'
  • journal_ids Many2many → account.journal
    required=True string='Journals' args: 'account.journal', 'account_report_general_ledger_journal_rel', 'account_id', 'journal_id'
  • sortby Selection
    default='sort_date' required=True string='Sort by' args: [('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')]
Public methods (0)

No public methods.

New fields (2)
  • amount_currency Boolean
    help='It adds the currency column on report if the currency differs from the company currency.' args: 'With Currency'
  • reconciled Boolean
    args: 'Reconciled Entries'
Public methods (0)

No public methods.

New fields (20)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account.' oldname='account_collected_id' ondelete='restrict' string='Tax Account' args: 'account.account'
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' oldname='type' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Include in Analytic Cost'
  • cash_basis_account Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account used as counterpart for the journal entry, for taxes eligible based on payments.' string='Tax Received Account' args: 'account.account'
  • children_tax_ids Many2many → account.tax
    string='Children Taxes' args: 'account.tax', 'account_tax_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • description Char
    string='Label on Invoices' translate=True
  • hide_tax_exigibility Boolean
    readonly=True related='company_id.tax_exigibility' string='Hide Use Cash Basis Option'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Base of Subsequent Taxes'
  • name Char
    required=True string='Tax Name' translate=True
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='Account that will be set on invoice tax lines for credit notes. Leave empty to use the expense account.' oldname='account_paid_id' ondelete='restrict' string='Tax Account on Credit Notes' args: 'account.account'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Tags' args: 'account.account.tag', 'account_tax_account_tag'
  • tax_adjustment Boolean
    help='Set this field to true if this tax can be used in the tax adjustment wizard, used to manually fill some data in the tax declaration'
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' oldname='use_cash_basis' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    default=_default_tax_group required=True string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Scope' args: [('sale', 'Sales'), ('purchase', 'Purchases'), ('none', 'None')]
Public methods (11)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None)
    @api.multi
    Returns all information required to apply taxes (in self + their children in case of a tax goup). We consider the sequence of the parent for group of taxes. Eg. considering letters as taxes and alphabetic order as sequence : [G, B([A, D, F]), E, C] will be computed as [A, D, F, C, E, G] RETURN: { 'total_excluded': 0.0, # Total without taxes 'total_included': 0.0, # Total with taxes 'taxes': [{ # One dict for each tax in self and their children 'id': int, 'name': str, 'amount': float, 'sequence': int, 'account_id': int, 'refund_account_id': int, 'analytic': boolean, }] }
  • copy(self, default=None)
    @api.one@api.returns('self', <expr>)
  • get_grouping_key(self, invoice_tax_val)
    Returns a string that will be used to group account.invoice.tax sharing the same properties
  • json_friendly_compute_all(self, price_unit, currency_id=None, quantity=1.0, product_id=None, partner_id=None)
    @api.multi
    Just converts parameters in browse records and calls for compute_all, because js widgets can't serialize browse records
  • name_search(self, name, args=None, operator='ilike', limit=80)
    @api.model
    Returns a list of tupples containing id, name, as internally it is called {def name_get} result format: {[(id, name), (id, name), ...]}
  • onchange_account_id(self)
    @api.onchange('account_id')
  • onchange_amount(self)
    @api.onchange('amount')
  • onchange_amount_type(self)
    @api.onchange('amount_type')
  • onchange_price_include(self)
    @api.onchange('price_include')
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model
  • unlink(self)
    @api.multi

New fields (2)
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (20)
  • account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account.' oldname='account_collected_id' ondelete='restrict' string='Tax Account' args: 'account.account.template'
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • cash_basis_account Many2one → account.account.template
    domain=[('deprecated', '=', False)] help='Account used as counterpart for the journal entry, for taxes eligible based on payments.' string='Tax Received Account' args: 'account.account.template'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Subsequent Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account.' oldname='account_paid_id' ondelete='restrict' string='Tax Account on Refunds' args: 'account.account.template'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag'
  • tax_adjustment Boolean
    default=False
  • tax_exigibility Selection
    default='on_invoice' help='Based on Invoice: the tax is due as soon as the invoice is validated.\nBased on Payment: the tax is due as soon as the payment of the invoice is received.' oldname='use_cash_basis' string='Tax Due' args: [('on_invoice', 'Based on Invoice'), ('on_payment', 'Based on Payment')]
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Scope' args: [('sale', 'Sales'), ('purchase', 'Purchases'), ('none', 'None')]
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'description')

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)
    @api.multi

New fields (7)
  • account_report_id Many2one → account.financial.report
    default=_get_account_report required=True string='Account Reports' args: 'account.financial.report'
  • date_from_cmp Date
    string='Start Date'
  • date_to_cmp Date
    string='End Date'
  • debit_credit Boolean
    help='This option allows you to get more details about the way your balances are computed. Because it is space consuming, we do not allow to use it while doing a comparison.' string='Display Debit/Credit Columns'
  • enable_filter Boolean
    string='Enable Comparison'
  • filter_cmp Selection
    default='filter_no' required=True string='Filter by' args: [('filter_no', 'No Filters'), ('filter_date', 'Date')]
  • label_filter Char
    help='This label will be displayed on report to show the balance computed for the given comparison filter.' string='Column Label'
Public methods (1)
  • check_report(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)
    @api.multi

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.' oldname='property_account_expense_categ' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used when validating a customer invoice.' oldname='property_account_income_categ' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation. If the field is empty, it uses the one defined in the product category.' oldname='property_account_expense' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='Keep this field empty to use the default value from the product category.' oldname='property_account_income' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    domain=[('type_tax_use', '=', 'purchase')] string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • taxes_id Many2many → account.tax
    domain=[('type_tax_use', '=', 'sale')] string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (1)
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_account_lines(self, data)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_report_values(self, docids, data=None)
    @api.model
  • lines(self, target_move, journal_ids, sort_selection, data)

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_lines(self, options)
    @api.model
  • get_report_values(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (30)
  • account_opening_date Date
    help="Date at which the opening entry of this company's accounting has been posted." related='account_opening_move_id.date' string='Opening Date'
  • account_opening_journal_id Many2one → account.journal
    comodel_name='account.journal' help="Journal where the opening entry of this company's accounting has been posted." related='account_opening_move_id.journal_id' string='Opening Journal'
  • account_opening_move_id Many2one → account.move
    comodel_name='account.move' help="The journal entry containing the initial balance of all this company's accounts." string='Opening Journal Entry'
  • account_setup_bank_data_done Boolean
    help='Technical field holding the status of the bank setup step.' args: 'Bank Setup Marked As Done'
  • account_setup_bar_closed Boolean
    help='Technical field set to True when setup bar has been closed by the user.' string='Setup Bar Closed'
  • account_setup_coa_done Boolean
    help='Technical field holding the status of the chart of account setup step.' string='Chart of Account Checked'
  • account_setup_company_data_done Boolean
    help='Technical field holding the status of the company setup step.' string='Company Setup Marked As Done'
  • account_setup_fy_data_done Boolean
    help='Technical field holding the status of the financial year setup step.' args: 'Financial Year Setup Marked As Done'
  • accounts_code_digits Integer
    string='Number of digits in an account code'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" related='currency_exchange_journal_id.default_debit_account_id' string='Loss Exchange Rate Account' args: 'account.account'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default=12 required=True args: [(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" related='currency_exchange_journal_id.default_credit_account_id' string='Gain Exchange Rate Account' args: 'account.account'
  • overdue_msg Text
    default=<expr> string='Overdue Payments Message' translate=True
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • tax_cash_basis_journal_id Many2one → account.journal
    string='Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    string='Use Cash Basis'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (17)
  • compute_fiscalyear_dates(self, date)
    @api.multi
    Computes the start and end dates of the fiscalyear where the given 'date' belongs to @param date: a datetime object @returns: a dictionary with date_from and date_to
  • create_op_move_if_non_existant(self)
    @api.model
    Creates an empty opening move in 'draft' state for the current company if there wasn't already one defined. For this, the function needs at least one journal of type 'general' to exist (required by account.move).
  • get_new_account_code(self, current_code, old_prefix, new_prefix, digits)
  • get_opening_move_differences(self, opening_move_lines)
  • get_unaffected_earnings_account(self)
    Returns the unaffected earnings account for this company, creating one if none has yet been defined.
  • mark_company_setup_as_done_action(self)
    Marks the 'company' setup step as completed.
  • opening_move_posted(self)
    Returns true if this company has an opening account move and this move is posted.
  • reflect_code_digits_change(self, digits)
  • reflect_code_prefix_change(self, old_code, new_code, digits)
  • setting_chart_of_accounts_action(self)
    @api.model
    Called by the 'Chart of Accounts' button of the setup bar.
  • setting_hide_setup_bar(self)
    @api.model
    Called by the cross button of the setup bar, to close it.
  • setting_init_bank_account_action(self)
    @api.model
    Called by the 'Bank Accounts' button of the setup bar.
  • setting_init_company_action(self)
    @api.model
    Called by the 'Company Data' button of the setup bar.
  • setting_init_fiscal_year_action(self)
    @api.model
    Called by the 'Fiscal Year Opening' button of the setup bar.
  • setting_opening_move_action(self)
    @api.model
    Called by the 'Initial Balances' button of the setup bar.
  • unmark_company_setup_as_done_action(self)
    Marks the 'company' setup step as uncompleted.
  • write(self, values)
    @api.multi

New fields (37)
  • account_hide_setup_bar Boolean
    help='Tick if you wish to hide the setup bar on the dashboard' related='company_id.account_setup_bar_closed' string='Hide Setup Bar'
  • chart_template_id Many2one → account.chart.template
    domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • code_digits Integer
    help='No. of digits to use for account code' related='company_id.accounts_code_digits' string='# of Digits *'
  • currency_exchange_journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id), ('type', '=', 'general')]" help='The accounting journal where automatic exchange differences will be registered' related='company_id.currency_exchange_journal_id' string='Exchange Gain or Loss Journal' args: 'account.journal'
  • currency_id Many2one → res.currency
    help='Main currency of the company.' related='company_id.currency_id' required=True string='Currency' args: 'res.currency'
  • default_purchase_tax_id Many2one → account.tax
    company_dependent=True oldname='default_purchase_tax' string='Default Purchase Tax' args: 'account.tax'
  • default_sale_tax_id Many2one → account.tax
    company_dependent=True oldname='default_sale_tax' string='Default Sale Tax' args: 'account.tax'
  • group_analytic_accounting Boolean
    implied_group='analytic.group_analytic_accounting' string='Analytic Accounting'
  • group_cash_rounding Boolean
    implied_group='account.group_cash_rounding' string='Cash Rounding'
  • group_warning_account Boolean
    implied_group='account.group_warning_account' string='Warnings'
  • has_accounting_entries Boolean
    compute='_compute_has_chart_of_accounts'
  • has_chart_of_accounts Boolean
    compute='_compute_has_chart_of_accounts' string='Company has a chart of accounts'
  • module_account_accountant Boolean
    string='Accounting'
  • module_account_asset Boolean
    string='Assets Management'
  • module_account_bank_statement_import_camt Boolean
    args: 'Import in CAMT.053 format'
  • module_account_bank_statement_import_csv Boolean
    args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    args: 'Import .qif files'
  • module_account_batch_deposit Boolean
    help='This allows you to group received checks before you deposit them to the bank.\n-This installs the module account_batch_deposit.' string='Use batch deposit'
  • module_account_budget Boolean
    string='Budget Management'
  • module_account_deferred_revenue Boolean
    string='Revenue Recognition'
  • module_account_payment Boolean
    string='Online Payment'
  • module_account_plaid Boolean
    string='Plaid Connector'
  • module_account_reports Boolean
    args: 'Dynamic Reports'
  • module_account_reports_followup Boolean
    args: 'Follow-up Levels'
  • module_account_sepa Boolean
    string='SEPA Credit Transfer (SCT)'
  • module_account_sepa_direct_debit Boolean
    string='Use SEPA Direct Debit'
  • module_account_taxcloud Boolean
    string='Account TaxCloud'
  • module_account_yodlee Boolean
    args: 'Bank Interface - Sync your bank feeds automatically'
  • module_currency_rate_live Boolean
    string='Automatic Currency Rates'
  • module_l10n_eu_service Boolean
    string='EU Digital Goods VAT'
  • module_l10n_us_check_printing Boolean
    args: 'Allow check printing and deposits'
  • module_print_docsaway Boolean
    string='Docsaway'
  • module_product_margin Boolean
    string='Allow Product Margin'
  • tax_calculation_rounding_method Selection
    related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method' args: [('round_per_line', 'Round calculation of taxes per line'), ('round_globally', 'Round globally calculation of taxes ')]
  • tax_cash_basis_journal_id Many2one → account.journal
    related='company_id.tax_cash_basis_journal_id' string='Tax Cash Basis Journal' args: 'account.journal'
  • tax_exigibility Boolean
    related='company_id.tax_exigibility' string='Cash Basis'
Public methods (6)
  • create(self, values)
    @api.model
  • get_values(self)
    @api.model
  • onchange_account_yodlee(self)
    @api.onchange('module_account_yodlee')
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • set_values(self)
    @api.multi

New fields (21)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Contracts' args: 'account.analytic.account', 'partner_id'
  • contracts_count Integer
    compute='_compute_contracts_count' string='Contracts' type='integer'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP required=True args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items' type='integer'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' oldname='last_reconciliation_date' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' oldname='property_account_payable' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position will determine taxes and accounts used for the partner.' oldname='property_account_position' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' oldname='property_account_receivable' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sales orders and customer invoices' oldname='property_payment_term' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' oldname='property_supplier_payment_term' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    oldname='ref_companies' string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
Public methods (3)
  • action_view_partner_invoices(self)
    @api.multi
  • get_followup_lines_domain(self, date, overdue_only=False, only_unblocked=False)
  • mark_as_reconciled(self)
    @api.multi

New fields (1)
  • journal_id One2many → account.journal
    domain=[('type', '=', 'bank')] help='The accounting journal corresponding to this bank account.' readonly=True string='Account Journal' args: 'account.journal', 'bank_account_id'
Public methods (0)

No public methods.

New fields (9)
  • adjustment_type Selection
    required=True store=False string='Adjustment Type' args: [('debit', 'Applied on debit journal item'), ('credit', 'Applied on credit journal item')]
  • amount Monetary
    currency_field='company_currency_id' required=True
  • company_currency_id Many2one → res.currency
    default=<expr> readonly=True args: 'res.currency'
  • credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Credit account' args: 'account.account'
  • date Date
    default=fields.Date.context_today required=True
  • debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Debit account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain=[('type', '=', 'general')] required=True string='Journal' args: 'account.journal'
  • reason Char
    required=True string='Justification'
  • tax_id Many2one → account.tax
    domain=[('type_tax_use', '=', 'none'), ('tax_adjustment', '=', True)] ondelete='restrict' required=True string='Adjustment Tax' args: 'account.tax'
Public methods (3)
  • create_move(self)
  • create_move_credit(self)
    @api.multi
  • create_move_debit(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate_move(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' args: 'Bank Accounts Prefix'
  • bank_account_ids One2many → account.bank.accounts.wizard
    oldname='bank_accounts_id' required=True string='Cash and Banks' args: 'account.bank.accounts.wizard', 'bank_account_id'
  • cash_account_code_prefix Char
    args: 'Cash Accounts Prefix'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • code_digits Integer
    help='No. of Digits to use for account code' required=True string='# of Digits'
  • company_id Many2one → res.company
    required=True string='Company' args: 'res.company'
  • complete_tax_set Boolean
    help='This boolean helps you to choose if you want to propose to the user to encode the sales and purchase rates or use the usual m2o fields. This last choice assumes that the set of tax defined for the chosen template is complete' args: 'Complete Set of Taxes'
  • currency_id Many2one → res.currency
    help="Currency as per company's country." required=True string='Currency' args: 'res.currency'
  • only_one_chart_template Boolean
    string='Only One Chart Template Available'
  • purchase_tax_id Many2one → account.tax.template
    oldname='purchase_tax' string='Default Purchase Tax' args: 'account.tax.template'
  • purchase_tax_rate Float
    string='Purchase Tax(%)'
  • sale_tax_id Many2one → account.tax.template
    oldname='sale_tax' string='Default Sales Tax' args: 'account.tax.template'
  • sale_tax_rate Float
    string='Sales Tax(%)'
  • transfer_account_id Many2one → account.account.template
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' required=True string='Transfer Account' args: 'account.account.template'
  • use_anglo_saxon Boolean
    related='chart_template_id.use_anglo_saxon' string='Use Anglo-Saxon Accounting'
Public methods (6)
  • default_get(self, fields)
    @api.model
  • execute(self)
    @api.multi
    This function is called at the confirmation of the wizard to generate the COA from the templates. It will read all the provided information to create the accounts, the banks, the journals, the taxes, the accounting properties... accordingly for the chosen company.
  • existing_accounting(self, company_id)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • onchange_chart_template_id(self)
    @api.onchange('chart_template_id')
  • onchange_tax_rate(self)
    @api.onchange('sale_tax_rate')
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Joren Van Onder, Goffin Simon, Cedric Snauwaert, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Julien Legros, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Olivier Colson, pvy, Yannick Tivisse, qsm-odoo, Martin Geubelle, Pierre Masereel, Denis Vermylen (dve), De Paoli Quentin, Tanguy Charlier, Jorge Pinna Puissant, Nans Lefebvre, amoyaux, Arnold Moyaux, Adrian Torres, Nathan de Pryck, wan, mreficent
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (129)
XML IDNameModelTypeStatus
account.report_overdue_document account.report_overdue_document ir.ui.view qweb New
account_aged_balance_view Aged Partner Balance account.aged.trial.balance form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_invoice_cancel_view account.invoice.cancel.form account.invoice.cancel form New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_invoice_report_duplicate account_invoice_report_duplicate ir.ui.view qweb Inherits account.report_invoice_document
account_invoice_report_duplicate_main account_invoice_report_duplicate_main ir.ui.view qweb New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_graph_date_cash_basis account.move.line.graph account.move.line graph New
account_move_line_reconcile_writeoff account.move.line.reconcile.writeoff.form account.move.line.reconcile.writeoff form New
account_planner account_planner ir.ui.view qweb New
account_report_balance_view Trial Balance account.balance.report data Inherits account_common_report_view
account_report_general_ledger_view General Ledger account.report.general.ledger data Inherits account_common_report_view
account_report_partner_ledger_view Partner Ledger account.report.partner.ledger data Inherits account.account_common_report_view
account_report_print_journal_view Sale/Purchase Journal account.print.journal data Inherits account.account_common_report_view
account_tag_view_form Tags account.account.tag form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
accounting_report_view Accounting Report accounting.report field Inherits account.account_common_report_view
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
cash_box_in_form cash_box_in cash.box.in form New
cash_box_out_form cash_box_out cash.box.out form New
external_layout_footer external_layout_footer ir.ui.view qweb Inherits report.external_layout_footer
invoice_form account.invoice.form account.invoice form New
invoice_kanban account.invoice.kanban account.invoice kanban New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_supplier_tree account.invoice.supplier.tree account.invoice tree New
invoice_tree account.invoice.tree account.invoice tree New
partner_view_button_contracts_count partner.view.button.contracts_count res.partner div Inherits base.view_partner_form
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
product_template_form_view product.template.form.inherit product.template page Inherits product.product_template_form_view
report_agedpartnerbalance report_agedpartnerbalance ir.ui.view qweb New
report_financial report_financial ir.ui.view qweb New
report_generalledger report_generalledger ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_overdue report_overdue ir.ui.view qweb New
report_partnerledger report_partnerledger ir.ui.view qweb New
report_trialbalance report_trialbalance ir.ui.view qweb New
tax_adjustments_wizard tax.adjustments.wizard.form tax.adjustments.wizard form New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bank_journal_form account.bank.journal.form account.journal form New
view_account_bank_journal_tree account.bank.journal.tree account.journal tree New
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_config_settings account settings account.config.settings form New
view_account_financial_report_form account.financial.report.form account.financial.report form New
view_account_financial_report_search account.financial.report.search account.financial.report search New
view_account_financial_report_tree account.financial.report.tree account.financial.report tree New
view_account_form account.account.form account.account form New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_line_reconcile_full account.move.line.reconcile.full.form account.move.line.reconcile form New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_from_invoices account.register.payments.wizard account.register.payments form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_invoice_form account.payment.invoice.form account.payment form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_reconcile_model_form account.reconcile.model.form account.reconcile.model form New
view_account_reconcile_model_search account.reconcile.model.search account.reconcile.model search New
view_account_reconcile_model_tree account.reconcile.model.tree account.reconcile.model tree New
view_account_report_tree_hierarchy account.report.hierarchy account.financial.report tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment tree New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_full_reconcile_form account.full.reconcile.form account.full.reconcile form New
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_pivot account.invoice.pivot account.invoice pivot New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_form2 account.move.line.form2 account.move.line form New
view_move_line_pivot account.move.line.pivot account.move.line pivot New
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_tree account.move.tree account.move tree New
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_tax_form account.tax.form account.tax form New
view_tax_tree account.tax.tree account.tax tree New
view_wizard_multi_chart Choose Accounting Template wizard.multi.charts.accounts form Inherits base.res_config_view_base
Models touched (68)

New fields (12)
  • amount Monetary
    required=True string='Payment Amount'
  • communication Char
    string='Memo'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • hide_payment_method Boolean
    compute='_compute_hide_payment_method' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True string='Payment Journal' args: 'account.journal'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_type Selection
    args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    copy=False default=fields.Date.context_today required=True string='Payment Date'
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' readonly=True related='payment_method_id.code'
  • payment_method_id Many2one → account.payment.method
    oldname='payment_method' required=True string='Payment Method Type' args: 'account.payment.method'
  • payment_type Selection
    required=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
Public methods (0)

No public methods.

New fields (10)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' oldname='user_type' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'code')

New fields (3)
  • date_from Date
    default=<expr>
  • journal_ids Many2many → account.journal
    required=True string='Journals' args: 'account.journal'
  • period_length Integer
    default=30 required=True string='Period Length (days)'
Public methods (0)

No public methods.

New fields (12)
  • amount Monetary
    currency_field='company_currency_id'
  • amount_currency Monetary
    help='The amount expressed in the related account currency if not equal to the company one.' readonly=True related='move_id.amount_currency' store=True
  • analytic_amount_currency Monetary
    compute='_get_analytic_amount_currency' help='The amount expressed in the related account currency if not equal to the company one.' readonly=True string='Amount Currency'
  • code Char
    size=8
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' args: 'res.currency'
  • currency_id Many2one → res.currency
    help='The related account currency if not equal to the company one.' readonly=True related='move_id.currency_id' store=True string='Account Currency' args: 'res.currency'
  • general_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    index=True ondelete='cascade' string='Move Line' args: 'account.move.line'
  • partner_id Many2one → res.partner
    readonly=True related='account_id.partner_id' store=True string='Partner' args: 'res.partner'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → product.uom
    string='Unit of Measure' args: 'product.uom'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.v8@api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (1)
  • journal_ids Many2many → account.journal
    default=[] required=True string='Journals' args: 'account.journal', 'account_balance_report_journal_rel', 'account_id', 'journal_id'
Public methods (0)

No public methods.

New fields (4)
  • acc_name Char
    required=True string='Account Name.'
  • account_type Selection
    args: [('cash', 'Cash'), ('bank', 'Bank')]
  • bank_account_id Many2one → wizard.multi.charts.accounts
    ondelete='cascade' required=True string='Bank Account' args: 'wizard.multi.charts.accounts'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
Public methods (0)

No public methods.

New fields (21)
  • all_lines_reconciled Boolean
    compute='_check_lines_reconciled'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    states={'confirm': [('readonly', True)]} args: 'Ending Balance'
  • balance_start Monetary
    default=_default_opening_balance states={'confirm': [('readonly', True)]} string='Starting Balance'
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' oldname='currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • journal_id Many2one → account.journal
    default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • reference Char
    copy=False help='Used to hold the reference of the external mean that created this statement (name of imported file, reference of online synchronization...)' readonly=True states={'open': [('readonly', False)]} string='External Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (10)
  • button_cancel(self)
    @api.multi
  • button_confirm_bank(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • button_open(self)
    @api.multi
    Changes statement state to Running.
  • check_confirm_bank(self)
    @api.multi
  • link_bank_to_partner(self)
    @api.multi
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
    @api.multi
  • reconciliation_widget_preprocess(self)
    @api.multi
    Get statement lines of the specified statements or all unreconciled statement lines and try to automatically reconcile them / find them a partner. Return ids of statement lines left to reconcile and other data for the reconciliation widget.
  • unlink(self)
    @api.multi

New fields (1)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
Public methods (1)
  • validate(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate(self)
    @api.multi

New fields (19)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account' string='Counterpart Account' args: 'account.account'
  • amount Monetary
    currency_field='journal_currency_id' digits=0
  • amount_currency Monetary
    help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • bank_account_id Many2one → res.partner.bank
    string='Bank Account' args: 'res.partner.bank'
  • company_id Many2one → res.company
    readonly=True related='statement_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    default=<expr> required=True
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='statement_id.currency_id' args: 'res.currency'
  • journal_entry_ids One2many → account.move
    copy=False readonly=True args: 'account.move', 'statement_line_id', 'Journal Entries'
  • journal_id Many2one → account.journal
    readonly=True related='statement_id.journal_id' store=True string='Journal' args: 'account.journal'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • name Char
    required=True string='Label'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    index=True ondelete='cascade' required=True string='Statement' args: 'account.bank.statement'
Public methods (13)
  • auto_reconcile(self)
    @api.multi
    Try to automatically reconcile the statement.line ; return the counterpart journal entry/ies if the automatic reconciliation succeeded, False otherwise. TODO : this method could be greatly improved and made extensible
  • button_cancel_reconciliation(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fast_counterpart_creation(self)
  • get_data_for_reconciliation_widget(self, excluded_ids=None)
    @api.multi
    Returns the data required to display a reconciliation widget, for each statement line in self
  • get_move_lines_for_reconciliation(self, excluded_ids=None, str=False, offset=0, limit=None, additional_domain=None, overlook_partner=False)
    Return account.move.line records which can be used for bank statement reconciliation. :param excluded_ids: :param str: :param offset: :param limit: :param additional_domain: :param overlook_partner:
  • get_move_lines_for_reconciliation_widget(self, excluded_ids=None, str=False, offset=0, limit=None)
    @api.multi
    Returns move lines for the bank statement reconciliation widget, formatted as a list of dicts
  • get_reconciliation_proposition(self, excluded_ids=None)
    Returns move lines that constitute the best guess to reconcile a statement line Note: it only looks for move lines in the same currency as the statement line.
  • get_statement_line_for_reconciliation_widget(self)
    Returns the data required by the bank statement reconciliation widget to display a statement line
  • process_reconciliation(self, counterpart_aml_dicts=None, payment_aml_rec=None, new_aml_dicts=None)
    Match statement lines with existing payments (eg. checks) and/or payables/receivables (eg. invoices and refunds) and/or new move lines (eg. write-offs). If any new journal item needs to be created (via new_aml_dicts or counterpart_aml_dicts), a new journal entry will be created and will contain those items, as well as a journal item for the bank statement line. Finally, mark the statement line as reconciled by putting the matched moves ids in the column journal_entry_ids. :param self: browse collection of records that are supposed to have no accounting entries already linked. :param (list of dicts) counterpart_aml_dicts: move lines to create to reconcile with existing payables/receivables. The expected keys are : - 'name' - 'debit' - 'credit' - 'move_line' # The move line to reconcile (partially if specified debit/credit is lower than move line's credit/debit) :param (list of recordsets) payment_aml_rec: recordset move lines representing existing payments (which are already fully reconciled) :param (list of dicts) new_aml_dicts: move lines to create. The expected keys are : - 'name' - 'debit' - 'credit' - 'account_id' - (optional) 'tax_ids' - (optional) Other account.move.line fields like analytic_account_id or analytics_id :returns: The journal entries with which the transaction was matched. If there was at least an entry in counterpart_aml_dicts or new_aml_dicts, this list contains the move created by the reconciliation, containing entries for the statement.line (1), the counterpart move lines (0..*) and the new move lines (0..*).
  • process_reconciliations(self, data)
    @api.multi
    Handles data sent from the bank statement reconciliation widget (and can otherwise serve as an old-API bridge) :param list of dicts data: must contains the keys 'counterpart_aml_dicts', 'payment_aml_ids' and 'new_aml_dicts', whose value is the same as described in process_reconciliation except that ids are used instead of recordsets.
  • reconciliation_widget_auto_reconcile(self, num_already_reconciled_lines)
    @api.multi
  • unlink(self)
    @api.multi

New fields (4)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • number Integer
    help='Opening Unit Numbers' string='Number of Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (24)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    oldname='property_account_expense_categ' string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    oldname='property_account_expense' string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    oldname='property_account_income_categ' string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    oldname='property_account_income' string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    oldname='property_account_payable' string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    oldname='property_account_receivable' string='Receivable Account' args: 'account.account.template'
  • property_stock_account_input_categ_id Many2one → account.account.template
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_id Many2one → account.account.template
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' required=True string='Transfer Account' args: 'account.account.template'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (8)
  • create_record_with_xmlid(self, company, template, model, vals)
    @api.multi
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    @api.multi
    This method for generating accounts from templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mappping between the account templates and the real accounts. :param code_digits: number of digits got from wizard.multi.charts.accounts, this is use for account code. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method for generating accounts from templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mappping between the account templates and the real accounts. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: return new_account_reconcile_model for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method generate Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param chart_temp_id: Chart Template Id. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param chart_temp_id: Chart Template Id. :param acc_template_ref: Account templates reference. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • generate_properties(self, acc_template_ref, company)
    @api.multi
    This method used for creating properties. :param self: chart templates for which we need to create properties :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • open_select_template_wizard(self)
    @api.multi
  • try_loading_for_current_company(self)
    @api.one

New fields (1)
  • display_account Selection
    default='movement' required=True string='Display Accounts' args: [('all', 'All'), ('movement', 'With movements'), ('not_zero', 'With balance is not equal to 0')]
Public methods (1)
  • pre_print_report(self, data)
    @api.multi

New fields (1)
  • amount_currency Boolean
    help='Print Report with the currency column if the currency differs from the company currency.' args: 'With Currency'
Public methods (1)
  • pre_print_report(self, data)
    @api.multi

New fields (1)
  • result_selection Selection
    default='customer' required=True string="Partner's" args: [('customer', 'Receivable Accounts'), ('supplier', 'Payable Accounts'), ('customer_supplier', 'Receivable and Payable Accounts')]
Public methods (1)
  • pre_print_report(self, data)

New fields (5)
  • company_id Many2one → res.company
    default=<expr> readonly=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)
    @api.multi

New fields (46)
  • bank_account_code_prefix Char
    help='Define the code prefix for the bank accounts' oldname='bank_account_code_char' related='company_id.bank_account_code_prefix' string='Bank Accounts Prefix *'
  • cash_account_code_prefix Char
    help='Define the code prefix for the cash accounts' related='company_id.cash_account_code_prefix' string='Cash Accounts Prefix *'
  • chart_template_id Many2one → account.chart.template
    domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • code_digits Integer
    help='No. of digits to use for account code' related='company_id.accounts_code_digits' string='# of Digits *'
  • company_footer Text
    help='Bank accounts as printed in the footer of each printed document' readonly=True related='company_id.rml_footer' string='Bank accounts footer preview'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • complete_tax_set Boolean
    help='This boolean helps you to choose if you want to propose to the user to encode\n the sales and purchase rates or use the usual m2o fields. This last choice assumes that\n the set of tax defined for the chosen template is complete' string='Complete set of taxes'
  • currency_exchange_journal_id Many2one → account.journal
    domain="[('company_id', '=', company_id)]" related='company_id.currency_exchange_journal_id' string='Rate Difference Journal' args: 'account.journal'
  • currency_id Many2one → res.currency
    compute='_get_currency_id' help='Main currency of the company.' inverse='_set_currency_id' required=True string='Default company currency' args: 'res.currency'
  • default_purchase_tax_id Many2one → account.tax
    help='This purchase tax will be assigned by default on new products.' oldname='default_purchase_tax' string='Default Purchase Tax' args: 'account.tax'
  • default_sale_tax_id Many2one → account.tax
    help='This sale tax will be assigned by default on new products.' oldname='default_sale_tax' string='Default Sale Tax' args: 'account.tax'
  • expects_chart_of_accounts Boolean
    help='Check this box if this company is a legal entity.' related='company_id.expects_chart_of_accounts' string='This company has its own chart of accounts'
  • fiscalyear_last_day Integer
    default=<expr> related='company_id.fiscalyear_last_day'
  • fiscalyear_last_month Selection
    default=<expr> related='company_id.fiscalyear_last_month' args: [(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' related='company_id.fiscalyear_lock_date' string='Lock Date'
  • group_analytic_accounting Boolean
    help='Allows you to use the analytic accounting.' implied_group='analytic.group_analytic_accounting' string='Analytic accounting'
  • group_multi_currency Boolean
    help='Allows to work in a multi currency environment' implied_group='base.group_multi_currency' string='Allow multi currencies'
  • group_proforma_invoices Boolean
    help='Allows you to put invoices in pro-forma state.' implied_group='account.group_proforma_invoices' string='Allow pro-forma invoices'
  • group_warning_account Selection
    implied_group='account.group_warning_account' args: [(0, 'All the partners can be used in invoices'), (1, 'An informative or blocking warning can be set on a partner')], 'Warning'
  • has_chart_of_accounts Boolean
    string='Company has a chart of accounts'
  • has_default_company Boolean
    default=<expr> readonly=True
  • module_account_accountant Boolean
    help='If you do not check this box, you will be able to do invoicing & payments,\n but not accounting (Journal Items, Chart of Accounts, ...)' string='Full accounting features: journals, legal statements, chart of accounts, etc.'
  • module_account_asset Boolean
    help='Asset management: This allows you to manage the assets owned by a company or a person. It keeps track of the depreciation occurred on those assets, and creates account move for those depreciation lines.\n\n-This installs the module account_asset.' string='Assets management'
  • module_account_bank_statement_import_csv Boolean
    help='Get your bank statements from your bank and import them in Odoo in the .CSV format.\n-This installs the module account_bank_statement_import_csv.' args: 'Import in .csv format'
  • module_account_bank_statement_import_ofx Boolean
    help='Get your bank statements from your bank and import them in Odoo in the .OFX format.\n-This installs the module account_bank_statement_import_ofx.' args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    help='Get your bank statements from your bank and import them in Odoo in the .QIF format.\n-This installs the module account_bank_statement_import_qif.' args: 'Import .qif files'
  • module_account_batch_deposit Boolean
    help='This allows you to group received checks before you deposit them to the bank.\n-This installs the module account_batch_deposit.' string='Use batch deposit'
  • module_account_budget Boolean
    help='This allows accountants to manage analytic and crossovered budgets. Once the master budgets and the budgets are defined, the project managers can set the planned amount on each analytic account.\n-This installs the module account_budget.' string='Budget management'
  • module_account_deferred_revenue Boolean
    help='This allows you to manage the revenue recognition on selling products. It keeps track of the installments occurred on those revenue recognitions, and creates account moves for those installment lines\n-This installs the module account_deferred_revenue.' string='Revenue Recognition'
  • module_account_plaid Boolean
    help='Get your bank statements from you bank and import them through plaid.com.\n-This installs the module account_plaid.' string='Plaid Connector'
  • module_account_reports Boolean
    args: 'Get dynamic accounting reports'
  • module_account_reports_followup Boolean
    help='This allows to automate letters for unpaid invoices, with multi-level recalls.\n-This installs the module account_reports_followup.' args: 'Enable payment followup management'
  • module_account_sepa Boolean
    help='If you check this box, you will be able to register your payment using SEPA.\n-This installs the module account_sepa.' string='Use SEPA payments'
  • module_account_tax_cash_basis Boolean
    help='Generate tax cash basis entrie when reconciliating entries' string='Allow Tax Cash Basis'
  • module_account_yodlee Boolean
    help='Get your bank statements from your bank and import them through yodlee.com.\n-This installs the module account_yodlee.' args: 'Bank Interface - Sync your bank feeds automatically'
  • module_l10n_us_check_printing Boolean
    args: 'Allow check printing and deposits'
  • overdue_msg Text
    related='company_id.overdue_msg' string='Overdue Payments Message *'
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." related='company_id.period_lock_date' string='Lock Date for Non-Advisers'
  • purchase_tax_id Many2one → account.tax.template
    oldname='purchase_tax' string='Default purchase tax' args: 'account.tax.template'
  • purchase_tax_rate Float
    string='Purchase tax (%)'
  • sale_tax_id Many2one → account.tax.template
    oldname='sale_tax' string='Default sale tax' args: 'account.tax.template'
  • sale_tax_rate Float
    string='Sales tax (%)'
  • tax_calculation_rounding_method Selection
    help="If you select 'Round per line' : for each tax, the tax amount will first be\n computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed,\n leading to the total amount for that tax. If you select 'Round globally': for each tax,\n the tax amount will be computed for each PO/SO/invoice line, then these amounts will be\n summed and eventually this total tax amount will be rounded. If you sell with tax included,\n you should choose 'Round per line' because you certainly want the sum of your tax-included line\n subtotals to be equal to the total amount with taxes." related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method *' args: [('round_per_line', 'Round calculation of taxes per line'), ('round_globally', 'Round globally calculation of taxes ')]
  • template_transfer_account_id Many2one → account.account.template
    help='Intermediary account used when moving money from a liquidity account to another' args: 'account.account.template'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' related='company_id.transfer_account_id' args: 'account.account'
  • use_anglo_saxon Boolean
    related='company_id.anglo_saxon_accounting' string='Use Anglo-Saxon Accounting *'
Public methods (12)
  • create(self, vals)
    @api.model
    Avoid to rewrite the `accounts_code_digits` on the company if the value is the same. As all the values are passed on the res.config creation, the related fields are rewriten on each res_config creation. Rewriting the `account_code_digits` on the company will trigger a write on all the account.account to complete the code the missing characters to complete the desired number of digit, leading to a sql_constraint.
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_chart_template_id(self)
    @api.onchange('chart_template_id')
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_module_account_budget(self)
    @api.onchange('module_account_budget')
  • onchange_tax_rate(self)
    @api.onchange('sale_tax_rate')
  • open_bank_accounts(self)
    @api.multi
  • open_company(self)
    @api.multi
  • set_chart_of_accounts(self)
    @api.multi
    install a chart of accounts for the given company (if required)
  • set_group_multi_currency(self)
    @api.multi
  • set_product_taxes(self)
    @api.multi
    Set the product taxes if they have changed
  • set_transfer_account(self)
    @api.multi

New fields (12)
  • account_ids Many2many → account.account
    args: 'account.account', 'account_account_financial_report', 'report_line_id', 'account_id', 'Accounts'
  • account_report_id Many2one → account.financial.report
    args: 'account.financial.report', 'Report Value'
  • account_type_ids Many2many → account.account.type
    args: 'account.account.type', 'account_account_financial_report_type', 'report_id', 'account_type_id', 'Account Types'
  • children_ids One2many → account.financial.report
    args: 'account.financial.report', 'parent_id', 'Account Report'
  • display_detail Selection
    default='detail_flat' args: [('no_detail', 'No detail'), ('detail_flat', 'Display children flat'), ('detail_with_hierarchy', 'Display children with hierarchy')], 'Display details'
  • level Integer
    compute='_get_level' store=True string='Level'
  • name Char
    required=True translate=True args: 'Report Name'
  • parent_id Many2one → account.financial.report
    args: 'account.financial.report', 'Parent'
  • sequence Integer
    args: 'Sequence'
  • sign Selection
    default=1 help='For accounts that are typically more debited than credited and that you would like to print as negative amounts in your reports, you should reverse the sign of the balance; e.g.: Expense account. The same applies for accounts that are typically more credited than debited and that you would like to print as positive amounts in your reports; e.g.: Income account.' required=True args: [(-1, 'Reverse balance sign'), (1, 'Preserve balance sign')], 'Sign on Reports'
  • style_overwrite Selection
    default=0 help="You can set up here the format you want this record to be displayed. If you leave the automatic formatting, it will be computed based on the financial reports hierarchy (auto-computed field 'level')." args: [(0, 'Automatic formatting'), (1, 'Main Title 1 (bold, underlined)'), (2, 'Title 2 (bold)'), (3, 'Title 3 (bold, smaller)'), (4, 'Normal Text'), (5, 'Italic Text (smaller)'), (6, 'Smallest Text')], 'Financial Report Style'
  • type Selection
    default='sum' args: [('sum', 'View'), ('accounts', 'Accounts'), ('account_type', 'Account Type'), ('account_report', 'Report Value')], 'Type'
Public methods (0)

No public methods.

New fields (15)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invocing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position'
  • note Text
    help='Legal mentions that have to be printed on the invoices.' translate=True args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Integer
    default=0 string='Zip Range From'
  • zip_to Integer
    default=0 string='Zip Range To'
Public methods (4)
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
  • map_account(self, account)
    @api.model
  • map_accounts(self, accounts)
    @api.model
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, taxes, product=None, partner=None)
    @api.model

New fields (3)
  • account_dest_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account on Product' args: 'account.account'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_id Many2one → account.tax
    string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (5)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
Public methods (0)

No public methods.

New fields (5)
  • exchange_move_id Many2one → account.move
    args: 'account.move'
  • exchange_partial_rec_id Many2one → account.partial.reconcile
    args: 'account.partial.reconcile'
  • name Char
    copy=False default=<expr> required=True string='Number'
  • partial_reconcile_ids One2many → account.partial.reconcile
    string='Reconciliation Parts' args: 'account.partial.reconcile', 'full_reconcile_id'
  • reconciled_line_ids One2many → account.move.line
    string='Matched Journal Items' args: 'account.move.line', 'full_reconcile_id'
Public methods (1)
  • unlink(self)
    @api.multi
    When removing a full reconciliation, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completly cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (43)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='The partner account used for this invoice.' readonly=True required=True states={'draft': [('readonly', False)]} string='Account' args: 'account.account'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_total Monetary
    compute='_compute_amount' readonly=True store=True string='Total'
  • amount_total_company_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit notes.' readonly=True store=True string='Total in Company Currency'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='currency_id' help='Total amount in the currency of the invoice, negative for credit notes.' readonly=True store=True string='Total in Invoice Currency'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' track_visibility='always'
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount in Company Currency'
  • comment Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Additional Information'
  • commercial_partner_id Many2one → res.partner
    compute_sudo=True help='The commercial entity that will be used on Journal Entries for this invoice' readonly=True related='partner_id.commercial_partner_id' store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=_default_currency readonly=True required=True states={'draft': [('readonly', False)]} string='Currency' track_visibility='always' args: 'res.currency'
  • date Date
    copy=False help='Keep empty to use the invoice date.' readonly=True states={'draft': [('readonly', False)]} string='Accounting Date'
  • date_due Date
    copy=False help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The payment term may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment.' index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • date_invoice Date
    copy=False help='Keep empty to use the current date' index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_outstanding Boolean
    compute='_get_outstanding_info_JSON'
  • invoice_line_ids One2many → account.invoice.line
    copy=True oldname='invoice_line' readonly=True states={'draft': [('readonly', False)]} string='Invoice Lines' args: 'account.invoice.line', 'invoice_id'
  • journal_id Many2one → account.journal
    default=_default_journal domain="[('type', 'in', {'out_invoice': ['sale'], 'out_refund': ['sale'], 'in_refund': ['purchase'], 'in_invoice': ['purchase']}.get(type, [])), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    copy=False help='Link to the automatically generated Journal Items.' index=True ondelete='restrict' readonly=True string='Journal Entry' args: 'account.move'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated.' readonly=False string='Journal Entry Name'
  • name Char
    copy=False help='The name that will be used on account move lines' index=True readonly=True states={'draft': [('readonly', False)]} string='Reference/Description'
  • number Char
    copy=False readonly=True related='move_id.name' store=True
  • origin Char
    help='Reference of the document that produced this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Source Document'
  • outstanding_credits_debits_widget Text
    compute='_get_outstanding_info_JSON'
  • partner_bank_id Many2one → res.partner.bank
    help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Refund, otherwise a Partner bank account number.' readonly=True states={'draft': [('readonly', False)]} string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True readonly=True required=True states={'draft': [('readonly', False)]} string='Partner' track_visibility='always' args: 'res.partner'
  • payment_ids Many2many → account.payment
    copy=False readonly=True string='Payments' args: 'account.payment', 'account_invoice_payment_rel', 'invoice_id', 'payment_id'
  • payment_move_line_ids Many2many → account.move.line
    compute='_compute_payments' store=True string='Payment Move Lines' args: 'account.move.line'
  • payment_term_id Many2one → account.payment.term
    help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month.' oldname='payment_term' readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • payments_widget Text
    compute='_get_payment_info_JSON'
  • reconciled Boolean
    compute='_compute_residual' help='It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment.' readonly=True store=True string='Paid/Reconciled'
  • reference Char
    copy=False help='The partner reference of this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Vendor Reference'
  • reference_type Selection
    default='none' readonly=True required=True states={'draft': [('readonly', False)]} string='Payment Reference' args: '_get_reference_type'
  • refund_invoice_id Many2one → account.invoice
    string='Invoice for which this invoice is the refund' args: 'account.invoice'
  • residual Monetary
    compute='_compute_residual' help='Remaining amount due.' store=True string='Amount Due'
  • residual_company_signed Monetary
    compute='_compute_residual' currency_field='company_currency_id' help='Remaining amount due in the currency of the company.' store=True string='Amount Due in Company Currency'
  • residual_signed Monetary
    compute='_compute_residual' currency_field='currency_id' help='Remaining amount due in the currency of the invoice.' store=True string='Amount Due in Invoice Currency'
  • sent Boolean
    copy=False default=False help='It indicates that the invoice has been sent.' readonly=True
  • state Selection
    copy=False default='draft' help=" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n * The 'Pro-forma' status is used when the invoice does not have an invoice number.\n * The 'Open' status is used when user creates invoice, an invoice number is generated. It stays in the open status till the user pays the invoice.\n * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n * The 'Cancelled' status is used when user cancel invoice." index=True readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Draft'), ('proforma', 'Pro-forma'), ('proforma2', 'Pro-forma'), ('open', 'Open'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • tax_line_ids One2many → account.invoice.tax
    copy=True oldname='tax_line' readonly=True states={'draft': [('readonly', False)]} string='Tax Lines' args: 'account.invoice.tax', 'invoice_id'
  • type Selection
    change_default=True default=<expr> index=True readonly=True track_visibility='always' args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Refund'), ('in_refund', 'Vendor Refund')]
  • user_id Many2one → res.users
    default=<expr> readonly=True states={'draft': [('readonly', False)]} string='Salesperson' track_visibility='onchange' args: 'res.users'
Public methods (32)
  • action_cancel(self)
    @api.multi
  • action_date_assign(self)
    @api.multi
  • action_invoice_cancel(self)
    @api.multi
  • action_invoice_draft(self)
    @api.multi
  • action_invoice_open(self)
    @api.multi
  • action_invoice_paid(self)
    @api.multi
  • action_invoice_proforma2(self)
    @api.multi
  • action_invoice_re_open(self)
    @api.multi
  • action_invoice_sent(self)
    @api.multi
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_move_create(self)
    @api.multi
    Creates invoice related analytics and financial move lines
  • assign_outstanding_credit(self, credit_aml_id)
    @api.multi
  • compute_invoice_totals(self, company_currency, invoice_move_lines)
    @api.multi
  • compute_taxes(self)
    @api.multi
    Function used in other module to compute the taxes on a fresh invoice created (onchanges did not applied)
  • create(self, vals)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • get_delivery_partner_id(self)
    @api.multi
  • get_formview_id(self)
    @api.multi
    Update form view id of action to open the invoice
  • get_taxes_values(self)
    @api.multi
  • group_lines(self, iml, line)
    Merge account move lines (and hence analytic lines) if invoice line hashcodes are equals
  • inv_line_characteristic_hashcode(self, invoice_line)
    Overridable hashcode generation for invoice lines. Lines having the same hashcode will be grouped together if the journal has the 'group line' option. Of course a module can add fields to invoice lines that would need to be tested too before merging lines or not.
  • invoice_line_move_line_get(self)
    @api.model
  • invoice_print(self)
    @api.multi
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • invoice_validate(self)
    @api.multi
  • line_get_convert(self, line, part)
    @api.model
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • pay_and_reconcile(self, pay_journal, pay_amount=None, date=None, writeoff_acc=None)
    @api.multi
    Create and post an account.payment for the invoice self, which creates a journal entry that reconciles the invoice. :param pay_journal: journal in which the payment entry will be created :param pay_amount: amount of the payment to register, defaults to the residual of the invoice :param date: payment date, defaults to fields.Date.context_today(self) :param writeoff_acc: account in which to create a writeoff if pay_amount < self.residual, so that the invoice is fully paid
  • refund(self, date_invoice=None, date=None, description=None, journal_id=None)
    @api.multi@api.returns('self')
  • register_payment(self, payment_line, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
    Reconcile payable/receivable lines from the invoice with payment_line
  • tax_line_move_line_get(self)
    @api.model
  • unlink(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • invoice_cancel(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • invoice_confirm(self)
    @api.multi

New fields (19)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    default=_default_account domain=[('deprecated', '=', False)] help='The income or expense account related to the selected product.' required=True string='Account' args: 'account.account'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic Tags' args: 'account.analytic.tag'
  • company_currency_id Many2one → res.currency
    readonly=True related='invoice_id.company_currency_id' related_sudo=False args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True related='invoice_id.company_id' related_sudo=False store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' related_sudo=False store=True args: 'res.currency'
  • discount Float
    default=0.0 digits=dp.get_precision('Discount') string='Discount (%)'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice Reference' args: 'account.invoice'
  • invoice_line_tax_ids Many2many → account.tax
    domain=[('type_tax_use', '!=', 'none'), '|', ('active', '=', False), ('active', '=', True)] oldname='invoice_line_tax_id' string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • name Text
    required=True string='Description'
  • origin Char
    help='Reference of the document that produced this invoice.' string='Source Document'
  • partner_id Many2one → res.partner
    readonly=True related='invoice_id.partner_id' related_sudo=False store=True string='Partner' args: 'res.partner'
  • price_subtotal Monetary
    compute='_compute_price' readonly=True store=True string='Amount'
  • price_subtotal_signed Monetary
    compute='_compute_price' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit notes.' readonly=True store=True string='Amount Signed'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True string='Unit Price'
  • product_id Many2one → product.product
    index=True ondelete='restrict' string='Product' args: 'product.product'
  • quantity Float
    default=1 digits=dp.get_precision('Product Unit of Measure') required=True string='Quantity'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the invoice.'
  • uom_id Many2one → product.uom
    index=True oldname='uos_id' ondelete='set null' string='Unit of Measure' args: 'product.uom'
Public methods (3)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_invoice_line_account(self, type, product, fpos, company)
    @api.v8
  • unlink(self)
    @api.multi

New fields (5)
  • date Date
    string='Accounting Date'
  • date_invoice Date
    default=fields.Date.context_today required=True string='Refund Date'
  • description Char
    default=_get_reason required=True string='Reason'
  • filter_refund Selection
    default='refund' help='Refund base on this type. You can not Modify and Cancel if the invoice is already reconciled' required=True string='Refund Method' args: [('refund', 'Create a draft refund'), ('cancel', 'Cancel: create refund and reconcile'), ('modify', 'Modify: create refund, reconcile and create a new draft invoice')]
  • refund_only Boolean
    compute='_get_refund_only' string='Technical field to hide filter_refund in case invoice is partially paid'
Public methods (2)
  • compute_refund(self, mode='refund')
    @api.multi
  • invoice_refund(self)
    @api.multi

New fields (30)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Account' args: 'account.account'
  • account_line_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Account Line' args: 'account.account'
  • categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country of the Partner Company' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • currency_rate Float
    group_operator='avg' readonly=True string='Currency Rate'
  • date Date
    readonly=True
  • date_due Date
    readonly=True string='Due Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • nbr Integer
    readonly=True string='# of Lines'
  • partner_bank_id Many2one → res.partner.bank
    readonly=True string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_term_id Many2one → account.payment.term
    oldname='payment_term' readonly=True string='Payment Terms' args: 'account.payment.term'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_total Float
    readonly=True string='Total Without Tax'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_qty Float
    readonly=True string='Product Quantity'
  • residual Float
    readonly=True string='Total Residual'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('proforma', 'Pro-forma'), ('proforma2', 'Pro-forma'), ('open', 'Open'), ('paid', 'Done'), ('cancel', 'Cancelled')]
  • type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Refund'), ('in_refund', 'Vendor Refund')]
  • uom_name Char
    readonly=True string='Reference Unit of Measure'
  • user_currency_price_average Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Average Price'
  • user_currency_price_total Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Without Tax'
  • user_currency_residual Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Residual'
  • user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • volume Float
    readonly=True string='Volume'
  • weight Float
    readonly=True string='Gross Weight'
Public methods (1)
  • init(self)
    @api.model_cr

New fields (11)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Tax Account' args: 'account.account'
  • amount Monetary
  • base Monetary
    compute='_compute_base_amount' string='Base'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True related='invoice_id.currency_id' store=True args: 'res.currency'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice' args: 'account.invoice'
  • manual Boolean
    default=True
  • name Char
    required=True string='Tax Description'
  • sequence Integer
    help='Gives the sequence order when displaying a list of invoice tax.'
  • tax_id Many2one → account.tax
    ondelete='restrict' string='Tax' args: 'account.tax'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (3)
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (14)
  • action_create_new(self)
    @api.multi
  • action_open_reconcile(self)
    @api.multi
  • create_bank_statement(self)
    @api.multi
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
    @api.multi
  • get_bar_graph_datas(self)
    @api.multi
  • get_journal_dashboard_datas(self)
    @api.multi
  • get_line_graph_datas(self)
    @api.multi
  • open_action(self)
    @api.multi
    return action based on type for related journals
  • open_action_with_context(self)
    @api.multi
  • open_collect_money(self)
    @api.multi
  • open_payments_action(self, payment_type)
    @api.multi
  • open_spend_money(self)
    @api.multi
  • open_transfer_money(self)
    @api.multi
  • toggle_favorite(self)
    @api.multi

New fields (14)
  • amount Monetary
    compute='_amount_compute' store=True
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' store=True string='Currency' args: 'res.currency'
  • date Date
    default=fields.Date.context_today index=True required=True states={'posted': [('readonly', True)]}
  • dummy_account_id Many2one → account.account
    readonly=True related='line_ids.account_id' store=False string='Account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal required=True states={'posted': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True states={'posted': [('readonly', True)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • matched_percentage Float
    compute='_compute_matched_percentage' digits=0 help='Technical field used in cash basis method' readonly=True store=True args: 'Percentage Matched'
  • name Char
    copy=False default='/' required=True string='Number'
  • narration Text
    string='Internal Note'
  • partner_id Many2one → res.partner
    compute='_compute_partner_id' readonly=True store=True string='Partner' args: 'res.partner'
  • ref Char
    copy=False string='Reference'
  • state Selection
    copy=False default='draft' help="All manually created new journal entries are usually in the status 'Unposted', but you can set the option to skip that status on the related journal. In that case, they will behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in 'Posted' status." readonly=True required=True string='Status' args: [('draft', 'Unposted'), ('posted', 'Posted')]
  • statement_line_id Many2one → account.bank.statement.line
    copy=False index=True readonly=True string='Bank statement line reconciled with this entry' args: 'account.bank.statement.line'
Public methods (10)
  • assert_balanced(self)
    @api.multi
  • button_cancel(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'state')
  • open_reconcile_view(self)
    @api.multi
  • post(self)
    @api.multi
  • reverse_moves(self, date=None, journal_id=None)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (40)
  • account_id Many2one → account.account
    default=<expr> domain=[('deprecated', '=', False)] index=True ondelete='cascade' required=True string='Account' args: 'account.account'
  • amount_currency Monetary
    default=0.0 help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • amount_residual Monetary
    compute='_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    oldname='analytic_lines' string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • analytic_tag_ids Many2many → account.analytic.tag
    string='Analytic tags' args: 'account.analytic.tag'
  • balance Monetary
    compute='_store_balance' currency_field='company_currency_id' help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True
  • balance_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' help='Technical field holding the debit_cash_basis - credit_cash_basis in order to open meaningful graph views from reports' store=True
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    related='account_id.company_id' store=True string='Company' args: 'res.company'
  • counterpart Char
    compute='_get_counterpart' help='Compute the counter part accounts of this journal item for this journal entry. This can be needed in reports.' args: 'Counterpart'
  • credit Monetary
    currency_field='company_currency_id' default=0.0
  • credit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' store=True
  • currency_id Many2one → res.currency
    default=_get_currency help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    copy=False index=True related='move_id.date' store=True string='Date'
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True required=True string='Due date'
  • debit Monetary
    currency_field='company_currency_id' default=0.0
  • debit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' store=True
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Matching Number' args: 'account.full.reconcile'
  • invoice_id Many2one → account.invoice
    oldname='invoice' args: 'account.invoice'
  • journal_id Many2one → account.journal
    copy=False index=True related='move_id.journal_id' store=True string='Journal' args: 'account.journal'
  • matched_credit_ids One2many → account.partial.reconcile
    String='Matched Credits' help='Credit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    String='Matched Debits' help='Debit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'credit_move_id'
  • move_id Many2one → account.move
    auto_join=True help='The move of this entry line.' index=True ondelete='cascade' required=True string='Journal Entry' args: 'account.move'
  • name Char
    required=True string='Label'
  • narration Text
    related='move_id.narration' string='Narration'
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    copy=False help='Payment that created this entry' string='Originator Payment' args: 'account.payment'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → product.uom
    string='Unit of Measure' args: 'product.uom'
  • quantity Float
    digits=dp.get_precision('Product Unit of Measure') help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.'
  • reconciled Boolean
    compute='_amount_residual' store=True
  • ref Char
    copy=False index=True related='move_id.ref' store=True string='Reference'
  • statement_id Many2one → account.bank.statement
    copy=False help='The bank statement used for bank reconciliation' index=True string='Statement' args: 'account.bank.statement'
  • tax_exigible Boolean
    default=True help='Technical field used to mark a tax line as exigible in the vat report or not (only exigible journal items are displayed). By default all new journal items are directly exigible, but with the module account_tax_cash_basis, some will become exigible only when the payment is recorded.' string='Appears in VAT report'
  • tax_ids Many2many → account.tax
    domain=['|', ('active', '=', False), ('active', '=', True)] string='Taxes' args: 'account.tax'
  • tax_line_id Many2one → account.tax
    ondelete='restrict' string='Originator tax' args: 'account.tax'
  • user_type_id Many2one → account.account.type
    index=True oldname='user_type' related='account_id.user_type_id' store=True args: 'account.account.type'
Public methods (20)
  • auto_reconcile_lines(self)
    This function iterates recursively on the recordset given as parameter as long as it can find a debit and a credit to reconcile together. It returns the recordset of the account move lines that were not reconciled during the process.
  • compute_amount_fields(self, amount, src_currency, company_currency, invoice_currency=False)
    @api.model
    Helper function to compute value for fields debit/credit/amount_currency based on an amount and the currencies given in parameter
  • compute_full_after_batch_reconcile(self)
    @api.model
    After running the manual reconciliation wizard and making full reconciliation, we need to run this method to create potentially an exchange rate entry that will balance the remaining amount_residual_currency (possibly several aml). This ensure that all aml in the full reconciliation are reconciled (amount_residual = amount_residual_currency = 0).
  • create(self, vals)
    @api.model
    :context's key apply_taxes: set to True if you want vals['tax_ids'] to result in the creation of move lines for taxes and eventual adjustment of the line amount (in case of a tax included in price). :context's key `check_move_validity`: check data consistency after move line creation. Eg. set to false to disable verification that the move debit-credit == 0 while creating the move lines composing the move.
  • create_analytic_lines(self)
    @api.multi
    Create analytic items upon validation of an account.move.line having an analytic account. This method first remove any existing analytic item related to the line before creating any new one.
  • domain_move_lines_for_reconciliation(self, excluded_ids=None, str=False)
    @api.model
    Returns the domain which is common to both manual and bank statement reconciliation. :param excluded_ids: list of ids of move lines that should not be fetched :param str: search string
  • get_data_for_manual_reconciliation(self, res_type, res_ids=None, account_type=None)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts (list of dicts). If no res_ids is passed, returns data for all partners/accounts that can be reconciled. :param res_type: either 'partner' or 'account' :param res_ids: ids of the partners/accounts to reconcile, use None to fetch data indiscriminately of the id, use [] to prevent from fetching any data at all. :param account_type: if a partner is both customer and vendor, you can use 'payable' to reconcile the vendor-related journal entries and 'receivable' for the customer-related entries.
  • get_data_for_manual_reconciliation_widget(self, partner_ids, account_ids)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts. If an argument is None, fetch all related reconciliations. Use [] to fetch nothing.
  • get_move_lines_for_manual_reconciliation(self, account_id, partner_id=False, excluded_ids=None, str=False, offset=0, limit=None, target_currency_id=False)
    @api.model
    Returns unreconciled move lines for an account or a partner+account, formatted for the manual reconciliation widget
  • get_reconciliation_proposition(self, account_id, partner_id=False)
    @api.model
    Returns two lines whose amount are opposite
  • init(self)
    @api.model_cr
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • name_get(self)
    @api.multi@api.depends('ref', 'move_id')
  • open_reconcile_view(self)
    @api.multi
  • prepare_move_lines_for_reconciliation_widget(self, target_currency=False, target_date=False)
    @api.multi
    Returns move lines formatted for the manual/bank reconciliation widget :param target_currency: currency (browse_record or ID) you want the move line debit/credit converted into :param target_date: date to use for the monetary conversion
  • process_reconciliation(self, new_mv_line_dicts)
    @api.multi
    Create new move lines from new_mv_line_dicts (if not empty) then call reconcile_partial on self and new move lines :param new_mv_line_dicts: list of dicts containing values suitable fot account_move_line.create()
  • process_reconciliations(self, data)
    @api.model
    Used to validate a batch of reconciliations in a single call :param data: list of dicts containing: - 'type': either 'partner' or 'account' - 'id': id of the affected res.partner or account.account - 'mv_line_ids': ids of exisiting account.move.line to reconcile - 'new_mv_line_dicts': list of dicts containing values suitable for account_move_line.create()
  • reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
  • remove_move_reconcile(self)
    @api.multi
    Undo a reconciliation
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • credit Float
    digits=0 readonly=True string='Credit amount'
  • debit Float
    digits=0 readonly=True string='Debit amount'
  • trans_nbr Integer
    readonly=True string='# of Transaction'
  • writeoff Float
    digits=0 readonly=True string='Write-Off amount'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • trans_rec_addendum_writeoff(self)
    @api.multi
  • trans_rec_get(self)
    @api.multi
  • trans_rec_reconcile_full(self)
    @api.multi
  • trans_rec_reconcile_partial_reconcile(self)
    @api.multi

New fields (5)
  • analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • comment Char
    default='Write-off' required=True
  • date_p Date
    default=fields.Date.context_today string='Date'
  • journal_id Many2one → account.journal
    required=True string='Write-Off Journal' args: 'account.journal'
  • writeoff_acc_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Write-Off account' args: 'account.account'
Public methods (3)
  • trans_rec_addendum(self)
    @api.multi
  • trans_rec_reconcile(self)
    @api.multi
  • trans_rec_reconcile_partial(self)
    @api.multi

New fields (2)
  • date Date
    default=fields.Date.context_today required=True string='Reversal date'
  • journal_id Many2one → account.journal
    help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
Public methods (1)
  • reverse_moves(self)
    @api.multi

New fields (8)
  • amount Monetary
    currency_field='company_currency_id' help='Amount concerned by this matching. Assumed to be always positive'
  • amount_currency Monetary
    string='Amount in Currency'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    related='debit_move_id.company_id' store=True string='Currency' args: 'res.company'
  • credit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • debit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • full_reconcile_id Many2one → account.full.reconcile
    copy=False string='Full Reconcile' args: 'account.full.reconcile'
Public methods (3)
  • create(self, vals)
    @api.model
  • create_exchange_rate_entry(self, aml_to_fix, amount_diff, diff_in_currency, currency, move_date)
    Automatically create a journal entry to book the exchange rate difference. That new journal entry is made in the company `currency_exchange_journal_id` and one of its journal items is matched with the other lines to balance the full reconciliation.
  • unlink(self)
    @api.multi
    When removing a partial reconciliation, also unlink its full reconciliation if it exists

New fields (14)
  • company_id Many2one
    store=True
  • destination_account_id Many2one → account.account
    compute='_compute_destination_account_id' readonly=True args: 'account.account'
  • destination_journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] string='Transfer To' args: 'account.journal'
  • has_invoices Boolean
    compute='_get_has_invoices' help='Technical field used for usability purposes'
  • invoice_ids Many2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'account_invoice_payment_rel', 'payment_id', 'invoice_id'
  • move_line_ids One2many → account.move.line
    copy=False ondelete='restrict' readonly=True args: 'account.move.line', 'payment_id'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the journal entry, automatically set when the statement line is reconciled then stored to set the same number again if the line is cancelled, set to draft and re-processed again.' readonly=True string='Journal Entry Name'
  • name Char
    copy=False default='Draft Payment' readonly=True
  • payment_difference Monetary
    compute='_compute_payment_difference' readonly=True
  • payment_difference_handling Selection
    copy=False default='open' string='Payment Difference' args: [('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')]
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' readonly=True
  • payment_type Selection
    selection_add=[('transfer', 'Internal Transfer')]
  • state Selection
    copy=False default='draft' readonly=True string='Status' args: [('draft', 'Draft'), ('posted', 'Posted'), ('sent', 'Sent'), ('reconciled', 'Reconciled')]
  • writeoff_account_id Many2one → account.account
    copy=False domain=[('deprecated', '=', False)] string='Difference Account' args: 'account.account'
Public methods (9)
  • button_dummy(self)
    @api.multi
  • button_invoices(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • cancel(self)
    @api.multi
  • default_get(self, fields)
    @api.model
  • open_payment_matching_screen(self)
  • post(self)
    @api.multi
    Create the journal items for the payment and update the payment's state to 'posted'. A journal entry is created containing an item in the source liquidity account (selected journal's default_debit or default_credit) and another in the destination reconciliable account (see _compute_destination_account_id). If invoice_ids is not empty, there will be one reconciliable move line per invoice to reconcile with. If the payment is a transfer, a second journal entry is created in the destination journal to receive money from the transfer account.
  • unlink(self)
    @api.multi
  • unreconcile(self)
    @api.multi
    Set back the payments in 'posted' or 'sent' state, without deleting the journal entries. Called when cancelling a bank statement line linked to a pre-registered payment.

New fields (3)
  • code Char
    required=True
  • name Char
    required=True translate=True
  • payment_type Selection
    required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment term without removing it.'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Terms' translate=True
  • note Text
    string='Description on the Invoice' translate=True
Public methods (2)
  • compute(self, value, date_ref=False)
    @api.one
  • unlink(self)
    @api.multi

New fields (6)
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'Day(s) after the invoice date'), ('fix_day_following_month', 'Day(s) after the end of the invoice month (Net EOM)'), ('last_day_following_month', 'Last day of following month'), ('last_day_current_month', 'Last day of current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Terms' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment term lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment term line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits=dp.get_precision('Payment Terms') help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (2)
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • sort_selection Selection
    default='move_name' required=True args: [('date', 'Date'), ('move_name', 'Journal Entry Number')], 'Entries Sorted by'
Public methods (0)

No public methods.

New fields (13)
  • account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Account' args: 'account.account.template'
  • amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True
  • amount_type Selection
    default='percentage' required=True args: [('fixed', 'Fixed'), ('percentage', 'Percentage of balance')]
  • has_second_line Boolean
    default=False string='Add a second line'
  • label Char
    string='Journal Item Label'
  • name Char
    required=True string='Button Label'
  • second_account_id Many2one → account.account.template
    domain=[('deprecated', '=', False)] ondelete='cascade' string='Second Account' args: 'account.account.template'
  • second_amount Float
    default=100.0 digits=0 help='Fixed amount will count as a debit if it is negative, as a credit if it is positive.' required=True string='Second Amount'
  • second_amount_type Selection
    default='percentage' required=True string='Second Amount type' args: [('fixed', 'Fixed'), ('percentage', 'Percentage of amount')]
  • second_label Char
    string='Second Journal Item Label'
  • second_tax_id Many2one → account.tax.template
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Second Tax' args: 'account.tax.template'
  • sequence Integer
    default=10 required=True
  • tax_id Many2one → account.tax.template
    domain=[('type_tax_use', '=', 'purchase')] ondelete='restrict' string='Tax' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • create_payment(self)
    @api.multi
  • default_get(self, fields)
    @api.model
  • get_payment_vals(self)
    Hook for extension

New fields (3)
  • initial_balance Boolean
    help="If you selected date, this field allow you to add a row to display the amount of debit/credit/balance that precedes the filter you've set." string='Include Initial Balances'
  • journal_ids Many2many → account.journal
    required=True string='Journals' args: 'account.journal', 'account_report_general_ledger_journal_rel', 'account_id', 'journal_id'
  • sortby Selection
    default='sort_date' required=True string='Sort by' args: [('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')]
Public methods (0)

No public methods.

New fields (2)
  • amount_currency Boolean
    help='It adds the currency column on report if the currency differs from the company currency.' args: 'With Currency'
  • reconciled Boolean
    args: 'Reconciled Entries'
Public methods (0)

No public methods.

New fields (18)
  • account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account.' oldname='account_collected_id' ondelete='restrict' string='Tax Account' args: 'account.account.template'
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Subsequent Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account.' oldname='account_paid_id' ondelete='restrict' string='Tax Account on Refunds' args: 'account.account.template'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag'
  • tax_adjustment Boolean
    default=False
  • tax_group_id Many2one → account.tax.group
    string='Tax Group' args: 'account.tax.group'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Scope' args: [('sale', 'Sales'), ('purchase', 'Purchases'), ('none', 'None')]
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'description')

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)
    @api.multi

New fields (7)
  • account_report_id Many2one → account.financial.report
    default=_get_account_report required=True string='Account Reports' args: 'account.financial.report'
  • date_from_cmp Date
    string='Start Date'
  • date_to_cmp Date
    string='End Date'
  • debit_credit Boolean
    help='This option allows you to get more details about the way your balances are computed. Because it is space consuming, we do not allow to use it while doing a comparison.' string='Display Debit/Credit Columns'
  • enable_filter Boolean
    string='Enable Comparison'
  • filter_cmp Selection
    default='filter_no' required=True string='Filter by' args: [('filter_no', 'No Filters'), ('filter_date', 'Date')]
  • label_filter Char
    help='This label will be displayed on report to show the balance computed for the given comparison filter.' string='Column Label'
Public methods (1)
  • check_report(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)
    @api.multi

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices to value expenses.' oldname='property_account_expense_categ' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices to value sales.' oldname='property_account_income_categ' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices instead of the default one to value expenses for the current product.' oldname='property_account_expense' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices instead of the default one to value sales for the current product.' oldname='property_account_income' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    domain=[('type_tax_use', '=', 'purchase')] string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • taxes_id Many2many → account.tax
    domain=[('type_tax_use', '=', 'sale')] string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_account_lines(self, data)
  • render_html(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • lines(self, target_move, journal_ids, sort_selection, data)
  • render_html(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, docids, data=None)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, docids, data=None)
    @api.model

New fields (20)
  • accounts_code_digits Integer
    string='Number of digits in an account code'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" related='currency_exchange_journal_id.default_debit_account_id' string='Loss Exchange Rate Account' args: 'account.account'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default=12 required=True args: [(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" related='currency_exchange_journal_id.default_credit_account_id' string='Gain Exchange Rate Account' args: 'account.account'
  • overdue_msg Text
    default='Dear Sir/Madam,\n\nOur records indicate that some payments on your account are still due. Please find details below.\nIf the amount has already been paid, please disregard this notice. Otherwise, please forward us the total amount stated below.\nIf you have any queries regarding your account, Please contact us.\n\nThank you in advance for your cooperation.\nBest Regards,' string='Overdue Payments Message' translate=True
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' help="If you select 'Round per Line' : for each tax, the tax amount will first be computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed, leading to the total amount for that tax. If you select 'Round Globally': for each tax, the tax amount will be computed for each PO/SO/invoice line, then these amounts will be summed and eventually this total tax amount will be rounded. If you sell with tax included, you should choose 'Round per line' because you certainly want the sum of your tax-included line subtotals to be equal to the total amount with taxes." string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (5)
  • compute_fiscalyear_dates(self, date)
    @api.multi
    Computes the start and end dates of the fiscalyear where the given 'date' belongs to @param date: a datetime object @returns: a dictionary with date_from and date_to
  • get_new_account_code(self, current_code, old_prefix, new_prefix, digits)
  • reflect_code_digits_change(self, digits)
  • reflect_code_prefix_change(self, old_code, new_code, digits)
  • write(self, values)
    @api.multi

New fields (22)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Contracts' args: 'account.analytic.account', 'partner_id'
  • contracts_count Integer
    compute='_compute_contracts_count' string='Contracts' type='integer'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'partner_id'
  • invoice_warn Selection
    default='no-message' help=WARNING_HELP required=True args: WARNING_MESSAGE, 'Invoice'
  • invoice_warn_msg Text
    args: 'Message for Invoice'
  • issued_total Monetary
    compute='_compute_issued_total' string='Journal Items'
  • journal_item_count Integer
    compute='_compute_journal_item_count' string='Journal Items' type='integer'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' oldname='last_reconciliation_date' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' oldname='property_account_payable' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position will determine taxes and accounts used for the partner.' oldname='property_account_position' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' oldname='property_account_receivable' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sale orders and customer invoices' oldname='property_payment_term' string='Customer Payment Terms' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' oldname='property_supplier_payment_term' string='Vendor Payment Terms' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    oldname='ref_companies' string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice' string='Total Invoiced'
  • trust Selection
    company_dependent=True default='normal' string='Degree of trust you have in this debtor' args: [('good', 'Good Debtor'), ('normal', 'Normal Debtor'), ('bad', 'Bad Debtor')]
Public methods (3)
  • get_followup_lines_domain(self, date, overdue_only=False, only_unblocked=False)
  • mark_as_reconciled(self)
    @api.multi
  • open_partner_history(self)
    This function returns an action that display invoices/refunds made for the given partners.

New fields (9)
  • adjustment_type Selection
    required=True store=False string='Adjustment Type' args: [('debit', 'Applied on debit journal item'), ('credit', 'Applied on credit journal item')]
  • amount Monetary
    currency_field='company_currency_id' required=True
  • company_currency_id Many2one → res.currency
    default=<expr> readonly=True args: 'res.currency'
  • credit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Credit account' args: 'account.account'
  • date Date
    default=fields.Date.context_today required=True
  • debit_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Debit account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal domain=[('type', '=', 'general')] required=True string='Journal' args: 'account.journal'
  • reason Char
    required=True string='Justification'
  • tax_id Many2one → account.tax
    domain=[('type_tax_use', '=', 'none'), ('tax_adjustment', '=', True)] ondelete='restrict' required=True string='Adjustment Tax' args: 'account.tax'
Public methods (3)
  • create_move(self)
  • create_move_credit(self)
    @api.multi
  • create_move_debit(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate_move(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' args: 'Bank Accounts Prefix'
  • bank_account_ids One2many → account.bank.accounts.wizard
    oldname='bank_accounts_id' required=True string='Cash and Banks' args: 'account.bank.accounts.wizard', 'bank_account_id'
  • cash_account_code_prefix Char
    args: 'Cash Accounts Prefix'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • code_digits Integer
    help='No. of Digits to use for account code' required=True string='# of Digits'
  • company_id Many2one → res.company
    required=True string='Company' args: 'res.company'
  • complete_tax_set Boolean
    help='This boolean helps you to choose if you want to propose to the user to encode the sales and purchase rates or use the usual m2o fields. This last choice assumes that the set of tax defined for the chosen template is complete' args: 'Complete Set of Taxes'
  • currency_id Many2one → res.currency
    help="Currency as per company's country." required=True string='Currency' args: 'res.currency'
  • only_one_chart_template Boolean
    string='Only One Chart Template Available'
  • purchase_tax_id Many2one → account.tax.template
    oldname='purchase_tax' string='Default Purchase Tax' args: 'account.tax.template'
  • purchase_tax_rate Float
    string='Purchase Tax(%)'
  • sale_tax_id Many2one → account.tax.template
    oldname='sale_tax' string='Default Sales Tax' args: 'account.tax.template'
  • sale_tax_rate Float
    string='Sales Tax(%)'
  • transfer_account_id Many2one → account.account.template
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' required=True string='Transfer Account' args: 'account.account.template'
  • use_anglo_saxon Boolean
    related='chart_template_id.use_anglo_saxon' string='Use Anglo-Saxon Accounting'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • execute(self)
    @api.multi
    This function is called at the confirmation of the wizard to generate the COA from the templates. It will read all the provided information to create the accounts, the banks, the journals, the taxes, the accounting properties... accordingly for the chosen company.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • onchange_chart_template_id(self)
    @api.onchange('chart_template_id')
  • onchange_tax_rate(self)
    @api.onchange('sale_tax_rate')
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Stéphane Bidoul, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Xavier Morel, Joren Van Onder, Goffin Simon, Cedric Snauwaert, Simon Lejeune, Frédéric van der Essen, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Julien Legros, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Julien De Coster, Olivier Colson, pvy, Denis Michiels, Arthur Maniet, Yannick Tivisse, qsm-odoo, Cédric Snauwaert, Martin Geubelle, Odoo Online, Laurent Smet, Denis Vermylen (dve), De Paoli Quentin, mge-odoo, Quentin De Paoli, Valencia Rodrigues Sah, Olivier Laurent
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Invoicing & Payments
====================
The specific and easy-to-use Invoicing system in Odoo allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your vendors and customers.

You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account.
    

Code Analysis

Views touched (122)
XML IDNameModelTypeStatus
account.report_overdue_document account.report_overdue_document ir.ui.view qweb New
account_aged_balance_view Aged Partner Balance account.aged.trial.balance form New
account_bank_statement_graph account.bank.statement.graph account.bank.statement graph New
account_bank_statement_pivot account.bank.statement.pivot account.bank.statement pivot New
account_common_report_view Common Report account.common.report form New
account_invoice_cancel_view account.invoice.cancel.form account.invoice.cancel form New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_invoice_report_duplicate account_invoice_report_duplicate ir.ui.view qweb Inherits account.report_invoice_document
account_invoice_report_duplicate_main account_invoice_report_duplicate_main ir.ui.view qweb New
account_journal_dashboard_kanban_view account.journal.dashboard.kanban account.journal kanban New
account_move_line_graph_date account.move.line.graph account.move.line graph New
account_move_line_graph_date_cash_basis account.move.line.graph account.move.line graph New
account_move_line_reconcile_writeoff account.move.line.reconcile.writeoff.form account.move.line.reconcile.writeoff form New
account_planner account_planner ir.ui.view qweb New
account_report_balance_view Trial Balance account.balance.report data Inherits account_common_report_view
account_report_general_ledger_view General Ledger account.report.general.ledger data Inherits account_common_report_view
account_unreconcile_view Unreconcile Entries account.unreconcile form New
accounting_report_view Accounting Report accounting.report field Inherits account.account_common_report_view
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
cash_box_in_form cash_box_in cash.box.in form New
cash_box_out_form cash_box_out cash.box.out form New
external_layout_footer external_layout_footer ir.ui.view qweb Inherits report.external_layout_footer
invoice_form account.invoice.form account.invoice form New
invoice_kanban account.invoice.kanban account.invoice kanban New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_supplier_tree account.invoice.supplier.tree account.invoice tree New
invoice_tree account.invoice.tree account.invoice tree New
partner_view_button_contracts_count partner.view.button.contracts_count res.partner div Inherits base.view_partner_form
partner_view_buttons partner.view.buttons res.partner div Inherits base.view_partner_form
product_template_form_view product.template.form.inherit product.template page Inherits product.product_template_form_view
report_agedpartnerbalance report_agedpartnerbalance ir.ui.view qweb New
report_financial report_financial ir.ui.view qweb New
report_generalledger report_generalledger ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_overdue report_overdue ir.ui.view qweb New
report_trialbalance report_trialbalance ir.ui.view qweb New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_analytic_line_filter_inherit_account account.analytic.line.select.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_filter
view_account_analytic_line_form_inherit_account account.analytic.line.form.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_form
view_account_analytic_line_pivot account.analytic.line.pivot account.analytic.line field Inherits analytic.view_account_analytic_line_pivot
view_account_analytic_line_tree_inherit_account account.analytic.line.tree.inherit.account account.analytic.line data Inherits analytic.view_account_analytic_line_tree
view_account_bank_journal_form account.bank.journal.form account.journal form New
view_account_bank_journal_tree account.bank.journal.tree account.journal tree New
view_account_bnk_stmt_cashbox account.bnk_stmt_cashbox.form account.bank.statement.cashbox form New
view_account_bnk_stmt_check account.bnk_stmt_check.form account.bank.statement.closebalance form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_config_settings account settings account.config.settings form New
view_account_financial_report_form account.financial.report.form account.financial.report form New
view_account_financial_report_search account.financial.report.search account.financial.report search New
view_account_financial_report_tree account.financial.report.tree account.financial.report tree New
view_account_form account.account.form account.account form New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_pivot account.invoice.report.pivot account.invoice.report pivot New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_filter account.move.select account.move search New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_line_reconcile_full account.move.line.reconcile.full.form account.move.line.reconcile form New
view_account_move_reversal account.move.reversal.form account.move.reversal form New
view_account_operation_template_form account.operation.template.form account.operation.template form New
view_account_operation_template_search account.operation.template.search account.operation.template search New
view_account_operation_template_tree account.operation.template.tree account.operation.template tree New
view_account_payment_form account.payment.form account.payment form New
view_account_payment_from_invoices account.register.payments.wizard account.register.payments form New
view_account_payment_graph account.payment.graph account.payment graph New
view_account_payment_invoice_form account.payment.invoice.form account.payment form New
view_account_payment_search account.payment.search account.payment search New
view_account_payment_tree account.payment.tree account.payment tree New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_report_tree_hierarchy account.report.hierarchy account.financial.report tree New
view_account_search account.account.search account.account search New
view_account_supplier_payment_tree account.supplier.payment.tree account.payment tree New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_line_form bank.statement.line.form account.bank.statement.line form New
view_bank_statement_line_search account.bank.statement.line.search account.bank.statement.line search New
view_bank_statement_line_tree account.bank.statement.line.tree account.bank.statement.line tree New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category group Inherits product.product_category_form_view
view_company_inherit_form res.company.form.inherit res.company field Inherits base.view_company_form
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_pivot account.invoice.pivot account.invoice pivot New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_form2 account.move.line.form2 account.move.line form New
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_tree account.move.tree account.move tree New
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_tax_form account.tax.form account.tax form New
view_tax_tree account.tax.tree account.tax tree New
view_wizard_multi_chart Choose Accounting Template wizard.multi.charts.accounts form Inherits base.res_config_view_base
Models touched (60)

New fields (12)
  • amount Monetary
    required=True string='Payment Amount'
  • communication Char
    string='Memo'
  • company_id Many2one → res.company
    readonly=True related='journal_id.company_id' string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • hide_payment_method Boolean
    compute='_compute_hide_payment_method' help="Technical field used to hide the payment method if the selected journal has only one available which is 'manual'"
  • journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] required=True string='Payment Method' args: 'account.journal'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_type Selection
    args: [('customer', 'Customer'), ('supplier', 'Vendor')]
  • payment_date Date
    copy=False default=fields.Date.context_today required=True string='Payment Date'
  • payment_method_code Char
    help='Technical field used to adapt the interface to the payment type selected.' readonly=True related='payment_method_id.code'
  • payment_method_id Many2one → account.payment.method
    oldname='payment_method' required=True string='Payment Type' args: 'account.payment.method'
  • payment_type Selection
    required=True string='Payment Type' args: [('outbound', 'Send Money'), ('inbound', 'Receive Money')]
Public methods (0)

No public methods.

New fields (10)
  • chart_template_id Many2one → account.chart.template
    help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times)." string='Chart Template' args: 'account.chart.template'
  • code Char
    index=True required=True size=64
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
  • name Char
    index=True required=True
  • nocreate Boolean
    default=False help='If checked, the new chart of accounts will not contain this by default.' string='Optional Create'
  • note Text
  • reconcile Boolean
    default=False help='Check this option if you want the user to reconcile entries in this account.' string='Allow Invoices & payments Matching'
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag', 'account_account_template_account_tag'
  • tax_ids Many2many → account.tax.template
    string='Default Taxes' args: 'account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id'
  • user_type_id Many2one → account.account.type
    help='These types are defined according to your country. The type contains more information about the account and its specificities.' oldname='user_type' required=True string='Type' args: 'account.account.type'
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'code')

New fields (3)
  • date_from Date
    default=<expr>
  • journal_ids Many2many → account.journal
    required=True string='Journals' args: 'account.journal'
  • period_length Integer
    default=30 required=True string='Period Length (days)'
Public methods (0)

No public methods.

New fields (12)
  • amount Monetary
    currency_field='company_currency_id'
  • amount_currency Monetary
    help='The amount expressed in the related account currency if not equal to the company one.' readonly=True related='move_id.amount_currency' store=True
  • analytic_amount_currency Monetary
    compute='_get_analytic_amount_currency' help='The amount expressed in the related account currency if not equal to the company one.' readonly=True string='Amount Currency'
  • code Char
    size=8
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' args: 'res.currency'
  • currency_id Many2one → res.currency
    help='The related account currency if not equal to the company one.' readonly=True related='move_id.currency_id' store=True string='Account Currency' args: 'res.currency'
  • general_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] ondelete='restrict' readonly=True related='move_id.account_id' store=True string='Financial Account' args: 'account.account'
  • move_id Many2one → account.move.line
    index=True ondelete='cascade' string='Move Line' args: 'account.move.line'
  • partner_id Many2one → res.partner
    readonly=True related='account_id.partner_id' store=True string='Partner' args: 'res.partner'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → product.uom
    string='Unit of Measure' args: 'product.uom'
  • ref Char
    string='Ref.'
Public methods (2)
  • on_change_unit_amount(self)
    @api.v8@api.onchange('product_id', 'product_uom_id', 'unit_amount', 'currency_id')
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (1)
  • journal_ids Many2many → account.journal
    default=[] required=True string='Journals' args: 'account.journal', 'account_balance_report_journal_rel', 'account_id', 'journal_id'
Public methods (0)

No public methods.

New fields (4)
  • acc_name Char
    required=True string='Account Name.'
  • account_type Selection
    args: [('cash', 'Cash'), ('bank', 'Bank')]
  • bank_account_id Many2one → wizard.multi.charts.accounts
    ondelete='cascade' required=True string='Bank Account' args: 'wizard.multi.charts.accounts'
  • currency_id Many2one → res.currency
    help='Forces all moves for this account to have this secondary currency.' string='Account Currency' args: 'res.currency'
Public methods (0)

No public methods.

New fields (20)
  • all_lines_reconciled Boolean
    compute='_check_lines_reconciled'
  • balance_end Monetary
    compute='_end_balance' help='Balance as calculated based on Opening Balance and transaction lines' store=True args: 'Computed Balance'
  • balance_end_real Monetary
    states={'confirm': [('readonly', True)]} args: 'Ending Balance'
  • balance_start Monetary
    default=_default_opening_balance states={'confirm': [('readonly', True)]} string='Starting Balance'
  • cashbox_end_id Many2one → account.bank.statement.cashbox
    string='Ending Cashbox' args: 'account.bank.statement.cashbox'
  • cashbox_start_id Many2one → account.bank.statement.cashbox
    string='Starting Cashbox' args: 'account.bank.statement.cashbox'
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' oldname='currency' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True required=True states={'confirm': [('readonly', True)]}
  • date_done Datetime
    string='Closed On'
  • difference Monetary
    compute='_end_balance' help='Difference between the computed ending balance and the specified ending balance.' store=True
  • is_difference_zero Boolean
    compute='_is_difference_zero' help='Check if difference is zero.' string='Is zero'
  • journal_id Many2one → account.journal
    default=_default_journal required=True states={'confirm': [('readonly', True)]} string='Journal' args: 'account.journal'
  • journal_type Selection
    help='Technical field used for usability purposes' related='journal_id.type'
  • line_ids One2many → account.bank.statement.line
    copy=True states={'confirm': [('readonly', True)]} string='Statement lines' args: 'account.bank.statement.line', 'statement_id'
  • move_line_ids One2many → account.move.line
    states={'confirm': [('readonly', True)]} string='Entry lines' args: 'account.move.line', 'statement_id'
  • name Char
    copy=False readonly=True states={'open': [('readonly', False)]} string='Reference'
  • state Selection
    copy=False default='open' readonly=True required=True string='Status' args: [('open', 'New'), ('confirm', 'Validated')]
  • total_entry_encoding Monetary
    compute='_end_balance' help='Total of transaction lines.' store=True args: 'Transactions Subtotal'
  • user_id Many2one → res.users
    default=<expr> required=False string='Responsible' args: 'res.users'
Public methods (11)
  • button_cancel(self)
    @api.multi
  • button_confirm_bank(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • button_open(self)
    @api.multi
    Changes statement state to Running.
  • check_confirm_bank(self)
    @api.multi
  • create(self, vals)
    @api.model
  • link_bank_to_partner(self)
    @api.multi
  • onchange_journal_id(self)
    @api.onchange('journal_id')
  • open_cashbox_id(self)
    @api.multi
  • reconciliation_widget_preprocess(self)
    @api.multi
    Get statement lines of the specified statements or all unreconciled statement lines and try to automatically reconcile them / find them a partner. Return ids of statement lines left to reconcile and other data for the reconciliation widget.
  • unlink(self)
    @api.multi

New fields (1)
  • cashbox_lines_ids One2many → account.cashbox.line
    string='Cashbox Lines' args: 'account.cashbox.line', 'cashbox_id'
Public methods (1)
  • validate(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate(self)
    @api.multi

New fields (18)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='This technical field can be used at the statement line creation/import time in order to avoid the reconciliation process on it later on. The statement line will simply create a counterpart on this account' string='Counterpart Account' args: 'account.account'
  • amount Monetary
    currency_field='journal_currency_id' digits=0
  • amount_currency Monetary
    help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • bank_account_id Many2one → res.partner.bank
    string='Bank Account' args: 'res.partner.bank'
  • company_id Many2one → res.company
    readonly=True related='statement_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    default=<expr> required=True
  • journal_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='statement_id.currency_id' args: 'res.currency'
  • journal_entry_ids One2many → account.move
    copy=False readonly=True args: 'account.move', 'statement_line_id', 'Journal Entries'
  • journal_id Many2one → account.journal
    readonly=True related='statement_id.journal_id' store=True string='Journal' args: 'account.journal'
  • name Char
    required=True string='Memo'
  • note Text
    string='Notes'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
  • partner_name Char
    help="This field is used to record the third party name when importing bank statement in electronic format, when the partner doesn't exist yet in the database (or cannot be found)."
  • ref Char
    string='Reference'
  • sequence Integer
    default=1 help='Gives the sequence order when displaying a list of bank statement lines.' index=True
  • state Selection
    readonly=True related='statement_id.state' string='Status'
  • statement_id Many2one → account.bank.statement
    index=True ondelete='cascade' required=True string='Statement' args: 'account.bank.statement'
Public methods (13)
  • auto_reconcile(self)
    @api.multi
    Try to automatically reconcile the statement.line ; return the counterpart journal entry/ies if the automatic reconciliation succeeded, False otherwise. TODO : this method could be greatly improved and made extensible
  • button_cancel_reconciliation(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fast_counterpart_creation(self)
  • get_data_for_reconciliation_widget(self, excluded_ids=None)
    @api.multi
    Returns the data required to display a reconciliation widget, for each statement line in self
  • get_move_lines_for_reconciliation(self, excluded_ids=None, str=False, offset=0, limit=None, additional_domain=None, overlook_partner=False)
    Return account.move.line records which can be used for bank statement reconciliation. :param excluded_ids: :param str: :param offset: :param limit: :param additional_domain: :param overlook_partner:
  • get_move_lines_for_reconciliation_widget(self, excluded_ids=None, str=False, offset=0, limit=None)
    @api.multi
    Returns move lines for the bank statement reconciliation widget, formatted as a list of dicts
  • get_reconciliation_proposition(self, excluded_ids=None)
    Returns move lines that constitute the best guess to reconcile a statement line Note: it only looks for move lines in the same currency as the statement line.
  • get_statement_line_for_reconciliation_widget(self)
    Returns the data required by the bank statement reconciliation widget to display a statement line
  • process_reconciliation(self, counterpart_aml_dicts=None, payment_aml_rec=None, new_aml_dicts=None)
    Match statement lines with existing payments (eg. checks) and/or payables/receivables (eg. invoices and refunds) and/or new move lines (eg. write-offs). If any new journal item needs to be created (via new_aml_dicts or counterpart_aml_dicts), a new journal entry will be created and will contain those items, as well as a journal item for the bank statement line. Finally, mark the statement line as reconciled by putting the matched moves ids in the column journal_entry_ids. :param self: browse collection of records that are supposed to have no accounting entries already linked. :param (list of dicts) counterpart_aml_dicts: move lines to create to reconcile with existing payables/receivables. The expected keys are : - 'name' - 'debit' - 'credit' - 'move_line' # The move line to reconcile (partially if specified debit/credit is lower than move line's credit/debit) :param (list of recordsets) payment_aml_rec: recordset move lines representing existing payments (which are already fully reconciled) :param (list of dicts) new_aml_dicts: move lines to create. The expected keys are : - 'name' - 'debit' - 'credit' - 'account_id' - (optional) 'tax_ids' - (optional) Other account.move.line fields like analytic_account_id or analytics_id :returns: The journal entries with which the transaction was matched. If there was at least an entry in counterpart_aml_dicts or new_aml_dicts, this list contains the move created by the reconciliation, containing entries for the statement.line (1), the counterpart move lines (0..*) and the new move lines (0..*).
  • process_reconciliations(self, cr, uid, ids, data, context=None)
    @api.v7
    Handles data sent from the bank statement reconciliation widget (and can otherwise serve as an old-API bridge) :param list of dicts data: must contains the keys 'counterpart_aml_dicts', 'payment_aml_ids' and 'new_aml_dicts', whose value is the same as described in process_reconciliation except that ids are used instead of recordsets.
  • reconciliation_widget_auto_reconcile(self, num_already_reconciled_lines)
    @api.multi
  • unlink(self)
    @api.multi

New fields (4)
  • cashbox_id Many2one → account.bank.statement.cashbox
    string='Cashbox' args: 'account.bank.statement.cashbox'
  • coin_value Float
    digits=0 required=True string='Coin/Bill Value'
  • number Integer
    help='Opening Unit Numbers' string='Number of Coins/Bills'
  • subtotal Float
    compute='_sub_total' digits=0 readonly=True string='Subtotal'
Public methods (0)

No public methods.

New fields (24)
  • account_ids One2many → account.account.template
    string='Associated Account Templates' args: 'account.account.template', 'chart_template_id'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • cash_account_code_prefix Char
    string='Prefix of the main cash accounts'
  • code_digits Integer
    default=6 help='No. of Digits to use for account code' required=True string='# of Digits'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • complete_tax_set Boolean
    default=True help='This boolean helps you to choose if you want to propose to the user to encode the sale and purchase rates or choose from list of taxes. This last choice assumes that the set of tax defined on this template is complete' string='Complete Set of Taxes'
  • currency_id Many2one → res.currency
    required=True string='Currency' args: 'res.currency'
  • expense_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Loss Exchange Rate Account' args: 'account.account.template'
  • income_currency_exchange_account_id Many2one → account.account.template
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] string='Gain Exchange Rate Account' args: 'account.account.template'
  • name Char
    required=True
  • parent_id Many2one → account.chart.template
    string='Parent Chart Template' args: 'account.chart.template'
  • property_account_expense_categ_id Many2one → account.account.template
    oldname='property_account_expense_categ' string='Category of Expense Account' args: 'account.account.template'
  • property_account_expense_id Many2one → account.account.template
    oldname='property_account_expense' string='Expense Account on Product Template' args: 'account.account.template'
  • property_account_income_categ_id Many2one → account.account.template
    oldname='property_account_income_categ' string='Category of Income Account' args: 'account.account.template'
  • property_account_income_id Many2one → account.account.template
    oldname='property_account_income' string='Income Account on Product Template' args: 'account.account.template'
  • property_account_payable_id Many2one → account.account.template
    oldname='property_account_payable' string='Payable Account' args: 'account.account.template'
  • property_account_receivable_id Many2one → account.account.template
    oldname='property_account_receivable' string='Receivable Account' args: 'account.account.template'
  • property_stock_account_input_categ_id Many2one → account.account.template
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account.template'
  • property_stock_account_output_categ_id Many2one → account.account.template
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account.template'
  • property_stock_valuation_account_id Many2one → account.account.template
    string='Account Template for Stock Valuation' args: 'account.account.template'
  • tax_template_ids One2many → account.tax.template
    help='List of all the taxes that have to be installed by the wizard' string='Tax Template List' args: 'account.tax.template', 'chart_template_id'
  • transfer_account_id Many2one → account.account.template
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' required=True string='Transfer Account' args: 'account.account.template'
  • use_anglo_saxon Boolean
    default=False string='Use Anglo-Saxon accounting'
  • visible Boolean
    default=True help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from templates, this is useful when you want to generate accounts of this template only when loading its child template." string='Can be Visible?'
Public methods (6)
  • generate_account(self, tax_template_ref, acc_template_ref, code_digits, company)
    @api.multi
    This method for generating accounts from templates. :param tax_template_ref: Taxes templates reference for write taxes_id in account_account. :param acc_template_ref: dictionary with the mappping between the account templates and the real accounts. :param code_digits: number of digits got from wizard.multi.charts.accounts, this is use for account code. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: return acc_template_ref for reference purpose. :rtype: dict
  • generate_fiscal_position(self, tax_template_ref, acc_template_ref, company)
    @api.multi
    This method generate Fiscal Position, Fiscal Position Accounts and Fiscal Position Taxes from templates. :param chart_temp_id: Chart Template Id. :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax. :param acc_template_ref: Account templates reference for generating account.fiscal.position.account. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
    This method is used for creating journals. :param chart_temp_id: Chart Template Id. :param acc_template_ref: Account templates reference. :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • generate_properties(self, acc_template_ref, company)
    @api.multi
    This method used for creating properties. :param self: chart templates for which we need to create properties :param acc_template_ref: Mapping between ids of account templates and real accounts created from them :param company_id: company_id selected from wizard.multi.charts.accounts. :returns: True
  • open_select_template_wizard(self)
    @api.multi
  • try_loading_for_current_company(self)
    @api.one

New fields (1)
  • display_account Selection
    default='movement' required=True string='Display Accounts' args: [('all', 'All'), ('movement', 'With movements'), ('not_zero', 'With balance is not equal to 0')]
Public methods (1)
  • pre_print_report(self, data)
    @api.multi

New fields (1)
  • result_selection Selection
    default='customer' required=True string="Partner's" args: [('customer', 'Receivable Accounts'), ('supplier', 'Payable Accounts'), ('customer_supplier', 'Receivable and Payable Accounts')]
Public methods (1)
  • pre_print_report(self, data)

New fields (5)
  • company_id Many2one → res.company
    default=<expr> readonly=True string='Company' args: 'res.company'
  • date_from Date
    string='Start Date'
  • date_to Date
    string='End Date'
  • journal_ids Many2many → account.journal
    default=<expr> required=True string='Journals' args: 'account.journal'
  • target_move Selection
    default='posted' required=True string='Target Moves' args: [('posted', 'All Posted Entries'), ('all', 'All Entries')]
Public methods (1)
  • check_report(self)
    @api.multi

New fields (43)
  • bank_account_code_prefix Char
    help='Define the code prefix for the bank accounts' oldname='bank_account_code_char' related='company_id.bank_account_code_prefix' string='Bank Accounts Prefix'
  • cash_account_code_prefix Char
    help='Define the code prefix for the cash accounts' related='company_id.cash_account_code_prefix' string='Cash Accounts Prefix'
  • chart_template_id Many2one → account.chart.template
    domain="[('visible','=', True)]" string='Template' args: 'account.chart.template'
  • code_digits Integer
    help='No. of digits to use for account code' related='company_id.accounts_code_digits' string='# of Digits'
  • company_footer Text
    help='Bank accounts as printed in the footer of each printed document' readonly=True related='company_id.rml_footer' string='Bank accounts footer preview'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • complete_tax_set Boolean
    help='This boolean helps you to choose if you want to propose to the user to encode\n the sales and purchase rates or use the usual m2o fields. This last choice assumes that\n the set of tax defined for the chosen template is complete' string='Complete set of taxes'
  • currency_exchange_journal_id Many2one → account.journal
    related='company_id.currency_exchange_journal_id' string='Rate Difference Journal' args: 'account.journal'
  • currency_id Many2one → res.currency
    compute='_get_currency_id' help='Main currency of the company.' inverse='_set_currency_id' required=True string='Default company currency' args: 'res.currency'
  • default_purchase_tax_id Many2one → account.tax
    help='This purchase tax will be assigned by default on new products.' oldname='default_purchase_tax' string='Default Purchase Tax' args: 'account.tax'
  • default_sale_tax_id Many2one → account.tax
    help='This sale tax will be assigned by default on new products.' oldname='default_sale_tax' string='Default Sale Tax' args: 'account.tax'
  • expects_chart_of_accounts Boolean
    help='Check this box if this company is a legal entity.' related='company_id.expects_chart_of_accounts' string='This company has its own chart of accounts'
  • fiscalyear_last_day Integer
    default=31 related='company_id.fiscalyear_last_day'
  • fiscalyear_last_month Selection
    default=12 related='company_id.fiscalyear_last_month' args: [(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' related='company_id.fiscalyear_lock_date' string='Lock Date'
  • group_analytic_accounting Boolean
    help='Allows you to use the analytic accounting.' implied_group='analytic.group_analytic_accounting' string='Analytic accounting'
  • group_multi_currency Boolean
    help='Allows you multi currency environment' implied_group='base.group_multi_currency' string='Allow multi currencies'
  • group_proforma_invoices Boolean
    help='Allows you to put invoices in pro-forma state.' implied_group='account.group_proforma_invoices' string='Allow pro-forma invoices'
  • has_chart_of_accounts Boolean
    string='Company has a chart of accounts'
  • has_default_company Boolean
    default=<expr> readonly=True
  • module_account_accountant Boolean
    help='If you do not check this box, you will be able to do invoicing & payments,\n but not accounting (Journal Items, Chart of Accounts, ...)' string='Full accounting features: journals, legal statements, chart of accounts, etc.'
  • module_account_asset Boolean
    help='Asset management: This allows you to manage the assets owned by a company or a person. It keeps track of the depreciation occurred on those assets, and creates account move for those depreciation lines.\n\n-This installs the module account_asset. If you do not check this box, you will be able to do invoicing & payments, but not accounting (Journal Items, Chart of Accounts, ...)' string='Assets management'
  • module_account_bank_statement_import_ofx Boolean
    help='Get your bank statements from your bank and import them in Odoo in the .OFX format.\nThis installs the module account_bank_statement_import_ofx.' args: 'Import in .ofx format'
  • module_account_bank_statement_import_qif Boolean
    help='Get your bank statements from your bank and import them in Odoo in the .QIF format.\nThis installs the module account_bank_statement_import_qif.' args: 'Import .qif files'
  • module_account_batch_deposit Boolean
    help='This allows you to group received checks before you deposit them to the bank.\n-This installs the module account_batch_deposit.' string='Use batch deposit'
  • module_account_budget Boolean
    help='This allows accountants to manage analytic and crossovered budgets. Once the master budgets and the budgets are defined, the project managers can set the planned amount on each analytic account.\n-This installs the module account_budget.' string='Budget management'
  • module_account_plaid Boolean
    help='Get your bank statements from you bank and import them through plaid.com.\n-that installs the module account_plaid.' string='Plaid Connector'
  • module_account_reports Boolean
    args: 'Get dynamic accounting reports'
  • module_account_reports_followup Boolean
    help='This allows to automate letters for unpaid invoices, with multi-level recalls.\n-This installs the module account_reports_followup.' args: 'Enable payment followup management'
  • module_account_sepa Boolean
    help='If you check this box, you will be able to register your payment using SEPA.\n-This installs the module account_sepa.' string='Use SEPA payments'
  • module_account_tax_cash_basis Boolean
    help='Generate tax cash basis entrie when reconciliating entries' string='Allow Tax Cash Basis'
  • module_account_yodlee Boolean
    help='Get your bank statements from your bank and import them through yodlee.com.\n-that installs the module account_yodlee.' args: 'Bank Interface - Sync your bank feeds automatically'
  • module_l10n_us_check_printing Boolean
    args: 'Allow check printing and deposits'
  • paypal_account Char
    help='Paypal account (email) for receiving online payments (credit card, etc.)\n If you set a paypal account, the customer will be able to pay your invoices or quotations\n with a button "Pay with Paypal" in automated emails or through the Odoo portal.' related='company_id.paypal_account' size=128 string='Paypal account'
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." related='company_id.period_lock_date' string='Lock Date for Non-Advisers'
  • purchase_tax_id Many2one → account.tax.template
    oldname='purchase_tax' string='Default purchase tax' args: 'account.tax.template'
  • purchase_tax_rate Float
    string='Purchase tax (%)'
  • sale_tax_id Many2one → account.tax.template
    oldname='sale_tax' string='Default sale tax' args: 'account.tax.template'
  • sale_tax_rate Float
    string='Sales tax (%)'
  • tax_calculation_rounding_method Selection
    help="If you select 'Round per line' : for each tax, the tax amount will first be\n computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed,\n leading to the total amount for that tax. If you select 'Round globally': for each tax,\n the tax amount will be computed for each PO/SO/invoice line, then these amounts will be\n summed and eventually this total tax amount will be rounded. If you sell with tax included,\n you should choose 'Round per line' because you certainly want the sum of your tax-included line\n subtotals to be equal to the total amount with taxes." related='company_id.tax_calculation_rounding_method' string='Tax calculation rounding method' args: [('round_per_line', 'Round calculation of taxes per line'), ('round_globally', 'Round globally calculation of taxes ')]
  • template_transfer_account_id Many2one → account.account.template
    help='Intermediary account used when moving money from a liquidity account to another' args: 'account.account.template'
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' related='company_id.transfer_account_id' args: 'account.account'
  • use_anglo_saxon Boolean
    related='company_id.anglo_saxon_accounting' string='Use Anglo-Saxon Accounting'
Public methods (10)
  • onchange_analytic_accounting(self)
    @api.onchange('group_analytic_accounting')
  • onchange_chart_template_id(self)
    @api.onchange('chart_template_id')
  • onchange_company_id(self)
    @api.onchange('company_id')
  • onchange_tax_rate(self)
    @api.onchange('sale_tax_rate')
  • open_bank_accounts(self)
    @api.multi
  • open_company(self)
    @api.multi
  • set_chart_of_accounts(self)
    @api.multi
    install a chart of accounts for the given company (if required)
  • set_group_multi_currency(self)
    @api.multi
  • set_product_taxes(self)
    @api.multi
    Set the product taxes if they have changed
  • set_transfer_account(self)
    @api.multi

New fields (12)
  • account_ids Many2many → account.account
    args: 'account.account', 'account_account_financial_report', 'report_line_id', 'account_id', 'Accounts'
  • account_report_id Many2one → account.financial.report
    args: 'account.financial.report', 'Report Value'
  • account_type_ids Many2many → account.account.type
    args: 'account.account.type', 'account_account_financial_report_type', 'report_id', 'account_type_id', 'Account Types'
  • children_ids One2many → account.financial.report
    args: 'account.financial.report', 'parent_id', 'Account Report'
  • display_detail Selection
    default='detail_flat' args: [('no_detail', 'No detail'), ('detail_flat', 'Display children flat'), ('detail_with_hierarchy', 'Display children with hierarchy')], 'Display details'
  • level Integer
    compute='_get_level' store=True string='Level'
  • name Char
    required=True translate=True args: 'Report Name'
  • parent_id Many2one → account.financial.report
    args: 'account.financial.report', 'Parent'
  • sequence Integer
    args: 'Sequence'
  • sign Selection
    default=1 help='For accounts that are typically more debited than credited and that you would like to print as negative amounts in your reports, you should reverse the sign of the balance; e.g.: Expense account. The same applies for accounts that are typically more credited than debited and that you would like to print as positive amounts in your reports; e.g.: Income account.' required=True args: [(-1, 'Reverse balance sign'), (1, 'Preserve balance sign')], 'Sign on Reports'
  • style_overwrite Selection
    default=0 help="You can set up here the format you want this record to be displayed. If you leave the automatic formatting, it will be computed based on the financial reports hierarchy (auto-computed field 'level')." args: [(0, 'Automatic formatting'), (1, 'Main Title 1 (bold, underlined)'), (2, 'Title 2 (bold)'), (3, 'Title 3 (bold, smaller)'), (4, 'Normal Text'), (5, 'Italic Text (smaller)'), (6, 'Smallest Text')], 'Financial Report Style'
  • type Selection
    default='sum' args: [('sum', 'View'), ('accounts', 'Accounts'), ('account_type', 'Account Type'), ('account_report', 'Report Value')], 'Type'
Public methods (0)

No public methods.

New fields (15)
  • account_ids One2many → account.fiscal.position.account
    copy=True string='Account Mapping' args: 'account.fiscal.position.account', 'position_id'
  • active Boolean
    default=True help='By unchecking the active field, you may hide a fiscal position without deleting it.'
  • auto_apply Boolean
    help='Apply automatically this fiscal position.' string='Detect Automatically'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • country_group_id Many2one → res.country.group
    help='Apply only if delivery or invocing country match the group.' string='Country Group' args: 'res.country.group'
  • country_id Many2one → res.country
    help='Apply only if delivery or invoicing country match.' string='Country' args: 'res.country'
  • name Char
    required=True string='Fiscal Position'
  • note Text
    help='Legal mentions that have to be printed on the invoices.' args: 'Notes'
  • sequence Integer
  • state_ids Many2many → res.country.state
    string='Federal States' args: 'res.country.state'
  • states_count Integer
    compute='_compute_states_count'
  • tax_ids One2many → account.fiscal.position.tax
    copy=True string='Tax Mapping' args: 'account.fiscal.position.tax', 'position_id'
  • vat_required Boolean
    help='Apply only if partner has a VAT number.' string='VAT required'
  • zip_from Integer
    default=0 string='Zip Range From'
  • zip_to Integer
    default=0 string='Zip Range To'
Public methods (6)
  • get_fiscal_position(self, partner_id, delivery_id=None)
    @api.model
  • map_account(self, cr, uid, fposition_id, account_id, context=None)
    @api.v7
  • map_account(self, account)
    @api.v8
  • map_accounts(self, accounts)
    @api.v8
    Receive a dictionary having accounts in values and try to replace those accounts accordingly to the fiscal position.
  • map_tax(self, cr, uid, fposition_id, taxes, context=None)
    @api.v7
  • map_tax(self, taxes)
    @api.v8

New fields (3)
  • account_dest_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account to Use Instead' args: 'account.account'
  • account_src_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Account on Product' args: 'account.account'
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
Public methods (0)

No public methods.

New fields (3)
  • account_dest_id Many2one → account.account.template
    required=True string='Account Destination' args: 'account.account.template'
  • account_src_id Many2one → account.account.template
    required=True string='Account Source' args: 'account.account.template'
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Mapping' args: 'account.fiscal.position.template'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position'
  • tax_dest_id Many2one → account.tax
    string='Tax to Apply' args: 'account.tax'
  • tax_src_id Many2one → account.tax
    required=True string='Tax on Product' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • position_id Many2one → account.fiscal.position.template
    ondelete='cascade' required=True string='Fiscal Position' args: 'account.fiscal.position.template'
  • tax_dest_id Many2one → account.tax.template
    string='Replacement Tax' args: 'account.tax.template'
  • tax_src_id Many2one → account.tax.template
    required=True string='Tax Source' args: 'account.tax.template'
Public methods (0)

No public methods.

New fields (5)
  • account_ids One2many → account.fiscal.position.account.template
    string='Account Mapping' args: 'account.fiscal.position.account.template', 'position_id'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • name Char
    required=True string='Fiscal Position Template'
  • note Text
    string='Notes'
  • tax_ids One2many → account.fiscal.position.tax.template
    string='Tax Mapping' args: 'account.fiscal.position.tax.template', 'position_id'
Public methods (0)

No public methods.

New fields (42)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] help='The partner account used for this invoice.' readonly=True required=True states={'draft': [('readonly', False)]} string='Account' args: 'account.account'
  • amount_tax Monetary
    compute='_compute_amount' readonly=True store=True string='Tax'
  • amount_total Monetary
    compute='_compute_amount' readonly=True store=True string='Total'
  • amount_total_company_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit notes.' readonly=True store=True string='Total'
  • amount_total_signed Monetary
    compute='_compute_amount' currency_field='currency_id' help='Total amount in the currency of the invoice, negative for credit notes.' readonly=True store=True string='Total'
  • amount_untaxed Monetary
    compute='_compute_amount' readonly=True store=True string='Untaxed Amount' track_visibility='always'
  • amount_untaxed_signed Monetary
    compute='_compute_amount' currency_field='company_currency_id' readonly=True store=True string='Untaxed Amount'
  • comment Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Additional Information'
  • commercial_partner_id Many2one → res.partner
    compute_sudo=True help='The commercial entity that will be used on Journal Entries for this invoice' readonly=True related='partner_id.commercial_partner_id' store=True string='Commercial Entity' args: 'res.partner'
  • company_currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=_default_currency readonly=True required=True states={'draft': [('readonly', False)]} string='Currency' track_visibility='always' args: 'res.currency'
  • date Date
    copy=False help='Keep empty to use the invoice date.' readonly=True states={'draft': [('readonly', False)]} string='Accounting Date'
  • date_due Date
    copy=False help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The payment term may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment.' index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • date_invoice Date
    copy=False help='Keep empty to use the current date' index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • has_outstanding Boolean
    compute='_get_outstanding_info_JSON'
  • invoice_line_ids One2many → account.invoice.line
    copy=True oldname='invoice_line' readonly=True states={'draft': [('readonly', False)]} string='Invoice Lines' args: 'account.invoice.line', 'invoice_id'
  • journal_id Many2one → account.journal
    default=_default_journal domain="[('type', 'in', {'out_invoice': ['sale'], 'out_refund': ['sale'], 'in_refund': ['purchase'], 'in_invoice': ['purchase']}.get(type, [])), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    copy=False help='Link to the automatically generated Journal Items.' index=True ondelete='restrict' readonly=True string='Journal Entry' args: 'account.move'
  • move_name Char
    copy=False default=False help='Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated.' readonly=False string='Journal Entry'
  • name Char
    copy=False help='The name that will be used on account move lines' index=True readonly=True states={'draft': [('readonly', False)]} string='Reference/Description'
  • number Char
    copy=False readonly=True related='move_id.name' store=True
  • origin Char
    help='Reference of the document that produced this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Source Document'
  • outstanding_credits_debits_widget Text
    compute='_get_outstanding_info_JSON'
  • partner_bank_id Many2one → res.partner.bank
    help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Refund, otherwise a Partner bank account number.' readonly=True states={'draft': [('readonly', False)]} string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True readonly=True required=True states={'draft': [('readonly', False)]} string='Partner' track_visibility='always' args: 'res.partner'
  • payment_ids Many2many → account.payment
    copy=False readonly=True string='Payments' args: 'account.payment', 'account_invoice_payment_rel', 'invoice_id', 'payment_id'
  • payment_move_line_ids Many2many → account.move.line
    compute='_compute_payments' store=True string='Payments' args: 'account.move.line'
  • payment_term_id Many2one → account.payment.term
    help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month.' oldname='payment_term' readonly=True states={'draft': [('readonly', False)]} string='Payment Term' args: 'account.payment.term'
  • payments_widget Text
    compute='_get_payment_info_JSON'
  • reconciled Boolean
    compute='_compute_residual' help='It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment.' readonly=True store=True string='Paid/Reconciled'
  • reference Char
    help='The partner reference of this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Vendor Reference'
  • reference_type Selection
    default='none' readonly=True required=True states={'draft': [('readonly', False)]} string='Payment Reference' args: '_get_reference_type'
  • residual Monetary
    compute='_compute_residual' help='Remaining amount due.' store=True string='Amount Due'
  • residual_company_signed Monetary
    compute='_compute_residual' currency_field='company_currency_id' help='Remaining amount due in the currency of the company.' store=True string='Amount Due'
  • residual_signed Monetary
    compute='_compute_residual' currency_field='currency_id' help='Remaining amount due in the currency of the invoice.' store=True string='Amount Due'
  • sent Boolean
    copy=False default=False help='It indicates that the invoice has been sent.' readonly=True
  • state Selection
    copy=False default='draft' help=" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n * The 'Pro-forma' status is used the invoice does not have an invoice number.\n * The 'Open' status is used when user create invoice, an invoice number is generated. Its in open status till user does not pay invoice.\n * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n * The 'Cancelled' status is used when user cancel invoice." index=True readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Draft'), ('proforma', 'Pro-forma'), ('proforma2', 'Pro-forma'), ('open', 'Open'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • tax_line_ids One2many → account.invoice.tax
    copy=True oldname='tax_line' readonly=True states={'draft': [('readonly', False)]} string='Tax Lines' args: 'account.invoice.tax', 'invoice_id'
  • type Selection
    change_default=True default=<expr> index=True readonly=True track_visibility='always' args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Refund'), ('in_refund', 'Vendor Refund')]
  • user_id Many2one → res.users
    default=<expr> readonly=True states={'draft': [('readonly', False)]} string='Salesperson' track_visibility='onchange' args: 'res.users'
Public methods (28)
  • action_cancel(self)
    @api.multi
  • action_cancel_draft(self)
    @api.multi
  • action_date_assign(self)
    @api.multi
  • action_invoice_sent(self)
    @api.multi
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_move_create(self)
    @api.multi
    Creates invoice related analytics and financial move lines
  • assign_outstanding_credit(self, cr, uid, id, credit_aml_id, context=None)
    @api.v7
  • compute_invoice_totals(self, company_currency, invoice_move_lines)
    @api.multi
  • compute_taxes(self)
    @api.multi
    Function used in other module to compute the taxes on a fresh invoice created (onchanges did not applied)
  • confirm_paid(self)
    @api.multi
  • create(self, vals)
    @api.model
  • fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False)
    @api.model
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • get_formview_id(self)
    @api.multi
    Update form view id of action to open the invoice
  • get_taxes_values(self)
    @api.multi
  • group_lines(self, iml, line)
    Merge account move lines (and hence analytic lines) if invoice line hashcodes are equals
  • inv_line_characteristic_hashcode(self, invoice_line)
    Overridable hashcode generation for invoice lines. Lines having the same hashcode will be grouped together if the journal has the 'group line' option. Of course a module can add fields to invoice lines that would need to be tested too before merging lines or not.
  • invoice_line_move_line_get(self)
    @api.model
  • invoice_print(self)
    @api.multi
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • invoice_validate(self)
    @api.multi
  • line_get_convert(self, line, part)
    @api.model
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • pay_and_reconcile(self, pay_journal, pay_amount=None, date=None, writeoff_acc=None)
    @api.v8
    Create and post an account.payment for the invoice self, which creates a journal entry that reconciles the invoice. :param pay_journal: journal in which the payment entry will be created :param pay_amount: amount of the payment to register, defaults to the residual of the invoice :param date: payment date, defaults to fields.Date.context_today(self) :param writeoff_acc: account in which to create a writeoff if pay_amount < self.residual, so that the invoice is fully paid
  • pay_and_reconcile(self, cr, uid, ids, pay_journal_id, pay_amount=None, date=None, writeoff_acc_id=None, context=None)
    @api.v7
  • refund(self, date_invoice=None, date=None, description=None, journal_id=None)
    @api.multi@api.returns('self')
  • register_payment(self, payment_line, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
    Reconcile payable/receivable lines from the invoice with payment_line
  • tax_line_move_line_get(self)
    @api.model
  • unlink(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • invoice_cancel(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • invoice_confirm(self)
    @api.multi

New fields (18)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    default=_default_account domain=[('deprecated', '=', False)] help='The income or expense account related to the selected product.' required=True string='Account' args: 'account.account'
  • company_currency_id Many2one → res.currency
    readonly=True related='invoice_id.company_currency_id' related_sudo=False args: 'res.currency'
  • company_id Many2one → res.company
    readonly=True related='invoice_id.company_id' related_sudo=False store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    related='invoice_id.currency_id' related_sudo=False store=True args: 'res.currency'
  • discount Float
    default=0.0 digits=dp.get_precision('Discount') string='Discount (%)'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice Reference' args: 'account.invoice'
  • invoice_line_tax_ids Many2many → account.tax
    domain=[('type_tax_use', '!=', 'none'), '|', ('active', '=', False), ('active', '=', True)] oldname='invoice_line_tax_id' string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • name Text
    required=True string='Description'
  • origin Char
    help='Reference of the document that produced this invoice.' string='Source Document'
  • partner_id Many2one → res.partner
    readonly=True related='invoice_id.partner_id' related_sudo=False store=True string='Partner' args: 'res.partner'
  • price_subtotal Monetary
    compute='_compute_price' readonly=True store=True string='Amount'
  • price_subtotal_signed Monetary
    compute='_compute_price' currency_field='company_currency_id' help='Total amount in the currency of the company, negative for credit notes.' readonly=True store=True string='Amount Signed'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True string='Unit Price'
  • product_id Many2one → product.product
    index=True ondelete='restrict' string='Product' args: 'product.product'
  • quantity Float
    default=1 digits=dp.get_precision('Product Unit of Measure') required=True string='Quantity'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the invoice.'
  • uom_id Many2one → product.uom
    index=True oldname='uos_id' ondelete='set null' string='Unit of Measure' args: 'product.uom'
Public methods (2)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_invoice_line_account(self, type, product, fpos, company)
    @api.v8

New fields (5)
  • date Date
    string='Accounting Date'
  • date_invoice Date
    default=fields.Date.context_today required=True string='Refund Date'
  • description Char
    default=_get_reason required=True string='Reason'
  • filter_refund Selection
    default='refund' help='Refund base on this type. You can not Modify and Cancel if the invoice is already reconciled' required=True string='Refund Method' args: [('refund', 'Create a draft refund'), ('cancel', 'Cancel: create refund and reconcile'), ('modify', 'Modify: create refund, reconcile and create a new draft invoice')]
  • refund_only Boolean
    compute='_get_refund_only' string='Technical field to hide filter_refund in case invoice is partially paid'
Public methods (2)
  • compute_refund(self, mode='refund')
    @api.multi
  • invoice_refund(self)
    @api.multi

New fields (28)
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Account' args: 'account.account'
  • account_line_id Many2one → account.account
    domain=[('deprecated', '=', False)] readonly=True string='Account Line' args: 'account.account'
  • categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • commercial_partner_id Many2one → res.partner
    help='Commercial Entity' string='Partner Company' args: 'res.partner'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • country_id Many2one → res.country
    string='Country of the Partner Company' args: 'res.country'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • currency_rate Float
    group_operator='avg' readonly=True string='Currency Rate'
  • date Date
    readonly=True
  • date_due Date
    readonly=True string='Due Date'
  • fiscal_position_id Many2one → account.fiscal.position
    oldname='fiscal_position' readonly=True string='Fiscal Position' args: 'account.fiscal.position'
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • nbr Integer
    readonly=True string='# of Lines'
  • partner_bank_id Many2one → res.partner.bank
    readonly=True string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    readonly=True string='Partner' args: 'res.partner'
  • payment_term_id Many2one → account.payment.term
    oldname='payment_term' readonly=True string='Payment Term' args: 'account.payment.term'
  • price_average Float
    group_operator='avg' readonly=True string='Average Price'
  • price_total Float
    readonly=True string='Total Without Tax'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_qty Float
    readonly=True string='Product Quantity'
  • residual Float
    readonly=True string='Total Residual'
  • state Selection
    readonly=True string='Invoice Status' args: [('draft', 'Draft'), ('proforma', 'Pro-forma'), ('proforma2', 'Pro-forma'), ('open', 'Open'), ('paid', 'Done'), ('cancel', 'Cancelled')]
  • type Selection
    readonly=True args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Vendor Bill'), ('out_refund', 'Customer Refund'), ('in_refund', 'Vendor Refund')]
  • uom_name Char
    readonly=True string='Reference Unit of Measure'
  • user_currency_price_average Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Average Price'
  • user_currency_price_total Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Without Tax'
  • user_currency_residual Float
    compute='_compute_amounts_in_user_currency' digits=0 string='Total Residual'
  • user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
Public methods (1)
  • init(self, cr)

New fields (11)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Tax Account' args: 'account.account'
  • amount Monetary
  • base Monetary
    compute='_compute_base_amount' string='Base'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True related='invoice_id.currency_id' store=True args: 'res.currency'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice' args: 'account.invoice'
  • manual Boolean
    default=True
  • name Char
    required=True string='Tax Description'
  • sequence Integer
    help='Gives the sequence order when displaying a list of invoice tax.'
  • tax_id Many2one → account.tax
    ondelete='restrict' string='Tax' args: 'account.tax'
Public methods (0)

No public methods.

New fields (3)
  • kanban_dashboard Text
    compute='_kanban_dashboard'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • show_on_dashboard Boolean
    default=True help='Whether this journal should be displayed on the dashboard or not' string='Show journal on dashboard'
Public methods (14)
  • action_create_new(self)
    @api.multi
  • action_open_reconcile(self)
    @api.multi
  • create_bank_statement(self)
    @api.multi
    return action to create a bank statements. This button should be called only on journals with type =='bank'
  • create_cash_statement(self)
    @api.multi
  • get_bar_graph_datas(self)
    @api.multi
  • get_journal_dashboard_datas(self)
    @api.multi
  • get_line_graph_datas(self)
    @api.multi
  • open_action(self)
    @api.multi
    return action based on type for related journals
  • open_action_with_context(self)
    @api.multi
  • open_collect_money(self)
    @api.multi
  • open_payments_action(self, payment_type)
    @api.multi
  • open_spend_money(self)
    @api.multi
  • open_transfer_money(self)
    @api.multi
  • toggle_favorite(self)
    @api.multi

New fields (15)
  • amount Monetary
    compute='_amount_compute' store=True
  • company_id Many2one → res.company
    default=<expr> readonly=True related='journal_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' store=True string='Currency' args: 'res.currency'
  • date Date
    default=fields.Date.context_today index=True required=True states={'posted': [('readonly', True)]}
  • dummy_account_id Many2one → account.account
    related='line_ids.account_id' store=False string='Account' args: 'account.account'
  • journal_id Many2one → account.journal
    default=_get_default_journal required=True states={'posted': [('readonly', True)]} string='Journal' args: 'account.journal'
  • line_ids One2many → account.move.line
    copy=True states={'posted': [('readonly', True)]} string='Journal Items' args: 'account.move.line', 'move_id'
  • matched_percentage Float
    compute='_compute_matched_percentage' digits=0 help='Technical field used in cash basis method' readonly=True store=True args: 'Percentage Matched'
  • name Char
    copy=False default='/' required=True string='Number'
  • narration Text
    string='Internal Note'
  • partner_id Many2one → res.partner
    compute='_compute_partner_id' readonly=True store=True string='Partner' args: 'res.partner'
  • rate_diff_partial_rec_id Many2one → account.partial.reconcile
    help='Technical field used to keep track of the origin of journal entries created in case of fluctuation of the currency exchange rate. This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.' string='Exchange Rate Entry of' args: 'account.partial.reconcile'
  • ref Char
    copy=False string='Reference'
  • state Selection
    copy=False default='draft' help="All manually created new journal entries are usually in the status 'Unposted', but you can set the option to skip that status on the related journal. In that case, they will behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in 'Posted' status." readonly=True required=True string='Status' args: [('draft', 'Unposted'), ('posted', 'Posted')]
  • statement_line_id Many2one → account.bank.statement.line
    copy=False index=True readonly=True string='Bank statement line reconciled with this entry' args: 'account.bank.statement.line'
Public methods (10)
  • assert_balanced(self)
    @api.multi
  • button_cancel(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi@api.depends('name', 'state')
  • open_reconcile_view(self)
    @api.multi
  • post(self)
    @api.multi
  • reverse_moves(self, date=None, journal_id=None)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (37)
  • account_id Many2one → account.account
    default=<expr> domain=[('deprecated', '=', False)] index=True ondelete='cascade' required=True string='Account' args: 'account.account'
  • amount_currency Monetary
    default=0.0 help='The amount expressed in an optional other currency if it is a multi-currency entry.'
  • amount_residual Monetary
    compute='_amount_residual' currency_field='company_currency_id' help='The residual amount on a journal item expressed in the company currency.' store=True string='Residual Amount'
  • amount_residual_currency Monetary
    compute='_amount_residual' help='The residual amount on a journal item expressed in its currency (possibly not the company currency).' store=True string='Residual Amount in Currency'
  • analytic_account_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    oldname='analytic_lines' string='Analytic lines' args: 'account.analytic.line', 'move_id'
  • balance Monetary
    compute='_store_balance' currency_field='company_currency_id' default=0.0 help='Technical field holding the debit - credit in order to open meaningful graph views from reports' store=True
  • balance_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' default=0.0 help='Technical field holding the debit_cash_basis - credit_cash_basis in order to open meaningful graph views from reports' store=True
  • blocked Boolean
    default=False help='You can check this box to mark this journal item as a litigation with the associated partner' string='No Follow-up'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' store=True args: 'res.currency'
  • company_id Many2one → res.company
    related='account_id.company_id' store=True string='Company' args: 'res.company'
  • counterpart Char
    compute='_get_counterpart' help='Compute the counter part accounts of this journal item for this journal entry. This can be needed in reports.' args: 'Counterpart'
  • credit Monetary
    currency_field='company_currency_id' default=0.0
  • credit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' default=0.0 store=True
  • currency_id Many2one → res.currency
    default=_get_currency help='The optional other currency if it is a multi-currency entry.' string='Currency' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today index=True related='move_id.date' required=True store=True string='Date'
  • date_maturity Date
    help='This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line.' index=True required=True string='Due date'
  • debit Monetary
    currency_field='company_currency_id' default=0.0
  • debit_cash_basis Monetary
    compute='_compute_cash_basis' currency_field='company_currency_id' default=0.0 store=True
  • invoice_id Many2one → account.invoice
    oldname='invoice' args: 'account.invoice'
  • journal_id Many2one → account.journal
    copy=False default=_get_journal index=True related='move_id.journal_id' required=True store=True string='Journal' args: 'account.journal'
  • matched_credit_ids One2many → account.partial.reconcile
    String='Matched Credits' help='Credit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'debit_move_id'
  • matched_debit_ids One2many → account.partial.reconcile
    String='Matched Debits' help='Debit journal items that are matched with this journal item.' args: 'account.partial.reconcile', 'credit_move_id'
  • move_id Many2one → account.move
    auto_join=True help='The move of this entry line.' index=True ondelete='cascade' required=True string='Journal Entry' args: 'account.move'
  • name Char
    required=True string='Label'
  • narration Text
    related='move_id.narration' string='Internal Note'
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' args: 'res.partner'
  • payment_id Many2one → account.payment
    help='Payment that created this entry' string='Originator Payment' args: 'account.payment'
  • product_id Many2one → product.product
    string='Product' args: 'product.product'
  • product_uom_id Many2one → product.uom
    string='Unit of Measure' args: 'product.uom'
  • quantity Float
    digits=(16, 2) help='The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.'
  • reconciled Boolean
    compute='_amount_residual' store=True
  • ref Char
    copy=False index=True related='move_id.ref' store=True string='Partner Reference'
  • statement_id Many2one → account.bank.statement
    copy=False help='The bank statement used for bank reconciliation' index=True string='Statement' args: 'account.bank.statement'
  • tax_ids Many2many → account.tax
    domain=['|', ('active', '=', False), ('active', '=', True)] string='Taxes' args: 'account.tax'
  • tax_line_id Many2one → account.tax
    ondelete='restrict' string='Originator tax' args: 'account.tax'
  • user_type_id Many2one → account.account.type
    index=True oldname='user_type' related='account_id.user_type_id' store=True args: 'account.account.type'
Public methods (21)
  • auto_reconcile_lines(self)
    This function iterates recursively on the recordset given as parameter as long as it can find a debit and a credit to reconcile together. It returns the recordset of the account move lines that were not reconciled during the process.
  • compute_amount_fields(self, amount, src_currency, company_currency, invoice_currency=False)
    @api.model
    Helper function to compute value for fields debit/credit/amount_currency based on an amount and the currencies given in parameter
  • compute_full_after_batch_reconcile(self)
    @api.model
    After running the manual reconciliation wizard and making full reconciliation, we need to run this method to create potentially an exchange rate entry that will balance the remaining amount_residual_currency (possibly several aml). This ensure that all aml in the full reconciliation are reconciled (amount_residual = amount_residual_currency = 0).
  • create(self, vals, apply_taxes=True)
    @api.model
    :param apply_taxes: set to False if you don't want vals['tax_ids'] to result in the creation of move lines for taxes and eventual adjustment of the line amount (in case of a tax included in price). This is useful for use cases where you don't want to apply taxes in the default fashion (eg. taxes). You can also pass 'dont_create_taxes' in context. :context's key `check_move_validity`: check data consistency after move line creation. Eg. set to false to disable verification that the move debit-credit == 0 while creating the move lines composing the move.
  • create_analytic_lines(self)
    @api.multi
    Create analytic items upon validation of an account.move.line having an analytic account. This method first remove any existing analytic item related to the line before creating any new one.
  • domain_move_lines_for_reconciliation(self, excluded_ids=None, str=False)
    @api.model
    Returns the domain which is common to both manual and bank statement reconciliation. :param excluded_ids: list of ids of move lines that should not be fetched :param str: search string
  • get_data_for_manual_reconciliation(self, res_type, res_ids=None, account_type=None)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts (list of dicts). If no res_ids is passed, returns data for all partners/accounts that can be reconciled. :param res_type: either 'partner' or 'account' :param res_ids: ids of the partners/accounts to reconcile, use None to fetch data indiscriminately of the id, use [] to prevent from fetching any data at all. :param account_type: if a partner is both customer and vendor, you can use 'payable' to reconcile the vendor-related journal entries and 'receivable' for the customer-related entries.
  • get_data_for_manual_reconciliation_widget(self, partner_ids, account_ids)
    @api.model
    Returns the data required for the invoices & payments matching of partners/accounts. If an argument is None, fetch all related reconciliations. Use [] to fetch nothing.
  • get_move_lines_for_manual_reconciliation(self, account_id, partner_id=False, excluded_ids=None, str=False, offset=0, limit=None, target_currency_id=False)
    @api.model
    Returns unreconciled move lines for an account or a partner+account, formatted for the manual reconciliation widget
  • get_reconciliation_proposition(self, account_id, partner_id=False)
    @api.model
    Returns two lines whose amount are opposite
  • init(self, cr)
    change index on partner_id to a multi-column index on (partner_id, ref), the new index will behave in the same way when we search on partner_id, with the addition of being optimal when having a query that will search on partner_id and ref at the same time (which is the case when we open the bank reconciliation widget)
  • name_get(self)
    @api.multi@api.depends('ref', 'move_id')
  • open_reconcile_view(self)
    @api.multi
  • prepare_move_lines_for_reconciliation_widget(self, cr, uid, line_ids, target_currency_id=False, context=None)
    @api.v7
  • prepare_move_lines_for_reconciliation_widget(self, target_currency=False, target_date=False)
    @api.v8
    Returns move lines formatted for the manual/bank reconciliation widget :param target_currency: curreny you want the move line debit/credit converted into :param target_date: date to use for the monetary conversion
  • process_reconciliation(self, new_mv_line_dicts)
    @api.multi
    Create new move lines from new_mv_line_dicts (if not empty) then call reconcile_partial on self and new move lines :param new_mv_line_dicts: list of dicts containing values suitable fot account_move_line.create()
  • process_reconciliations(self, cr, uid, data, context=None)
    @api.v7
    Used to validate a batch of reconciliations in a single call :param data: list of dicts containing: - 'type': either 'partner' or 'account' - 'id': id of the affected res.partner or account.account - 'mv_line_ids': ids of exisiting account.move.line to reconcile - 'new_mv_line_dicts': list of dicts containing values suitable for account_move_line.create()
  • reconcile(self, writeoff_acc_id=False, writeoff_journal_id=False)
    @api.multi
  • remove_move_reconcile(self)
    @api.multi
    Undo a reconciliation
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • credit Float
    digits=0 readonly=True string='Credit amount'
  • debit Float
    digits=0 readonly=True string='Debit amount'
  • trans_nbr Integer
    readonly=True string='# of Transaction'
  • writeoff Float
    digits=0 readonly=True string='Write-Off amount'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • trans_rec_addendum_writeoff(self)
    @api.multi
  • trans_rec_get(self)
    @api.multi
  • trans_rec_reconcile_full(self)
    @api.multi
  • trans_rec_reconcile_partial_reconcile(self)
    @api.multi

New fields (5)
  • analytic_id Many2one → account.analytic.account
    domain=[('account_type', '=', 'normal')] string='Analytic Account' args: 'account.analytic.account'
  • comment Char
    default='Write-off' required=True
  • date_p Date
    default=fields.Date.context_today string='Date'
  • journal_id Many2one → account.journal
    required=True string='Write-Off Journal' args: 'account.journal'
  • writeoff_acc_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Write-Off account' args: 'account.account'
Public methods (3)
  • trans_rec_addendum(self)
    @api.multi
  • trans_rec_reconcile(self)
    @api.multi
  • trans_rec_reconcile_partial(self)
    @api.multi

New fields (2)
  • date Date
    default=fields.Date.context_today required=True string='Reversal date'
  • journal_id Many2one → account.journal
    help='If empty, uses the journal of the journal entry to be reversed.' string='Use Specific Journal' args: 'account.journal'
Public methods (1)
  • reverse_moves(self)
    @api.multi

New fields (7)
  • amount Monetary
    currency_field='company_currency_id' help='Amount concerned by this matching. Assumed to be always positive'
  • amount_currency Monetary
    string='Amount in Currency'
  • company_currency_id Many2one → res.currency
    help='Utility field to express amount currency' readonly=True related='company_id.currency_id' args: 'res.currency'
  • company_id Many2one → res.company
    related='debit_move_id.company_id' store=True string='Currency' args: 'res.company'
  • credit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • debit_move_id Many2one → account.move.line
    index=True required=True args: 'account.move.line'
Public methods (3)
  • create(self, vals)
    @api.model
  • create_exchange_rate_entry(self, aml_to_fix, amount_diff, diff_in_currency, currency, move_date)
    Automatically create a journal entry to book the exchange rate difference. That new journal entry is made in the company `currency_exchange_journal_id` and one of its journal items is matched with the other lines to balance the full reconciliation.
  • unlink(self)
    @api.multi
    When removing a link between entries, we need to revert the eventual journal entries we created to book the fluctuation of the foreign currency's exchange rate. We need also to reconcile together the origin currency difference line and its reversal in order to completly cancel the currency difference entry on the partner account (otherwise it will still appear on the aged balance for example).

New fields (13)
  • company_id Many2one
    store=True
  • destination_account_id Many2one → account.account
    compute='_compute_destination_account_id' readonly=True args: 'account.account'
  • destination_journal_id Many2one → account.journal
    domain=[('type', 'in', ('bank', 'cash'))] string='Transfer To' args: 'account.journal'
  • has_invoices Boolean
    compute='_get_has_invoices' help='Technical field used for usability purposes'
  • invoice_ids Many2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'account_invoice_payment_rel', 'payment_id', 'invoice_id'
  • move_line_ids One2many → account.move.line
    copy=False ondelete='restrict' readonly=True args: 'account.move.line', 'payment_id'
  • name Char
    copy=False default='Draft Payment' readonly=True
  • payment_difference Monetary
    compute='_compute_payment_difference' readonly=True
  • payment_difference_handling Selection
    copy=False default='open' string='Payment Difference' args: [('open', 'Keep open'), ('reconcile', 'Mark invoice as fully paid')]
  • payment_reference Char
    copy=False help='Reference of the document used to issue this payment. Eg. check number, file name, etc.' readonly=True
  • payment_type Selection
    selection_add=[('transfer', 'Internal Transfer')]
  • state Selection
    copy=False default='draft' readonly=True string='Status' args: [('draft', 'Draft'), ('posted', 'Posted'), ('sent', 'Sent'), ('reconciled', 'Reconciled')]
  • writeoff_account_id Many2one → account.account
    copy=False domain=[('deprecated', '=', False)] string='Difference Account' args: 'account.account'
Public methods (8)
  • button_dummy(self)
    @api.multi
  • button_invoices(self)
    @api.multi
  • button_journal_entries(self)
    @api.multi
  • cancel(self)
    @api.multi
  • default_get(self, fields)
    @api.model
  • post(self)
    @api.multi
    Create the journal items for the payment and update the payment's state to 'posted'. A journal entry is created containing an item in the source liquidity account (selected journal's default_debit or default_credit) and another in the destination reconciliable account (see _compute_destination_account_id). If invoice_ids is not empty, there will be one reconciliable move line per invoice to reconcile with. If the payment is a transfer, a second journal entry is created in the destination journal to receive money from the transfer account.
  • unlink(self)
    @api.multi
  • unreconcile(self)
    @api.multi
    Set back the payments in 'posted' or 'sent' state, without deleting the journal entries. Called when cancelling a bank statement line linked to a pre-registered payment.

New fields (3)
  • code Char
    required=True
  • name Char
    required=True
  • payment_type Selection
    required=True args: [('inbound', 'Inbound'), ('outbound', 'Outbound')]
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the payment term without removing it.'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • line_ids One2many → account.payment.term.line
    copy=True default=_default_line_ids string='Terms' args: 'account.payment.term.line', 'payment_id'
  • name Char
    required=True string='Payment Term' translate=True
  • note Text
    string='Description on the Invoice' translate=True
Public methods (2)
  • compute(self, value, date_ref=False)
    @api.one
  • unlink(self)
    @api.multi

New fields (6)
  • days Integer
    default=0 required=True string='Number of Days'
  • option Selection
    default='day_after_invoice_date' required=True string='Options' args: [('day_after_invoice_date', 'Day(s) after the invoice date'), ('fix_day_following_month', 'Day(s) after the end of the invoice month (Net EOM)'), ('last_day_following_month', 'Last day of following month'), ('last_day_current_month', 'Last day of current month')]
  • payment_id Many2one → account.payment.term
    index=True ondelete='cascade' required=True string='Payment Term' args: 'account.payment.term'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of payment term lines.'
  • value Selection
    default='balance' help='Select here the kind of valuation related to this payment term line.' required=True string='Type' args: [('balance', 'Balance'), ('percent', 'Percent'), ('fixed', 'Fixed Amount')]
  • value_amount Float
    digits=dp.get_precision('Payment Term') help='For percent enter a ratio between 0-100.' string='Value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • create_payment(self)
    @api.multi
  • default_get(self, fields)
    @api.model
  • get_payment_vals(self)
    Hook for extension

New fields (3)
  • initial_balance Boolean
    help="If you selected date, this field allow you to add a row to display the amount of debit/credit/balance that precedes the filter you've set." string='Include Initial Balances'
  • journal_ids Many2many → account.journal
    required=True string='Journals' args: 'account.journal', 'account_report_general_ledger_journal_rel', 'account_id', 'journal_id'
  • sortby Selection
    default='sort_date' required=True string='Sort by' args: [('sort_date', 'Date'), ('sort_journal_partner', 'Journal & Partner')]
Public methods (0)

No public methods.

New fields (16)
  • account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account.' oldname='account_collected_id' ondelete='restrict' string='Tax Account' args: 'account.account.template'
  • active Boolean
    default=True help='Set active to false to hide the tax without removing it.'
  • amount Float
    digits=(16, 4) required=True
  • amount_type Selection
    default='percent' required=True selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')] string='Tax Computation'
  • analytic Boolean
    help='If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)' string='Analytic Cost'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • children_tax_ids Many2many → account.tax.template
    string='Children Taxes' args: 'account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • description Char
    string='Display on Invoices'
  • include_base_amount Boolean
    default=False help='If set, taxes which are computed after this one will be computed based on the price tax included.' string='Affect Subsequent Taxes'
  • name Char
    required=True string='Tax Name'
  • price_include Boolean
    default=False help='Check this if the price you use on the product and invoices includes this tax.' string='Included in Price'
  • refund_account_id Many2one → account.account.template
    help='Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account.' oldname='account_paid_id' ondelete='restrict' string='Tax Account on Refunds' args: 'account.account.template'
  • sequence Integer
    default=1 help='The sequence field is used to define order in which the tax lines are applied.' required=True
  • tag_ids Many2many → account.account.tag
    help='Optional tags you may want to assign for custom reporting' string='Account tag' args: 'account.account.tag'
  • type_tax_use Selection
    default='sale' help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group." required=True string='Tax Scope' args: [('sale', 'Sales'), ('purchase', 'Purchases'), ('none', 'None')]
Public methods (1)
  • name_get(self)
    @api.multi@api.depends('name', 'description')

New fields (0)

No new fields.

Public methods (1)
  • trans_unrec(self)
    @api.multi

New fields (7)
  • account_report_id Many2one → account.financial.report
    default=_get_account_report required=True string='Account Reports' args: 'account.financial.report'
  • date_from_cmp Date
    string='Start Date'
  • date_to_cmp Date
    string='End Date'
  • debit_credit Boolean
    help='This option allows you to get more details about the way your balances are computed. Because it is space consuming, we do not allow to use it while doing a comparison.' string='Display Debit/Credit Columns'
  • enable_filter Boolean
    string='Enable Comparison'
  • filter_cmp Selection
    default='filter_no' required=True string='Filter by' args: [('filter_no', 'No Filters'), ('filter_date', 'Date')]
  • label_filter Char
    help='This label will be displayed on report to show the balance computed for the given comparison filter.' string='Column Label'
Public methods (1)
  • check_report(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)
    @api.multi

New fields (2)
  • property_account_expense_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices to value expenses.' oldname='property_account_expense_categ' string='Expense Account' args: 'account.account'
  • property_account_income_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices to value sales.' oldname='property_account_income_categ' string='Income Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • property_account_expense_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices instead of the default one to value expenses for the current product.' oldname='property_account_expense' string='Expense Account' args: 'account.account'
  • property_account_income_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='This account will be used for invoices instead of the default one to value sales for the current product.' oldname='property_account_income' string='Income Account' args: 'account.account'
  • supplier_taxes_id Many2many → account.tax
    domain=[('type_tax_use', '=', 'purchase')] string='Vendor Taxes' args: 'account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id'
  • taxes_id Many2many → account.tax
    domain=[('type_tax_use', '=', 'sale')] string='Customer Taxes' args: 'account.tax', 'product_taxes_rel', 'prod_id', 'tax_id'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, data)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • get_account_lines(self, data)
  • render_html(self, data)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, data)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, data)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, data)
    @api.multi

New fields (21)
  • accounts_code_digits Integer
    string='Number of digits in an account code'
  • anglo_saxon_accounting Boolean
    string='Use anglo-saxon accounting'
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' string='Prefix of the bank accounts'
  • bank_journal_ids One2many → account.journal
    domain=[('type', '=', 'bank')] string='Bank Journals' args: 'account.journal', 'company_id'
  • cash_account_code_prefix Char
    string='Prefix of the cash accounts'
  • chart_template_id Many2one → account.chart.template
    help='The chart template for the company (if any)' args: 'account.chart.template'
  • currency_exchange_journal_id Many2one → account.journal
    domain=[('type', '=', 'general')] string='Exchange Gain or Loss Journal' args: 'account.journal'
  • expects_chart_of_accounts Boolean
    default=True string='Expects a Chart of Accounts'
  • expense_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" related='currency_exchange_journal_id.default_debit_account_id' string='Loss Exchange Rate Account' args: 'account.account'
  • fiscalyear_last_day Integer
    default=31 required=True
  • fiscalyear_last_month Selection
    default=12 required=True args: [(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')]
  • fiscalyear_lock_date Date
    help='No users, including Advisers, can edit accounts prior to and inclusive of this date. Use it for fiscal year locking for example.' string='Lock Date'
  • income_currency_exchange_account_id Many2one → account.account
    domain="[('internal_type', '=', 'other'), ('deprecated', '=', False), ('company_id', '=', id)]" related='currency_exchange_journal_id.default_credit_account_id' string='Gain Exchange Rate Account' args: 'account.account'
  • overdue_msg Text
    default='Dear Sir/Madam,\n\nOur records indicate that some payments on your account are still due. Please find details below.\nIf the amount has already been paid, please disregard this notice. Otherwise, please forward us the total amount stated below.\nIf you have any queries regarding your account, Please contact us.\n\nThank you in advance for your cooperation.\nBest Regards,' string='Overdue Payments Message' translate=True
  • paypal_account Char
    help='Paypal username (usually email) for receiving online payments.' size=128 string='Paypal Account'
  • period_lock_date Date
    help="Only users with the 'Adviser' role can edit accounts prior to and inclusive of this date. Use it for period locking inside an open fiscal year, for example." string='Lock Date for Non-Advisers'
  • property_stock_account_input_categ_id Many2one → account.account
    oldname='property_stock_account_input_categ' string='Input Account for Stock Valuation' args: 'account.account'
  • property_stock_account_output_categ_id Many2one → account.account
    oldname='property_stock_account_output_categ' string='Output Account for Stock Valuation' args: 'account.account'
  • property_stock_valuation_account_id Many2one → account.account
    string='Account Template for Stock Valuation' args: 'account.account'
  • tax_calculation_rounding_method Selection
    default='round_per_line' help="If you select 'Round per Line' : for each tax, the tax amount will first be computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed, leading to the total amount for that tax. If you select 'Round Globally': for each tax, the tax amount will be computed for each PO/SO/invoice line, then these amounts will be summed and eventually this total tax amount will be rounded. If you sell with tax included, you should choose 'Round per line' because you certainly want the sum of your tax-included line subtotals to be equal to the total amount with taxes." string='Tax Calculation Rounding Method' args: [('round_per_line', 'Round per Line'), ('round_globally', 'Round Globally')]
  • transfer_account_id Many2one → account.account
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' string='Inter-Banks Transfer Account' args: 'account.account'
Public methods (5)
  • compute_fiscalyear_dates(self, date)
    @api.multi
    Computes the start and end dates of the fiscalyear where the given 'date' belongs to @param date: a datetime object @returns: a dictionary with date_from and date_to
  • get_new_account_code(self, current_code, old_prefix, new_prefix, digits)
  • reflect_code_digits_change(self, digits)
  • reflect_code_prefix_change(self, old_code, new_code, digits)
  • write(self, values)
    @api.multi

New fields (19)
  • bank_account_count Integer
    compute='_compute_bank_count' string='Bank'
  • contract_ids One2many → account.analytic.account
    readonly=True string='Contracts' args: 'account.analytic.account', 'partner_id'
  • contracts_count Integer
    compute='_journal_item_count' string='Contracts' type='integer'
  • credit Monetary
    compute='_credit_debit_get' help='Total amount this customer owes you.' search=_credit_search string='Total Receivable'
  • currency_id Many2one → res.currency
    compute='_get_company_currency' help='Utility field to express amount currency' readonly=True string='Currency' args: 'res.currency'
  • debit Monetary
    compute='_credit_debit_get' help='Total amount you have to pay to this vendor.' search=_debit_search string='Total Payable'
  • debit_limit Monetary
    args: 'Payable Limit'
  • has_unreconciled_entries Boolean
    compute='_compute_has_unreconciled_entries' help='The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.'
  • invoice_ids One2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'partner_id'
  • issued_total Monetary
    compute='_compute_issued_total' string='Journal Items'
  • journal_item_count Integer
    compute='_journal_item_count' string='Journal Items' type='integer'
  • last_time_entries_checked Datetime
    copy=False help='Last time the invoices & payments matching was performed for this partner. It is set either if there\'s not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.' oldname='last_reconciliation_date' readonly=True string='Latest Invoices & Payments Matching Date'
  • property_account_payable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'payable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the payable account for the current partner' oldname='property_account_payable' required=True string='Account Payable' args: 'account.account'
  • property_account_position_id Many2one → account.fiscal.position
    company_dependent=True help='The fiscal position will determine taxes and accounts used for the partner.' oldname='property_account_position' string='Fiscal Position' args: 'account.fiscal.position'
  • property_account_receivable_id Many2one → account.account
    company_dependent=True domain="[('internal_type', '=', 'receivable'), ('deprecated', '=', False)]" help='This account will be used instead of the default one as the receivable account for the current partner' oldname='property_account_receivable' required=True string='Account Receivable' args: 'account.account'
  • property_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for sale orders and customer invoices' oldname='property_payment_term' string='Customer Payment Term' args: 'account.payment.term'
  • property_supplier_payment_term_id Many2one → account.payment.term
    company_dependent=True help='This payment term will be used instead of the default one for purchase orders and vendor bills' oldname='property_supplier_payment_term' string='Vendor Payment Term' args: 'account.payment.term'
  • ref_company_ids One2many → res.company
    oldname='ref_companies' string='Companies that refers to partner' args: 'res.company', 'partner_id'
  • total_invoiced Monetary
    compute='_invoice_total' groups='account.group_account_invoice' string='Total Invoiced'
Public methods (2)
  • get_followup_lines_domain(self, date, overdue_only=False, only_unblocked=False)
  • mark_as_reconciled(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • validate_move(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (15)
  • bank_account_code_prefix Char
    oldname='bank_account_code_char' args: 'Bank Accounts Prefix'
  • bank_account_ids One2many → account.bank.accounts.wizard
    oldname='bank_accounts_id' required=True string='Cash and Banks' args: 'account.bank.accounts.wizard', 'bank_account_id'
  • cash_account_code_prefix Char
    args: 'Cash Accounts Prefix'
  • chart_template_id Many2one → account.chart.template
    required=True string='Chart Template' args: 'account.chart.template'
  • code_digits Integer
    help='No. of Digits to use for account code' required=True string='# of Digits'
  • company_id Many2one → res.company
    required=True string='Company' args: 'res.company'
  • complete_tax_set Boolean
    help='This boolean helps you to choose if you want to propose to the user to encode the sales and purchase rates or use the usual m2o fields. This last choice assumes that the set of tax defined for the chosen template is complete' args: 'Complete Set of Taxes'
  • currency_id Many2one → res.currency
    help="Currency as per company's country." required=True string='Currency' args: 'res.currency'
  • only_one_chart_template Boolean
    string='Only One Chart Template Available'
  • purchase_tax_id Many2one → account.tax.template
    oldname='purchase_tax' string='Default Purchase Tax' args: 'account.tax.template'
  • purchase_tax_rate Float
    string='Purchase Tax(%)'
  • sale_tax_id Many2one → account.tax.template
    oldname='sale_tax' string='Default Sales Tax' args: 'account.tax.template'
  • sale_tax_rate Float
    string='Sales Tax(%)'
  • transfer_account_id Many2one → account.account.template
    domain=<expr> help='Intermediary account used when moving money from a liquidity account to another' required=True string='Transfer Account' args: 'account.account.template'
  • use_anglo_saxon Boolean
    related='chart_template_id.use_anglo_saxon' string='Use Anglo-Saxon Accounting'
Public methods (5)
  • default_get(self, fields)
    @api.model
  • execute(self)
    @api.multi
    This function is called at the confirmation of the wizard to generate the COA from the templates. It will read all the provided information to create the accounts, the banks, the journals, the taxes, the accounting properties... accordingly for the chosen company.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • onchange_chart_template_id(self)
    @api.onchange('chart_template_id')
  • onchange_tax_rate(self)
    @api.onchange('sale_tax_rate')
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, Christophe Matthieu, Harry (OpenERP), Antonin Bourguignon, ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Tejas Tank, Thibault Delavallée, Vo Minh Thu, Josse Colpaert, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Alexis de Lattre, Fabien Meghazi, niv-openerp, ggh-openerp, Christophe Simonis, Xavier Morel, Goffin Simon, Bhumi Thakkar (Open ERP), Cedric Snauwaert, Simon Lejeune, Frédéric van der Essen, Vishmita, Nicolas Martinelli, Chirag Dodiya (OpenERP Trainee), Kersten Jeremy, Amit Bhavsar (Open ERP), Paramjit Singh Sahota, Nicolas Lempereur, Anand Patel (OpenERP), Julien Legros, Paulius Sladkevičius, Nimesh Contractor (OpenERP), Richard Mathot, qdp-odoo, Niels Huylebroeck, Juan Rial, Géry Debongnie, Aaron Bohy, bth-openerp, Vishmita Jadeja (openerp), Bharat R. Devnani (OpenERP), Fekete Mihai, Richard Mathot (OpenERP), ged-odoo, Jaydeep Barot (OpenERP Trainee), openerp-sle, Jeremy Kersten, Gery Debongnie, Randhir Mayatra rma-openerp, Amit Vora (OpenERP Trainee), sgo@tinyerp.com, Lucas Perais (lpe), Darshan Kalola (OpenERP), Darshan Kalola, Jitendra Prajapati (OpenERP), Yogesh Parekh (OpenERP), Erwin van der Ploeg, ssh-odoo, Sunil Sharma (OpenERP), Rakesh Sindhav (OpenERP), Jaydeep Barot, Sanjay Gohel (OpenERP), Jignesh Rathod (OpenERP), Commandant Custo, Denis Michiels, Arthur Maniet, richierichrawr, David Arnold
WEBSITE
WEBSITEhttps://www.odoo.com/page/billing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Accounting and Financial Management.
====================================

Financial and accounting module that covers:
--------------------------------------------
    * General Accounting
    * Cost/Analytic accounting
    * Third party accounting
    * Taxes management
    * Budgets
    * Customer and Supplier Invoices
    * Bank statements
    * Reconciliation process by partner

Creates a dashboard for accountants that includes:
--------------------------------------------------
    * List of Customer Invoices to Approve
    * Company Analysis
    * Graph of Treasury

Processes like maintaining general ledgers are done through the defined Financial Journals (entry move line or grouping is maintained through a journal) 
for a particular financial year and for preparation of vouchers there is a module named account_voucher.
    

Code Analysis

Views touched (213)
XML IDNameModelTypeStatus
account.report_overdue_document account.report_overdue_document ir.ui.view qweb New
account_account_graph account.account.graph account.account graph New
account_aged_balance_view Aged Partner Balance account.aged.trial.balance form New
account_analytic_balance_view Account Analytic Balance account.analytic.balance form New
account_analytic_chart_view Chart of Analytic Accounts account.analytic.chart form New
account_analytic_cost_ledger_journal_view Account Analytic Cost Ledger Journal account.analytic.cost.ledger.journal.report form New
account_analytic_cost_view Account Analytic Check account.analytic.cost.ledger form New
account_analytic_invert_balance_view Account Analytic Inverted Balance account.analytic.inverted.balance form New
account_analytic_journal_view Account Analytic Journal account.analytic.journal.report form New
account_analytic_line_extended_form account.analytic.line.extended_form account.analytic.line form New
account_automatic_reconcile_view Account Automatic Reconcile account.automatic.reconcile form New
account_automatic_reconcile_view1 Automatic reconcile unreconcile account.automatic.reconcile form New
account_cash_statement_graph account.bank.statement.graph account.bank.statement graph New
account_common_report_view Common Report account.common.report form New
account_invoice_cancel_view account.invoice.cancel.form account.invoice.cancel form New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_move_line_graph account.move.line.graph account.move.line graph New
account_move_line_reconcile_writeoff account.move.line.reconcile.writeoff.form account.move.line.reconcile.writeoff form New
account_move_line_select_button_view Open Move Line Button account.move.line.select form New
account_partner_balance_view Partner Balance account.partner.balance data Inherits account_common_report_view
account_partner_ledger_view Partner Ledger account.partner.ledger data Inherits account_common_report_view
account_partner_reconcile_view Partner Reconcilation Process account.partner.reconcile.process form New
account_report_balance_view Trial Balance account.balance.report data Inherits account_common_report_view
account_report_general_journal_view Account General Journal account.general.journal data Inherits account_common_report_view
account_report_general_ledger_view General Ledger account.report.general.ledger data Inherits account_common_report_view
account_report_general_ledger_view_inherit General Ledger account.report.general.ledger field Inherits account_report_general_ledger_view
account_report_print_journal Account Print Journal account.print.journal data Inherits account_common_report_view
account_unreconcile_reconcile_view Unreconcile Entries account.unreconcile.reconcile form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
accounting_report_view Accounting Report accounting.report xpath Inherits account.account_common_report_view
assets_backend account assets ir.ui.view qweb Inherits web.assets_backend
board_view_created_invoice report.invoice.created.tree report.invoice.created tree New
cash_box_in_form cash_box_in cash.box.in form New
cash_box_out_form cash_box_out cash.box.out form New
invoice_form account.invoice.form account.invoice form New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_tree account.invoice.tree account.invoice tree New
open_journal_button_view Open Journal Button account.journal.select form New
partner_view_button_contracts_count partner.view.button.contracts_count res.partner xpath Inherits base.view_partner_form
partner_view_button_journal_item_count partner.view.button.journal_item_count res.partner xpath Inherits base.view_partner_form
partner_view_buttons partner.view.buttons res.partner xpath Inherits base.view_partner_form
product_template_form_view product.template.form.inherit product.template page Inherits product.product_template_form_view
report_agedpartnerbalance report_agedpartnerbalance ir.ui.view qweb New
report_analyticbalance report_analyticbalance ir.ui.view qweb New
report_analyticcostledger report_analyticcostledger ir.ui.view qweb New
report_analyticcostledgerquantity report_analyticcostledgerquantity ir.ui.view qweb New
report_analyticjournal report_analyticjournal ir.ui.view qweb New
report_centraljournal report_centraljournal ir.ui.view qweb New
report_financial report_financial ir.ui.view qweb New
report_generaljournal report_generaljournal ir.ui.view qweb New
report_generalledger report_generalledger ir.ui.view qweb New
report_invertedanalyticbalance report_invertedanalyticbalance ir.ui.view qweb New
report_invoice report_invoice ir.ui.view qweb New
report_invoice_document report_invoice_document ir.ui.view qweb New
report_journal report_journal ir.ui.view qweb New
report_overdue report_overdue ir.ui.view qweb New
report_partnerbalance report_partnerbalance ir.ui.view qweb New
report_partnerledger report_partnerledger ir.ui.view qweb New
report_partnerledgerother report_partnerledgerother ir.ui.view qweb New
report_salepurchasejournal report_salepurchasejournal ir.ui.view qweb New
report_trialbalance report_trialbalance ir.ui.view qweb New
report_vat report_vat ir.ui.view qweb New
sequence_inherit_form ir.sequence.form ir.sequence page Inherits base.sequence_view
validate_account_move_line_view Post Journal Entries validate.account.move.lines form New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_addtmpl_wizard_form Create Account account.addtmpl.wizard form New
view_account_analytic_account_list account.analytic.account.list account.analytic.account tree New
view_account_analytic_account_search account.analytic.account.search account.analytic.account search New
view_account_analytic_account_tree account.analytic.account.tree account.analytic.account tree New
view_account_analytic_entries_search account.analytic.entries.graph analytic.entries.report graph New
view_account_analytic_journal_form account.analytic.journal.form account.analytic.journal form New
view_account_analytic_journal_tree account.analytic.journal.tree account.analytic.journal tree New
view_account_analytic_line_filter account.analytic.line.select account.analytic.line search New
view_account_analytic_line_form account.analytic.line.form account.analytic.line form New
view_account_analytic_line_tree account.analytic.line.tree account.analytic.line tree New
view_account_bank_statement_filter account.cash.statement.select account.bank.statement search New
view_account_central_journal Account central Journal account.central.journal field Inherits account_common_report_view
view_account_change_currency Change Currency account.change.currency form New
view_account_chart account.chart.form account.chart form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_config_settings account settings account.config.settings form New
view_account_configuration_installer account.installer.form account.installer form Inherits base.res_config_installer
view_account_entries_report_graph account.entries.report.graph account.entries.report graph New
view_account_entries_report_search account.entries.report.search account.entries.report search New
view_account_entries_report_tree account.entries.report.tree account.entries.report tree New
view_account_financial_report_form account.financial.report.form account.financial.report form New
view_account_financial_report_search account.financial.report.search account.financial.report search New
view_account_financial_report_tree account.financial.report.tree account.financial.report tree New
view_account_fiscalyear_close account.fiscalyear.close.form account.fiscalyear.close form New
view_account_fiscalyear_close_state account.fiscalyear.close.state.form account.fiscalyear.close.state form New
view_account_fiscalyear_form account.fiscalyear.form account.fiscalyear form New
view_account_fiscalyear_search account.fiscalyear.search account.fiscalyear search New
view_account_fiscalyear_tree account.fiscalyear.tree account.fiscalyear tree New
view_account_form account.account.form account.account form New
view_account_gain_loss_tree Unrealized Gain or Loss account.account tree New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_journal_1 account.journal.form.1 account.journal field Inherits account.view_account_journal_form
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_bank_reconcile account.move.bank.reconcile.form account.move.bank.reconcile form New
view_account_move_filter account.move.select account.move search New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_line_reconcile_full account.move.line.reconcile.full.form account.move.line.reconcile form New
view_account_move_line_reconcile_select account.move.line.reconcile.select.form account.move.line.reconcile.select form New
view_account_move_line_unreconcile_select account.move.line.unreconcile.select.form account.move.line.unreconcile.select form New
view_account_move_tree account.move.tree account.move tree New
view_account_open_closed_fiscalyear account.open.closed.fiscalyear.form account.open.closed.fiscalyear form New
view_account_period_close account.period.close.form account.period.close form New
view_account_period_form account.period.form account.period form New
view_account_period_search account.period.search account.period search New
view_account_period_tree account.period.tree account.period tree New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_report_tree_hierarchy account.report.hierarchy account.financial.report tree New
view_account_search account.account.search account.account search New
view_account_state_open Account State Open account.state.open form New
view_account_statement_from_invoice_lines account.statement.from.invoice.lines.form account.statement.from.invoice.lines form New
view_account_statement_operation_template_form account.statement.operation.template.form account.statement.operation.template form New
view_account_statement_operation_template_search account.statement.operation.template.search account.statement.operation.template search New
view_account_statement_operation_template_tree account.statement.operation.template.tree account.statement.operation.template tree New
view_account_subscription_generate account.subscription.generate.form account.subscription.generate form New
view_account_tax_chart account.tax.chart.form account.tax.chart form New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_treasury_report_graph account.treasury.report.graph account.treasury.report graph New
view_account_treasury_report_search account.treasury.report.search account.treasury.report search New
view_account_treasury_report_tree account.treasury.report.tree account.treasury.report tree New
view_account_tree account.account.tree account.account tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_account_use_model account.use.model.form account.use.model form New
view_account_use_model_create_entry account.use.model.create.entry.form account.use.model form New
view_account_vat_declaration Account Tax Declaration account.vat.declaration form New
view_aged_recv_graph report.aged.receivable.graph report.aged.receivable graph New
view_aged_recv_tree report.aged.receivable.tree report.aged.receivable tree New
view_analytic_entries_report_search analytic.entries.report.search analytic.entries.report search New
view_analytic_journal_search account.analytic.journal.search account.analytic.journal search New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_form2 account.bank.statement.form account.bank.statement form New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_cash_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category data Inherits product.product_category_form_view
view_company_analysis_tree account.company.analysis.tree account.entries.report tree New
view_company_inherit_form res.company.form.inherit res.company notebook Inherits base.view_company_form
view_crm_case_user_form report.account.receivable.form report.account.receivable form New
view_crm_case_user_graph report.account.receivable.graph report.account.receivable graph New
view_crm_case_user_tree report.account.receivable.tree report.account.receivable tree New
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_journal_period_tree account.journal.period.tree account.journal.period tree New
view_model_form account.model.form account.model form New
view_model_line_form account.model.line.form account.model.line form New
view_model_line_tree account.model.line.tree account.model.line tree New
view_model_search account.model.search account.model search New
view_model_tree account.model.tree account.model tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_form2 account.move.line.form2 account.move.line form New
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_reconcile account.move.line tree_account_reconciliation New
view_move_reconcile_form account.move.reconcile.form account.move.reconcile form New
view_move_tree account.move.tree account.move tree New
view_partner_bank_form_inherit Partner Bank Accounts - Journal res.partner.bank group Inherits base.view_partner_bank_form
view_partner_bank_tree_add_currency Partner Bank Accounts - Add currency on tree res.partner.bank field Inherits base.view_partner_bank_tree
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_project_account_analytic_line_form project.account.analytic.line.form project.account.analytic.line form New
view_report_account_sales_graph report.account.sales.graph report.account.sales graph New
view_report_account_sales_search report.account.sales.search report.account.sales search New
view_report_account_sales_tree report.account.sales.tree report.account.sales tree New
view_report_account_type_sales_form report.account_type.sales.form report.account_type.sales tree New
view_report_account_type_sales_graph report.account_type.sales.graph report.account_type.sales graph New
view_report_account_type_sales_search report.account_type.sales.search report.account_type.sales search New
view_report_account_type_sales_tree report.account_type.sales.tree report.account_type.sales tree New
view_subscription_form account.subscription.form account.subscription form New
view_subscription_line_form account.subscription.line.form account.subscription.line form New
view_subscription_line_form_complete account.subscription.line.form account.subscription.line form New
view_subscription_line_tree account.subscription.line.tree account.subscription.line tree New
view_subscription_search account.subscription.search account.subscription search New
view_subscription_tree account.subscription.tree account.subscription tree New
view_tax_code_form account.tax.code.form account.tax.code form New
view_tax_code_search account.tax.code.search account.tax.code search New
view_tax_code_template_form account.tax.code.template.form account.tax.code.template form New
view_tax_code_template_search account.tax.code.template.search account.tax.code.template search New
view_tax_code_template_tree account.tax.code.template.tree account.tax.code.template tree New
view_tax_code_tree account.tax.code.tree account.tax.code tree New
view_tax_form account.tax.form account.tax form New
view_tax_tree account.tax.tree account.tax tree New
view_wizard_multi_chart Set Your Accounting Options wizard.multi.charts.accounts form Inherits base.res_config_view_base
Models touched (21)

New fields (36)
  • account_id Many2one → account.account
    help='The partner account used for this invoice.' readonly=True required=True states={'draft': [('readonly', False)]} string='Account' args: 'account.account'
  • amount_tax Float
    compute='_compute_amount' digits=dp.get_precision('Account') readonly=True store=True string='Tax'
  • amount_total Float
    compute='_compute_amount' digits=dp.get_precision('Account') readonly=True store=True string='Total'
  • amount_untaxed Float
    compute='_compute_amount' digits=dp.get_precision('Account') readonly=True store=True string='Subtotal' track_visibility='always'
  • check_total Float
    default=0.0 digits=dp.get_precision('Account') readonly=True states={'draft': [('readonly', False)]} string='Verification Total'
  • comment Text
    args: 'Additional Information'
  • commercial_partner_id Many2one → res.partner
    help='The commercial entity that will be used on Journal Entries for this invoice' readonly=True related='partner_id.commercial_partner_id' store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    default=_default_currency readonly=True required=True states={'draft': [('readonly', False)]} string='Currency' track_visibility='always' args: 'res.currency'
  • date_due Date
    copy=False help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The payment term may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment.' index=True readonly=True states={'draft': [('readonly', False)]} string='Due Date'
  • date_invoice Date
    copy=False help='Keep empty to use the current date' index=True readonly=True states={'draft': [('readonly', False)]} string='Invoice Date'
  • fiscal_position Many2one → account.fiscal.position
    readonly=True states={'draft': [('readonly', False)]} string='Fiscal Position' args: 'account.fiscal.position'
  • internal_number Char
    copy=False default=False help='Unique number of the invoice, computed automatically when the invoice is created.' readonly=True string='Invoice Number'
  • invoice_line One2many → account.invoice.line
    copy=True readonly=True states={'draft': [('readonly', False)]} string='Invoice Lines' args: 'account.invoice.line', 'invoice_id'
  • journal_id Many2one → account.journal
    default=_default_journal domain="[('type', 'in', {'out_invoice': ['sale'], 'out_refund': ['sale_refund'], 'in_refund': ['purchase_refund'], 'in_invoice': ['purchase']}.get(type, [])), ('company_id', '=', company_id)]" readonly=True required=True states={'draft': [('readonly', False)]} string='Journal' args: 'account.journal'
  • move_id Many2one → account.move
    copy=False help='Link to the automatically generated Journal Items.' index=True ondelete='restrict' readonly=True string='Journal Entry' args: 'account.move'
  • move_lines Many2many → account.move.line
    compute='_compute_move_lines' string='Entry Lines' args: 'account.move.line'
  • move_name Char
    copy=False readonly=True states={'draft': [('readonly', False)]} string='Journal Entry'
  • name Char
    index=True readonly=True states={'draft': [('readonly', False)]} string='Reference/Description'
  • number Char
    copy=False readonly=True related='move_id.name' store=True
  • origin Char
    help='Reference of the document that produced this invoice.' readonly=True states={'draft': [('readonly', False)]} string='Source Document'
  • partner_bank_id Many2one → res.partner.bank
    help='Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Supplier Refund, otherwise a Partner bank account number.' readonly=True states={'draft': [('readonly', False)]} string='Bank Account' args: 'res.partner.bank'
  • partner_id Many2one → res.partner
    change_default=True readonly=True required=True states={'draft': [('readonly', False)]} string='Partner' track_visibility='always' args: 'res.partner'
  • payment_ids Many2many → account.move.line
    compute='_compute_payments' string='Payments' args: 'account.move.line'
  • payment_term Many2one → account.payment.term
    help='If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month.' readonly=True states={'draft': [('readonly', False)]} string='Payment Terms' args: 'account.payment.term'
  • period_id Many2one → account.period
    copy=False domain=[('state', '!=', 'done')] help='Keep empty to use the period of the validation(invoice) date.' readonly=True states={'draft': [('readonly', False)]} string='Force Period' args: 'account.period'
  • reconciled Boolean
    compute='_compute_reconciled' help='It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment.' readonly=True store=True string='Paid/Reconciled'
  • reference Char
    help='The partner reference of this invoice.' string='Invoice Reference'
  • reference_type Selection
    default='none' readonly=True required=True states={'draft': [('readonly', False)]} string='Payment Reference' args: '_get_reference_type'
  • residual Float
    compute='_compute_residual' digits=dp.get_precision('Account') help='Remaining amount due.' store=True string='Balance'
  • sent Boolean
    copy=False default=False help='It indicates that the invoice has been sent.' readonly=True
  • state Selection
    copy=False default='draft' help=" * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n * The 'Pro-forma' when invoice is in Pro-forma status,invoice does not have an invoice number.\n * The 'Open' status is used when user create invoice,a invoice number is generated.Its in open status till user does not pay invoice.\n * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n * The 'Cancelled' status is used when user cancel invoice." index=True readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Draft'), ('proforma', 'Pro-forma'), ('proforma2', 'Pro-forma'), ('open', 'Open'), ('paid', 'Paid'), ('cancel', 'Cancelled')]
  • supplier_invoice_number Char
    help='The reference of this invoice as provided by the supplier.' readonly=True states={'draft': [('readonly', False)]} string='Supplier Invoice Number'
  • tax_line One2many → account.invoice.tax
    copy=True readonly=True states={'draft': [('readonly', False)]} string='Tax Lines' args: 'account.invoice.tax', 'invoice_id'
  • type Selection
    change_default=True default=<expr> index=True readonly=True string='Type' track_visibility='always' args: [('out_invoice', 'Customer Invoice'), ('in_invoice', 'Supplier Invoice'), ('out_refund', 'Customer Refund'), ('in_refund', 'Supplier Refund')]
  • user_id Many2one → res.users
    default=<expr> readonly=True states={'draft': [('readonly', False)]} string='Salesperson' track_visibility='onchange' args: 'res.users'
Public methods (33)
  • action_cancel(self)
    @api.multi
  • action_cancel_draft(self)
    @api.multi
  • action_date_assign(self)
    @api.multi
  • action_invoice_sent(self)
    @api.multi
    Open a window to compose an email, with the edi invoice template message loaded by default
  • action_move_create(self)
    @api.multi
    Creates invoice related analytics and financial move lines
  • action_number(self)
    @api.multi
  • button_compute(self, set_total=False)
    @api.multi
  • button_reset_taxes(self)
    @api.multi
  • check_tax_lines(self, compute_taxes)
    @api.multi
  • compute_invoice_totals(self, company_currency, ref, invoice_move_lines)
    @api.multi
  • confirm_paid(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False)
    @api.model
  • finalize_invoice_move_lines(self, move_lines)
    @api.multi
    finalize_invoice_move_lines(move_lines) -> move_lines Hook method to be overridden in additional modules to verify and possibly alter the move lines to be created by an invoice, for special cases. :param move_lines: list of dictionaries with the account.move.lines (as for create()) :return: the (possibly updated) final move_lines to create for this invoice
  • get_formview_id(self)
    @api.one@api.returns('ir.ui.view')
    Update form view id of action to open the invoice
  • group_lines(self, iml, line)
    Merge account move lines (and hence analytic lines) if invoice line hashcodes are equals
  • inv_line_characteristic_hashcode(self, invoice_line)
    Overridable hashcode generation for invoice lines. Lines having the same hashcode will be grouped together if the journal has the 'group line' option. Of course a module can add fields to invoice lines that would need to be tested too before merging lines or not.
  • invoice_print(self)
    @api.multi
    Print the invoice and mark it as sent, so that we can see more easily the next step of the workflow
  • invoice_validate(self)
    @api.multi
  • line_get_convert(self, line, part, date)
    @api.model
  • move_line_id_payment_get(self)
    @api.multi
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • onchange_company_id(self, company_id, part_id, type, invoice_line, currency_id)
    @api.multi
  • onchange_invoice_line(self, lines)
    @api.multi
  • onchange_journal_id(self, journal_id=False)
    @api.multi
  • onchange_partner_bank(self, partner_bank_id=False)
    @api.multi
  • onchange_partner_id(self, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False)
    @api.multi
  • onchange_payment_term_date_invoice(self, payment_term_id, date_invoice)
    @api.multi
  • pay_and_reconcile(self, pay_amount, pay_account_id, period_id, pay_journal_id, writeoff_acc_id, writeoff_period_id, writeoff_journal_id, name='')
    @api.v8
  • pay_and_reconcile(self, cr, uid, ids, pay_amount, pay_account_id, period_id, pay_journal_id, writeoff_acc_id, writeoff_period_id, writeoff_journal_id, context=None, name='')
    @api.v7
  • refund(self, date=None, period_id=None, description=None, journal_id=None)
    @api.multi@api.returns('self')
  • test_paid(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (15)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic Account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    default=_default_account domain=[('type', 'not in', ['view', 'closed'])] help='The income or expense account related to the selected product.' required=True string='Account' args: 'account.account'
  • company_id Many2one → res.company
    readonly=True related='invoice_id.company_id' store=True string='Company' args: 'res.company'
  • discount Float
    default=0.0 digits=dp.get_precision('Discount') string='Discount (%)'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice Reference' args: 'account.invoice'
  • invoice_line_tax_id Many2many → account.tax
    domain=[('parent_id', '=', False), '|', ('active', '=', False), ('active', '=', True)] string='Taxes' args: 'account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id'
  • name Text
    required=True string='Description'
  • origin Char
    help='Reference of the document that produced this invoice.' string='Source Document'
  • partner_id Many2one → res.partner
    readonly=True related='invoice_id.partner_id' store=True string='Partner' args: 'res.partner'
  • price_subtotal Float
    compute='_compute_price' digits=dp.get_precision('Account') readonly=True store=True string='Amount'
  • price_unit Float
    default=_default_price_unit digits=dp.get_precision('Product Price') required=True string='Unit Price'
  • product_id Many2one → product.product
    index=True ondelete='restrict' string='Product' args: 'product.product'
  • quantity Float
    default=1 digits=dp.get_precision('Product Unit of Measure') required=True string='Quantity'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the invoice.' string='Sequence'
  • uos_id Many2one → product.uom
    index=True ondelete='set null' string='Unit of Measure' args: 'product.uom'
Public methods (6)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • move_line_get(self, invoice_id)
    @api.model
  • move_line_get_item(self, line)
    @api.model
  • onchange_account_id(self, product_id, partner_id, inv_type, fposition_id, account_id)
    @api.multi
  • product_id_change(self, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, company_id=None)
    @api.multi
  • uos_id_change(self, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, company_id=None)
    @api.multi

New fields (15)
  • account_analytic_id Many2one → account.analytic.account
    string='Analytic account' args: 'account.analytic.account'
  • account_id Many2one → account.account
    domain=[('type', 'not in', ['view', 'income', 'closed'])] required=True string='Tax Account' args: 'account.account'
  • amount Float
    digits=dp.get_precision('Account') string='Amount'
  • base Float
    digits=dp.get_precision('Account') string='Base'
  • base_amount Float
    default=0.0 digits=dp.get_precision('Account') string='Base Code Amount'
  • base_code_id Many2one → account.tax.code
    help='The account basis of the tax declaration.' string='Base Code' args: 'account.tax.code'
  • company_id Many2one → res.company
    readonly=True related='account_id.company_id' store=True string='Company' args: 'res.company'
  • factor_base Float
    compute='_compute_factors' string='Multipication factor for Base code'
  • factor_tax Float
    compute='_compute_factors' string='Multipication factor Tax code'
  • invoice_id Many2one → account.invoice
    index=True ondelete='cascade' string='Invoice Line' args: 'account.invoice'
  • manual Boolean
    default=True string='Manual'
  • name Char
    required=True string='Tax Description'
  • sequence Integer
    help='Gives the sequence order when displaying a list of invoice tax.' string='Sequence'
  • tax_amount Float
    default=0.0 digits=dp.get_precision('Account') string='Tax Code Amount'
  • tax_code_id Many2one → account.tax.code
    help='The tax basis of the tax declaration.' string='Tax Code' args: 'account.tax.code'
Public methods (5)
  • amount_change(self, amount, currency_id=False, company_id=False, date_invoice=False)
    @api.multi
  • base_change(self, base, currency_id=False, company_id=False, date_invoice=False)
    @api.multi
  • compute(self, invoice)
    @api.v8
  • compute(self, cr, uid, invoice_id, context=None)
    @api.v7
  • move_line_get(self, invoice_id)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • invoice_ids One2many → account.invoice
    copy=False readonly=True string='Invoices' args: 'account.invoice', 'partner_id'
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/7.0/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Jalpesh Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, Christophe Matthieu, Pinakin Nayi (OpenERP), Benoit Guillot, DBR (OpenERP), Harry (OpenERP), Stéphane Bidoul, Antonin Bourguignon, pankita shah (Open ERP), ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Bhumika (OpenERP), Purnendu Singh (OpenERP), Saurang Suthar (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Twinkle (OpenERP), Divyesh Makwana (Open ERP), Tejas Tank, Thibault Delavallée, Vo Minh Thu, Hardik, Josse Colpaert, Arnaud Pineux, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Denis Ledoux, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Alexis de Lattre, help, Fabien Meghazi, niv-openerp, ggh-openerp, Xavier ALT, Christophe Simonis, Ujjvala Collins (OpenERP), David Monjoie, Ravi Gohil (OpenERP), Xavier Morel, Jiten (OpenERP), Denis Ledoux dle@openerp.com, Dharti Ratani (OpenERP), Goffin Simon, Anael Closson, Khushboo Bhatt (Open ERP), Mohammed Shekha, dle@openerp.com, Bhumi Thakkar (Open ERP), Roberto López López (OpenERP), Cedric Snauwaert, Ravish Murari (OpenERP), Amit Patel, Simon Lejeune, Frédéric van der Essen, Chris Biersbach, Vijaykumar Baladaniya, Hardik Ansodariya, Dhruti Shastri (OpenERP), Nicolas Martinelli, Jigar Amin, Nhomar Hernandez, Ravish (Open ERP), Vidhin Mehta (OpenERP), jir, Somesh Khare (OpenERP), csn-openerp, Amit (OpenERP), Amit Rasmiya, RGA(OpenERP), Guewen Baconnier, Amit Dodiya, Dharti Ratani (Open ERP), Alexandre Fayolle, Amit Bhavsar (Open ERP), Paramjit Singh Sahota, Rifakat, Nicolas Lempereur, Najlaâ, Hiral Patel (OpenERP), Jojo La Bricole, xmo-odoo, Thibault Francois, Laetitia Gangloff (Acsone), Raphaël Valyi, odony, Paulius Sladkevičius, Dmitrijs Ledkovs (credativ), Samus CTO, MVA, Kuldeep, nep-OpenERP, Michael Telahun Makonnen, kirti savalia (OpenERP), Matthieu Dietrich, Nimesh Contractor (OpenERP), Joël Grand-Guillaume, , Georges Racinet, Amit Dodiya (OpenERP), jojo la bricole, Jignesh Rathod (Open ERP), Joao Alfredo Gama Batista, Dawn Richardson, Nehal Panchal
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Accounting and Financial Management.
====================================

Financial and accounting module that covers:
--------------------------------------------
    * General Accounting
    * Cost/Analytic accounting
    * Third party accounting
    * Taxes management
    * Budgets
    * Customer and Supplier Invoices
    * Bank statements
    * Reconciliation process by partner

Creates a dashboard for accountants that includes:
--------------------------------------------------
    * List of Customer Invoice to Approve
    * Company Analysis
    * Graph of Treasury

The processes like maintaining of general ledger is done through the defined financial Journals (entry move line orgrouping is maintained through journal) 
for a particular financial year and for preparation of vouchers there is a module named account_voucher.
    

Code Analysis

Views touched (189)
XML IDNameModelTypeStatus
account_account_graph account.account.graph account.account graph New
account_aged_balance_view Aged Partner Balance account.aged.trial.balance form New
account_analytic_balance_view Account Analytic Balance account.analytic.balance form New
account_analytic_chart_view Chart of Analytic Accounts account.analytic.chart form New
account_analytic_cost_ledger_journal_view Account Analytic Cost Ledger Journal account.analytic.cost.ledger.journal.report form New
account_analytic_cost_view Account Analytic Check account.analytic.cost.ledger form New
account_analytic_invert_balance_view Account Analytic Inverted Balance account.analytic.inverted.balance form New
account_analytic_journal_view Account Analytic Journal account.analytic.journal.report form New
account_analytic_line_extended_form account.analytic.line.extended_form account.analytic.line form New
account_automatic_reconcile_view Account Automatic Reconcile account.automatic.reconcile form New
account_automatic_reconcile_view1 Automatic reconcile unreconcile account.automatic.reconcile form New
account_cash_statement_graph account.bank.statement.graph account.bank.statement graph New
account_common_report_view Common Report account.common.report form New
account_invoice_cancel_view account.invoice.cancel.form account.invoice.cancel form New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_move_line_graph account.move.line.graph account.move.line graph New
account_move_line_reconcile_writeoff account.move.line.reconcile.writeoff.form account.move.line.reconcile.writeoff form New
account_move_line_select_button_view Open Move Line Button account.move.line.select form New
account_partner_balance_view Partner Balance account.partner.balance data Inherits account_common_report_view
account_partner_ledger_view Partner Ledger account.partner.ledger data Inherits account_common_report_view
account_partner_reconcile_view Partner Reconcilation Process account.partner.reconcile.process form New
account_report_balance_view Trial Balance account.balance.report data Inherits account_common_report_view
account_report_general_journal_view Account General Journal account.general.journal data Inherits account_common_report_view
account_report_general_ledger_view General Ledger account.report.general.ledger data Inherits account_common_report_view
account_report_general_ledger_view_inherit General Ledger account.report.general.ledger field Inherits account_report_general_ledger_view
account_report_print_journal Account Print Journal account.print.journal data Inherits account_common_report_view
account_unreconcile_reconcile_view Unreconcile Entries account.unreconcile.reconcile form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
accounting_report_view Accounting Report accounting.report xpath Inherits account.account_common_report_view
board_account_form board.account.form board.board form New
board_view_created_invoice report.invoice.created.tree report.invoice.created tree New
cash_box_in_form cash_box_in cash.box.in form New
cash_box_out_form cash_box_out cash.box.out form New
invoice_form account.invoice.form account.invoice form New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_tree account.invoice.tree account.invoice tree New
open_journal_button_view Open Journal Button account.journal.select form New
product_normal_form_view product.normal.form.inherit product.product notebook Inherits product.product_normal_form_view
product_template_form_view product.template.product.form.inherit product.template notebook Inherits product.product_template_form_view
sequence_inherit_form ir.sequence.form ir.sequence page Inherits base.sequence_view
validate_account_move_line_view Post Journal Entries validate.account.move.lines form New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_addtmpl_wizard_form Create Account account.addtmpl.wizard form New
view_account_analytic_account_list account.analytic.account.list account.analytic.account tree New
view_account_analytic_account_search account.analytic.account.search account.analytic.account search New
view_account_analytic_account_tree account.analytic.account.tree account.analytic.account tree New
view_account_analytic_entries_search account.analytic.entries.graph analytic.entries.report graph New
view_account_analytic_journal_form account.analytic.journal.form account.analytic.journal form New
view_account_analytic_journal_tree account.analytic.journal.tree account.analytic.journal tree New
view_account_analytic_line_filter account.analytic.line.select account.analytic.line search New
view_account_analytic_line_form account.analytic.line.form account.analytic.line form New
view_account_analytic_line_tree account.analytic.line.tree account.analytic.line tree New
view_account_bank_statement_filter account.cash.statement.select account.bank.statement search New
view_account_central_journal Account central Journal account.central.journal field Inherits account_common_report_view
view_account_change_currency Change Currency account.change.currency form New
view_account_chart account.chart.form account.chart form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_config_settings account settings account.config.settings form New
view_account_configuration_installer account.installer.form account.installer form Inherits base.res_config_installer
view_account_entries_report_graph account.entries.report.graph account.entries.report graph New
view_account_entries_report_search account.entries.report.search account.entries.report search New
view_account_entries_report_tree account.entries.report.tree account.entries.report tree New
view_account_financial_report_form account.financial.report.form account.financial.report form New
view_account_financial_report_search account.financial.report.search account.financial.report search New
view_account_financial_report_tree account.financial.report.tree account.financial.report tree New
view_account_fiscalyear_close account.fiscalyear.close.form account.fiscalyear.close form New
view_account_fiscalyear_close_state account.fiscalyear.close.state.form account.fiscalyear.close.state form New
view_account_fiscalyear_form account.fiscalyear.form account.fiscalyear form New
view_account_fiscalyear_search account.fiscalyear.search account.fiscalyear search New
view_account_fiscalyear_tree account.fiscalyear.tree account.fiscalyear tree New
view_account_form account.account.form account.account form New
view_account_gain_loss_tree Unrealized Gain or Loss account.account tree New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_invoice_report_tree account.invoice.report.tree account.invoice.report tree New
view_account_journal_1 account.journal.form.1 account.journal field Inherits account.view_account_journal_form
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_list account.account.list account.account tree New
view_account_move_bank_reconcile account.move.bank.reconcile.form account.move.bank.reconcile form New
view_account_move_filter account.move.select account.move search New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_line_reconcile_full account.move.line.reconcile.full.form account.move.line.reconcile form New
view_account_move_line_reconcile_select account.move.line.reconcile.select.form account.move.line.reconcile.select form New
view_account_move_line_unreconcile_select account.move.line.unreconcile.select.form account.move.line.unreconcile.select form New
view_account_move_tree account.move.tree account.move tree New
view_account_open_closed_fiscalyear account.open.closed.fiscalyear.form account.open.closed.fiscalyear form New
view_account_period_close account.period.close.form account.period.close form New
view_account_period_form account.period.form account.period form New
view_account_period_search account.period.search account.period search New
view_account_period_tree account.period.tree account.period tree New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_report_tree_hierarchy account.report.hierarchy account.financial.report tree New
view_account_search account.account.search account.account search New
view_account_state_open Account State Open account.state.open form New
view_account_subscription_generate account.subscription.generate.form account.subscription.generate form New
view_account_tax_chart account.tax.chart.form account.tax.chart form New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_treasury_report_graph account.treasury.report.graph account.treasury.report graph New
view_account_treasury_report_search account.treasury.report.search account.treasury.report search New
view_account_treasury_report_tree account.treasury.report.tree account.treasury.report tree New
view_account_tree account.account.tree account.account tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_account_use_model account.use.model.form account.use.model form New
view_account_use_model_create_entry account.use.model.create.entry.form account.use.model form New
view_account_vat_declaration Account Tax Declaration account.vat.declaration form New
view_aged_recv_graph report.aged.receivable.graph report.aged.receivable graph New
view_aged_recv_tree report.aged.receivable.tree report.aged.receivable tree New
view_analytic_entries_report_search analytic.entries.report.search analytic.entries.report search New
view_analytic_entries_report_tree analytic.entries.report.tree analytic.entries.report tree New
view_analytic_journal_search account.analytic.journal.search account.analytic.journal search New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_form2 account.bank.statement.form account.bank.statement form New
view_bank_statement_form_journal_items account.bank.statement.journal.items.form.inherit account.bank.statement xpath Inherits view_bank_statement_form
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_cash_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category data Inherits product.product_category_form_view
view_company_analysis_tree account.company.analysis.tree account.entries.report tree New
view_company_inherit_form res.company.form.inherit res.company notebook Inherits base.view_company_form
view_crm_case_user_form report.account.receivable.form report.account.receivable form New
view_crm_case_user_graph report.account.receivable.graph report.account.receivable graph New
view_crm_case_user_tree report.account.receivable.tree report.account.receivable tree New
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_journal_period_tree account.journal.period.tree account.journal.period tree New
view_model_form account.model.form account.model form New
view_model_line_form account.model.line.form account.model.line form New
view_model_line_tree account.model.line.tree account.model.line tree New
view_model_search account.model.search account.model search New
view_model_tree account.model.tree account.model tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_form2 account.move.line.form2 account.move.line form New
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_line_tree_reconcile account.move.line tree_account_reconciliation New
view_move_reconcile_form account.move.reconcile.form account.move.reconcile form New
view_move_tree account.move.tree account.move tree New
view_partner_bank_form_inherit Partner Bank Accounts - Journal res.partner.bank group Inherits base.view_partner_bank_form
view_partner_bank_tree_add_currency Partner Bank Accounts - Add currency on tree res.partner.bank field Inherits base.view_partner_bank_tree
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_project_account_analytic_line_form project.account.analytic.line.form project.account.analytic.line form New
view_report_account_sales_graph report.account.sales.graph report.account.sales graph New
view_report_account_sales_search report.account.sales.search report.account.sales search New
view_report_account_sales_tree report.account.sales.tree report.account.sales tree New
view_report_account_type_sales_form report.account_type.sales.form report.account_type.sales tree New
view_report_account_type_sales_graph report.account_type.sales.graph report.account_type.sales graph New
view_report_account_type_sales_search report.account_type.sales.search report.account_type.sales search New
view_report_account_type_sales_tree report.account_type.sales.tree report.account_type.sales tree New
view_subscription_form account.subscription.form account.subscription form New
view_subscription_line_form account.subscription.line.form account.subscription.line form New
view_subscription_line_form_complete account.subscription.line.form account.subscription.line form New
view_subscription_line_tree account.subscription.line.tree account.subscription.line tree New
view_subscription_search account.subscription.search account.subscription search New
view_subscription_tree account.subscription.tree account.subscription tree New
view_tax_code_form account.tax.code.form account.tax.code form New
view_tax_code_search account.tax.code.search account.tax.code search New
view_tax_code_template_form account.tax.code.template.form account.tax.code.template form New
view_tax_code_template_search account.tax.code.template.search account.tax.code.template search New
view_tax_code_template_tree account.tax.code.template.tree account.tax.code.template tree New
view_tax_code_tree account.tax.code.tree account.tax.code tree New
view_tax_form account.tax.form account.tax form New
view_tax_tree account.tax.tree account.tax tree New
view_wizard_multi_chart Set Your Accounting Options wizard.multi.charts.accounts form Inherits base.res_config_view_base
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/account
VERSION
VERSION 1.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Rucha (Open ERP), Stephane Wirtel, Numerigraphe - Lionel Sausin, Pinakin Nayi (OpenERP), Harry (OpenERP), Martin Trigaux, Purnendu Singh (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Olivier Dony, Divyesh Makwana (Open ERP), Thibault Delavallée, Vo Minh Thu, pso (OpenERP), Launchpad Translations on behalf of openerp, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Mayur Maheshwari (OpenERP), Alexis de Lattre, vro, olt@tinyerp.com, Fabien Meghazi, niv-openerp, Xavier ALT, Christophe Simonis, Ujjvala Collins (OpenERP), Xavier Morel, Chris Biersbach, Amit (OpenERP), Amit Dodiya, Amit Bhavsar (Open ERP), Rifakat, Najlaâ, Mustufa Rangwala (OpenERP), Thibault Francois, Samus CTO, kirti savalia (OpenERP), Stefan Rijnhart, sebastien beau, Niels Huylebroeck, Carlos Vásquez, Bogdan Stanciu, Husen Daudi, Craig Gowing, Els Van Vossel, Israel Fermin Montilla, Rifakat Haradwala (Open ERP), Hardik Ansodariy (OpenERP), ssu, rch-openerp, Bharat (OpenERP), ARA (OpenERP), aag (OpenERP), tfr@openerp.com, ron@tinyerp.com, mtr, fp, qdp-launchpad@tinyerp.com, AMP (OpenERP), ksa (OpenERP), Mustufa Rangwala, Naresh (OpenERP), psi (Open ERP), Tejas (OpenERP), Amit Parmar (OpenERP), RavishchanraMurari (Open ERP), Kirti Savalia (OpenERP), Hemendra Paregi (Open ERP), skh, Dhara (OpenERP), Atik Agewan (OpenERP), Ravi Gohil (Open ERP), philubert@gmail.com, Ariel Figueroa, msh-openerp, Somesh Khare, rha@tinyerp.com, nel@tinyerp.com, Dmitrijs Ledkovs, Ila Rana, Olivier DOSSMANN, cpa-openerp, rha, bde
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - product
    - process
    - decimal_precision
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Accounting and Financial Management.
====================================

Financial and accounting module that covers:
--------------------------------------------
General accountings
Cost / Analytic accounting
Third party accounting
Taxes management
Budgets
Customer and Supplier Invoices
Bank statements
Reconciliation process by partner

Creates a dashboard for accountants that includes:
--------------------------------------------------
* List of Customer Invoice to Approve
* Company Analysis
* Graph of Aged Receivables
* Graph of Treasury

The processes like maintaining of general ledger is done through the defined financial Journals (entry move line or
grouping is maintained through journal) for a particular financial year and for preparation of vouchers there is a
module named account_voucher.
    

Code Analysis

Views touched (202)
XML IDNameModelTypeStatus
account_account_graph account.account.graph account.account graph New
account_aged_balance_view Aged Partner Balance account.aged.trial.balance form New
account_analytic_balance_view Account Analytic Balance account.analytic.balance form New
account_analytic_chart_view Chart of Analytic Accounts account.analytic.chart form New
account_analytic_cost_ledger_journal_view Account Analytic Cost Ledger Journal account.analytic.cost.ledger.journal.report form New
account_analytic_cost_view Account Analytic Check account.analytic.cost.ledger form New
account_analytic_invert_balance_view Account Analytic Inverted Balance account.analytic.inverted.balance form New
account_analytic_journal_view Account Analytic Journal account.analytic.journal.report form New
account_analytic_line_extended_form account.analytic.line.extended_form account.analytic.line form New
account_automatic_reconcile_view Account Automatic Reconcile account.automatic.reconcile form New
account_automatic_reconcile_view1 Automatic reconcile unreconcile account.automatic.reconcile form New
account_cash_statement_graph account.bank.statement.graph account.bank.statement graph New
account_common_report_view Common Report account.common.report form New
account_invoice_cancel_view account.invoice.cancel.form account.invoice.cancel form New
account_invoice_confirm_view account.invoice.confirm.form account.invoice.confirm form New
account_move_graph account.move.graph account.move graph New
account_move_line_graph account.move.line.graph account.move.line graph New
account_move_line_reconcile_writeoff account.move.line.reconcile.writeoff.form account.move.line.reconcile.writeoff form New
account_move_line_select_button_view Open Move Line Button account.move.line.select form New
account_partner_balance_view Partner Balance account.partner.balance data Inherits account_common_report_view
account_partner_ledger_view Partner Ledger account.partner.ledger data Inherits account_common_report_view
account_partner_reconcile_view Partner Reconcilation Process account.partner.reconcile.process form New
account_report_balance_view Trial Balance account.balance.report data Inherits account_common_report_view
account_report_general_journal_view Account General Journal account.general.journal data Inherits account_common_report_view
account_report_general_ledger_view General Ledger account.report.general.ledger data Inherits account_common_report_view
account_report_general_ledger_view_inherit General Ledger account.report.general.ledger field Inherits account_report_general_ledger_view
account_report_print_journal Account Print Journal account.print.journal data Inherits account_common_report_view
account_unreconcile_reconcile_view Unreconcile Entries account.unreconcile.reconcile form New
account_unreconcile_view Unreconcile Entries account.unreconcile form New
accounting_report_view Accounting Report accounting.report xpath Inherits account.account_common_report_view
analytic_accounts_graph analytic.accounts.graph account.analytic.account graph New
board_account_form board.account.form board.board form New
board_view_created_invoice report.invoice.created.tree report.invoice.created tree New
invoice_form account.invoice.form account.invoice form New
invoice_supplier_form account.invoice.supplier.form account.invoice form New
invoice_tree account.invoice.tree account.invoice tree New
open_journal_button_view Open Journal Button account.journal.select form New
product_normal_form_view product.normal.form.inherit product.product notebook Inherits product.product_normal_form_view
product_template_form_view product.template.product.form.inherit product.template notebook Inherits product.product_template_form_view
report_hr_timesheet_invoice_journal_form report.hr.timesheet.invoice.journal.form report.hr.timesheet.invoice.journal form New
report_hr_timesheet_invoice_journal_graph report.hr.timesheet.invoice.journal.graph report.hr.timesheet.invoice.journal graph New
report_hr_timesheet_invoice_journal_search report.hr.timesheet.invoice.journal.search report.hr.timesheet.invoice.journal search New
report_hr_timesheet_invoice_journal_tree report.hr.timesheet.invoice.journal.tree report.hr.timesheet.invoice.journal tree New
sequence_inherit_form ir.sequence.form ir.sequence page Inherits base.sequence_view
validate_account_move_line_view Post Journal Entries validate.account.move.lines form New
validate_account_move_view Post Journal Entries validate.account.move form New
view_account_addtmpl_wizard_form Create Account account.addtmpl.wizard form New
view_account_analytic_account_form account.analytic.account.form account.analytic.account form New
view_account_analytic_account_list account.analytic.account.list account.analytic.account tree New
view_account_analytic_account_search account.analytic.account.search account.analytic.account search New
view_account_analytic_account_tree account.analytic.account.tree account.analytic.account tree New
view_account_analytic_entries_search account.analytic.entries.graph analytic.entries.report graph New
view_account_analytic_journal_form account.analytic.journal.form account.analytic.journal form New
view_account_analytic_journal_tree account.analytic.journal.tree account.analytic.journal tree New
view_account_analytic_line_filter account.analytic.line.select account.analytic.line search New
view_account_analytic_line_form account.analytic.line.form account.analytic.line form New
view_account_analytic_line_tree account.analytic.line.tree account.analytic.line tree New
view_account_bank_statement_filter account.cash.statement.select account.bank.statement search New
view_account_central_journal Account central Journal account.central.journal field Inherits account_common_report_view
view_account_change_currency Change Currency account.change.currency form New
view_account_chart account.chart.form account.chart form New
view_account_chart_template_form account.chart.template.form account.chart.template form New
view_account_chart_template_seacrh account.chart.template.search account.chart.template search New
view_account_chart_template_tree account.chart.template.tree account.chart.template tree New
view_account_configuration_installer account.installer.form account.installer data Inherits base.res_config_installer
view_account_entries_report_graph account.entries.report.graph account.entries.report graph New
view_account_entries_report_search account.entries.report.search account.entries.report search New
view_account_entries_report_tree account.entries.report.tree account.entries.report tree New
view_account_financial_report_form account.financial.report.form account.financial.report form New
view_account_financial_report_search account.financial.report.search account.financial.report search New
view_account_financial_report_tree account.financial.report.tree account.financial.report tree New
view_account_fiscalyear_close account.fiscalyear.close.form account.fiscalyear.close form New
view_account_fiscalyear_close_state account.fiscalyear.close.state.form account.fiscalyear.close.state form New
view_account_fiscalyear_form account.fiscalyear.form account.fiscalyear form New
view_account_fiscalyear_search account.fiscalyear.search account.fiscalyear search New
view_account_fiscalyear_tree account.fiscalyear.tree account.fiscalyear tree New
view_account_form account.account.form account.account form New
view_account_gain_loss_tree Unrealized Gain or Loss account.account tree New
view_account_invoice_filter account.invoice.select account.invoice search New
view_account_invoice_refund account.invoice.refund.form account.invoice.refund form New
view_account_invoice_report_graph account.invoice.report.graph account.invoice.report graph New
view_account_invoice_report_search account.invoice.report.search account.invoice.report search New
view_account_invoice_report_tree account.invoice.report.tree account.invoice.report tree New
view_account_journal_1 account.journal.form.1 account.journal field Inherits account.view_account_journal_form
view_account_journal_form account.journal.form account.journal form New
view_account_journal_search account.journal.search account.journal search New
view_account_journal_tree account.journal.tree account.journal tree New
view_account_journal_view_form account.journal.view.form account.journal.view form New
view_account_journal_view_search account.journal.view.search account.journal.view search New
view_account_journal_view_tree account.journal.view.tree account.journal.view tree New
view_account_list account.account.list account.account tree New
view_account_move_bank_reconcile account.move.bank.reconcile.form account.move.bank.reconcile form New
view_account_move_filter account.move.select account.move search New
view_account_move_journal_form account.move.journal.form account.move.journal form New
view_account_move_line_filter Journal Items account.move.line search New
view_account_move_line_reconcile_full account.move.line.reconcile.full.form account.move.line.reconcile form New
view_account_move_line_reconcile_select account.move.line.reconcile.select.form account.move.line.reconcile.select form New
view_account_move_line_unreconcile_select account.move.line.unreconcile.select.form account.move.line.unreconcile.select form New
view_account_move_tree account.move.tree account.move tree New
view_account_open_closed_fiscalyear account.open.closed.fiscalyear.form account.open.closed.fiscalyear form New
view_account_period_close account.period.close.form account.period.close form New
view_account_period_form account.period.form account.period form New
view_account_period_search account.period.search account.period search New
view_account_period_tree account.period.tree account.period tree New
view_account_position_form account.fiscal.position.form account.fiscal.position form New
view_account_position_template_form account.fiscal.position.template.form account.fiscal.position.template form New
view_account_position_template_search account.fiscal.position.template.search account.fiscal.position.template search New
view_account_position_template_tree account.fiscal.position.template.tree account.fiscal.position.template tree New
view_account_position_tree account.fiscal.position.tree account.fiscal.position tree New
view_account_report_tree_hierarchy account.report.hierarchy account.financial.report tree New
view_account_search account.account.search account.account search New
view_account_state_open Account State Open account.state.open form New
view_account_subscription_generate account.subscription.generate.form account.subscription.generate form New
view_account_tax_chart account.tax.chart.form account.tax.chart form New
view_account_tax_search account.tax.search account.tax search New
view_account_tax_template_form account.tax.template.form account.tax.template form New
view_account_tax_template_search account.tax.template.search account.tax.template search New
view_account_tax_template_tree account.tax.template.tree account.tax.template tree New
view_account_template_form account.account.template.form account.account.template form New
view_account_template_search account.account.template.search account.account.template search New
view_account_template_tree account.account.template.tree account.account.template tree New
view_account_treasury_report_graph account.treasury.report.graph account.treasury.report graph New
view_account_treasury_report_search account.treasury.report.search account.treasury.report search New
view_account_treasury_report_tree account.treasury.report.tree account.treasury.report tree New
view_account_tree account.account.tree account.account tree New
view_account_type_form account.account.type.form account.account.type form New
view_account_type_search account.account.type.search account.account.type search New
view_account_type_tree account.account.type.tree account.account.type tree New
view_account_use_model account.use.model.form account.use.model form New
view_account_use_model_create_entry account.use.model.create.entry.form account.use.model form New
view_account_vat_declaration Account Vat Declaration account.vat.declaration form New
view_aged_recv_graph report.aged.receivable.graph report.aged.receivable graph New
view_aged_recv_tree report.aged.receivable.tree report.aged.receivable tree New
view_analytic_entries_report_search analytic.entries.report.search analytic.entries.report search New
view_analytic_entries_report_tree analytic.entries.report.tree analytic.entries.report tree New
view_analytic_journal_search account.analytic.journal.search account.analytic.journal search New
view_bank_statement_form account.bank.statement.form account.bank.statement form New
view_bank_statement_form2 account.bank.statement.form account.bank.statement form New
view_bank_statement_periodic_form account.bank.statement.reconcile.form account.bank.statement form New
view_bank_statement_search account.bank.statement.search account.bank.statement search New
view_bank_statement_tree account.bank.statement.tree account.bank.statement tree New
view_cash_statement_tree account.bank.statement.tree account.bank.statement tree New
view_category_property_form product.category.property.form.inherit product.category form Inherits product.product_category_form_view
view_company_analysis_tree account.company.analysis.tree account.entries.report tree New
view_company_inherit_1_form res.company.form.inherit res.company field Inherits base.view_company_form
view_company_inherit_form res.company.form.inherit res.company notebook Inherits base.view_company_form
view_crm_case_user_form report.account.receivable.form report.account.receivable form New
view_crm_case_user_graph report.account.receivable.graph report.account.receivable graph New
view_crm_case_user_tree report.account.receivable.tree report.account.receivable tree New
view_invoice_graph account.invoice.graph account.invoice graph New
view_invoice_line_calendar account.invoice.calendar account.invoice calendar New
view_invoice_line_form account.invoice.line.form account.invoice.line form New
view_invoice_line_tree account.invoice.line.tree account.invoice.line tree New
view_invoice_tax_form account.invoice.tax.form account.invoice.tax form New
view_invoice_tax_tree account.invoice.tax.tree account.invoice.tax tree New
view_journal_column_form account.journal.column.form account.journal.column form New
view_journal_column_tree account.journal.column.tree account.journal.column tree New
view_journal_period_tree account.journal.period.tree account.journal.period tree New
view_model_form account.model.form account.model form New
view_model_line_form account.model.line.form account.model.line form New
view_model_line_tree account.model.line.tree account.model.line tree New
view_model_search account.model.search account.model search New
view_model_tree account.model.tree account.model tree New
view_move_form account.move.form account.move form New
view_move_line_form account.move.line.form account.move.line form New
view_move_line_form2 account.move.line.form2 account.move.line form New
view_move_line_tax_tree account.move.line.tax.tree account.move.line tree New
view_move_line_tree account.move.line.tree account.move.line tree New
view_move_reconcile_form account.move.reconcile.form account.move.reconcile form New
view_move_tree account.move.tree account.move tree New
view_partner_bank_form_inherit Partner Bank Accounts - Journal res.partner.bank group Inherits base.view_partner_bank_form
view_partner_bank_tree_add_currency Partner Bank Accounts - Add currency on tree res.partner.bank field Inherits base.view_partner_bank_tree
view_partner_property_form res.partner.property.form.inherit res.partner page Inherits base.view_partner_form
view_payment_term_form account.payment.term.form account.payment.term form New
view_payment_term_line_form account.payment.term.line.form account.payment.term.line form New
view_payment_term_line_tree account.payment.term.line.tree account.payment.term.line tree New
view_payment_term_search account.payment.term.search account.payment.term search New
view_project_account_analytic_line_form project.account.analytic.line.form project.account.analytic.line form New
view_report_account_sales_graph report.account.sales.graph report.account.sales graph New
view_report_account_sales_search report.account.sales.search report.account.sales search New
view_report_account_sales_tree report.account.sales.tree report.account.sales tree New
view_report_account_type_sales_form report.account_type.sales.form report.account_type.sales tree New
view_report_account_type_sales_graph report.account_type.sales.graph report.account_type.sales graph New
view_report_account_type_sales_search report.account_type.sales.search report.account_type.sales search New
view_report_account_type_sales_tree report.account_type.sales.tree report.account_type.sales tree New
view_res_partner_reconcile res.partner.form.reconcile res.partner field Inherits base.view_partner_form
view_subscription_form account.subscription.form account.subscription form New
view_subscription_line_form account.subscription.line.form account.subscription.line form New
view_subscription_line_form_complete account.subscription.line.form account.subscription.line form New
view_subscription_line_tree account.subscription.line.tree account.subscription.line tree New
view_subscription_search account.subscription.search account.subscription search New
view_subscription_tree account.subscription.tree account.subscription tree New
view_tax_code_form account.tax.code.form account.tax.code form New
view_tax_code_search account.tax.code.search account.tax.code search New
view_tax_code_template_form account.tax.code.template.form account.tax.code.template form New
view_tax_code_template_search account.tax.code.template.search account.tax.code.template search New
view_tax_code_template_tree account.tax.code.template.tree account.tax.code.template tree New
view_tax_code_tree account.tax.code.tree account.tax.code tree New
view_tax_form account.tax.form account.tax form New
view_tax_tree account.tax.tree account.tax tree New
view_treasory_graph account.treasury.graph account.account graph New
view_wizard_multi_chart Generate Chart of Accounts from a Chart Template wizard.multi.charts.accounts data Inherits base.res_config_view_base
Models touched (0)

No models found for this module.