diff --git a/content/applications/inventory_and_mrp/inventory/product_management/configure/type.rst b/content/applications/inventory_and_mrp/inventory/product_management/configure/type.rst index 2f286747c..50cae1840 100644 --- a/content/applications/inventory_and_mrp/inventory/product_management/configure/type.rst +++ b/content/applications/inventory_and_mrp/inventory/product_management/configure/type.rst @@ -284,10 +284,10 @@ Transfer goods ~~~~~~~~~~~~~~ *Transfers* are warehouse operations that involve the movement of goods. Examples of transfers -include -:doc:`deliveries and receipts <../../shipping_receiving/daily_operations/receipts_delivery_one_step>`, -as well as :doc:`internal transfers <../../warehouses_storage/replenishment/resupply_warehouses>` -between warehouses. +include :doc:`deliveries and receipts +<../../shipping_receiving/daily_operations/receipts_delivery_one_step>`, as well as +:doc:`internal transfers <../../warehouses_storage/replenishment/resupply_warehouses>` between +warehouses. When creating a transfer for tracked products in the **Inventory** app, transfers modify the on-hand quantity at each location. For example, transferring five units from the internal location diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging.rst index e668a6b62..316419ad1 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging.rst @@ -1,98 +1,227 @@ -====================== -Inventory aging report -====================== +========================= +Stock valuation dashboard +========================= .. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)` -The inventory aging report evaluates all items in stock, providing insights into potentially sunken -purchase costs and delays in profitability. +When a company has physical assets, such as inventory, they often want to know approximately how +much has been spent on these goods, or how much they are worth at the moment. This process of +assigning a monetary value to account for inventory is known as *stock valuation*. -Create customized pivot tables to analyze product, operation types, month, or company breakdowns. -This helps identify products in stock that are at risk of passing their expiration or viability -dates, or instances of rot/decay for fast-expiring items. +This value is often reported for accounting purposes. For instance, an insurance company may want to +know the value of goods stored in a warehouse, in the event of a flood or fire. + +:doc:`Stock valuation <../../product_management/inventory_valuation/using_inventory_valuation>` +typically utilizes one of two accounting systems: + +- **Perpetual**: The inventory is constantly (perpetually) being updated, and the value is + constantly changing. +- **Periodic**: The inventory value is checked on an occasional (periodic) basis, and the value is + set at this occasional time. + +Using :ref:`tracked inventory ` in Odoo +necessitates a *perpetual* inventory accounting system because of the need to know when and where +inventory exists, and how much of it is available or forecasted. There are a few common :ref:`stock +valuation methods ` used in Odoo: *standard price*, +*average cost* (AVCO), and *first in, first out* (FIFO) accounting. It is important to know that the +valuation method chosen for a product impacts the calculation of several fields in the stock +valuation reports. + +Open the dashboard +================== + +Odoo's *Stock Valuation* dashboard displays the financial value of all tracked inventory, according +to each product's stock valuation method. This report can provide insights into potential issues in +the supply chain, such as sunken purchase costs or delays in profitability. To access the dashboard, +go to :menuselection:`Inventory app --> Reporting --> Valuation`. + +.. important:: + The :menuselection:`Reporting`` menu in **Inventory** is only accessible to users with + :doc:`admin access <../../../../general/users/access_rights>`. + +This dashboard has three different views, or inventory reports — :ref:`list view +` (i.e. the default stock valuation report), +:ref:`pivot view ` (i.e. the stock aging report), and +:ref:`graph view `. Each view can be customized with +different fields to break down inventory valuation by product, operation type, date, or company. + +All three views can be filtered by various fields. To apply filters, click into the search bar at +the top of the report, or click the drop-down arrow next to it. For example, selecting the filter +:guilabel:`Has Remaining Qty` will show only products that are currently in stock. + +.. _inventory/warehouses_storage/valuation-report: + +List view: stock valuation +========================== + +By default, the :guilabel:`Stock Valuation` dashboard displays in *list view*, represented by the +:icon:`oi-view-list` :guilabel:`(list)` icon. This report shows a detailed record of stock movements +and their valuations. + +Configure +--------- + +The following columns are displayed by default: + +- :guilabel:`Date`: the date and time when the :ref:`stock move ` + was created. The valuation report is sorted by this field by default, emphasizing the importance + of time when valuing inventory. To sort the report by a different column, simply click on the + column title. +- :guilabel:`Reference`: the reference document associated with this stock move (e.g., a warehouse + receipt, a delivery order, or a manual inventory adjustment). +- :guilabel:`Product`: the product that is being moved and valued. +- :guilabel:`Quantity`: the number of units by which this product's stock has increased or + decreased in this particular stock move. +- :guilabel:`Total Value`: the value of the product's stock in this particular stock move, + calculated by multiplying the :guilabel:`Quantity` and :guilabel:`Unit Value`. .. note:: - The *Reporting* menu in *Inventory* is only accessible to users with :doc:`admin access - <../../../../general/users/access_rights>`. + If a :guilabel:`Reference` document includes several goods, there will be a separate line item + generated on the report for each good. -To access the inventory aging report, go to :menuselection:`Inventory app --> Reporting --> -Inventory Aging`. +There are additional fields that can be added to this view to provide more insight into the stock's +valuation. To add fields, click the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon, and select +the desired fields: + +- :guilabel:`Lot/Serial Number`: the uniquely identifying lot or serial number for this product. +- :guilabel:`Company`: for businesses that operate with multiple companies, this field displays the + company by which this stock move took place. +- :guilabel:`Remaining Quantity`: the number of units remaining for this valuation of the product, + after demand has been accounted for (even from other stock moves). This field can be especially + helpful for :abbr:`FIFO (First In, First Out)` and :abbr:`AVCO (Average Cost)` accounting, as it + conveys which units of stock came into a warehouse first and the value of said stock. +- :guilabel:`Unit Value`: the cost of one unit of the product for the company (**not** the price to + consumers). +- :guilabel:`Description`: a description of the reason for this stock valuation (typically, a stock + move has occurred). By default, this field is set as the concatenation of the + :guilabel:`Reference` and :guilabel:`Product` fields. However, the field may also display other + important messages for this line item, such as a note stating that the line item is an adjustment + due to a change in the product's inventory valuation method. +- :guilabel:`Remaining Value`: the value of this product's current stock levels for this particular + stock move, after demand has been accounted for. Along with :guilabel:`Remaining Quantity`, this + field can be especially helpful for :abbr:`FIFO (First In, First Out)` and + :abbr:`AVCO (Average Cost)` accounting, as they convey which stock came into a warehouse first and + the value of said stock. + +.. tip:: + Some of these settings may not appear unless first enabled in Odoo's **:doc:`Settings + <../../../general>`** application. + +.. image:: aging/stock-valuation-report.png + :alt: Stock valuation report. + +.. _inventory/warehouses_storage/svl: + +Stock valuation layers (SVLs) +----------------------------- + +Each line item in the :guilabel:`Stock Valuation` report represents a record in Odoo's system known +as a *stock valuation layer (SVL)*. :abbr:`SVLs (stock move layers)` are generated when products +move in a way that impacts their stock valuation. Specifically, the stock moves that generate +:abbr:`SVLs (stock move layers)` are warehouse receipts, deliveries, dropshipping orders, and +dropshipping returns. These stock moves must first be validated (by clicking the +:guilabel:`Validate` button) for the :abbr:`SVL (stock move layer)` to be created. + +If a product's inventory valuation method changes on the product form, new line items are generated +on the :guilabel:`Stock Valuation` report to reflect the resulting :abbr:`SVLs (stock move layers)`. +For example, if the valuation method changes from *standard price* to either :abbr:`AVCO (Average +Cost)` or :abbr:`FIFO (First In, First Out)` accounting, *revaluation entries* will be +automatically posted to reflect the change in pricing for goods that remain in stock. One entry will +be negative to "remove" the old pricing, and the second entry will be positive to record the new +pricing. These entries are connected to journal entries in Odoo's **Accounting** app. + +Below is an example of what the :guilabel:`Stock Valuation` table shows when a few stock moves have +occurred for a product using standard price accounting. + +.. image:: aging/before-val-method-change.png + :alt: Stock valuation table in standard price accounting. + +Conversely, the following image depicts what the *Stock Valuation* Report table might look like +after a product has switched from standard price to :abbr:`FIFO (First In, First Out)` accounting. + +.. image:: aging/after-val-method-change.png + :alt: Stock valuation table after switching from standard price to FIFO accounting. + +.. example:: + The :guilabel:`Remaining Value` and :guilabel:`Remaining Quantity` fields are derived from what + occurs at the :abbr:`SVL (stock move layer)` level in Odoo and, as such, are better understood + with an example. + + Frankie's Consignment Shop buys sweaters at the cost, or :guilabel:`Unit Value`, of `5.00` + dollars. For the first time, Frankie's purchases and receives a :guilabel:`Quantity` of `100.00` + sweaters in one stock move, then re-sells and delivers `-10.00` sweaters in a second stock move. + + In the first stock move line item, the :guilabel:`Remaining Quantity` will change from `100.00` + to `90.00`, once the second stock move is recorded. This change reflects that, although 100 + sweaters were originally purchased, only 90 of those sweaters remain in stock and should be + counted in the valuation. Similarly, the :guilabel:`Remaining Value` will drop from `$500.00` to + `$450.00`. The :guilabel:`Total Value` will remain at `$500.00`, regardless of subsequent + transactions. + + On the other hand, the :guilabel:`Remaining Quantity` of the second stock move line item will be + recorded and remain at `0.00` because the quantity of `-10.00` was sold. In the system, because + the :abbr:`SVL (stock move layer)` was a sale, there is no stock left that needs to be valued + from that transaction. + + .. image:: aging/remaining-val-quant.png + :alt: Remaining value and quantity are calculated based on :abbr:`SVLs (stock move layers)`. + +Change the valuation date +------------------------- + +To see the valuation of stock moves at a specific date and time, click the :guilabel:`Valuation At +Date` button, located in the top-left corner of the :guilabel:`Stock Valuation` page. The report +will show the :guilabel:`Quantity` and :guilabel:`Total Value` of each stock move. + +.. note:: + The :guilabel:`Remaining Quantity` and :guilabel:`Remaining Value` of the stock moves will *not* + be point-in-time for any dates chosen in the past. The stock moves shown when selecting a past + date will still display the *current on-hand quantity and value* of the products. + +.. example:: + A business has 100 sofas in stock on January 1st and sells 20 of those sofas on February 1st. The + :guilabel:`Remaining Quantity` of the :abbr:`SVL (stock move layer)` will drop from `100.00` to + `70.00` on February 1st. If no other stock moves take place, and on February 1st, the + :guilabel:`Valuation at Date` is selected as January 1st, the :guilabel:`Remaining Quantity` + will still show as `70.00`. .. _inventory/warehouses_storage/aging-report: -Navigate the inventory aging report -=================================== +Pivot view: stock aging +======================= -By default, the :guilabel:`Inventory Aging` report displays a pivot table, with the month in -columns, and product category in rows. The default filters, :guilabel:`Incoming` and :guilabel:`Has -Remaining Qty`, show only products from receipts, and are currently in stock. +From the :guilabel:`Stock Valuation` dashboard, access pivot view by clicking the +:icon:`oi-view-pivot` :guilabel:`(pivot)` icon. This view is essentially a *stock aging report*, and +it shows the on-hand quantity and value of inventory by purchase date, which can help monitor +products with expiration dates. -:guilabel:`Remaining Qty` displays the number of on-hand items, and :guilabel:`Remaining Value` -displays the total cost of purchasing these items. +Configure +--------- -Clicking the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row reveals options to -expand the pivot table and show a detailed breakdown of the :guilabel:`Remaining Qty` and -:guilabel:`Remaining Value` by :guilabel:`Product`, :guilabel:`Product Category`, :guilabel:`Date`, -or :guilabel:`Company`. Clicking the :icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses it -back to its previous state. +By default, the pivot view shows the value of all *product categories* by *day and month*. Clicking +the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row will reveal a drop-down +list of options to create a more granular breakdown of the inventory valuation. The drop-down +options include: :guilabel:`Product`, :guilabel:`Lot/Serial Number`, :guilabel:`Product Category`, +:guilabel:`Date`, :guilabel:`Company`, or :guilabel:`Add Custom Group` Clicking the +:icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses the field back to an empty state. -.. figure:: aging/inventory-aging.png - :align: center - :alt: Inventory aging report. +In the table, the :guilabel:`Remaining Qty` column displays the number of on-hand items, and +:guilabel:`Remaining Value` displays the total cost of purchasing these items. - Inventory aging report, showing each **Product** in rows and each reception **Date** in columns, - to better monitor products with fast expiration dates. Each row shows the the total on-hand - quantity and inventory valuation of items purchased on each day. +.. image:: aging/stock-aging-report.png + :alt: Stock aging report, showing product row items and day columns. -.. note:: - Records in the :guilabel:`Inventory Aging` report are *stock valuation layers* (SVLs), - representing product moves that impact stock valuation. +.. _inventory/warehouses_storage/graph-view: - Inventory adjustments do **not** create |SVLs|; only items purchased from vendors do. +Graph view +========== -Generate reports -================ +The stock value can be depicted graphically by clicking the :icon:`fa-area-chart` +:guilabel:`(graph)` icon. By default, the graph is displayed in :icon:`fa-line-chart` line chart +view and filtered to show the cumulative total of all inventory value over time in Odoo. -After learning how to :ref:`navigate the inventory aging report -`, it can be used to create and share different reports. - -A few common reports that can be created using the :guilabel:`Inventory Aging` report are detailed -below. - -Rotating stock report ---------------------- - -To create a report to identify items that have been in stock for a while, follow these steps: - -#. Navigate to :menuselection:`Inventory app --> Reporting --> Inventory Aging`. -#. On the :guilabel:`Inventory Aging` report, click the :icon:`fa-caret-down` :guilabel:`(caret - down)` icon in the :guilabel:`Search...` bar to see a drop-down list of :guilabel:`Filters`, - :guilabel:`Group By`, and :guilabel:`Favorite` options. -#. Choose :guilabel:`Product` under the :guilabel:`Group By` section. Doing so expands the pivot - table to show a product in each row. -#. Click the :icon:`fa-plus-square` :guilabel:`(plus)` icon to the left of the date column. Hover - over :guilabel:`Date` from the drop-down menu and choose :guilabel:`Year`, :guilabel:`Quarter`, - :guilabel:`Month`, :guilabel:`Week`, or :guilabel:`Day`. Doing so expands the columns to show the - :guilabel:`Remaining Qty` and :guilabel:`Remaining Value` by the selected time period. - - .. tip:: - For products that have a longer shelf life, choose longer time periods such as - :guilabel:`Month` or :guilabel:`Quarter` when expanding columns by :guilabel:`Date`. - - .. image:: aging/column-expand-icon.png - :align: center - :alt: Pivot table, highlighting the plus icon to expand columns. - -#. The report now displays the on-hand stock of items, and their total purchasing cost, for each - time period. - - .. example:: - Inventory aging report, with the :guilabel:`Group By`: :guilabel:`Product` option selected, - and with the :guilabel:`Date` column set to :guilabel:`Day`. It gives insight into how much - raw fish sashimi products were purchased on each day, and how much it cost. This informs the - business owners how much stock is at risk of rotting in stock, per day. - - .. image:: aging/inventory-aging.png - :align: center - :alt: Inventory aging report, showing product row items and day columns. +At the top of the report, a :icon:`fa-bar-chart` bar chart or :icon:`fa-pie-chart` pie chart view +can be selected instead. +.. seealso:: + :doc:`Odoo reporting essentials <../../../../essentials/reporting>` diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/after-val-method-change.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/after-val-method-change.png new file mode 100644 index 000000000..a46881fcc Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/after-val-method-change.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/before-val-method-change.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/before-val-method-change.png new file mode 100644 index 000000000..9c741b652 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/before-val-method-change.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/column-expand-icon.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/column-expand-icon.png deleted file mode 100644 index d421c4a3d..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/column-expand-icon.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/default-view.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/default-view.png deleted file mode 100644 index 52a7d1cca..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/default-view.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/inventory-aging.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/inventory-aging.png deleted file mode 100644 index 58a71b527..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/inventory-aging.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/remaining-val-quant.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/remaining-val-quant.png new file mode 100644 index 000000000..aefe3ad61 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/remaining-val-quant.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/stock-aging-report.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/stock-aging-report.png new file mode 100644 index 000000000..422ff58da Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/stock-aging-report.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/stock-valuation-report.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/stock-valuation-report.png new file mode 100644 index 000000000..0812c8051 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/aging/stock-valuation-report.png differ