diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses.rst b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses.rst index 694627c2e..58a524c73 100644 --- a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses.rst +++ b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses.rst @@ -1,51 +1,198 @@ -====================================== -Taking stock from different warehouses -====================================== +=========================================================== +Sell stock from multiple warehouses using virtual locations +=========================================================== -When you plan to deliver a customer, you don't know in advance if the products will come from -Warehouse A or Warehouse B. You may, in some cases, need to take stock from different warehouses. -With *Odoo*, you can configure this by using the concept of virtual warehouses. Let us show you how -to set those virtual warehouses. +While keeping stock and selling inventory from one warehouse might work for smaller companies, +bigger companies might need to keep stock in, or sell from, multiple warehouses in multiple +locations. -Set up virtual warehouses -========================= - -Let's say you have two warehouses: Warehouse A and Warehouse B. Create a new warehouse, that will be -a virtual one. It will allow you to take the stock from A or B. To do so, go to your inventory app -settings and enable the multi-warehouses feature. Then, go to the warehouses menu and click on -create. - -.. image:: stock_warehouses/ware1.png - :align: center +In Odoo, sometimes products included in a single sales order might take stock from two (or more) +warehouses. In Odoo, pulling products from multiple warehouses to satisfy sales demands can be done +by using *virtual locations*. .. note:: - The *Storage Location* feature will be automatically enabled. Good news, because you will need it - later in the process. + In order to create virtual locations in warehouses and proceed to the following steps, + the :guilabel:`Storage Locations` and :guilabel:`Multi-Step Routes` features will need to be + enabled in the :menuselection:`Settings` app. -Now, you have to make sure that the main stock locations of warehouse A and warehouse B are children -locations of the main stock location of warehouse A + B. Go to the locations menu, and edit the main -location of your two warehouses. Then, change their parent location to main location of warehouse -A+B. + To do so, go to :menuselection:`Inventory --> Configuration --> Settings`, scroll down to the + :guilabel:`Warehouse` section, and click the checkboxes next to :guilabel:`Storage Locations` + and :guilabel:`Multi-Step Routes`. Then, :guilabel:`Save` the changes to finish. -.. image:: stock_warehouses/ware2.png - :align: center +Create and configure a virtual parent location +============================================== -Sell a product from the virtual warehouse -========================================= +Before creating any virtual stock locations, a new warehouse will need to be created. This new +warehouse will act as a *virtual* warehouse, and will be the *parent* location of other physical +warehouses. -Let's say you have two products, one stored in warehouse A and one stored in warehouse B. Now, you -can create a new quotation for one of each product. Go to other information and choose Warehouse A+B -in the shipping information. +.. spoiler:: Why a "virtual" warehouse? + + Virtual warehouses are great for companies with multiple physical warehouses. This is because + a situation might arise when one warehouse runs out of stock of a particular product, but + another warehouse still has stock on-hand. In this case, stock from these two (or more) + warehouses could be used to fulfill a single sales order. + + The "virtual" warehouse acts as a single aggregator of all the inventory stored in a company's + physical warehouses, and is used (for traceability purposes) to create a hierarchy of locations + in Odoo. + +Create a new warehouse +---------------------- + +To create a new warehouse, go to :menuselection:`Inventory --> Configuration --> Warehouses`, and +click :guilabel:`Create`. From here, the warehouse :guilabel:`Name` and :guilabel:`Short Name` can +be changed, and other warehouse details can be changed under the :guilabel:`Warehouse Configuration` +tab. + +Under the :guilabel:`Shipments` heading, set the number of steps used to process :guilabel:`Incoming +Shipments` and :guilabel:`Outgoing Shipments` by selecting between the :guilabel:`1 step`, +:guilabel:`2 steps`, and :guilabel:`3 steps` radio buttons. The desired option for +:guilabel:`Incoming Shipments` and :guilabel:`Outgoing Shipments` will depend on the warehouse's +procurement process, and might differ for individual products or product categories. + +.. seealso:: + - :doc:`How to choose the right flow to handle receipts? + ` + - :doc:`How to choose the right inventory flow to handle delivery orders? + ` + +Under the :guilabel:`Resupply` heading, configure the method(s) for how the warehouse resupplies +its inventory: + +- :guilabel:`Resupply Subcontractors`: resupply subcontractors with components from this warehouse. +- :guilabel:`Manufacture to Resupply`: when products are manufactured, they can be manufactured in + this warehouse. +- :guilabel:`Manufacture`: to produce right away, move the components to the production location + directly and start the manufacturing process; to pick first and then produce, unload the + components from the stock to input location first, and then transfer it to the production + location. +- :guilabel:`Buy to Resupply`: when products are bought, they can be delivered to this warehouse. +- :guilabel:`Resupply From`: automatically create routes to resupply this warehouse from another + chosen warehouse .. tip:: - You might find it handy to set the Warehouse A+B as the default warehouse for each sales person. - This way each sale will use the Warehouse A+B as the default warehouse option. + *Routes* can be set and configured directly from the :guilabel:`Warehouse` form, by clicking on + the :guilabel:`Routes` smart button. Once the warehouse is configured, virtual *Locations* can be + created. -.. image:: stock_warehouses/ware3.png +.. image:: stock_warehouses/stock-warehouses-create-warehouse.png :align: center + :alt: The edit screen for creating a new warehouse. -Once you have done it, you can convert it to a sales order. Then, a delivery order will be -automatically generated, with a product reserved in warehouse A and one in warehouse B. +In order to apply this virtual warehouse as the *parent* location of two *child* location +warehouses, there need to be two warehouses configured with physical stock locations. -.. image:: stock_warehouses/ware4.png +.. example:: + + | **Parent Warehouse** + | :guilabel:`Warehouse`: `Virtual Warehouse` + | :guilabel:`Location`: `VWH` + + | **Child Warehouses** + | :guilabel:`Warehouses`: `Warehouse A` and `Warehouse B` + | :guilabel:`Locations`: `WHA/Stock` and `WHB/Stock` + +Create a virtual parent location +-------------------------------- + +.. important:: + In order to take stock from multiple warehouses to fulfill a sales order, there need to be at + least **two** warehouses acting as *child locations* of the *virtual parent location* warehouse. + +To create and edit *Locations*, go to :menuselection:`Inventory --> Configuration --> Locations`. +All :guilabel:`Locations` are listed here, including the *Stock* :guilabel:`Location` of the virtual +warehouse that was created. Click into the *Stock* :guilabel:`Location` for the virtual warehouse +that was previously created (:dfn:`Warehouse Name/Stock`). + +Then, under the :guilabel:`Additional Information` section, change the :guilabel:`Location Type` +from :guilabel:`Internal Location` to :guilabel:`View`. :guilabel:`Save` the changes. + +This identifies this :guilabel:`Location` as a *virtual location*, which is used to create a +hierarchical structure for a warehouse and aggregate its *child locations*. + +.. note:: + Products can *not* be stored in a :guilabel:`View` :guilabel:`Location Type`. + +.. image:: stock_warehouses/stock-warehouses-location-types.png :align: center + :alt: Warehouse location types in location creation screen. + +Configure physical warehouse locations +====================================== + +Navigate back to the :guilabel:`Locations` overview (via the breadcrumbs), and remove any filters +in the :guilabel:`Search Bar`. Then, click into the first physical warehouse :guilabel:`Location` +that was previously created to be a *child location*, and click :guilabel:`Edit`. + +Under :guilabel:`Parent Location`, select the virtual warehouse from the drop-down menu, and +:guilabel:`Save` changes. Then, navigate back to the :guilabel:`Locations` overview, and repeat this +step for the second physical warehouse stock location. Be sure to :guilabel:`Save` changes again. + +Both locations are now *child locations* of the virtual warehouse *parent location*. This allows +stock to be taken from multiple locations to fulfill a single sales order, if there is not enough +stock in any one location (provided they are both tied to the same virtual warehouse *parent +location*). + +Example flow: Sell a product from a virtual warehouse +===================================================== + +.. note:: + To sell products from multiple warehouses using a virtual *parent* location in this flow, there + must be at least **two** products and at least **two** warehouses configured - with at least + **one** product with quantity on-hand in each warehouse, respectively. + +To create a new request for quotation, or RFQ, navigate to the :menuselection:`Sales` app, and +click :guilabel:`Create` from the :guilabel:`Quotations` overview. Fill out the information on the +new quotation by adding a :guilabel:`Customer`, and click :guilabel:`Add a product` to add the two +products stored in the two warehouses. + +Then, click the :guilabel:`Other Info` tab on the sales order form. Under the :guilabel:`Delivery` +section, change the :guilabel:`Warehouse` field value listed to the virtual warehouse that was +previously created. Once the warehouse has been changed, click :guilabel:`Confirm` to convert the +quotation into a sales order. + +Now that the quotation has been confirmed as a sales order, click the :guilabel:`Delivery` smart +button. From the warehouse delivery form, confirm that the :guilabel:`Source Location` value matches +the :guilabel:`Warehouse` field value from the sales order. Both should list the virtual warehouse +location. + +.. important:: + The :guilabel:`Source Location` on the warehouse delivery form and the :guilabel:`Warehouse` + under the :guilabel:`Other Info` tab on the sales order form *must* match in order for the + products included in the sales order to be pulled from different warehouses. + + - If the virtual warehouse is not the value in the :guilabel:`Source Location` field on the + warehouse delivery form, then click :guilabel:`Edit`, make the change, and click + :guilabel:`Save`. + - If the virtual warehouse is not the value in the :guilabel:`Warehouse` field on the sales order, + then a new quotation may need to be generated. + - If whe :guilabel:`Warehouse` field is missing on the sales order form, then the virtual + warehouse (and its children warehouses) may not have been set up correctly, in which case, + review the documentation above again to make sure all settings/configuration were done properly. + +.. image:: stock_warehouses/stock-warehouses-delivery-order.png + :align: center + :alt: Delivery order with matching source and child locations. + +Finally, on the warehouse delivery form, under the :guilabel:`Detailed Operations` tab, confirm +that the *Locations* values under the :guilabel:`From` column for each product matches to the *child +locations* that are tied to the virtual *parent location*. + +.. note:: + To view which *Locations* the products are coming from on the drop-down menus, click the + :guilabel:`internal link (arrow)` icon to expand the *Location* information. If needed, it can be + changed from here (granted there is quantity on hand for the product in that location). + +Once everything has been properly set, click :guilabel:`Validate` and then :guilabel:`Apply` to +validate the delivery. Then, navigate back to the sales order form (via the breadcrumbs), and +click :guilabel:`Create Invoice` to invoice for the sales order. + +.. tip:: + To use a virtual *parent* location as the default warehouse for sales orders, each salesperson + can have the virtual warehouse assigned to them from the drop-down menu next to + :guilabel:`Default Warehouse` on their employee form. + +.. image:: stock_warehouses/stock-warehouses-employee-form.png + :align: center + :alt: Default warehouse location on employee form. diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-create-warehouse.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-create-warehouse.png new file mode 100644 index 000000000..ecc6b6798 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-create-warehouse.png differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-delivery-order.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-delivery-order.png new file mode 100644 index 000000000..fef85be5e Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-delivery-order.png differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-employee-form.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-employee-form.png new file mode 100644 index 000000000..35c886fa8 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-employee-form.png differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-location-types.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-location-types.png new file mode 100644 index 000000000..cc3e9e792 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/stock-warehouses-location-types.png differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware1.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware1.png deleted file mode 100644 index fe6377295..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware1.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware2.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware2.png deleted file mode 100644 index 2fdbda350..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware2.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware3.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware3.png deleted file mode 100644 index af211e29d..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware3.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware4.png b/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware4.png deleted file mode 100644 index 4c5299130..000000000 Binary files a/content/applications/inventory_and_mrp/inventory/routes/concepts/stock_warehouses/ware4.png and /dev/null differ