Skip to content

Odoo 18 Incoming Shipments

Odoo 18 Incoming Shipments

1, 2 & 3-Step Guide

Odoo 18 incoming shipments streamline your warehouse work. In this tutorial, you will learn how to set up and use one-step, two-step, and three-step receiving processes. First, you will see how to enable each route. Next, you will follow clear UI steps. Then, you will discover Python and XML code snippets to automate critical tasks. Finally, you will troubleshoot common issues and apply best practices.


Prerequisites

Before you start working with Odoo 18 incoming shipments, make sure you meet these requirements.

System Requirements

  • Odoo 18 CE/EE: Install Odoo 18 on a supported server.
  • PostgreSQL: Version 13 or later.
  • Python: Version 3.8 or higher.

User Permissions

First, ensure your user has the following access rights:

  1. Inventory Manager: Allows you to configure routes and operations.
  2. Warehouse Manager: Lets you adjust locations and picking types.
  3. Technical Features: Activates developer mode for code and record edits.

Enabling Developer Mode

Next, enable developer mode to access advanced settings:

  1. Go to Settings > General Settings.
  2. Scroll down and click Activate the developer mode.
  3. Confirm by clicking Reload.

Understanding Receiving Methods in Odoo 18

In Odoo 18 incoming shipments, you can choose from three methods. Each method balances speed, control, and quality checks.

One-Step Receiving (Direct)

  • Definition: Moves products directly from vendor location to stock.
  • Use Case: Ideal for small items or fast-moving goods.
  • Benefit: Minimizes steps and reduces manual work.

Two-Step Receiving (Push & Pull)

  • Definition: Moves goods first to an intermediate location, then to stock.
  • Use Case: Useful when you need staging or quality checks.
  • Benefit: Offers a buffer point for inspection.

Three-Step Receiving (Receive → Quality → Stock)

  • Definition: Includes a quality control step between receipt and stock.
  • Use Case: Required for regulated or delicate items.
  • Benefit: Ensures highest level of inspection.

Configuring Receiving Methods

You must configure warehouse routes and picking types to control Odoo 18 incoming shipments.

Accessing Inventory Settings

  1. Go to Inventory > Configuration > Settings.
  2. Under Warehouse, enable Multi-Step Routes.
  3. Click Save.

Enabling Multi-Step Routes

After you activate developer mode, do the following:

Activate “Multi-Step Routes”

  1. In Inventory > Configuration > Settings.
  2. Tick Multi-Step Routes.
  3. Press Save.

Configure “Receipt” Picking Type

Next, adjust the default receipt type:

  1. Go to Inventory > Configuration > Operations > Picking Types.
  2. Find Receipts / Incoming Shipments.
  3. Click Edit.
  • Operation Type: Set to One Step, Two Steps, or Three Steps.
  • Default Source Location: Vendor Location.
  • Default Destination Location: Stock Location.
  • Sequence: Set priority for routing.

One-Step Receiving Process

First, you will configure and execute a one-step receipt in Odoo 18 incoming shipments.

Step-by-Step UI Guide

  1. Navigate to Inventory > Operations > Transfers.
  2. Click Create.
  3. Choose Receipt type.
  4. Select Vendor and Products.
  5. Click Mark as Todo.
  6. Then click Validate.

By doing this, you move goods directly into stock.

Code Example for Automation

Moreover, you can automate one-step receipts with server-side code. Use this Python snippet:

from odoo import api, models

class StockPicking(models.Model):
    _inherit = 'stock.picking'

    @api.model
    def auto_receive_one_step(self, purchase_order_id):
        order = self.env['purchase.order'].browse(purchase_order_id)
        pickings = order.picking_ids.filtered(
            lambda p: p.picking_type_code == 'incoming'
        )
        for picking in pickings:
            picking.action_confirm()
            picking.action_assign()
            for move in picking.move_line_ids:
                move.qty_done = move.product_uom_qty
            picking.button_validate()
        return True
  • First, the method finds relevant pickings.
  • Next, it confirms and assigns them automatically.
  • Then, it sets qty_done equal to the ordered qty.
  • Finally, it validates the receipt.

This code ensures every incoming shipment processes in one step.


Two-Step Receiving Process

Now, let’s set up two-step receiving and process it in Odoo 18 incoming shipments.

Step-by-Step UI Guide

  1. Go to Inventory > Configuration > Operations > Picking Types.
  2. Edit Receipts / Incoming Shipments.
  3. Set Operation Type to Two Steps.
  4. Click Save.
  5. To receive, create a new transfer under Inventory > Operations > Transfers.
  6. Click Validate on the first move to pull goods into a staging location.
  7. Then click Transfer to push goods to stock.

Code Example for Two-Step Automation

You can automate the two-step flow with this Python snippet:

from odoo import api, models

class StockPicking(models.Model):
    _inherit = 'stock.picking'

    @api.model
    def auto_receive_two_step(self, purchase_order_id):
        pickings = self.env['stock.picking'].search([
            ('origin', '=', purchase_order_id),
            ('picking_type_code', '=', 'incoming')
        ])
        for picking in pickings:
            picking.action_confirm()
            picking.action_assign()
            # First step: Receive into staging
            for move in picking.move_line_ids:
                move.qty_done = move.product_uom_qty
            picking.button_validate()
            # Second step: Push to stock
            picking.action_assign()
            picking.button_validate()
        return True

Here, you first fill the staging location, then move goods into stock. This method gives you extra control.


Three-Step Receiving Process

After you master one and two-step flows, you can use a three-step process.

Step-by-Step UI Guide

  1. Under Inventory > Configuration > Operations > Picking Types, edit Receipts / Incoming Shipments.
  2. Choose Three Steps.
  3. Click Save.
  4. Create a new transfer with your purchase order.
  5. Click Validate to receive goods.
  6. Click Quality Check to inspect items.
  7. Then click Transfer to move to final stock.

Field-Level Configuration

You can fine-tune each step:

  • Quality Control: Enable or disable under the picking type.
  • Control Lots: Turn on lot creation or tracking for serial products.
  • Backorder Handling: Decide automatically or manually.

Code Example for Three-Step Automation

Use this snippet to automate quality checks:

from odoo import api, models

class StockPicking(models.Model):
    _inherit = 'stock.picking'

    @api.model
    def auto_receive_three_step(self, purchase_order_id):
        pickings = self.env['stock.picking'].search([
            ('origin', '=', purchase_order_id),
            ('picking_type_code', '=', 'incoming')
        ])
        for picking in pickings:
            # Step 1: Receive
            picking.action_confirm()
            picking.action_assign()
            for move in picking.move_line_ids:
                move.qty_done = move.product_uom_qty
            picking.button_validate()
            # Step 2: Quality
            qc_wizard = self.env['stock.move.line.qty_done'].create({
                'picking_id': picking.id,
                'quantity_done': sum(m.product_uom_qty for m in picking.move_line_ids),
            })
            qc_wizard.process()
            # Step 3: Transfer to stock
            picking.action_assign()
            picking.button_validate()
        return True

This code ensures each step completes in sequence without manual clicks.


Automating with Custom Code

In addition to the above, you can customize Odoo’s XML records to define default behaviors.

XML Record to Configure Picking Type

<odoo>
  <record id="stock.picking_type_in" model="stock.picking.type">
    <field name="name">Incoming Shipments</field>
    <field name="code">incoming</field>
    <field name="sequence">5</field>
    <field name="warehouse_id" ref="stock.warehouse0"/>
    <field name="default_location_src_id" ref="stock.stock_location_suppliers"/>
    <field name="default_location_dest_id" ref="stock.stock_location_stock"/>
    <field name="operation_type">three_steps</field>
    <field name="use_create_lots">True</field>
    <field name="use_existing_lots">True</field>
  </record>
</odoo>
  • First, this record updates the incoming shipment route.
  • Next, it sets operation_type to three_steps.
  • Then, it ensures lots track properly.

Troubleshooting Common Issues

Even with clear setup, you may face problems with Odoo 18 incoming shipments. Here is how to fix them.

Stock Location Not Updated

  1. Issue: Goods stay in vendor location after validation.
  2. Solution: Confirm that the destination location is correct in the picking type.
  3. Tip: Inspect XML or UI record for default_location_dest_id.

Quantities Not Reserved

  1. Issue: Reservation fails during two or three-step.
  2. Solution: Enable Reservation in Settings > Warehouse.
  3. Tip: Use Force Availability on the picking screen.

Access Rights Errors

  1. Issue: “Access Denied” on validate.
  2. Solution: Grant your user the Inventory Manager role.
  3. Tip: Check record rules under Settings > Technical > Security.

Best Practices for Odoo 18 Incoming Shipments

Finally, apply these best practices to keep your processes smooth.

Naming Conventions

  • Pickings: Use clear labels like IN/2025/001.
  • Locations: Prefix staging areas with STG_.
  • Lots: Follow date + vendor code for lot names.

Maintain Clear Routes

First, keep routes simple. Next, group similar products under one route. Then, audit routes quarterly.

Regular Audits

  • Monthly: Check unprocessed pickings.
  • Quarterly: Review stock valuation.
  • Yearly: Archive old routes to keep the UI clean.

Additional Resources

For more in-depth information, visit the official Odoo 18 Documentation. Moreover, you can explore community forums on Odoo Community for peer advice.


Conclusion

By following this tutorial, you now know how to configure and run Odoo 18 incoming shipments in one, two, or three steps. You also saw Python and XML code to automate each method. Furthermore, you learned how to troubleshoot key issues and adopt best practices. Therefore, you can implement an efficient and robust receiving process in your warehouse. Happy integrating!


Discover more from teguhteja.id

Subscribe to get the latest posts sent to your email.

Leave a Reply

WP Twitter Auto Publish Powered By : XYZScripts.com