WMS Accounting

stock_account
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYSupply Chain/Inventory
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Josse Colpaert, Xavier Morel, Wolfgang Taferner, Laurent Smet, Arnold Moyaux, Julien Castiaux, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, svs-odoo, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Richard deMeester, william-andre, David (dafr), JF Aubert, PNO, Aurelien van Delft (avd), Mathieu Walravens, luvi, Roy Le, Louis Wicket (wil), Adrien Widart (awt), Victor Piryns (pivi), clesgow, Djamel Touati, Pieter Claeys (clpi), Dylan Kiss (dyki), Jinane Maksoud, Odoo, Arnaud Sibille, Ethan Vincent, lase@odoo.com, InCeyN, Quentin Wolfs, Aurelien MARIE (auma), reka-odoo, Julien Carion (juca), kcv-odoo, Louis Gobert, nihp-odoo, Aungkokolin1997, Hussein Ebrahim(hyhe), Stéphane Diez, dhha-odoo, Hammad Arif, Hesham Saleh, Saif (segn), EmilioPascual, Victor Miguel Armenta Carrillo, Christopher Maloney (cmal), David Van Droogenbroeck (DROD), elhayyany, Mohammad Abdulmoneim (abdu), djameltouati, khsr-odoo, jeep-odoo, chha-odoo, MaximeNoirhomme, bona-odoo, plha-odoo, Krzysztof Magusiak (krma), Akash Pandey, krip-odoo, Hazem Ibrahim, Robin Engels (roen), sagu-odoo, kdes-odoo, Ester Andreetto, defl, bhna-odoo, rare-odoo, sawer, agbr-odoo, Lulu Grimalkin (lugr), igbe, Lancelot Semal, Tudor-Calin Panzaru (tupan), Yash Pathak, Martin Doyen, Jacob Was (jacw), Robert Smith (rosm), assh-odoo, hossamelgendy1, Merlin Guillaume, srap-odoo, saurabh, Lars Quaedvlieg, Nguyen Nguyen (ngtpn), Léo Gizard (legi), hapt-odoo, ddba-odoo, Youssef, Kai (kache), lase, Karim Gamaleldin, niyp-odoo, Dhrumit Parmar, ismail eski, pvag-odoo, Chengyan Wang
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
    - account
    - onboarding
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
product_product_stock_tree_inherit_stock_account product.product.stock.list.inherit.stock.account product.product field Inherits stock.product_product_stock_tree
product_product_view_list_at_date product.product.list.inherit.stock.account.at.date product.product field Inherits stock.view_stock_product_tree
product_template_tree_view product.template.list.inherit.stock.account product.template field Inherits product.product_template_tree_view
product_value_form_view product.value.form.view product.value form New
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings block Inherits stock.res_config_settings_view_form
stock_account_report_invoice_document stock_account_report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
stock_avco_report_view_list stock.avco.report.view.list stock.avco.report list New
stock_inventory_adjustment_name_form_view_inherit_stock_account stock.inventory.adjustment.name.form.view.inherit.stock.account stock.inventory.adjustment.name xpath Inherits stock.stock_inventory_adjustment_name_form_view
stock_move_view_list stock.move.view.list.inherit.stock.account stock.move field Inherits stock.view_move_tree
stock_move_view_list_valuation stock.move.view.list.valuation stock.move list New
view_account_form account.account.form account.account field Inherits account.view_account_form
view_category_property_form product.category.stock.property.form.inherit product.category field Inherits account.view_category_property_form
view_category_property_form_stock product.category.stock.property.form.inherit.stock product.category group Inherits stock.product_category_form_view_inherit
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_search stock.move.search.inherit.stock.account stock.move filter Inherits stock.view_move_search
view_picking_form stock.account.view.picking.form stock.picking xpath Inherits stock.view_picking_form
view_production_lot_form_stock_account view.production.lot.form.stock.account stock.lot group Inherits stock.view_production_lot_form
view_stock_quant_tree_editable_inherit stock.quant.list.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.list.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_inventory_editable_inherit_stock_account stock.quant.inventory.list.editable.inherit.stock.account stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
view_template_property_form_stock_account view.template.property.form.stock.account product.template xpath Inherits stock.view_template_property_form
Models touched (24)

New fields (2)
  • account_stock_expense_id Many2one → account.account
    help='Counterpart used at closing for accounting adjustments to inventory valuation.' string='Expense Account' args: 'account.account'
  • account_stock_variation_id Many2one → account.account
    help='At closing, register the inventory variation of the period into a specific account' string='Variation Account' args: 'account.account'
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)
  • stock_move_ids One2many → stock.move
    string='Stock Move' args: 'stock.move', 'account_move_id'
Public methods (3)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)

New fields (1)
  • cogs_origin_id Many2one → account.move.line
    comodel_name='account.move.line' copy=False index='btree_not_null'
Public methods (0)

No public methods.

New fields (7)
  • account_stock_variation_id Many2one → account.account
    readonly=False related='property_stock_valuation_account_id.account_stock_variation_id' string='Stock Variation Account' args: 'account.account'
  • anglo_saxon_accounting Boolean
    compute='_compute_anglo_saxon_accounting' help='If checked, the product will be valued using the Anglo-Saxon accounting method.' string='Use Anglo-Saxon Accounting'
  • property_cost_method Selection
    company_dependent=True copy=True default=<expr> help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' selection=[('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')] string='Costing Method' tracking=True
  • property_price_difference_account_id Many2one → account.account
    check_company=True company_dependent=True help='With perpetual valuation, this account will hold the price difference between the standard price and the bill price.' ondelete='restrict' args: 'account.account', 'Price Difference Account'
  • property_stock_journal Many2one → account.journal
    company_dependent=True help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' ondelete='restrict' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Periodic: The accounting entries are suggested manually in the inventory valuation report.\n Perpetual: An accounting entry is automatically created to value the inventory when a product is billed or invoiced.\n ' selection=[('periodic', 'Periodic (at closing)'), ('real_time', 'Perpetual (at invoicing)')] string='Inventory Valuation' tracking=True
Public methods (1)
  • write(self, vals)

New fields (3)
  • avg_cost Monetary
    compute='_compute_value' compute_sudo=True currency_field='company_currency_id' string='Average Cost'
  • company_currency_id Many2one → res.currency
    compute='_compute_value' compute_sudo=True help="Technical field to correctly show the currently selected company's currency that corresponds to the totaled value of the product's valuation layers" args: 'res.currency', 'Valuation Currency'
  • total_value Monetary
    compute='_compute_value' compute_sudo=True currency_field='company_currency_id' string='Total Value'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • cost_method Selection
    compute='_compute_cost_method' selection=[('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')] string='Cost Method'
  • lot_valuated Boolean
    compute='_compute_lot_valuated' help='If checked, the valuation will be specific by Lot/Serial number.' readonly=False store=True string='Valuation by Lot/Serial'
  • property_price_difference_account_id Many2one → account.account
    check_company=True company_dependent=True help='With perpetual valuation, this account will hold the price difference between the standard price and the bill price.' ondelete='restrict' args: 'account.account', 'Price Difference Account'
  • valuation Selection
    compute='_compute_valuation' search='_search_valuation' selection=[('periodic', 'Periodic (at closing)'), ('real_time', 'Perpetual (at invoicing)')] string='Valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (13)
  • company_id Many2one → res.company
    compute='_compute_company_id' precompute=True readonly=False required=True store=True string='Company' args: 'res.company'
  • computed_value_description Text
    compute='_compute_value_description' string='Computed Value Description'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' string='Currency' args: 'res.currency'
  • current_value Monetary
    currency_field='currency_id' related='move_id.value' string='Current Value'
  • current_value_description Text
    compute='_compute_value_description' string='Current Value Description'
  • current_value_details Char
    compute='_compute_current_value_details' string='Current Value Details'
  • date Datetime
    default=fields.Datetime.now required=True string='Date'
  • description Char
    string='Description'
  • lot_id Many2one → stock.lot
    string='Lot' args: 'stock.lot'
  • move_id Many2one → stock.move
    index='btree_not_null' string='Move' args: 'stock.move'
  • product_id Many2one → product.product
    index=True string='Product' args: 'product.product'
  • user_id Many2one → res.users
    default=<expr> required=True string='User' args: 'res.users'
  • value Monetary
    currency_field='currency_id' required=True string='Value'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (7)
  • account_production_wip_account_id Many2one → account.account
    check_company=True string='Production WIP Account' args: 'account.account'
  • account_production_wip_overhead_account_id Many2one → account.account
    check_company=True string='Production WIP Overhead Account' args: 'account.account'
  • account_stock_journal_id Many2one → account.journal
    check_company=True string='Stock Journal' args: 'account.journal'
  • account_stock_valuation_id Many2one → account.account
    check_company=True string='Stock Valuation Account' args: 'account.account'
  • cost_method Selection
    default='standard' required=True selection=[('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')] string='Cost Method'
  • inventory_period Selection
    default='manual' required=True selection=[('manual', 'Manual'), ('daily', 'Daily'), ('monthly', 'Monthly')] string='Inventory Period'
  • inventory_valuation Selection
    default='periodic' selection=[('periodic', 'Periodic (at closing)'), ('real_time', 'Perpetual (at invoicing)')] string='Valuation'
Public methods (3)
  • action_close_stock_valuation(self, at_date=None, auto_post=False)
  • stock_accounting_value(self, accounts_by_product=None, at_date=None)
  • stock_value(self, accounts_by_product=None, at_date=None)

New fields (2)
  • group_lot_on_invoice Boolean
    implied_group='stock_account.group_lot_on_invoice' args: 'Display Lots & Serial Numbers on Invoices'
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (15)
  • added_value Float
    compute='_compute_cumulative_fields' string='Added Value'
  • avco_value Float
    compute='_compute_cumulative_fields' string='AVCO Value'
  • company_id Many2one → res.company
    required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' string='Currency' args: 'res.currency'
  • date Date
    required=True string='Date'
  • description Text
    required=True string='Description'
  • justification Text
    compute='_compute_justification' string='Justification'
  • product_id Many2one → product.product
    required=True string='Product' args: 'product.product'
  • quantity Float
    required=True string='Added Quantity'
  • reference Char
    required=True string='Reference'
  • res_model_name Selection
    required=True string='Resource Model Name' args: [('stock.move', 'Stock Move'), ('product.value', 'Product Value')]
  • total_quantity Float
    compute='_compute_cumulative_fields' string='Total Quantity'
  • total_value Float
    compute='_compute_cumulative_fields' string='Total Value'
  • user_id Many2one → res.users
    required=True string='User' args: 'res.users'
  • value Float
    required=True string='Value'
Public methods (1)
  • init(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • should_show_accounting_date Boolean
    compute='_compute_should_show_accounting_date'
Public methods (0)

No public methods.

New fields (3)
  • is_valued_external Boolean
    compute='_compute_is_valued' args: 'Is valued outside the company'
  • is_valued_internal Boolean
    compute='_compute_is_valued' search='_search_is_valued' args: 'Is valued inside the company'
  • valuation_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card'))] help='Expense account used to re-qualify products removed from stock and sent to this location' args: 'account.account', 'Stock Valuation Account'
Public methods (0)

No public methods.

New fields (5)
  • avg_cost Monetary
    compute='_compute_value' compute_sudo=True currency_field='company_currency_id' readonly=True store=False string='Average Cost'
  • company_currency_id Many2one → res.currency
    compute='_compute_value' compute_sudo=True args: 'res.currency', 'Valuation Currency'
  • lot_valuated Boolean
    readonly=True related='product_id.lot_valuated' store=False
  • standard_price Float
    company_dependent=True groups='base.group_user' help='Value of the lot (automatically computed in AVCO).\n Used to value the product when the purchase cost is not known (e.g. inventory adjustment).\n Used to compute margins on sale orders.' min_display_digits='Product Price' args: 'Cost'
  • total_value Monetary
    compute='_compute_value' compute_sudo=True currency_field='company_currency_id' string='Total Value'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (16)
  • account_move_id Many2one → account.move
    copy=False index='btree_not_null' args: 'account.move', 'stock_move_id'
  • analytic_account_line_ids Many2many → account.analytic.line
    copy=False args: 'account.analytic.line'
  • company_currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Company Currency' args: 'res.currency'
  • is_dropship Boolean
    compute='_compute_is_dropship' store=True string='Is Dropship'
  • is_in Boolean
    compute='_compute_is_in' store=True string='Is Incoming (valued)'
  • is_out Boolean
    compute='_compute_is_out' store=True string='Is Outgoing (valued)'
  • is_valued Boolean
    compute='_compute_is_valued' string='Is Valued'
  • price_unit Float
    args: 'Price Unit'
  • remaining_qty Float
    compute='_compute_remaining_qty' search='search_remaining_qty' string='Remaining Quantity'
  • remaining_value Monetary
    compute='_compute_remaining_value' currency_field='company_currency_id' string='Remaining Value'
  • standard_price Float
    compute='_compute_standard_price' string='Standard Price'
  • to_refund Boolean
    copy=True default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' args: 'Update quantities on SO/PO'
  • value Monetary
    copy=False currency_field='company_currency_id' help="The current value of the move. It's zero if the move is not valued." args: 'Value'
  • value_computed_justification Text
    compute='_compute_value_justification' args: 'Computed Value Description'
  • value_justification Text
    compute='_compute_value_justification' args: 'Value Description'
  • value_manual Monetary
    compute='_compute_value_manual' currency_field='company_currency_id' inverse='_inverse_value_manual' args: 'Manual Value'
Public methods (2)
  • action_adjust_valuation(self)
  • search_remaining_qty(self, operator, value)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (1)
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
Public methods (0)

No public methods.

New fields (1)
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
Public methods (0)

No public methods.

New fields (4)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • cost_method Selection
    compute='_compute_cost_method' selection=[('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')] string='Cost Method'
  • currency_id Many2one → res.currency
    groups='stock.group_stock_manager' related='company_id.currency_id' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (0)

No public methods.

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • action_print_as_pdf(self)
  • action_print_as_xlsx(self)
  • get_report_values(self, date=False)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Josse Colpaert, Xavier Morel, GitHub, Damien Bouvy, Yannick Tivisse, Odoo Online, Laurent Smet, Christophe Monniez, Arnold Moyaux, Andrea Grazioso (agr-odoo), William Henrotin, Anh Thao Pham (pta), Brice bib Bartoletti, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, William Braeckman, Miquel Raïch, william-andre, David (dafr), John Laterre (jol), Thibault Libioulle, Aurelien van Delft (avd), Mathieu Walravens, Roy Le, AaronHForgeFlow, Vincent Larcin, Weblate, Habib (ayh), Pedram (PEBR), Louis Wicket (wil), Adrien Widart (awt), Gauthier Wala (gawa), clesgow, Djamel Touati, Antoine Dupuis (andu), Michael Tietz, Dylan Kiss (dyki), Jinane Maksoud, kir-odoo, Chong Wang (cwg), Odoo, Paweł Fertyk, AH-Yussef, Pedram (pebr), Arnaud Sibille, guva-odoo, Ethan Vincent, lase@odoo.com, Aurelien MARIE (auma), Maxime de Neuville, reka-odoo, kmod-odoo, kcv-odoo, Julien Segers (juse), Louis Gobert, Louis (wil), Aungkokolin1997, Quang Nguyen, aamo-odoo, Hussein Ebrahim(hyhe), Victorien (viso), kago-odoo, mathysPaul, Stéphane Diez, dhha-odoo, kawkb, Jitendra Prajapat, EmilioPascual, David Van Droogenbroeck (DROD), djameltouati, khsr-odoo, Pierre Pulinckx (pipu), jeep-odoo, Corentin Lombard, plha-odoo, joseph, krip-odoo, Robin Engels (roen), defl, Arthur Jochems (ajoc), temo-odoo, Lancelot Semal, Laszlo Almasy (azl), Jaishyam Ramalingam Balasubramanian Rao, Robert Smith (rosm), Lars Quaedvlieg, Léo Gizard (legi)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - onboarding
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (26)
XML IDNameModelTypeStatus
product_product_stock_tree_inherit_stock_account product.product.stock.list.inherit.stock.account product.product field Inherits stock.product_product_stock_tree
product_template_tree_view product.template.list.inherit.stock.account product.template field Inherits product.product_template_tree_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings block Inherits stock.res_config_settings_view_form
stock_account_report_invoice_document stock_account_report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
stock_inventory_request_count_form_view_inherit_stock_account stock.request.count.form.view.inherit.stock.account stock.request.count field Inherits stock.stock_inventory_request_count_form_view
stock_valuation_layer_form stock.valuation.layer.form stock.valuation.layer form New
stock_valuation_layer_graph inventory.aging.graph stock.valuation.layer graph New
stock_valuation_layer_picking stock.valuation.layer.picking stock.picking xpath Inherits stock.view_picking_form
stock_valuation_layer_pivot stock.valuation.layer.pivot stock.valuation.layer pivot New
stock_valuation_layer_report_tree stock.valuation.layer.report.list stock.valuation.layer field Inherits stock_valuation_layer_tree
stock_valuation_layer_revaluation_form_view stock.valuation.layer.revaluation.form stock.valuation.layer.revaluation form New
stock_valuation_layer_tree stock.valuation.layer.list stock.valuation.layer list New
stock_valuation_layer_valuation_at_date_tree_inherited inventory.aging.list stock.valuation.layer xpath Inherits stock_valuation_layer_tree
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_category_property_form_stock product.category.stock.property.form.inherit.stock product.category group Inherits stock.product_category_form_view_inherit
view_inventory_valuation_search Inventory Valuation stock.valuation.layer search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_picking_form stock.account.view.picking.form stock.picking xpath Inherits stock.view_picking_form
view_production_lot_form_stock_account view.production.lot.form.stock.account stock.lot xpath Inherits stock.view_production_lot_form
view_stock_quant_tree_editable_inherit stock.quant.list.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.list.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_inventory_editable_inherit_stock_account stock.quant.inventory.list.editable.inherit.stock.account stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
view_stock_quantity_history_inherit_stock_account Valuation Report at Date stock.quantity.history field Inherits stock.view_stock_quantity_history
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
view_template_property_form_stock_account view.template.property.form.stock.account product.template xpath Inherits stock.view_template_property_form
Models touched (23)

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 (2)
  • stock_move_id Many2one → stock.move
    index='btree_not_null' string='Stock Move' args: 'stock.move'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_id'
Public methods (3)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)

New fields (2)
  • cogs_origin_id Many2one → account.move.line
    comodel_name='account.move.line' copy=False index='btree_not_null'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_line_id'
Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' string='Costing Method' tracking=True args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False)]" help='Counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account\n set on the source location. This is the default value for all products in this category. It can also directly be set on each product.' ondelete='restrict' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account,\n unless there is a specific valuation account set on the destination location. This is the default value for all products in this category.\n It can also directly be set on each product.' ondelete='restrict' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    company_dependent=True help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False)]" help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' ondelete='restrict' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (2)
  • onchange_property_cost(self)
    @api.onchange('property_cost_method')
  • write(self, vals)

New fields (8)
  • avg_cost Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Average Cost'
  • company_currency_id Many2one → res.currency
    compute='_compute_value_svl' compute_sudo=True help="Technical field to correctly show the currently selected company's currency that corresponds to the totaled value of the product's valuation layers" args: 'res.currency', 'Valuation Currency'
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'product_id'
  • total_value Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Total Value'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (2)
  • action_revaluation(self)
  • write(self, vals)

New fields (3)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • lot_valuated Boolean
    compute='_compute_lot_valuated' help='If checked, the valuation will be specific by Lot/Serial number.' readonly=False store=True args: 'Valuation by Lot/Serial number'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (2)
  • account_production_wip_account_id Many2one → account.account
    check_company=True string='Production WIP Account' args: 'account.account'
  • account_production_wip_overhead_account_id Many2one → account.account
    check_company=True string='Production WIP Overhead Account' args: 'account.account'
Public methods (0)

No public methods.

New fields (3)
  • group_lot_on_invoice Boolean
    implied_group='stock_account.group_lot_on_invoice' args: 'Display Lots & Serial Numbers on Invoices'
  • group_stock_accounting_automatic Boolean
    implied_group='stock_account.group_stock_accounting_automatic' args: 'Automatic Stock Accounting'
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (1)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (7)
  • avg_cost Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Average Cost'
  • company_currency_id Many2one → res.currency
    compute='_compute_value_svl' compute_sudo=True args: 'res.currency', 'Valuation Currency'
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • standard_price Float
    company_dependent=True groups='base.group_user' help='Value of the lot (automatically computed in AVCO).\n Used to value the product when the purchase cost is not known (e.g. inventory adjustment).\n Used to compute margins on sale orders.' min_display_digits='Product Price' args: 'Cost'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'lot_id'
  • total_value Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Total Value'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (4)
  • action_revaluation(self)
  • action_view_stock_valuation_layers(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • analytic_account_line_ids Many2many → account.analytic.line
    copy=False args: 'account.analytic.line'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_move_id'
  • to_refund Boolean
    copy=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (2)
  • action_get_account_moves(self)
  • product_price_update_before_done(self, forced_qty=None)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (1)
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
Public methods (1)
  • action_view_stock_valuation_layers(self)

New fields (4)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • cost_method Selection
    related='product_categ_id.property_cost_method'
  • currency_id Many2one → res.currency
    compute='_compute_value' groups='stock.group_stock_manager' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • open_at_date(self)

New fields (1)
  • accounting_date Date
    args: 'Accounting Date'
Public methods (0)

No public methods.

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (21)
  • account_move_id Many2one → account.move
    check_company=True index='btree_not_null' readonly=True args: 'account.move', 'Journal Entry'
  • account_move_line_id Many2one → account.move.line
    check_company=True index='btree_not_null' readonly=True args: 'account.move.line', 'Invoice Line'
  • categ_id Many2one → product.category
    related='product_id.categ_id' store=True args: 'product.category'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • description Char
    readonly=True args: 'Description'
  • lot_id Many2one → stock.lot
    check_company=True index=True args: 'stock.lot', 'Lot/Serial Number'
  • price_diff_value Float
    args: 'Invoice value correction with invoice currency'
  • product_id Many2one → product.product
    auto_join=True check_company=True readonly=True required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • quantity Float
    digits='Product Unit of Measure' readonly=True args: 'Quantity'
  • reference Char
    related='stock_move_id.reference'
  • remaining_qty Float
    digits='Product Unit of Measure' readonly=True
  • remaining_value Monetary
    readonly=True args: 'Remaining Value'
  • stock_move_id Many2one → stock.move
    check_company=True index=True readonly=True args: 'stock.move', 'Stock Move'
  • stock_valuation_layer_id Many2one → stock.valuation.layer
    check_company=True index=True readonly=True args: 'stock.valuation.layer', 'Linked To'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_valuation_layer_id'
  • unit_cost Float
    aggregator=None min_display_digits='Product Price' readonly=True args: 'Unit Value'
  • uom_id Many2one
    readonly=True related='product_id.uom_id' required=True
  • value Monetary
    readonly=True args: 'Total Value'
  • warehouse_id Many2one → stock.warehouse
    compute='_compute_warehouse_id' search='_search_warehouse_id' string='Receipt WH' args: 'stock.warehouse'
Public methods (4)
  • action_open_journal_entry(self)
  • action_open_reference(self)
  • action_valuation_at_date(self)
  • init(self)

New fields (16)
  • account_id Many2one → account.account
    check_company=True domain=[('deprecated', '=', False)] args: 'account.account', 'Counterpart Account'
  • account_journal_id Many2one → account.journal
    check_company=True args: 'account.journal', 'Journal'
  • added_value Monetary
    required=True args: 'Added value'
  • adjusted_layer_ids Many2many → stock.valuation.layer
    help='Valuations layers being adjusted' string='Valuation Layers' args: 'stock.valuation.layer'
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • current_quantity_svl Float
    compute='_compute_current_value_svl' args: 'Current Quantity'
  • current_value_svl Float
    compute='_compute_current_value_svl' args: 'Current Value'
  • date Date
    args: 'Accounting Date'
  • lot_id Many2one → stock.lot
    check_company=True args: 'stock.lot', 'Related lot/serial number'
  • new_value Monetary
    compute='_compute_new_value' args: 'New value'
  • new_value_by_qty Monetary
    compute='_compute_new_value' args: 'New value by quantity'
  • product_id Many2one → product.product
    check_company=True required=True args: 'product.product', 'Related product'
  • product_uom_name Char
    related='product_id.uom_id.name' args: 'Unit of Measure'
  • property_valuation Selection
    related='product_id.categ_id.property_valuation'
  • reason Char
    help='Reason of the revaluation' args: 'Reason'
Public methods (2)
  • action_validate_revaluation(self)
    Adjust the valuation of layers `self.adjusted_layer_ids` for `self.product_id` in `self.company_id`, or the entire stock for that product if no layers are specified (all layers with positive remaining quantity). - Change the standard price with the new valuation by product unit. - Create a manual stock valuation layer with the `added_value` of `self`. - Distribute the `added_value` on the remaining_value of the layers - If the Inventory Valuation of the product category is automated, create related account move.
  • default_get(self, default_fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Josse Colpaert, Denis Ledoux, Xavier Morel, qdp-odoo, Atul Patel, GitHub, Damien Bouvy, Yannick Tivisse, Odoo Online, Christophe Monniez, Jorge Pinna Puissant, Arnold Moyaux, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Anh Thao Pham (pta), svs-odoo, Samuel Degueldre, Achraf (abz), Brice bib Bartoletti, Nasreddin Boulif (bon), Touati Djamel (otd), Tiffany Chang (tic), Yoshi Tashiro, Rémy Voet (ryv), Gorash, Pierre Paridans, snd, Ricardo Gomes Rodrigues (rigr), william-andre, David (dafr), PNO, yhu-odoo, aliya, Walid HANNICHE (waha), Yolann Sabaux, John Laterre (jol), Thibault Libioulle, gawa-odoo, Aurelien van Delft (avd), Mathieu Walravens, Roy Le, AaronHForgeFlow, niyasraphy, nda-odoo, Merel Geens (mege), Louis Wicket (wil), Mylyna Hy, Adrien Widart (awt), Maximilien (malb), Mahamadasif Ansari, clesgow, Djamel Touati, Pieter Claeys (clpi), Hbto [ Vauxoo ], Michael Tietz, Dylan Kiss (dyki), Hansun (hale), Jinane Maksoud, lathuat1997, FrancoisGe, Michael (mcm), Odoo, Ahmed Khalaf, Paweł Fertyk, AH-Yussef, Khushi Vakil, Pedram (pebr), guva-odoo, Eteil Djoumatchoua(etdj), Ethan Vincent, lase@odoo.com, InCeyN, Cyrus Robins, Julien Carion (juca), Julien Segers (juse), Louis Gobert, Louis (wil), Aungkokolin1997, Quang Nguyen, aamo-odoo, Victorien (viso), kago-odoo, Mathias Mathy (MAMA), EmilioPascual, Haris (MHCH), pkgu-odoo, djameltouati, Pierre Pulinckx (pipu), uso-odoo, plha-odoo, Sohail JAIDI (soja), defl, Arthur Jochems (ajoc), Laszlo Almasy (azl), Jaishyam Ramalingam Balasubramanian Rao
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - onboarding
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
product_product_stock_tree_inherit_stock_account product.product.stock.tree.inherit.stock.account product.product field Inherits stock.product_product_stock_tree
product_template_tree_view product.template.tree.inherit.stock.account product.template field Inherits product.product_template_tree_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings block Inherits stock.res_config_settings_view_form
stock_account_report_invoice_document stock_account_report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
stock_inventory_request_count_form_view_inherit_stock_account stock.request.count.form.view.inherit.stock.account stock.request.count field Inherits stock.stock_inventory_request_count_form_view
stock_valuation_layer_form stock.valuation.layer.form stock.valuation.layer form New
stock_valuation_layer_graph inventory.aging.graph stock.valuation.layer graph New
stock_valuation_layer_picking stock.valuation.layer.picking stock.picking xpath Inherits stock.view_picking_form
stock_valuation_layer_pivot stock.valuation.layer.pivot stock.valuation.layer pivot New
stock_valuation_layer_report_tree stock.valuation.layer.report.tree stock.valuation.layer field Inherits stock_valuation_layer_tree
stock_valuation_layer_revaluation_form_view stock.valuation.layer.revaluation.form stock.valuation.layer.revaluation form New
stock_valuation_layer_tree stock.valuation.layer.tree stock.valuation.layer tree New
stock_valuation_layer_valuation_at_date_tree_inherited inventory.aging.tree stock.valuation.layer xpath Inherits stock_valuation_layer_tree
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_category_property_form_stock product.category.stock.property.form.inherit.stock product.category group Inherits stock.product_category_form_view_inherit
view_inventory_valuation_search Inventory Valuation stock.valuation.layer search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_stock_quant_tree_editable_inherit stock.quant.tree.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.tree.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_inventory_editable_inherit_stock_account stock.quant.inventory.tree.editable.inherit.stock.account stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
view_stock_quantity_history_inherit_stock_account Valuation Report at Date stock.quantity.history field Inherits stock.view_stock_quantity_history
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
Models touched (21)

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 (2)
  • stock_move_id Many2one → stock.move
    index='btree_not_null' string='Stock Move' args: 'stock.move'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_id'
Public methods (3)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)

New fields (2)
  • cogs_origin_id Many2one → account.move.line
    comodel_name='account.move.line' copy=False index='btree_not_null'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_line_id'
Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False)]" help='Counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account\n set on the source location. This is the default value for all products in this category. It can also directly be set on each product.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account,\n unless there is a specific valuation account set on the destination location. This is the default value for all products in this category.\n It can also directly be set on each product.' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    company_dependent=True help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('deprecated', '=', False)]" help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (3)
  • onchange_property_cost(self)
    @api.onchange('property_cost_method')
  • onchange_property_valuation(self)
    @api.onchange('property_valuation')
  • write(self, vals)

New fields (8)
  • avg_cost Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Average Cost'
  • company_currency_id Many2one → res.currency
    compute='_compute_value_svl' compute_sudo=True help="Technical field to correctly show the currently selected company's currency that corresponds to the totaled value of the product's valuation layers" args: 'res.currency', 'Valuation Currency'
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'product_id'
  • total_value Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Total Value'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (2)
  • action_revaluation(self)
  • write(self, vals)

New fields (2)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (3)
  • group_lot_on_invoice Boolean
    implied_group='stock_account.group_lot_on_invoice' args: 'Display Lots & Serial Numbers on Invoices'
  • group_stock_accounting_automatic Boolean
    implied_group='stock_account.group_stock_accounting_automatic' args: 'Automatic Stock Accounting'
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (1)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (4)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • analytic_account_line_ids Many2many → account.analytic.line
    copy=False args: 'account.analytic.line'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_move_id'
  • to_refund Boolean
    copy=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (2)
  • action_get_account_moves(self)
  • product_price_update_before_done(self, forced_qty=None)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (1)
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
Public methods (1)
  • action_view_stock_valuation_layers(self)

New fields (4)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • cost_method Selection
    related='product_categ_id.property_cost_method'
  • currency_id Many2one → res.currency
    compute='_compute_value' groups='stock.group_stock_manager' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (1)
  • read_group(self, domain, fields, *args, **kwargs)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • open_at_date(self)

New fields (1)
  • accounting_date Date
    args: 'Accounting Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, default_fields)
    @api.model

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (20)
  • account_move_id Many2one → account.move
    check_company=True index='btree_not_null' readonly=True args: 'account.move', 'Journal Entry'
  • account_move_line_id Many2one → account.move.line
    check_company=True index='btree_not_null' readonly=True args: 'account.move.line', 'Invoice Line'
  • categ_id Many2one → product.category
    related='product_id.categ_id' store=True args: 'product.category'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • description Char
    readonly=True args: 'Description'
  • price_diff_value Float
    args: 'Invoice value correction with invoice currency'
  • product_id Many2one → product.product
    auto_join=True check_company=True readonly=True required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • quantity Float
    digits='Product Unit of Measure' readonly=True args: 'Quantity'
  • reference Char
    related='stock_move_id.reference'
  • remaining_qty Float
    digits='Product Unit of Measure' readonly=True
  • remaining_value Monetary
    readonly=True args: 'Remaining Value'
  • stock_move_id Many2one → stock.move
    check_company=True index=True readonly=True args: 'stock.move', 'Stock Move'
  • stock_valuation_layer_id Many2one → stock.valuation.layer
    check_company=True index=True readonly=True args: 'stock.valuation.layer', 'Linked To'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_valuation_layer_id'
  • unit_cost Float
    digits='Product Price' group_operator=None readonly=True args: 'Unit Value'
  • uom_id Many2one
    readonly=True related='product_id.uom_id' required=True
  • value Monetary
    readonly=True args: 'Total Value'
  • warehouse_id Many2one → stock.warehouse
    compute='_compute_warehouse_id' search='_search_warehouse_id' string='Receipt WH' args: 'stock.warehouse'
Public methods (5)
  • action_open_journal_entry(self)
  • action_open_layer(self)
  • action_open_reference(self)
  • action_valuation_at_date(self)
  • init(self)

New fields (14)
  • account_id Many2one → account.account
    check_company=True domain=[('deprecated', '=', False)] args: 'account.account', 'Counterpart Account'
  • account_journal_id Many2one → account.journal
    check_company=True args: 'account.journal', 'Journal'
  • added_value Monetary
    required=True args: 'Added value'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • current_quantity_svl Float
    related='product_id.quantity_svl' args: 'Current Quantity'
  • current_value_svl Float
    related='product_id.value_svl' args: 'Current Value'
  • date Date
    args: 'Accounting Date'
  • new_value Monetary
    compute='_compute_new_value' args: 'New value'
  • new_value_by_qty Monetary
    compute='_compute_new_value' args: 'New value by quantity'
  • product_id Many2one → product.product
    check_company=True required=True args: 'product.product', 'Related product'
  • product_uom_name Char
    related='product_id.uom_id.name' args: 'Unit of Measure'
  • property_valuation Selection
    related='product_id.categ_id.property_valuation'
  • reason Char
    help='Reason of the revaluation' args: 'Reason'
Public methods (2)
  • action_validate_revaluation(self)
    Revaluate the stock for `self.product_id` in `self.company_id`. - Change the stardard price with the new valuation by product unit. - Create a manual stock valuation layer with the `added_value` of `self`. - Distribute the `added_value` on the remaining_value of layers still in stock (with a remaining quantity) - If the Inventory Valuation of the product category is automated, create related account move.
  • default_get(self, default_fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Denis Ledoux, Xavier Morel, GitHub, Yannick Tivisse, Laurent Smet, Arnold Moyaux, Denis Roussel, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, alt-odoo, Anh Thao Pham (pta), Brice bib Bartoletti, Adrien Widart, Nasreddin Boulif (bon), Touati Djamel (otd), Tiffany Chang (tic), Yoshi Tashiro, Rémy Voet (ryv), Gorash, Aurélien (avd), roen-odoo, Ricardo Gomes Rodrigues (rigr), Nicolas (vin), william-andre, David (dafr), JF Aubert, yhu-odoo, mafo-odoo, aliya, william, anhe-odoo, Agustín Castro Bugallo, Yolann Sabaux, John Laterre (jol), Antoine Vandevenne (anv), Thibault Libioulle, Aurelien van Delft (avd), Mathieu Walravens, AaronHForgeFlow, nda-odoo, Thomas Lefebvre (thle), Merel Geens (mege), Walid, Mylyna Hy, Adrien Widart (awt), Shawcker, Mahamadasif Ansari, Michael Tietz, Hansun (hale), Paolo Gatti, lathuat1997, Odoo, Ahmed Khalaf, Ahmed Khalaf (ahkh), AH-Yussef, Pedram (pebr), guva-odoo, Ethan Vincent, lase@odoo.com, InCeyN, axtr, Cyrus Robins, Martin Trigaux (mat), Louis Gobert, Aungkokolin1997, Quang Nguyen, kago-odoo, LauraCForgeFlow, EmilioPascual, Paimonchan, Haris (MHCH)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
product_product_stock_tree_inherit_stock_account product.product.stock.tree.inherit.stock.account product.product field Inherits stock.product_product_stock_tree
product_template_tree_view product.template.tree.inherit.stock.account product.template field Inherits product.product_template_tree_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings div Inherits stock.res_config_settings_view_form
stock_account_report_invoice_document stock_account_report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
stock_account_report_product_product_replenishment stock_account_report_product_product_replenishment ir.ui.view qweb Inherits stock.report_replenishment_header
stock_inventory_request_count_form_view_inherit_stock_account stock.request.count.form.view.inherit.stock.account stock.request.count field Inherits stock.stock_inventory_request_count_form_view
stock_valuation_layer_form stock.valuation.layer.form stock.valuation.layer form New
stock_valuation_layer_picking stock.valuation.layer.picking stock.picking xpath Inherits stock.view_picking_form
stock_valuation_layer_pivot stock.valuation.layer.pivot stock.valuation.layer pivot New
stock_valuation_layer_report_tree stock.valuation.layer.report.tree stock.valuation.layer field Inherits stock_valuation_layer_tree
stock_valuation_layer_revaluation_form_view stock.valuation.layer.revaluation.form stock.valuation.layer.revaluation form New
stock_valuation_layer_tree stock.valuation.layer.tree stock.valuation.layer tree New
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_category_property_form_stock product.category.stock.property.form.inherit.stock product.category group Inherits stock.product_category_form_view_inherit
view_inventory_valuation_search Inventory Valuation stock.valuation.layer search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_stock_quant_tree_editable_inherit stock.quant.tree.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.tree.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_inventory_editable_inherit_stock_account stock.quant.inventory.tree.editable.inherit.stock.account stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
view_stock_quantity_history_inherit_stock_account Valuation Report at Date stock.quantity.history field Inherits stock.view_stock_quantity_history
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
Models touched (19)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)

New fields (2)
  • stock_move_id Many2one → stock.move
    index='btree_not_null' string='Stock Move' args: 'stock.move'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_id'
Public methods (3)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)

New fields (1)
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_line_id'
Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='Counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account\n set on the source location. This is the default value for all products in this category. It can also directly be set on each product.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account,\n unless there is a specific valuation account set on the destination location. This is the default value for all products in this category.\n It can also directly be set on each product.' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0])]" help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_property_cost(self)
    @api.onchange('property_cost_method')
  • onchange_property_valuation(self)
    @api.onchange('property_valuation')
  • write(self, vals)

New fields (8)
  • avg_cost Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Average Cost'
  • company_currency_id Many2one → res.currency
    compute='_compute_value_svl' compute_sudo=True help="Technical field to correctly show the currently selected company's currency that corresponds to the totaled value of the product's valuation layers" args: 'res.currency', 'Valuation Currency'
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'product_id'
  • total_value Monetary
    compute='_compute_value_svl' compute_sudo=True currency_field='company_currency_id' string='Total Value'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (2)
  • action_revaluation(self)
  • write(self, vals)

New fields (2)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • group_lot_on_invoice Boolean
    implied_group='stock_account.group_lot_on_invoice' args: 'Display Lots & Serial Numbers on Invoices'
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (4)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • analytic_account_line_id Many2one → account.analytic.line
    copy=False index='btree_not_null' args: 'account.analytic.line'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_move_id'
  • to_refund Boolean
    copy=False help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (2)
  • action_get_account_moves(self)
  • product_price_update_before_done(self, forced_qty=None)

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (1)
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
Public methods (1)
  • action_view_stock_valuation_layers(self)

New fields (4)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • cost_method Selection
    related='product_categ_id.property_cost_method'
  • currency_id Many2one → res.currency
    compute='_compute_value' groups='stock.group_stock_manager' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This override is done in order for the grouped list view to display the total value of the quants inside a location. This doesn't work out of the box because `value` is a computed field.

New fields (0)

No new fields.

Public methods (1)
  • open_at_date(self)

New fields (1)
  • accounting_date Date
    args: 'Accounting Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, default_fields)
    @api.model

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (19)
  • account_move_id Many2one → account.move
    check_company=True index='btree_not_null' readonly=True args: 'account.move', 'Journal Entry'
  • account_move_line_id Many2one → account.move.line
    check_company=True index='btree_not_null' readonly=True args: 'account.move.line', 'Invoice Line'
  • categ_id Many2one → product.category
    related='product_id.categ_id' args: 'product.category'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • description Char
    readonly=True args: 'Description'
  • price_diff_value Float
    args: 'Invoice value correction with invoice currency'
  • product_id Many2one → product.product
    auto_join=True check_company=True readonly=True required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • quantity Float
    digits='Product Unit of Measure' readonly=True args: 'Quantity'
  • reference Char
    related='stock_move_id.reference'
  • remaining_qty Float
    digits='Product Unit of Measure' readonly=True
  • remaining_value Monetary
    readonly=True args: 'Remaining Value'
  • stock_move_id Many2one → stock.move
    check_company=True index=True readonly=True args: 'stock.move', 'Stock Move'
  • stock_valuation_layer_id Many2one → stock.valuation.layer
    check_company=True index=True readonly=True args: 'stock.valuation.layer', 'Linked To'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_valuation_layer_id'
  • unit_cost Monetary
    readonly=True args: 'Unit Value'
  • uom_id Many2one
    readonly=True related='product_id.uom_id' required=True
  • value Monetary
    readonly=True args: 'Total Value'
Public methods (4)
  • action_open_layer(self)
  • action_open_reference(self)
  • init(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model

New fields (14)
  • account_id Many2one → account.account
    check_company=True domain=[('deprecated', '=', False)] args: 'account.account', 'Counterpart Account'
  • account_journal_id Many2one → account.journal
    check_company=True args: 'account.journal', 'Journal'
  • added_value Monetary
    required=True args: 'Added value'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • current_quantity_svl Float
    related='product_id.quantity_svl' args: 'Current Quantity'
  • current_value_svl Float
    related='product_id.value_svl' args: 'Current Value'
  • date Date
    args: 'Accounting Date'
  • new_value Monetary
    compute='_compute_new_value' args: 'New value'
  • new_value_by_qty Monetary
    compute='_compute_new_value' args: 'New value by quantity'
  • product_id Many2one → product.product
    check_company=True required=True args: 'product.product', 'Related product'
  • product_uom_name Char
    related='product_id.uom_id.name' args: 'Unit of Measure'
  • property_valuation Selection
    related='product_id.categ_id.property_valuation'
  • reason Char
    help='Reason of the revaluation' args: 'Reason'
Public methods (2)
  • action_validate_revaluation(self)
    Revaluate the stock for `self.product_id` in `self.company_id`. - Change the stardard price with the new valuation by product unit. - Create a manual stock valuation layer with the `added_value` of `self`. - Distribute the `added_value` on the remaining_value of layers still in stock (with a remaining quantity) - If the Inventory Valuation of the product category is automated, create related account move.
  • default_get(self, default_fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Nicolas Martinelli, GitHub, Yannick Tivisse, Pierre Masereel, Laurent Smet, Arnold Moyaux, mreficent, Xavier-Do, Carlos Dauden, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Nasreddin (bon), alt-odoo, oco-odoo, Florent de Labarre, Anh Thao Pham (pta), svs-odoo, Brice bib Bartoletti, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Touati Djamel (otd), nie, Tiffany Chang (tic), Rémy Voet (ryv), Aurélien (avd), root, Kevin Baptiste, roen-odoo, Jacky (trj), sergio-teruel, Ricardo Gomes Rodrigues (rigr), william-andre, Víctor Martínez, David (dafr), yhu-odoo, mafo-odoo, william, Thierry Ducrest, hendrik, anhe-odoo, Agustín Castro Bugallo, Yolann Sabaux, Aurelien van Delft (avd), Mathieu Walravens, AaronHForgeFlow, Habib (ayh), Thomas Lefebvre (thle), Merel Geens (mege), Walid, Mylyna Hy, Adrien Widart (awt), clesgow, Maxime Franco, lathuat1997, AH-Yussef, guva-odoo, Ethan Vincent, lase@odoo.com, Cyrus Robins
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
product_template_tree_view product.template.tree.inherit.stock.account product.template field Inherits product.product_template_tree_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings div Inherits stock.res_config_settings_view_form
stock.product_template_kanban_stock_view New
stock.view_stock_product_template_tree New
stock.view_stock_product_tree New
stock_account_report_invoice_document stock_account_report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
stock_account_report_product_product_replenishment stock_account_report_product_product_replenishment ir.ui.view qweb Inherits stock.report_replenishment_header
stock_inventory_request_count_form_view_inherit_stock_account stock.request.count.form.view.inherit.stock.account stock.request.count field Inherits stock.stock_inventory_request_count_form_view
stock_valuation_layer_form stock.valuation.layer.form stock.valuation.layer form New
stock_valuation_layer_picking stock.valuation.layer.picking stock.picking xpath Inherits stock.view_picking_form
stock_valuation_layer_pivot stock.valuation.layer.pivot stock.valuation.layer pivot New
stock_valuation_layer_revaluation_form_view stock.valuation.layer.revaluation.form stock.valuation.layer.revaluation form New
stock_valuation_layer_tree stock.valuation.layer.tree stock.valuation.layer tree New
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_category_property_form_stock product.category.stock.property.form.inherit.stock product.category group Inherits stock.product_category_form_view_inherit
view_inventory_valuation_search Inventory Valuation stock.valuation.layer search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_stock_quant_tree_editable_inherit stock.quant.tree.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.tree.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_quant_tree_inventory_editable_inherit_stock_account stock.quant.inventory.tree.editable.inherit.stock.account stock.quant xpath Inherits stock.view_stock_quant_tree_inventory_editable
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
Models touched (19)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)

New fields (2)
  • stock_move_id Many2one → stock.move
    index=True string='Stock Move' args: 'stock.move'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_id'
Public methods (3)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)

New fields (1)
  • is_anglo_saxon_line Boolean
    help='Technical field used to retrieve the anglo-saxon lines.'
Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='Counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account\n set on the source location. This is the default value for all products in this category. It can also directly be set on each product.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account,\n unless there is a specific valuation account set on the destination location. This is the default value for all products in this category.\n It can also directly be set on each product.' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0])]" help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_property_cost(self)
    @api.onchange('property_cost_method')
  • onchange_property_valuation(self)
    @api.onchange('property_valuation')
  • write(self, vals)

New fields (5)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'product_id'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (2)
  • action_revaluation(self)
  • write(self, vals)

New fields (2)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • group_lot_on_invoice Boolean
    implied_group='stock_account.group_lot_on_invoice' args: 'Display Lots & Serial Numbers on Invoices'
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (4)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • analytic_account_line_id Many2one → account.analytic.line
    copy=False index=True args: 'account.analytic.line'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_move_id'
  • to_refund Boolean
    copy=False help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (2)
  • action_get_account_moves(self)
  • product_price_update_before_done(self, forced_qty=None)

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (1)
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
Public methods (1)
  • action_view_stock_valuation_layers(self)

New fields (3)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • currency_id Many2one → res.currency
    compute='_compute_value' groups='stock.group_stock_manager' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This override is done in order for the grouped list view to display the total value of the quants inside a location. This doesn't work out of the box because `value` is a computed field.

New fields (0)

No new fields.

Public methods (1)
  • open_at_date(self)

New fields (1)
  • accounting_date Date
    args: 'Accounting Date'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, default_fields)
    @api.model

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (16)
  • account_move_id Many2one → account.move
    check_company=True index=True readonly=True args: 'account.move', 'Journal Entry'
  • categ_id Many2one → product.category
    related='product_id.categ_id' args: 'product.category'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • description Char
    readonly=True args: 'Description'
  • product_id Many2one → product.product
    auto_join=True check_company=True readonly=True required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • quantity Float
    digits='Product Unit of Measure' help='Quantity' readonly=True args: 'Quantity'
  • remaining_qty Float
    digits='Product Unit of Measure' readonly=True
  • remaining_value Monetary
    readonly=True args: 'Remaining Value'
  • stock_move_id Many2one → stock.move
    check_company=True index=True readonly=True args: 'stock.move', 'Stock Move'
  • stock_valuation_layer_id Many2one → stock.valuation.layer
    check_company=True index=True readonly=True args: 'stock.valuation.layer', 'Linked To'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_valuation_layer_id'
  • unit_cost Monetary
    readonly=True args: 'Unit Value'
  • uom_id Many2one
    readonly=True related='product_id.uom_id' required=True
  • value Monetary
    readonly=True args: 'Total Value'
Public methods (1)
  • init(self)

New fields (14)
  • account_id Many2one → account.account
    check_company=True domain=[('deprecated', '=', False)] args: 'account.account', 'Counterpart Account'
  • account_journal_id Many2one → account.journal
    check_company=True args: 'account.journal', 'Journal'
  • added_value Monetary
    required=True args: 'Added value'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • current_quantity_svl Float
    related='product_id.quantity_svl' args: 'Current Quantity'
  • current_value_svl Float
    related='product_id.value_svl' args: 'Current Value'
  • date Date
    args: 'Accounting Date'
  • new_value Monetary
    compute='_compute_new_value' args: 'New value'
  • new_value_by_qty Monetary
    compute='_compute_new_value' args: 'New value by quantity'
  • product_id Many2one → product.product
    check_company=True required=True args: 'product.product', 'Related product'
  • product_uom_name Char
    related='product_id.uom_id.name' args: 'Unit of Measure'
  • property_valuation Selection
    related='product_id.categ_id.property_valuation'
  • reason Char
    help='Reason of the revaluation' args: 'Reason'
Public methods (2)
  • action_validate_revaluation(self)
    Revaluate the stock for `self.product_id` in `self.company_id`. - Change the stardard price with the new valuation by product unit. - Create a manual stock valuation layer with the `added_value` of `self`. - Distribute the `added_value` on the remaining_value of layers still in stock (with a remaining quantity) - If the Inventory Valuation of the product category is automated, create related account move.
  • default_get(self, default_fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Christophe Simonis, Goffin Simon, Simon Lejeune, Ravi Gohil, Nicolas Martinelli, qdp-odoo, Sylvain LE GAL, GitHub, Yannick Tivisse, Dharmraj Jhala, Laurent Smet, Arnold Moyaux, Adrian Torres, wan, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Nasreddin (bon), alt-odoo, Florent de Labarre, fw-bot, Anh Thao Pham (pta), Debauche Stéphane, svs-odoo, Rémy Baranx (bar), Brice bib Bartoletti, Adrien Widart, Ivan Yelizariev, Touati Djamel (otd), nie, Tiffany Chang (tic), Rémy Voet (ryv), Djamel (otd), jbm-odoo, Aurélien (avd), root, Kevin Baptiste, Pratima Gupta, roen-odoo, Jigar Vaghela, Ricardo Gomes Rodrigues (rigr), David (dafr), yhu-odoo, mafo-odoo, Didier (did), william, Ujas Dubal, Maulik Raval, hungbui, Thierry Ducrest, hendrik, anhe-odoo, Agustín Castro Bugallo, Yolann Sabaux, Hemali Bhimani, Mathieu Walravens, Merel Geens (mege), Mylyna Hy, Adrien Widart (awt), Maxime Franco
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
product_template_tree_view product.template.tree.inherit.stock.account product.template field Inherits product.product_template_tree_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings div Inherits stock.res_config_settings_view_form
stock_account_report_product_product_replenishment stock_account_report_product_product_replenishment ir.ui.view qweb Inherits stock.report_replenishment_header
stock_valuation_layer_form stock.valuation.layer.form stock.valuation.layer form New
stock_valuation_layer_picking stock.valuation.layer.picking stock.picking xpath Inherits stock.view_picking_form
stock_valuation_layer_revaluation_form_view stock.valuation.layer.revaluation.form stock.valuation.layer.revaluation form New
stock_valuation_layer_tree stock.valuation.layer.tree stock.valuation.layer tree New
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_inventory_tree stock.inventory.tree.inherit.stock.account stock.inventory xpath Inherits stock.view_inventory_tree
view_inventory_valuation_search Inventory Valuation stock.valuation.layer search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_stock_quant_tree_editable_inherit stock.quant.tree.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.tree.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
Models touched (19)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)

New fields (2)
  • stock_move_id Many2one → stock.move
    index=True string='Stock Move' args: 'stock.move'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_id'
Public methods (3)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)

New fields (1)
  • is_anglo_saxon_line Boolean
    help='Technical field used to retrieve the anglo-saxon lines.'
Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='Counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account\n set on the source location. This is the default value for all products in this category. It can also directly be set on each product.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account,\n unless there is a specific valuation account set on the destination location. This is the default value for all products in this category.\n It can also directly be set on each product.' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0])]" help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_property_cost(self)
    @api.onchange('property_cost_method')
  • onchange_property_valuation(self)
    @api.onchange('property_valuation')
  • write(self, vals)

New fields (5)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'product_id'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (2)
  • action_revaluation(self)
  • write(self, vals)

New fields (2)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (2)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • has_account_moves Boolean
    compute='_compute_has_account_moves' compute_sudo=True
Public methods (2)
  • action_get_account_moves(self)
  • post_inventory(self)

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (3)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_move_id'
  • to_refund Boolean
    copy=False help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (2)
  • action_get_account_moves(self)
  • product_price_update_before_done(self, forced_qty=None)

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • action_view_stock_valuation_layers(self)

New fields (2)
  • currency_id Many2one → res.currency
    compute='_compute_value' groups='stock.group_stock_manager' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This override is done in order for the grouped list view to display the total value of the quants inside a location. This doesn't work out of the box because `value` is a computed field.

New fields (0)

No new fields.

Public methods (1)
  • open_at_date(self)

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, default_fields)
    @api.model

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (16)
  • account_move_id Many2one → account.move
    check_company=True index=True readonly=True args: 'account.move', 'Journal Entry'
  • categ_id Many2one → product.category
    related='product_id.categ_id' args: 'product.category'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • description Char
    readonly=True args: 'Description'
  • product_id Many2one → product.product
    auto_join=True check_company=True readonly=True required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • quantity Float
    digits=0 help='Quantity' readonly=True args: 'Quantity'
  • remaining_qty Float
    digits=0 readonly=True
  • remaining_value Monetary
    readonly=True args: 'Remaining Value'
  • stock_move_id Many2one → stock.move
    check_company=True index=True readonly=True args: 'stock.move', 'Stock Move'
  • stock_valuation_layer_id Many2one → stock.valuation.layer
    check_company=True readonly=True args: 'stock.valuation.layer', 'Linked To'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_valuation_layer_id'
  • unit_cost Monetary
    readonly=True args: 'Unit Value'
  • uom_id Many2one
    readonly=True related='product_id.uom_id' required=True
  • value Monetary
    readonly=True args: 'Total Value'
Public methods (1)
  • init(self)

New fields (14)
  • account_id Many2one → account.account
    check_company=True domain=[('deprecated', '=', False)] args: 'account.account', 'Counterpart Account'
  • account_journal_id Many2one → account.journal
    check_company=True args: 'account.journal', 'Journal'
  • added_value Monetary
    required=True args: 'Added value'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • current_quantity_svl Float
    related='product_id.quantity_svl' args: 'Current Quantity'
  • current_value_svl Float
    related='product_id.value_svl' args: 'Current Value'
  • date Date
    args: 'Accounting Date'
  • new_value Monetary
    compute='_compute_new_value' args: 'New value'
  • new_value_by_qty Monetary
    compute='_compute_new_value' args: 'New value by quantity'
  • product_id Many2one → product.product
    check_company=True required=True args: 'product.product', 'Related product'
  • product_uom_name Char
    related='product_id.uom_id.name' args: 'Unit of Measure'
  • property_valuation Selection
    related='product_id.categ_id.property_valuation'
  • reason Char
    help='Reason of the revaluation' args: 'Reason'
Public methods (2)
  • action_validate_revaluation(self)
    Revaluate the stock for `self.product_id` in `self.company_id`. - Change the stardard price with the new valuation by product unit. - Create a manual stock valuation layer with the `added_value` of `self`. - Distribute the `added_value` on the remaining_value of layers still in stock (with a remaining quantity) - If the Inventory Valuation of the product category is automated, create related account move.
  • default_get(self, default_fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Martinelli, qdp-odoo, Yannick Tivisse, Pierre Masereel, Laurent Smet, RomainLibert, Arnold Moyaux, Adrian Torres, wan, Xavier-Do, Andrea Grazioso (agr-odoo), William Henrotin, Sébastien Theys, Nasreddin (bon), oco-odoo, Anh Thao Pham (pta), svs-odoo, Brice bib Bartoletti, Adrien Widart, Touati Djamel (otd), Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Aurélien (avd), Jinal Patel, root, Pratima Gupta, Guillaume (guva), Arnaud Baes, roen-odoo, arbaes, David (dafr), yhu-odoo, JordiMForgeFlow, Ujas Dubal, Maulik Raval, hungbui, Thierry Ducrest, hendrik, anhe-odoo, Agustín Castro Bugallo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
product_product_normal_form_view_inherit product.product.normal.form.view.inherit product.product data Inherits product.product_normal_form_view
product_template_tree_view product.template.tree.inherit.stock.account product.template field Inherits product.product_template_tree_view
product_variant_easy_edit_view_inherit product.product.product.view.form.easy.inherit product.product data Inherits product.product_variant_easy_edit_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings div Inherits stock.res_config_settings_view_form
stock_valuation_layer_form stock.valuation.layer.form stock.valuation.layer form New
stock_valuation_layer_picking stock.valuation.layer.picking stock.picking xpath Inherits stock.view_picking_form
stock_valuation_layer_search stock.valuation.layer.search stock.valuation.layer search New
stock_valuation_layer_tree stock.valuation.layer.tree stock.valuation.layer tree New
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_change_standard_price Change Standard Price stock.change.standard.price form New
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_inventory_tree stock.inventory.tree.inherit.stock.account stock.inventory xpath Inherits stock.view_inventory_tree
view_inventory_valuation_search Inventory Valuation stock.valuation.layer search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_stock_quant_tree_editable_inherit stock.quant.tree.editable.inherit stock.quant xpath Inherits stock.view_stock_quant_tree_editable
view_stock_quant_tree_inherit stock.quant.tree.inherit stock.quant xpath Inherits stock.view_stock_quant_tree
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
view_template_property_form product.template.stock.property.form.inherit product.template data Inherits product.product_template_form_view
Models touched (19)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)

New fields (2)
  • stock_move_id Many2one → stock.move
    index=True string='Stock Move' args: 'stock.move'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    string='Stock Valuation Layer' args: 'stock.valuation.layer', 'account_move_id'
Public methods (4)
  • button_cancel(self)
  • button_draft(self)
  • copy_data(self, default=None)
  • post(self)

New fields (1)
  • is_anglo_saxon_line Boolean
    help='Technical field used to retrieve the anglo-saxon lines.'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account,\n unless there is a specific valuation account set on the source location. This is the default value for all products in this category.\n It can also directly be set on each product.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When doing automated inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account,\n unless there is a specific valuation account set on the destination location. This is the default value for all products in this category.\n It can also directly be set on each product.' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0])]" help='When doing automated inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    check_company=True company_dependent=True domain="[('company_id', '=', allowed_company_ids[0]), ('deprecated', '=', False)]" help='When automated inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (2)
  • onchange_property_valuation(self)
    @api.onchange('property_cost_method')
  • write(self, vals)

New fields (3)
  • quantity_svl Float
    compute='_compute_value_svl' compute_sudo=True
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'product_id'
  • value_svl Float
    compute='_compute_value_svl' compute_sudo=True
Public methods (1)
  • write(self, vals)

New fields (2)
  • cost_method Selection
    readonly=True related='categ_id.property_cost_method'
  • valuation Selection
    readonly=True related='categ_id.property_valuation'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • write(self, vals)

New fields (1)
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (3)
  • counterpart_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Counter-Part Account' args: 'account.account'
  • counterpart_account_id_required Boolean
    string='Counter-Part Account Required'
  • new_price Float
    digits='Product Price' help='If cost price is increased, stock variation account will be debited and stock output account will be credited with the value = (difference of amount * quantity available).\nIf cost price is decreased, stock variation account will be creadited and stock input account will be debited.' required=True args: 'Price'
Public methods (2)
  • change_price(self)
    Changes the Standard Price of Product and creates an account move accordingly.
  • default_get(self, fields)
    @api.model

New fields (2)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
  • has_account_moves Boolean
    compute='_compute_has_account_moves' compute_sudo=True
Public methods (2)
  • action_get_account_moves(self)
  • post_inventory(self)

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (3)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_move_id'
  • to_refund Boolean
    copy=False help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (2)
  • action_get_account_moves(self)
  • product_price_update_before_done(self, forced_qty=None)

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • action_view_stock_valuation_layers(self)

New fields (2)
  • currency_id Many2one → res.currency
    compute='_compute_value' groups='stock.group_stock_manager' args: 'res.currency'
  • value Monetary
    compute='_compute_value' groups='stock.group_stock_manager' args: 'Value'
Public methods (1)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    This override is done in order for the grouped list view to display the total value of the quants inside a location. This doesn't work out of the box because `value` is a computed field.

New fields (0)

No new fields.

Public methods (1)
  • open_at_date(self)

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, default_fields)
    @api.model

New fields (1)
  • to_refund Boolean
    default=True help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='Update quantities on SO/PO'
Public methods (0)

No public methods.

New fields (17)
  • account_move_id Many2one → account.move
    check_company=True readonly=True args: 'account.move', 'Journal Entry'
  • active Boolean
    related='product_id.active'
  • categ_id Many2one → product.category
    related='product_id.categ_id' args: 'product.category'
  • company_id Many2one → res.company
    readonly=True required=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' required=True args: 'res.currency', 'Currency'
  • description Char
    readonly=True args: 'Description'
  • product_id Many2one → product.product
    auto_join=True check_company=True readonly=True required=True args: 'product.product', 'Product'
  • product_tmpl_id Many2one → product.template
    related='product_id.product_tmpl_id' args: 'product.template'
  • quantity Float
    digits=0 help='Quantity' readonly=True args: 'Quantity'
  • remaining_qty Float
    digits=0 readonly=True
  • remaining_value Monetary
    readonly=True args: 'Remaining Value'
  • stock_move_id Many2one → stock.move
    check_company=True index=True readonly=True args: 'stock.move', 'Stock Move'
  • stock_valuation_layer_id Many2one → stock.valuation.layer
    check_company=True readonly=True args: 'stock.valuation.layer', 'Linked To'
  • stock_valuation_layer_ids One2many → stock.valuation.layer
    args: 'stock.valuation.layer', 'stock_valuation_layer_id'
  • unit_cost Monetary
    readonly=True args: 'Unit Value'
  • uom_id Many2one
    readonly=True related='product_id.uom_id' required=True
  • value Monetary
    readonly=True args: 'Total Value'
Public methods (1)
  • init(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, Pierre Masereel, Jorge Pinna Puissant, Arnold Moyaux, Adrian Torres, XavierDo, Xavier-Do, Andrea Grazioso (agr-odoo), Fanny He, William Henrotin, david, fw-bot, Anh Thao Pham (pta), Nikunj Ladava, Swapnesh Shah
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - account
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
product_normal_form_view_inherit product.product.form.inherit.stock_account product.product data Inherits product.product_normal_form_view
product_variant_easy_edit_view_inherit product.product.product.view.form.easy.inherit product.product data Inherits product.product_variant_easy_edit_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings div Inherits stock.res_config_settings_view_form
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_change_standard_price Change Standard Price stock.change.standard.price form New
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_inventory_valuation_search product.product product.product search New
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_move_tree_valuation_at_date stock.move.tree.valuation.at.date stock.move tree New
view_stock_account_aml stock.account.aml account.move.line tree New
view_stock_product_tree2 product.stock.tree.2 product.product tree New
view_stock_quantity_history Valuation Report stock.quantity.history form New
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
view_template_property_form product.template.stock.property.form.inherit product.template data Inherits product.product_template_form_view
Models touched (18)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • invoice_line_move_line_get(self)
    @api.model
  • invoice_validate(self)

New fields (0)

No new fields.

Public methods (1)
  • get_invoice_line_account(self, type, product, fpos, company)

New fields (1)
  • stock_move_id Many2one → stock.move
    string='Stock Move' args: 'stock.move'
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 (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. This is the default value for all products in this category. It can also directly be set on each product' oldname='property_stock_account_input_categ' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. This is the default value for all products in this category. It can also directly be set on each product' oldname='property_stock_account_output_categ' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    company_dependent=True help='When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (1)
  • onchange_property_valuation(self)
    @api.onchange('property_cost_method')

New fields (5)
  • qty_at_date Float
    compute='_compute_stock_value' args: 'Quantity'
  • stock_fifo_manual_move_ids Many2many → stock.move
    compute='_compute_stock_value' args: 'stock.move'
  • stock_fifo_real_time_aml_ids Many2many → account.move.line
    compute='_compute_stock_value' args: 'account.move.line'
  • stock_value Float
    compute='_compute_stock_value' args: 'Value'
  • stock_value_currency_id Many2one → res.currency
    compute='_compute_stock_value_currency' args: 'res.currency'
Public methods (3)
  • action_open_product_moves(self)
    @api.multi
  • action_valuation_at_date_details(self)
    Returns an action with either a list view of all the valued stock moves of `self` if the valuation is set as manual or a list view of all the account move lines if the valuation is set as automated.
  • do_change_standard_price(self, new_price, account_id)
    @api.multi
    Changes the Standard Price of Product and creates an account move accordingly.

New fields (6)
  • cost_method Char
    compute='_compute_cost_method' inverse='_set_cost_method'
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.' string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used.' args: 'account.account', 'Stock Output Account'
  • property_valuation Selection
    company_dependent=True copy=True default='manual_periodic' help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.' string='Inventory Valuation' args: [('manual_periodic', 'Periodic (manual)'), ('real_time', 'Perpetual (automated)')]
  • valuation Char
    compute='_compute_valuation_type' inverse='_set_valuation_type' search='_search_valuation'
Public methods (2)
  • action_open_product_moves(self)
    @api.multi
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)

New fields (1)
  • module_stock_landed_costs Boolean
    help='Affect landed costs on reception operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (3)
  • counterpart_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Counter-Part Account' args: 'account.account'
  • counterpart_account_id_required Boolean
    string='Counter-Part Account Required'
  • new_price Float
    digits=dp.get_precision('Product Price') help='If cost price is increased, stock variation account will be debited and stock output account will be credited with the value = (difference of amount * quantity available).\nIf cost price is decreased, stock variation account will be creadited and stock input account will be debited.' required=True args: 'Price'
Public methods (2)
  • change_price(self)
    @api.multi
    Changes the Standard Price of Product and creates an account move accordingly.
  • default_get(self, fields)
    @api.model

New fields (1)
  • accounting_date Date
    help='Date at which the accounting entries will be created in case of automated inventory valuation. If empty, the inventory date will be used.' args: 'Accounting Date'
Public methods (1)
  • post_inventory(self)
    @api.multi

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (5)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • remaining_qty Float
    copy=False
  • remaining_value Float
    copy=False
  • to_refund Boolean
    copy=False help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='To Refund (update SO/PO)'
  • value Float
    copy=False
Public methods (2)
  • action_get_account_moves(self)
    @api.multi
  • product_price_update_before_done(self, forced_qty=None)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    @api.multi
    When editing a done stock.move.line, we impact the valuation. Users may increase or decrease the `qty_done` field. There are three cost method available: standard, average and fifo. We implement the logic in a similar way for standard and average: increase or decrease the original value with the standard or average price of today. In fifo, we have a different logic wheter the move is incoming or outgoing. If the move is incoming, we update the value and remaining_value/qty with the unit price of the move. If the move is outgoing and the user increases qty_done, we call _run_fifo and it'll consume layer(s) in the stack the same way a new outgoing move would have done. If the move is outoing and the user decreases qty_done, we either increase the last receipt candidate if one is found or we decrease the value with the last fifo price.

New fields (0)

No new fields.

Public methods (1)
  • open_table(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • to_refund Boolean
    help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='To Refund (update SO/PO)'
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/11.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Josse Colpaert, Christophe Simonis, Xavier Morel, Joren Van Onder, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, Odoo Online, Pierre Masereel, Denis Vermylen (dve), len-odoo, Nans Lefebvre, Arnold Moyaux, Nathan de Pryck, david, Joseph Caburnay
WEBSITE
WEBSITEhttps://www.odoo.com/page/warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - barcodes
    - web_planner
    - account
    - analytic
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
product_variant_easy_edit_view_inherit product.product.product.view.form.easy.inherit product.product data Inherits product.product_variant_easy_edit_view
res_config_settings_view_form res.config.settings.view.form.inherit.stock.account res.config.settings div Inherits stock.res_config_settings_view_form
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_change_standard_price Change Standard Price stock.change.standard.price form New
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_move_tree_valuation_at_date stock.move.tree.valuation.at.date stock.move tree New
view_stock_account_aml stock.account.aml account.move.line tree New
view_stock_product_tree2 product.stock.tree.2 product.product tree New
view_stock_quantity_history Valuation Report stock.quantity.history form New
view_stock_return_picking_form_inherit_stock_account stock.return.picking.stock.account.form stock.return.picking xpath Inherits stock.view_stock_return_picking_form
view_template_property_form product.template.stock.property.form.inherit product.template data Inherits product.product_template_form_view
Models touched (17)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)
    @api.multi

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (1)
  • get_invoice_line_account(self, type, product, fpos, company)

New fields (1)
  • stock_move_id Many2one → stock.move
    string='Stock Move' args: 'stock.move'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n ' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. This is the default value for all products in this category. It can also directly be set on each product' oldname='property_stock_account_input_categ' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. This is the default value for all products in this category. It can also directly be set on each product' oldname='property_stock_account_output_categ' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    company_dependent=True help='When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n ' required=True string='Inventory Valuation' args: [('manual_periodic', 'Manual'), ('real_time', 'Automated')]
Public methods (1)
  • onchange_property_valuation(self)
    @api.onchange('property_cost_method')

New fields (4)
  • qty_at_date Float
    compute='_compute_stock_value' args: 'Quantity'
  • stock_fifo_manual_move_ids Many2many → stock.move
    compute='_compute_stock_value' args: 'stock.move'
  • stock_fifo_real_time_aml_ids Many2many → account.move.line
    compute='_compute_stock_value' args: 'account.move.line'
  • stock_value Float
    compute='_compute_stock_value' args: 'Value'
Public methods (3)
  • action_open_product_moves(self)
    @api.multi
  • action_valuation_at_date_details(self)
    Returns an action with either a list view of all the valued stock moves of `self` if the valuation is set as manual or a list view of all the account move lines if the valuation is set as automated.
  • do_change_standard_price(self, new_price, account_id)
    @api.multi
    Changes the Standard Price of Product and creates an account move accordingly.

New fields (6)
  • cost_method Char
    compute='_compute_cost_method' inverse='_set_cost_method'
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The products are valued at their standard cost defined on the product.\n Average Cost (AVCO): The products are valued at weighted average cost.\n First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.' string='Costing Method' args: [('standard', 'Standard Price'), ('fifo', 'First In First Out (FIFO)'), ('average', 'Average Cost (AVCO)')]
  • property_stock_account_input Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used.' args: 'account.account', 'Stock Output Account'
  • property_valuation Selection
    company_dependent=True copy=True default='manual_periodic' help='Manual: The accounting entries to value the inventory are not posted automatically.\n Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.' string='Inventory Valuation' args: [('manual_periodic', 'Periodic (manual)'), ('real_time', 'Perpetual (automated)')]
  • valuation Char
    compute='_compute_valuation_type' inverse='_set_valuation_type'
Public methods (2)
  • action_open_product_moves(self)
    @api.multi
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)

New fields (1)
  • module_stock_landed_costs Boolean
    help='Affect landed costs on receipt operations and split them among products to update their cost price.' args: 'Landed Costs'
Public methods (0)

No public methods.

New fields (3)
  • counterpart_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] string='Counter-Part Account' args: 'account.account'
  • counterpart_account_id_required Boolean
    string='Counter-Part Account Required'
  • new_price Float
    digits=dp.get_precision('Product Price') help='If cost price is increased, stock variation account will be debited and stock output account will be credited with the value = (difference of amount * quantity available).\nIf cost price is decreased, stock variation account will be creadited and stock input account will be debited.' required=True args: 'Price'
Public methods (2)
  • change_price(self)
    @api.multi
    Changes the Standard Price of Product and creates an account move accordingly.
  • default_get(self, fields)
    @api.model

New fields (1)
  • accounting_date Date
    help='Choose the accounting date at which you want to value the stock moves created by the inventory instead of the default one (the inventory end date)' args: 'Force Accounting Date'
Public methods (1)
  • post_inventory(self)
    @api.multi

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (5)
  • account_move_ids One2many → account.move
    args: 'account.move', 'stock_move_id'
  • remaining_qty Float
    copy=False
  • remaining_value Float
    copy=False
  • to_refund Boolean
    copy=False help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='To Refund (update SO/PO)'
  • value Float
    copy=False
Public methods (2)
  • action_get_account_moves(self)
    @api.multi
  • product_price_update_before_done(self, forced_qty=None)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi
    When editing a done stock.move.line, we impact the valuation. Users may increase or decrease the `qty_done` field. There are three cost method available: standard, average and fifo. We implement the logic in a similar way for standard and average: increase or decrease the original value with the standard or average price of today. In fifo, we have a different logic wheter the move is incoming or outgoing. If the move is incoming, we update the value and remaining_value/qty with the unit price of the move. If the move is outgoing and the user increases qty_done, we call _run_fifo and it'll consume layer(s) in the stack the same way a new outgoing move would have done. If the move is outoing and the user decreases qty_done, we either increase the last receipt candidate if one is found or we decrease the value with the last fifo price.

New fields (0)

No new fields.

Public methods (1)
  • open_table(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • to_refund Boolean
    help='Trigger a decrease of the delivered/received quantity in the associated Sale Order/Purchase Order' string='To Refund (update SO/PO)'
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/10.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Joren Van Onder, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Julien Legros, qdp-odoo, GitHub, Yannick Tivisse, Pierre Masereel, Arnold Moyaux
WEBSITE
WEBSITEhttps://www.odoo.com/page/warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - report
    - procurement
    - barcodes
    - web_planner
    - account
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
product_variant_easy_edit_view_inherit product.product.product.view.form.easy.inherit product.product data Inherits product.product_variant_easy_edit_view
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_change_standard_price Change Standard Price stock.change.standard.price form New
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_picking_inherit_form2 stock.picking.form.inherit stock.picking field Inherits stock.view_picking_form
view_stock_config_settings_inherit stock.config.settings.inherit stock.config.settings xpath Inherits stock.view_stock_config_settings
view_stock_history_report_graph stock.history.value.graph stock.history graph New
view_stock_history_report_pivot stock.history.value.pivot stock.history pivot New
view_stock_history_report_search stock.history.report.search stock.history search New
view_stock_history_report_tree Stock Value At Date stock.history tree New
view_template_property_form product.template.stock.property.form.inherit product.template data Inherits product.product_template_form_view
view_wizard_valuation_history Inventory at Date wizard.valuation.history form New
Models touched (14)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)
    @api.multi

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (1)
  • get_invoice_line_account(self, type, product, fpos, company)

New fields (6)
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\nAverage Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\nReal Price: The cost price displayed is the price of the last outgoing product (will be used in case of inventory loss for example).' required=True string='Costing Method' args: [('standard', 'Standard Price'), ('average', 'Average Price'), ('real', 'Real Price')]
  • property_stock_account_input_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. This is the default value for all products in this category. It can also directly be set on each product' oldname='property_stock_account_input_categ' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output_categ_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. This is the default value for all products in this category. It can also directly be set on each product' oldname='property_stock_account_output_categ' args: 'account.account', 'Stock Output Account'
  • property_stock_journal Many2one → account.journal
    company_dependent=True help='When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed.' args: 'account.journal', 'Stock Journal'
  • property_stock_valuation_account_id Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.' args: 'account.account', 'Stock Valuation Account'
  • property_valuation Selection
    company_dependent=True copy=True help="If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'. The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products." required=True string='Inventory Valuation' args: [('manual_periodic', 'Periodic (manual)'), ('real_time', 'Perpetual (automated)')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • do_change_standard_price(self, new_price, account_id)
    @api.multi
    Changes the Standard Price of Product and creates an account move accordingly.
  • onchange_type_valuation(self)
    @api.onchange('type')

New fields (6)
  • cost_method Char
    compute='_compute_cost_method' inverse='_set_cost_method'
  • property_cost_method Selection
    company_dependent=True copy=True help='Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n Real Price: The cost price displayed is the price of the last outgoing product (will be use in case of inventory loss for example).' string='Costing Method' args: [('standard', 'Standard Price'), ('average', 'Average Price'), ('real', 'Real Price')]
  • property_stock_account_input Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used.' args: 'account.account', 'Stock Input Account'
  • property_stock_account_output Many2one → account.account
    company_dependent=True domain=[('deprecated', '=', False)] help='When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used.' args: 'account.account', 'Stock Output Account'
  • property_valuation Selection
    company_dependent=True copy=True default='manual_periodic' help="If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products." string='Inventory Valuation' args: [('manual_periodic', 'Periodic (manual)'), ('real_time', 'Perpetual (automated)')]
  • valuation Char
    compute='_compute_valuation_type' inverse='_set_valuation_type'
Public methods (2)
  • get_product_accounts(self, fiscal_pos=None)
    @api.multi
    Add the stock journal related to product to the result of super() @return: dictionary which contains all needed information regarding stock accounts and journal and super (income+expense accounts)
  • onchange_type_valuation(self)
    @api.onchange('type')

New fields (2)
  • counterpart_account_id Many2one → account.account
    domain=[('deprecated', '=', False)] required=True string='Counter-Part Account' args: 'account.account'
  • new_price Float
    digits=dp.get_precision('Product Price') help='If cost price is increased, stock variation account will be debited and stock output account will be credited with the value = (difference of amount * quantity available).\nIf cost price is decreased, stock variation account will be creadited and stock input account will be debited.' required=True args: 'Price'
Public methods (2)
  • change_price(self)
    @api.multi
    Changes the Standard Price of Product and creates an account move accordingly.
  • default_get(self, fields)
    @api.model

New fields (2)
  • group_stock_inventory_valuation Selection
    help='Allows to configure inventory valuations on products and product categories.' implied_group='stock_account.group_inventory_valuation' args: [(0, 'Periodic inventory valuation (recommended)'), (1, 'Perpetual inventory valuation (stock move generates accounting entries)')], 'Inventory Valuation'
  • module_stock_landed_costs Selection
    help='Install the module that allows to affect landed costs on pickings, and split them onto the different products.' args: [(0, 'No landed costs'), (1, 'Include landed costs in product costing computation')], 'Landed Costs'
Public methods (1)
  • onchange_landed_costs(self)
    @api.onchange('module_stock_landed_costs')

New fields (12)
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • date Datetime
    args: 'Operation Date'
  • inventory_value Float
    compute='_compute_inventory_value' readonly=True args: 'Inventory Value'
  • location_id Many2one → stock.location
    required=True args: 'stock.location', 'Location'
  • move_id Many2one → stock.move
    required=True args: 'stock.move', 'Stock Move'
  • price_unit_on_quant Float
    args: 'Value'
  • product_categ_id Many2one → product.category
    required=True args: 'product.category', 'Product Category'
  • product_id Many2one → product.product
    required=True args: 'product.product', 'Product'
  • product_template_id Many2one → product.template
    required=True args: 'product.template', 'Product Template'
  • quantity Float
    args: 'Product Quantity'
  • serial_number Char
    required=True args: 'Lot/Serial Number'
  • source Char
    args: 'Source'
Public methods (2)
  • init(self)
    @api.model_cr
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model

New fields (1)
  • accounting_date Date
    help='Choose the accounting date at which you want to value the stock moves created by the inventory instead of the default one (the inventory end date)' args: 'Force Accounting Date'
Public methods (1)
  • post_inventory(self)
    @api.multi

New fields (2)
  • valuation_in_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved from an internal location into this location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Incoming)'
  • valuation_out_account_id Many2one → account.account
    domain=[('internal_type', '=', 'other'), ('deprecated', '=', False)] help='Used for real-time inventory valuation. When set on a virtual location (non internal type), this account will be used to hold the value of products being moved out of this location and into an internal location, instead of the generic Stock Output Account set on the product. This has no effect for internal locations.' args: 'account.account', 'Stock Valuation Account (Outgoing)'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • action_done(self)
    @api.multi
  • product_price_update_after_done(self)
    @api.multi
    Adapt standard price on outgoing moves, so that a return or an inventory loss is made using the last value used for an outgoing valuation.
  • product_price_update_before_done(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • choose_date Boolean
    args: 'Inventory at Date'
  • date Datetime
    default=fields.Datetime.now required=True args: 'Date'
Public methods (1)
  • open_table(self)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Goffin Simon, Cedric Snauwaert, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, pvy, Yannick Tivisse, qsm-odoo, Cédric Snauwaert, Martin Geubelle
WEBSITE
WEBSITEhttps://www.odoo.com/page/warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - report
    - procurement
    - barcodes
    - web_planner
    - account
    - analytic
    - web_tip
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
product_variant_easy_edit_view_inherit product.product.product.view.form.easy.inherit product.product data Inherits product.product_variant_easy_edit_view
view_category_property_form product.category.stock.property.form.inherit product.category group Inherits account.view_category_property_form
view_change_standard_price Change Standard Price stock.change.standard.price form New
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_picking_inherit_form2 stock.picking.form.inherit stock.picking field Inherits stock.view_picking_form
view_stock_config_settings_inherit stock.config.settings.inherit stock.config.settings xpath Inherits stock.view_stock_config_settings
view_stock_history_report_graph stock.history.value.graph stock.history graph New
view_stock_history_report_pivot stock.history.value.pivot stock.history pivot New
view_stock_history_report_search stock.history.report.search stock.history search New
view_stock_history_report_tree Stock Value At Date stock.history tree New
view_template_property_form product.template.stock.property.form.inherit product.template data Inherits product.product_template_form_view
view_wizard_valuation_history Inventory at Date wizard.valuation.history form New
Models touched (2)

New fields (0)

No new fields.

Public methods (2)
  • generate_journals(self, acc_template_ref, company, journals_dict=None)
    @api.model
  • generate_properties(self, acc_template_ref, company, property_list=None)
    @api.multi

New fields (0)

No new fields.

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/8.0/stock_account
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSOdoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Vo Minh Thu, Josse Colpaert, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, David Monjoie, Goffin Simon, Cedric Snauwaert, Nicolas Martinelli, qdp-odoo, Géry Debongnie, Aaron Bohy, ged-odoo, Pooja Zankhariya (OpenERP)
WEBSITE
WEBSITEhttps://www.odoo.com/page/warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - report
    - procurement
    - board
    - web_kanban_gauge
    - web_kanban_sparkline
    - account
    - analytic
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
WMS Accounting module
======================
This module makes the link between the 'stock' and 'account' modules and allows you to create accounting entries to value your stock movements

Key Features
------------
* Stock Valuation (periodical or automatic)
* Invoice from Picking

Dashboard / Reports for Warehouse Management includes:
------------------------------------------------------
* Stock Inventory Value at given date (support dates in the past)
    

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
view_category_property_form product.category.stock.property.form.inherit product.category data Inherits account.view_category_property_form
view_change_standard_price Change Standard Price stock.change.standard.price form New
view_inventory_form_inherit stock.inventory.form.inherit stock.inventory xpath Inherits stock.view_inventory_form
view_location_form_inherit stock.location.form.inherit stock.location xpath Inherits stock.view_location_form
view_move_form_inherit stock.move.form.inherit stock.move xpath Inherits stock.view_move_form
view_move_picking_from_stockaccount_inherit stock.move.form.invoice_state stock.move xpath Inherits stock.view_move_picking_form
view_picking_inherit_form2 stock.picking.form.inherit stock.picking xpath Inherits stock.view_picking_form
view_picking_inherit_tree2 stock.picking.tree.inherit stock.picking xpath Inherits stock.vpicktree
view_procurement_rule_form_stockaccount_inherit stock.procurement.rule.inherit.form procurement.rule xpath Inherits stock.view_procurement_rule_form_stock_inherit
view_pusht_rule_form_stockaccount_inherit stock.location.path.inherit.form stock.location.path xpath Inherits stock.stock_location_path_form
view_stock_config_settings_inherit stock.config.settings.inherit stock.config.settings xpath Inherits stock.view_stock_config_settings
view_stock_history_report_graph stock.history.value.graph stock.history graph New
view_stock_history_report_search stock.history.report.search stock.history search New
view_stock_history_report_tree Stock Value At Date stock.history tree New
view_stock_invoice_onshipping Stock Invoice Onshipping stock.invoice.onshipping form New
view_stock_return_picking_form_inherit Return lines stock.return.picking field Inherits stock.view_stock_return_picking_form
view_template_property_form product.template.stock.property.form.inherit product.template field Inherits product.product_template_form_view
view_wizard_valuation_history Stock Valuation wizard.valuation.history form New
Models touched (0)

No models found for this module.