Skip to Content
CTech Digital
  • Home
  • Odoo services
  • AI services
  • Contact us
  • 0
  • Nederlands (BE) English (UK) Français
CTech Digital
  • 0
    • Home
    • Odoo services
    • AI services
    • Contact us
  • Nederlands (BE) English (UK) Français

Odoo warehousing in the cellar

  • All Blogs
  • Daily blog
  • Odoo warehousing in the cellar
  • 16 October 2025 by
    CTech Metrology, Luc Wens

    Intro

    The plan is to clean up the cellar and use Odoo's inventory and warehousing for this as an exercise.

    We want to put everything into boxes, both things that we can sell as things that we use: tools and skrews.

    Each box will get a bar-code and a location-code so that we can use the mobile phone Odoo bar scanner app to add/remove things that are sold, like K600 markers etc.

    It is a nice project and it will finally put some order to the "MotoKot"

    So we hope to go from this

    to this

    Creating the locations

    We have:

    • 2 places
    • each place has a number of racks
    • each rack has a number of shelves
    • each shelf can hold a number of boxes

    Stuff will go inside these boxes, so we want to be able to find 'stuff' back by search operation and getting a location of the box.

    ChatGPT conversation

    https://chatgpt.com/share/68f0df0e-1b64-800b-a313-d17974f6f6fc


    Setting up the warehouse

    First we need to activate the warehouse functions

    Enable:

    • Inventory->Warehouse -> Storage Locations
    • Possibly enabel serial numbers Inventory->Traceability->Lots&Serial number

    Creating the locations

    We use our own MCP server connected to the https://edu-ctech.odoo.com database.

    In claude desktop we gave the next prompt

    using the Odoo MCP server , create the next warehouse locations: 
    * there are 2 rooms : Garage and MotoKot
    * each room has 3 racks
    * each rack has 4 shelves
    * on each shelf there are 5 boxes
    Create all warehouse locations using this hierarchie. If you find the functionality in the MCP to be insufficient, then give me a prompt that I can use to extend the MCP API tools based on what is available here : https://edu-ctech.odoo.com/doc

    Here is a transcript of the execution, interesting to see.


    warehouse transcript.txt

    The current state of the MCP server was sufficient to execute this task, although I needed to restart Claude once as it had tripped.

    Creating Barcodes

    i tried the same approach to create barcodes based on the combined parent-box names.

    So the box with the full path 

    WH/Stock/Garage/Rack 1/Shelf 1/Box 4

    Would have as barcode text

    GAR-R1-S1-B4

    The MCP worked for about 64 boxes, not for all 120.

    So we take another approach

    Using studio to place a button in the list view

    I the list view we start Studio and add a button "Generate Barcode"

    Set the label and set for "What should the button do" take "Run a server Action"

    Then create a new Action that executes code

    Claude helped us with the python stuff

    # Generate barcodes for stock locations based on hierarchy
    # Format: ROOM-R{rack}-S{shelf}-B{box}

    for record in records:
    # Only process if barcode is empty and name contains "Box"
    if not record.barcode and "Box" in record.name:
    # Extract box number from name (e.g., "Box 1" -> "1")
    box_num = record.name.replace("Box ", "").strip()
    # Navigate up the hierarchy
    shelf = record.location_id # Parent is shelf
    rack = shelf.location_id if shelf else False # Grandparent is rack
    room = rack.location_id if rack else False # Great-grandparent is room
    # Verify we have the complete hierarchy
    if shelf and rack and room:
    # Extract numbers from parent names
    shelf_num = shelf.name.replace("Shelf ", "").strip()
    rack_num = rack.name.replace("Rack ", "").strip()
    room_name = room.name.strip()
    # Determine room code
    if "Garage" in room_name:
    room_code = "GAR"
    elif "MotoKot" in room_name:
    room_code = "MOT"
    else:
    room_code = "ROOM" # Fallback for unknown rooms
    # Generate barcode in format: ROOM-R#-S#-B#
    barcode = f"{room_code}-R{rack_num}-S{shelf_num}-B{box_num}"
    # Set the barcode using write() method
    record.write({'barcode': barcode})

    Then go back to the list view button and select this action.

    Then we can close studio and in the list view select all the locations filtered down with "/Box" and click the "Generate Barcode" button.


    Printing barcodes

    In listview you can select with a filter Barcode isset to select all items with barcodes and then print. This will generate PDF's with labels in 4 columns 7 rows.

    Here is an example


    Location Barcode.pdf

    The label sizes are 52mm x 40mm (2"x1.5")

    These guys in Ireland provide custom labels

    https://secure.uk.onlinelabels.com/Support/SupportRequest.aspx?Completed=SYz8CaCP5HvJFtlT9Hug8Q%3d%3d



    Finding racks and boxes

    A task delegated to ChatGPT : 

    https://chatgpt.com/share/68f0df0e-1b64-800b-a313-d17974f6f6fc

    In motokot I have one wall where I can place a new rack.

    The available space is 300 cm wide, 70 cm deep.

    Here is the proposed stuff:


    Rek(ken) – 60 cm diep, ±100 cm breed

    • Brico – Practo Heavy Duty Power MP18010060.5 (180×100×60 cm, 5 legborden, 260 kg/legbord) — EAN 5414045042713. Brico

    • GAMMA – Handson stellingkast met werkbank (180×100×60 cm, gegalvaniseerd) — alternatief met midden-legbord/werkblad. Gamma

    • GAMMA – Rek Heavy Duty 860 (±180×101×60 cm) — vergelijkbare maat/draagkracht. Gamma

      (Eventueel ook: Heavy Duty 848 (200×100×50 cm) als 50 cm diepte gewenst/benodigd is.) Gamma

    Kartonnen dozen – 60×40-voetafdruk (past ideaal 2 per legbord)

    • Brico – Pack And Move verhuisdozen 60×40×30 cm (pak van 40, dubbelwandig, met handgrepen) — EAN 3700377355945. Brico

      (Als je meer hoogte wil: bij Brico bestaat ook 60×50×40 cm maar dat gebruikt de 60 cm rekdiepte volledig en is minder efficiënt in de breedte.) Brico

    Aantal te bestellen (op basis van je rekconfiguratie)

    • 2 rekken (zoals in de aangepaste render, links oplopend en rechts ruimte voor zeilmateriaal):

      • Dozen per legbord: 2 (60 cm diep × 40 cm breed)

      • 5 legborden × 2 rekken = 20 dozen → bestel minstens 20 (praktisch: pak van 40 bij Brico).

    • 3 rekken (wand van 300 cm volledig benutten):

      • 5 legborden × 3 rekken = 30 dozen → bestel 30 (praktisch: pak van 40 bij Brico).

    Samengevat besteladvies:

    Rek(ken): 2–3× Practo Heavy Duty Power 180×100×60 cm (of GAMMA-alternatief boven).

    Dozen: 20–30× kartonnen doos 60×40×30 cm (Brico Pack And Move).

    ChatGPT

    As the Brico webshop sucks big time, I bought these


    in Daily blog
    # Odoo
    Multi-branding
    Copyright © CTech
    Nederlands (BE) | English (UK) | Français
    Powered by Odoo - The #1 Open Source eCommerce