Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,195 +7,141 @@ Basic subcontracting
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`

In manufacturing, subcontracting is the process of a company engaging a third-party manufacturer, or
subcontractor, to manufacture products that are then sold by the contracting company.
In basic subcontracting, a company's product is produced entirely by a subcontractor. The product is
first purchased from the subcontractor, who acquires their own components, manufactures the final
product, then delivers the final product to the contracting company's warehouse.

In basic subcontracting, the subcontractor is responsible for acquiring the necessary components.
This means that the contracting company only has to worry about what happens to subcontracted
products once they are produced.

The workflow for purchasing a product manufactured using basic subcontracting is similar to the one
used when purchasing a non-subcontracted product from a vendor. The main differences are the way
that subcontracted products are configured, and the fact that subcontracted products take longer to
be sent from the vendor, since they must first be manufactured by them.
The following documentation covers how to configure a subcontracted product and trigger the
subcontracting process.

Configuration
=============

To use subcontracting in Odoo, navigate to :menuselection:`Manufacturing app --> Configuration -->
Settings`, and tick the checkbox next to the :guilabel:`Subcontracting` setting, under the
:guilabel:`Operations` heading. Then, click :guilabel:`Save`.
To use subcontracting, contractors must first configure products with a :ref:`vendor pricelist
<purchase/products/pricelist>` as well as a subcontracting-type |BoM|.

Once the :guilabel:`Subcontracting` setting is enabled, it is also necessary to properly configure
the subcontracted product, and the product's |BoM|.
The pricelist allows the contracting company to purchase the product from the vendor (subcontractor)
through a |PO|, while the |BoM| allows the product to be manufactured externally by the
subcontractor.

.. _manufacturing/workflows/subcontracting_basic/product-config:

Configure product
-----------------
Configure product vendor
------------------------

To configure a product for basic subcontracting, navigate to :menuselection:`Inventory app -->
Products --> Products`, and select a product, or create a new one by clicking :guilabel:`New`.
To configure a product's vendor for basic subcontracting, navigate to :menuselection:`Inventory app
--> Products --> Products`. Then, select a product or create a new one.

On the product form, select the :guilabel:`Purchase` tab, and add the product's subcontractor as a
vendor by clicking :guilabel:`Add a line`, selecting the subcontractor in the :guilabel:`Vendor`
drop-down menu, and entering a price in the :guilabel:`Price` field.
On the product form, click the :guilabel:`Purchase` tab and add the product's subcontractor as a
vendor by clicking :guilabel:`Add a line`. Select the subcontractor in the :guilabel:`Vendor`
drop-down menu.

Then, click on the :guilabel:`Inventory` tab, and use the :guilabel:`Routes` field to configure a
route that determines what happens to the finished product once it has been manufactured by the
subcontractor.
Then, enter the price of the product in the :guilabel:`Price` field.

If the finished product is shipped back to the contracting company, make sure the :guilabel:`Buy`
route is selected. In addition, select the :guilabel:`Replenish on Order (MTO)` route to
automatically create a |PO| for the product upon confirmation of a sales order (SO), unless there is
enough stock on-hand to fulfill the |SO|.
Finally, set a :doc:`lead time <../../inventory/warehouses_storage/replenishment/lead_times>` for
the product in the :guilabel:`Delivery Lead Time` field to specify the number of days for the
subcontractor to produce and deliver the final product.

If the finished product is shipped directly to the customer by the subcontractor, make sure that
**only** the :guilabel:`Dropship` route is selected.
.. note::
Since contractors are only responsible for purchasing and receiving the final product, they do
not need to additionally configure manufacturing lead times on a |BoM|. Instead, provide only a
single *Delivery Lead Time* on the vendor pricelist that factors in both the subcontractor's
manufacturing and delivery time.

.. _manufacturing/workflows/subcontracting_basic/bom-config:

Configure BoM
-------------

To configure a |BoM| for basic subcontracting, click the :guilabel:`Bill of Materials` smart button
on the product form, and select the desired |BoM|.
After specifying the vendor, configure a subcontracting-type |BoM| for the product. Click the
:guilabel:`Bill of Materials` smart button on the product form. Then, select the desired |BoM| or
create a new one.

Alternatively, navigate to :menuselection:`Manufacturing app --> Products --> Bills of Materials`,
and select the |BoM| for the subcontracted product.
.. tip::
Alternatively, navigate to :menuselection:`Manufacturing app --> Products --> Bills of
Materials`, and select the |BoM| for the subcontracted product.

.. seealso::
For a full overview of |BoM| configuration, see the :doc:`Bill of materials
<../basic_setup/bill_configuration>` documentation.
In the :guilabel:`BoM Type` field, select :guilabel:`Subcontracting`. In the resulting
:guilabel:`Subcontractors` field, add one or more subcontractors.

In the :guilabel:`BoM Type` field, select the :guilabel:`Subcontracting` option. Then, add one or
more subcontractors in the :guilabel:`Subcontractors` field that appears below.
Because the components and manufacturing are both handled by the subcontractor, there is no need to
list any components in the :guilabel:`Components` tab of the |BoM|.

.. image:: subcontracting_basic/bom-type.png
:align: center
:alt: The "BoM Type" field on a BoM, configured to manufacture the product using subcontracting.
.. image:: subcontracting_basic/basic-sbc-bom.png
:alt: Bill of Materials configuration for subcontracting in Odoo.

Finally, click on the :guilabel:`Miscellaneous` tab. In the :guilabel:`Manuf. Lead Time` field,
enter the number of days it takes the subcontractor to manufacture the product. This number is
factored in when calculating the product's expected arrival date.

.. note::
When using basic subcontracting, there is no need to list components in the
:guilabel:`Components` tab of the |BoM|, since the components required for manufacturing, and the
means by which they are acquired, are handled by the subcontractor.
.. _subcontracting_basic/workflow:

Basic subcontracting workflow
=============================

The basic subcontracting workflow consists of up to four steps:

#. Create a sales order (SO) for the subcontracted product; doing so creates a |PO| to purchase the
product from the subcontractor.
#. Confirm the |PO| created in the previous step, or create a new |PO|; doing so creates a receipt
order or a dropship order.
#. Process the receipt once the subcontractor has finished manufacturing the subcontracted product,
and shipped it back to the contracting company, **OR** process the dropship order to ship the
product directly to the customer.
#. If the workflow was started by creating an |SO|, and the finished product is not dropshipped to
the end customer, process the delivery order once the product is shipped to the customer.

The specific number of steps depends on the reason that the subcontracted product is being purchased
from the subcontractor.

If the reason is to fulfill a specific customer order, the process starts with creating an |SO|, and
ends with delivering the product to the customer, or having the subcontractor dropship it to them.

If the reason is to increase the quantity of stock on-hand, the process starts with creating a |PO|,
and ends with receiving the product into inventory.
.. image:: subcontracting_basic/subcontracting-flow.png
:alt: Basic subcontracting workflow diagram in Odoo.

Create SO
---------
The basic subcontracting workflow begins by :ref:`creating a PO
<subcontracting_basic/workflow/create_po>` to purchase the product from the subcontractor (1).

It is only necessary to complete this step if the product is being purchased from the subcontractor
to fulfill a customer need. If the product is being purchased to increase the quantity of stock
on-hand, move on to the next step.
The contractor (YourCompany) then confirms the |PO|, which creates a receipt to transfer the final product
(2). The subcontractor manufactures the product and delivers it back to the contractor when done.

To create a new |SO|, navigate to :menuselection:`Sales app --> Orders --> Orders`, and click
:guilabel:`New`.
Once the product has been produced and received, the contractor :ref:`validates the receipt
<subcontracting_basic/workflow/validate_receipt>` (5) to trigger :ref:`inventory moves
<subcontracting_basic/workflow/track-inventory>` from the subcontractor to the company's stock (3,
4).

Select the customer in the :guilabel:`Customer` drop-down menu. Then, click :guilabel:`Add a
product` on the :guilabel:`Order Lines` tab, select a subcontracted product in the
:guilabel:`Product` drop-down menu, and enter a quantity in the :guilabel:`Quantity` field.
.. _subcontracting_basic/workflow/create_po:

Click :guilabel:`Confirm` to confirm the |SO|, at which point a :guilabel:`Purchase` smart button
appears at the top of the page. This opens the |PO| created to purchase the subcontracted product
from the subcontractor.
Create and confirm PO
---------------------

.. note::
An |SO| for the product only creates a |PO| if the *Replenish on Order (MTO)* route is enabled on
the product's form, **and** there is not enough stock of the product on-hand to fulfill the |SO|.

If there is enough stock on-hand, confirming an |SO| for the product creates a delivery order
instead, because Odoo assumes that the |SO| is fulfilled using the stock in the warehouse.

This is not the case for subcontracted products that are dropshipped to the end customer. In that
case, a |PO| is **always** created, even if there is enough stock on-hand.

Process PO
----------

If a |PO| was created in the previous step, navigate to it by clicking the :guilabel:`Purchase`
smart button at the top of the |SO|, or by going to :guilabel:`Purchase app --> Orders --> Purchase
Orders`, and selecting the |PO|. Then, click :guilabel:`Confirm Order` to confirm it, and move on to
the next step.

If a |PO| was not created in the previous step, do so now by navigating to :menuselection:`Purchase
app --> Orders --> Purchase Orders`, and clicking :guilabel:`New`.
To create a |PO| for the subcontracted product, navigate to :menuselection:`Purchase app --> Orders
--> Purchase Orders`, and click :guilabel:`New`.

Begin filling out the |PO| by selecting a subcontractor from the :guilabel:`Vendor` drop-down menu.
In the :guilabel:`Products` tab, click :guilabel:`Add a product` to create a new product line.
Select a subcontracted product in the :guilabel:`Product` field, and enter the quantity in the
:guilabel:`Quantity` field. Finally, click :guilabel:`Confirm Order` to confirm the |PO|.
Select the subcontracted product in the :guilabel:`Product` field, and enter the quantity in the
:guilabel:`Quantity` field.

When a |PO| is confirmed for a product manufactured using basic subcontracting, a receipt or
dropship order is automatically created, and can be accessed from the corresponding
:guilabel:`Receipt` or :guilabel:`Dropship` smart button that appears at the top of the |PO|.
After adding the product, the :guilabel:`Expected Arrival` field is updated with the finished
product's expected delivery date, as configured earlier with the vendor's *Delivery Lead Time*.

.. figure:: subcontracting_basic/subcontractor-po.png
:align: center
:alt: A PO for a basic subcontracting product, with a Receipt smart button at the top of the page.
Finally, click :guilabel:`Confirm Order` to confirm the |PO|. A receipt is automatically created,
and a :guilabel:`Receipt` smart button appears at the top of the form.

PO for a basic subcontracting product, with a Receipt smart button at the top of the page.

Process receipt or dropship order
---------------------------------

Once the subcontractor has finished manufacturing the product, they either ship it to the
contracting company, or dropship it to the end customer, depending on how the product was
:ref:`configured <manufacturing/workflows/subcontracting_basic/product-config>`.
.. _subcontracting_basic/workflow/validate_receipt:

Process receipt
~~~~~~~~~~~~~~~
---------------

If the subcontractor ships the finished product to the contracting company, once it has been
received, navigate to :menuselection:`Purchase app --> Orders --> Purchase Orders`, and select the
|PO|.
After the order is confirmed, the subcontractor manufactures the product and delivers the finished
good back to the contracting company.

Click the :guilabel:`Receive Products` button at the top of the |PO|, or the :guilabel:`Receipt`
smart button at the top of the page, to open the receipt. Then, click :guilabel:`Validate` at the
top of the receipt to enter the product into inventory.
To receive the finished product from the subcontractor, click the :guilabel:`Receive Products`
button on the |PO|, or click the :guilabel:`Receipt` smart button at the top of the page. Then,
click :guilabel:`Validate` to enter the incoming shipment into inventory.

Process dropship order
~~~~~~~~~~~~~~~~~~~~~~
.. note::
If :doc:`multi-step inventory flows <../../inventory/shipping_receiving/daily_operations>` are
enabled, additional transfers must be validated to enter the incoming product into stock.

If the subcontractor dropships the product, once they have sent it, navigate to
:menuselection:`Purchase app --> Orders --> Purchase Orders`, and select the |PO|.
.. _subcontracting_basic/workflow/track-inventory:

Select the :guilabel:`Dropship` smart button at the top of the page to open the dropship order, and
click :guilabel:`Validate` at the top of the order to confirm that the product has been sent to the
customer.
Track inventory moves
---------------------

Process delivery order
----------------------
After validating a receipt, Odoo automatically generates inventory moves to track the movement of
subcontracted products between locations. To view these inventory moves, navigate to
:menuselection:`Inventory app --> Reporting --> Moves History`.

If the subcontracting workflow was started by a customer |SO|, and the finished product was **not**
dropshipped to the customer, but rather delivered to the contracting company, it is necessary to
ship the product to the customer, and process the delivery order.
To track inventory movement in subcontracting, Odoo sends any product components to a dedicated
*Subcontracting Location*. A :ref:`virtual location <inventory/warehouses_storage/location-type>`
called *Production* then consumes the components and produces the finished good. Once produced, the
good then moves back to the *Subcontracting Location* before finally entering the contractor's stock
when the receipt is validated.

Once the product has been shipped to the customer, navigate to the :menuselection:`Sales` app, and
select the |SO|. Select the :guilabel:`Delivery` smart button at the top of the page to open the
delivery order, and click :guilabel:`Validate` on the order to confirm that the product has been
shipped.
.. image:: subcontracting_basic/basic-sbc-moves.png
:alt: Moves History page to see subcontracting moves in Odoo.

.. note::
Because no components are sent in basic subcontracting, there is no movement from the
*Subcontracting Location* to the *Production* location.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.