Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5af908d

Browse files
committedJan 9, 2025·
[IMP] Inventory: Rewrite aging report as stock valuation report
1 parent 48a396a commit 5af908d

File tree

9 files changed

+172
-72
lines changed

9 files changed

+172
-72
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,198 @@
1-
======================
2-
Inventory aging report
3-
======================
1+
=========================
2+
Stock valuation dashboard
3+
=========================
44

55
.. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)`
66

7-
The inventory aging report evaluates all items in stock, providing insights into potentially sunken
8-
purchase costs and delays in profitability.
9-
10-
Create customized pivot tables to analyze product, operation types, month, or company breakdowns.
11-
This helps identify products in stock that are at risk of passing their expiration or viability
12-
dates, or instances of rot/decay for fast-expiring items.
13-
14-
.. note::
7+
When a company has physical assets, such as inventory, they often want to know approximately how
8+
much has been spent on these goods, or how much they are worth at the moment. These numbers are
9+
often reported for accounting purposes. For instance, an insurance company may want to know the
10+
value of goods stored in a warehouse, in the event of a flood or fire.
11+
12+
This process of assigning a monetary value to account for inventory is known as *stock valuation*.
13+
:doc:`Stock valuation <../../product_management/inventory_valuation/using_inventory_valuation>`
14+
typically utilizes one of two accounting systems:
15+
16+
- **Perpetual**: The inventory is constantly (perpetually) being updated, and the value is
17+
constantly changing.
18+
- **Periodic**: The inventory value is checked on an occasional (periodic) basis, and the value is
19+
set at this occasional time.
20+
21+
Using :ref:`tracked inventory <inventory/product_management/tracking-inventory>` in Odoo
22+
necessitates a *perpetual* inventory accounting system because of the need to know when and where
23+
inventory exists, and how much of it is available or forecasted. There are a few common :ref:`stock
24+
valuation methods <inventory/warehouses_storage/costing_methods>` used in Odoo: standard price,
25+
average cost (AVCO), and first in, first out (FIFO) accounting. It is important to know that the
26+
valuation method chosen for a product impacts the calculation of several fields in the stock
27+
valuation reports.
28+
29+
Where to access the dashboard
30+
-----------------------------
31+
32+
Odoo's Stock Valuation dashboard displays the financial value of all tracked inventory, according
33+
to each product's stock valuation method. This report can provide insights into sunken purchase
34+
costs or delays in profitability. To access the dashboard, go to :menuselection:`Inventory app -->
35+
Reporting --> Valuation`.
36+
37+
.. important::
1538
The *Reporting* menu in *Inventory* is only accessible to users with :doc:`admin access
1639
<../../../../general/users/access_rights>`.
1740

18-
To access the inventory aging report, go to :menuselection:`Inventory app --> Reporting -->
19-
Inventory Aging`.
41+
This dashboard has three different views, or inventory reports — :ref:`list view (i.e. the default,
42+
stock valuation report) <inventory/warehouses_storage/valuation-report>`, :ref:`pivot view (i.e. the
43+
stock aging report) <inventory/warehouses_storage/aging-report>`, and graph view. Each view can be
44+
customized with different fields to break down inventory valuation by product, operation type, date,
45+
or company.
2046

21-
.. _inventory/warehouses_storage/aging-report:
47+
All three views can be filtered by various fields. To apply filters, click into the search bar at
48+
the top of the report, or click the drop-down arrow next to it. For example, selecting the filter
49+
:guilabel:`Has Remaining Qty` will show only pr ducts that are currently in stock.
2250

23-
Navigate the inventory aging report
24-
===================================
2551

26-
By default, the :guilabel:`Inventory Aging` report displays a pivot table, with the month in
27-
columns, and product category in rows. The default filters, :guilabel:`Incoming` and :guilabel:`Has
28-
Remaining Qty`, show only products from receipts, and are currently in stock.
52+
.. _inventory/warehouses_storage/valuation-report:
2953

30-
:guilabel:`Remaining Qty` displays the number of on-hand items, and :guilabel:`Remaining Value`
31-
displays the total cost of purchasing these items.
54+
List view: stock valuation
55+
==========================
3256

33-
Clicking the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row reveals options to
34-
expand the pivot table and show a detailed breakdown of the :guilabel:`Remaining Qty` and
35-
:guilabel:`Remaining Value` by :guilabel:`Product`, :guilabel:`Product Category`, :guilabel:`Date`,
36-
or :guilabel:`Company`. Clicking the :icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses it
37-
back to its previous state.
57+
By default, the :guilabel:`Stock Valuation` dashboard displays in *list view*, represented by the
58+
:icon:`oi-view-list` :guilabel:`(list)` icon. This view is essentially a *Stock Valuation Report*,
59+
which shows a detailed record of stock movements and their valuations.
3860

39-
.. figure:: aging/inventory-aging.png
40-
:align: center
41-
:alt: Inventory aging report.
61+
Configure
62+
---------
4263

43-
Inventory aging report, showing each **Product** in rows and each reception **Date** in columns,
44-
to better monitor products with fast expiration dates. Each row shows the the total on-hand
45-
quantity and inventory valuation of items purchased on each day.
64+
The following columns are displayed by default:
4665

47-
.. note::
48-
Records in the :guilabel:`Inventory Aging` report are *stock valuation layers* (SVLs),
49-
representing product moves that impact stock valuation.
66+
- :guilabel:`Date`: the date and time when the stock move was created. The valuation report is
67+
sorted by this field, emphasizing the importance of time when valuing inventory.
68+
- :guilabel:`Reference`: the reference document associated with this stock move (e.g., a warehouse
69+
receipt, a delivery order, or a manual inventory adjustment).
70+
- :guilabel:`Product`: the product that is being moved and valued.
71+
- :guilabel:`Quantity`: the number of units by which this product's stock has increased or
72+
decreased in this particular stock move.
73+
- :guilabel:`Total Value`: the value of the product's stock in this particular stock move,
74+
calculated by multiplying the :guilabel:`Quantity` and :guilabel:`Unit Value`.
5075

51-
Inventory adjustments do **not** create |SVLs|; only items purchased from vendors do.
52-
53-
Generate reports
54-
================
76+
.. note::
77+
If a :guilabel:`Reference` document includes several goods, there will be a *separate line item*
78+
generated on the Stock Valuation Report for *each* good.
79+
80+
There are additional fields that can be added to this view to provide more insight into the stock's
81+
valuation:
82+
83+
- :guilabel:`Lot/Serial Number`: the uniquely identifying lot or serial number for this product.
84+
- :guilabel:`Company`: for businesses that operate with multiple companies, this field displays the
85+
company by which this stock move took place.
86+
- :guilabel:`Remaining Quantity`: the number of units remaining for this valuation of the product,
87+
after demand has been accounted for (even from other stock moves). This field can be especially
88+
helpful for FIFO and AVCO accounting, as it conveys which units of stock came into a warehouse
89+
first and the value of said stock.
90+
- :guilabel:`Unit Value`: the cost of one unit of the product (**not** the price to consumers).
91+
- :guilabel:`Description`: a description of the reason for this stock valuation (typically, a stock
92+
move has occurred). By default, this field is set as the concatenation of the
93+
:guilabel:`Reference` and :guilabel:`Product` fields. However, the field may also display other
94+
important messages for this line item, such as a note stating that the line item is an adjustment
95+
due to a change in the product's inventory valuation method.
96+
- :guilabel:`Remaining Value`: the value of this product's current stock levels for this particular
97+
stock move, after demand has been accounted for. Along with :guilabel:`Remaining Quantity`, this
98+
field can be especially helpful for FIFO and AVCO accounting, as they convey which stock came
99+
into a warehouse first and the value of said stock.
100+
101+
.. image:: aging/stock-valuation-report.png
102+
:alt: Stock valuation report.
103+
104+
Each line item in the :guilabel:`Stock Valuation` report represents a record in Odoo's system known
105+
as a *stock valuation layer (SVL)*. SVLs are generated when products move in a way that impacts
106+
their stock valuation. Specifically, the stock moves that generate SVLs are warehouse receipts,
107+
deliveries, dropshipping orders, and dropshipping returns. These stock moves must first be validated
108+
(by clicking the :guilabel:`Validate` button) for the SVL to be created.
109+
110+
If a product's inventory valuation method changes on the product form, new line items are generated
111+
on the Stock Valuation Report to reflect the resulting SVLs. For example, if the valuation method
112+
changes from *standard price* to either *AVCO* or *FIFO* accounting, *revaluation entries* will be
113+
automatically posted to reflect the change in pricing for goods that remain in stock. One entry will
114+
be negative to "remove" the old pricing, and the second entry will be positive to record the new
115+
pricing. These entries are connected to journal entries in Odoo's **Accounting** app.
116+
117+
Below is an example of what the Stock Valuation Report table shows when a few stock moves have
118+
occurred for a product using standard price accounting.
119+
120+
.. image:: aging/before-val-method-change.png
121+
:alt: Remaining value and quantity fields are calculated based on SVLs.
122+
123+
Whereas the following image depicts what the Stock Valuation Report table might look like after a
124+
product has switched from standard price to FIFO accounting.
125+
126+
.. image:: aging/after-val-method-change.png
127+
:alt: Remaining value and quantity fields are calculated based on SVLs.
128+
129+
.. example::
130+
The :guilabel:`Remaining Value` and :guilabel:`Remaining Quantity` fields are derived from what
131+
occurs at the SVL level in Odoo and, as such, are better understood with an example.
132+
133+
Say `Frankie's Consignment Shop` buys sweaters at the cost, or :guilabel:`Unit Value`, of `5.00`
134+
dollars. For the first time, Frankie's purchases and receives a :guilabel:`Quantity` of `100.00`
135+
sweaters in one stock move, then re-sells and delivers `-10.00` sweaters in a second stock move.
136+
137+
In the first stock move line item, the :guilabel:`Remaining Quantity` will change from `100.00`
138+
to `90.00`, once the second stock move is recorded. This change reflects that, although 100
139+
sweaters were originally purchased, only 90 of those sweaters remain in stock and should be
140+
counted in the valuation. Similarly, the :guilabel:`Remaining Value` will drop from `$500.00` to
141+
`$450.00`. The :guilabel:`Total Value` will remain at `$500.00`, regardless of subsequent
142+
transactions.
143+
144+
On the other hand, the :guilabel:`Remaining Quantity` of the second stock move line item will be
145+
recorded and remain at `0.00` because the quantity of `-10.00` was sold. In the system, because
146+
the SVL was a sale, there is no stock left that needs to be valued from that transaction.
147+
148+
.. image:: aging/remaining-val-quant.png
149+
:alt: Remaining value and quantity fields are calculated based on SVLs.
150+
151+
Change the valuation date
152+
-------------------------
153+
154+
The :guilabel:`Valuation At Date` button, located in the top-left corner of the Stock Valuation
155+
page, reveals a pop-up window. In this pop-up, select a date to act as a "cut-off" for the stock
156+
moves to be valued.
55157

56-
After learning how to :ref:`navigate the inventory aging report
57-
<inventory/warehouses_storage/aging-report>`, it can be used to create and share different reports.
158+
.. note::
159+
The value of the stock moves will not be point-in-time for any dates chosen in the past. In other
160+
words, the stock move shown when selecting a past date will still display the current on-hand
161+
value of its products.
58162

59-
A few common reports that can be created using the :guilabel:`Inventory Aging` report are detailed
60-
below.
163+
.. _inventory/warehouses_storage/aging-report:
61164

62-
Rotating stock report
63-
---------------------
165+
Pivot view: stock aging
166+
=======================
64167

65-
To create a report to identify items that have been in stock for a while, follow these steps:
168+
From the Stock Valuation dashboard, access pivot view by clicking the :icon:`oi-view-pivot`
169+
:guilabel:`(pivot table)` icon. This view is essentially a *Stock Aging Report*, and it shows the
170+
on-hand quantity and value of inventory by purchase date, which can help monitor products with
171+
expiration dates.
66172

67-
#. Navigate to :menuselection:`Inventory app --> Reporting --> Inventory Aging`.
68-
#. On the :guilabel:`Inventory Aging` report, click the :icon:`fa-caret-down` :guilabel:`(caret
69-
down)` icon in the :guilabel:`Search...` bar to see a drop-down list of :guilabel:`Filters`,
70-
:guilabel:`Group By`, and :guilabel:`Favorite` options.
71-
#. Choose :guilabel:`Product` under the :guilabel:`Group By` section. Doing so expands the pivot
72-
table to show a product in each row.
73-
#. Click the :icon:`fa-plus-square` :guilabel:`(plus)` icon to the left of the date column. Hover
74-
over :guilabel:`Date` from the drop-down menu and choose :guilabel:`Year`, :guilabel:`Quarter`,
75-
:guilabel:`Month`, :guilabel:`Week`, or :guilabel:`Day`. Doing so expands the columns to show the
76-
:guilabel:`Remaining Qty` and :guilabel:`Remaining Value` by the selected time period.
173+
Configure
174+
---------
77175

78-
.. tip::
79-
For products that have a longer shelf life, choose longer time periods such as
80-
:guilabel:`Month` or :guilabel:`Quarter` when expanding columns by :guilabel:`Date`.
176+
By default, the pivot view shows the value of all *product categories* by *day and month*. Clicking
177+
the :icon:`oi-plus-square` :guilabel:`(plus)` icon in each column or row will reveal a drop-down
178+
list of options to further tabulate the table and create a more granular breakdown of the inventory
179+
valuation. The drop-down options include: :guilabel:`Product`, :guilabel:`Lot/Serial Number`,
180+
:guilabel:`Product Category`, :guilabel:`Date`, :guilabel:`Company`, or :guilabel:`Add Custom Group`
181+
Clicking the :icon:`oi-minus-square-o` :guilabel:`(minus)` icon collapses the field back to an empty
182+
state.
81183

82-
.. image:: aging/column-expand-icon.png
83-
:align: center
84-
:alt: Pivot table, highlighting the plus icon to expand columns.
184+
In the table, the :guilabel:`Remaining Qty` column displays the number of on-hand items, and
185+
:guilabel:`Remaining Value` displays the total cost of purchasing these items.
85186

86-
#. The report now displays the on-hand stock of items, and their total purchasing cost, for each
87-
time period.
187+
.. image:: aging/stock-aging-report.png
188+
:alt: Stock aging report, showing product row items and day columns.
88189

89-
.. example::
90-
Inventory aging report, with the :guilabel:`Group By`: :guilabel:`Product` option selected,
91-
and with the :guilabel:`Date` column set to :guilabel:`Day`. It gives insight into how much
92-
raw fish sashimi products were purchased on each day, and how much it cost. This informs the
93-
business owners how much stock is at risk of rotting in stock, per day.
190+
Graph view
191+
==========
94192

95-
.. image:: aging/inventory-aging.png
96-
:align: center
97-
:alt: Inventory aging report, showing product row items and day columns.
193+
The stock value can be depicted graphically by clicking the :icon:`oi-area-chart`
194+
:guilabel:`(graph)` icon. By default, the graph is displayed in :icon:`oi-line-chart` line chart
195+
view and filtered to show the cumulative total of all inventory value over time in Odoo.
98196

197+
At the top of the report, a :icon:`oi-bar-chart` bar chart or :icon:`oi-pie-chart` pie chart view
198+
can be selected instead.
Loading
Loading

0 commit comments

Comments
 (0)
Please sign in to comment.