⚙ DRKDS Manufacturing Core

Foundation layer — Shopfloor Stations & Barcode Operations for small manufacturers (5–20 employees). Lightweight, zero external dependencies, production-ready on Odoo 19 Community.

Module: drkds_mfg_core
Version: 1.0.0
Odoo: 19 Community
License: LGPL-3
4
Core Models
2
Security Groups
6
Station Types
4
Barcode Op Types
📖 Introduction

DRKDS Manufacturing Core (drkds_mfg_core) is the foundation module of the DRKDS manufacturing suite. It introduces two primary capabilities to Odoo 19's manufacturing environment:

  • Shopfloor Station Management — Define physical workstations, assign operators, track real-time availability (available / busy / maintenance / offline), and display a live dashboard.
  • Configurable Barcode Operations — Create named scan operations (Receipt, Delivery, Internal, Manufacturing) without coding. A simple wizard allows warehouse or shopfloor staff to scan products and auto-validate transfers.

The module is designed for small manufacturers with 5–20 employees who need lightweight shopfloor visibility without the complexity of a full MES system. It installs in under 2 seconds and adds zero performance overhead to existing manufacturing workflows.

Foundation for the DRKDS Mfg Suite This module is a required dependency for drkds_mfg_pro, drkds_mfg_advanced, and drkds_mfg_compliance. Install this first before any other DRKDS manufacturing modules.
Key Features
🏭
Shopfloor Station Master Define physical stations with types, colors, capacity, barcode, and linked workcenter.
📊
Live Shopfloor Dashboard OWL-powered Kanban dashboard showing all station states in real time.
📦
Configurable Barcode Ops Configure named scan operations per picking type with auto-validate and lot/serial support.
🔍
Barcode Scan Wizard Simple transient wizard — select operation, scan barcode, enter qty, confirm.
🔗
MO Station Assignment Link Manufacturing Orders to a specific shopfloor station with operator notes.
📋
Product Shopfloor Instructions Store per-product HTML instructions and default station assignment on product template.
🎨
Color-coded Station Types Assign colors to station types (Assembly, Welding, Machining, Quality, Testing, Packaging).
Settings Toggles Enable/disable Barcode Operations and Shopfloor Dashboard independently via Settings.
🔗 Dependencies

The module declares the following dependencies in __manifest__.py:

Module Dependency Graph
📦 stock
🏗 mrp
📷 barcodes
🌐 web
✉ mail
🚚 delivery
⚙ drkds_mfg_core (THIS MODULE)
🔧 drkds_mfg_pro
🚀 drkds_mfg_advanced
📜 drkds_mfg_compliance
Odoo 19 core modules (amber) → drkds_mfg_core (blue) → downstream DRKDS modules (green)
DependencyPurposeType
stockInventory management, picking types, stock locations, lot/serial trackingOdoo Core
mrpManufacturing orders, workcenters — station links to mrp.workcenterOdoo Core
barcodesBarcode field support, GS1 parsing utilitiesOdoo Core
webOWL framework for Shopfloor Dashboard client actionOdoo Core
mailChatter / activity support on station and operation recordsOdoo Core
deliveryCarrier/delivery method integration for delivery barcode operationsOdoo Core
Installation
Pre-requisite Ensure drkds_addons is listed in addons_path in /home/odoo19/odoo.conf before installing.
Install on a new database
/home/odoo19/odoo-venv/bin/python3 /home/odoo19/odoo/odoo-bin \
  --config /home/odoo19/odoo.conf \
  --database mfg_test \
  --init drkds_mfg_core \
  --stop-after-init
Update existing installation
/home/odoo19/odoo-venv/bin/python3 /home/odoo19/odoo/odoo-bin \
  --config /home/odoo19/odoo.conf \
  --database mfg_test \
  --update drkds_mfg_core \
  --stop-after-init
Expected output Successful install prints Modules loaded with zero ERROR or WARNING lines. Load time is typically under 2 seconds. Six default station types are auto-created via data/station_type_data.xml.
Verify installation

After install, navigate to Manufacturing → Shopfloor → Station Types. You should see 6 pre-loaded types: Assembly, Welding, Machining, Quality, Testing, Packaging.

🔐 Security & Groups

The module defines two security groups within the Manufacturing privilege category:

🔵 Operator

drkds_mfg_core.group_mfg_operator

Assigned to shopfloor workers who perform manufacturing tasks. Has read access to station master data and can operate the barcode scan wizard.

  • View shopfloor dashboard
  • Use barcode scan wizard
  • View station list
  • Read station types

🟢 Manager

drkds_mfg_core.group_mfg_manager

Assigned to production supervisors and managers. Full create/write/delete access to all module records.

  • Create / edit stations & types
  • Configure barcode operations
  • Change station states
  • Access all settings
Group Hierarchy group_mfg_manager implies group_mfg_operator, so managers have all operator permissions automatically. Assign roles via Settings → Users & Companies → Users.
Settings

Navigate to Manufacturing → Configuration → Settings to access module toggles.

Setting FieldLabelDefaultEffect when Enabled
group_mfg_core_barcode Enable Barcode Operations ON Shows Barcode Operations menu. Enables scan wizard and operation config views.
group_mfg_core_shopfloor Enable Shopfloor Dashboard ON Shows Shopfloor menu with Dashboard, Stations, and Station Types.
Implied group convention Both settings use implied_group= and their field names start with group_ — this is required for Odoo 19 to process the implied group assignment. Fields without the group_ prefix are silently ignored by the settings framework.
🏷 Station Types

Station types are master records that categorize physical stations. They provide color-coding and grouping for the shopfloor dashboard.

Default Station Types
NameCodeColorTypical Use
AssemblyASSMBlueFinal assembly, sub-assembly, kit building
WeldingWELDRedMIG/TIG welding, spot welding booths
MachiningMACHPurpleCNC, lathe, milling operations
QualityQCGreenInspection, measurement, QC checks
TestingTESTAmberFunctional testing, burn-in, calibration
PackagingPACKGrayFinal packing, labelling, shrink-wrap
Adding custom station types Go to Manufacturing → Shopfloor → Station Types → New. Enter a name, a short code (used in reports), and pick a color. Custom types appear immediately in the station form dropdown.
🏭 Shopfloor Stations

Shopfloor stations represent the physical workstations on the factory floor. Each station has a real-time state and can be linked to an Odoo workcenter for production scheduling.

Station States
Available
Busy
Maintenance
Offline
StateMeaningAllowed Transitions
availableStation is idle and ready to accept work→ busy, → maintenance, → offline
busyStation is actively processing a manufacturing order→ available, → maintenance
maintenanceStation is under repair or scheduled maintenance→ available, → offline
offlineStation is powered down or decommissioned→ available
Station Form Fields
drkds.shopfloor.station — All Fields 10
FieldTypeRequiredDescription
nameCharStation display name, e.g. Assembly-01
codeCharShort code used in barcode generation and reports, e.g. A01
station_type_idMany2oneLink to drkds.station.type. Drives color and grouping on dashboard.
workcenter_idMany2oneLinks to mrp.workcenter for capacity planning integration.
current_operator_idMany2oneCurrently assigned res.users. Updated when operator scans in.
stateSelectionReal-time status: available / busy / maintenance / offline
barcodeCharUnique barcode for station identification. Scanned during operator check-in.
location_idMany2oneStock location (stock.location) associated with this station.
shopfloor_instructionsHtmlRich-text instructions displayed to operators on the dashboard for this station.
capacityIntegerMaximum number of simultaneous jobs this station can handle.
notesTextInternal notes for managers. Not shown on shopfloor dashboard.
📷 Barcode Operations

Barcode Operations allow non-technical users to configure scan workflows without writing code. Each operation maps a scan action to a stock picking type and controls behavior like auto-validation and lot tracking.

Operation Types
operation_typeTypical UseExample Picking Type
receiptGoods received from supplierReceipts (WH/IN)
deliveryShipment to customerDelivery Orders (WH/OUT)
internalStock transfer between locationsInternal Transfers (WH/INT)
manufacturingComponent issue to MO / finished goods receiptManufacturing (WH/MO)
Barcode Operation Fields
drkds.barcode.operation — All Fields 8
FieldTypeDescription
nameCharOperation display name, e.g. Quick Receipt — Dock A
operation_typeSelectionreceipt / delivery / internal / manufacturing
picking_type_idMany2oneThe stock.picking.type this operation creates transfers against.
sequence_prefixCharOptional prefix override for generated transfer names.
auto_validateBooleanWhen True, transfer is immediately validated after scan — no manual confirm step.
require_lotBooleanForces lot number entry before scan is accepted. Used for FIFO/FEFO lot tracking.
require_serialBooleanForces serial number scan — one scan per unit. Use for high-value serialized items.
activeBooleanArchive/unarchive without deletion. Archived ops are hidden from scan wizard dropdown.
Barcode Scan Wizard

The scan wizard (drkds.barcode.scan.wizard) is a transient model opened via Manufacturing → Barcode Operations → Scan. It provides a minimal three-step interface:

  1. Select the barcode operation from the dropdown.
  2. Scan or type the product barcode — product and UoM auto-populate.
  3. Enter quantity (and lot/serial if required). Click Confirm to process.
drkds.barcode.scan.wizard — Fields 5
FieldTypeDescription
operation_idMany2oneThe drkds.barcode.operation to execute.
barcodeCharScanned or typed product barcode. Triggers onchange to populate product_id.
product_idMany2oneAuto-populated from barcode lookup against product.product.
qtyFloatQuantity to process. Defaults to 1.0.
lot_idMany2oneLot or serial number. Visible only when require_lot or require_serial is set on the operation.
🗄 Model Reference

Complete field reference for all models defined by drkds_mfg_core.

Model: drkds.station.type  |  Table: drkds_station_type  |  Inherits: mail.thread
Field NameField LabelTypeRequiredDescription
nameType NameCharHuman-readable type name. Must be unique.
codeCodeCharShort uppercase code (3–6 chars) for reports.
colorColorIntegerOdoo color index (0–11) for Kanban cards.
activeActiveBooleanArchive flag. Default: True.
Six records are auto-loaded via data/station_type_data.xml with noupdate="1". They will not be overwritten on module update.
Model: drkds.shopfloor.station  |  Table: drkds_shopfloor_station  |  Inherits: mail.thread, mail.activity.mixin
Field NameLabelTypeReqNotes
nameStation NameCharE.g. "Assembly-01". Shown on dashboard card header.
codeCodeCharUnique short code. Used in barcode generation.
station_type_idStation TypeMany2onedrkds.station.type
workcenter_idWorkcenterMany2onemrp.workcenter
current_operator_idCurrent OperatorMany2oneres.users
stateStateSelectionavailable/busy/maintenance/offline. Default: available.
barcodeBarcodeCharUnique. Scanned for operator check-in.
location_idStock LocationMany2onestock.location
shopfloor_instructionsInstructionsHtmlShown on dashboard. Supports images and formatting.
capacityCapacityIntegerMax simultaneous jobs. Default: 1.
notesNotesTextInternal manager notes.
activeActiveBooleanArchive flag. Default: True.
Model: drkds.barcode.operation  |  Table: drkds_barcode_operation  |  Inherits: mail.thread
Field NameLabelTypeReqNotes
nameOperation NameCharUnique operation name shown in scan wizard dropdown.
operation_typeTypeSelectionreceipt / delivery / internal / manufacturing
picking_type_idPicking TypeMany2onestock.picking.type. Transfers are created under this picking type.
sequence_prefixSequence PrefixCharOverride default transfer name prefix.
auto_validateAuto-ValidateBooleanImmediately validate on scan. Default: False.
require_lotRequire LotBooleanForce lot entry. Default: False.
require_serialRequire SerialBooleanForce serial scan. Default: False.
activeActiveBooleanArchive flag. Default: True.
Model: drkds.barcode.scan.wizard  |  Type: TransientModel  |  Inherits: (none)
TransientModel — records are auto-deleted after 24 hours. No data is permanently stored in the wizard table.
Field NameLabelTypeNotes
operation_idOperationMany2onedrkds.barcode.operation. Required.
barcodeBarcodeCharTriggers @api.onchange to populate product_id.
product_idProductMany2oneproduct.product. Auto-filled from barcode.
qtyQuantityFloatDefault: 1.0. Must be > 0.
lot_idLot / SerialMany2onestock.lot. Visible when op requires lot/serial.
🔌 Model Extensions

The module extends two standard Odoo models to integrate manufacturing core data into existing workflows.

mrp.production — Manufacturing Order Extensions
Added FieldTypeDescription
drkds_station_id Many2one Links the MO to a physical shopfloor station (drkds.shopfloor.station). Displayed as a field on the MO form, in the Work Orders tab or in a dedicated Shopfloor group.
drkds_operator_notes Html Rich-text field for production-specific operator instructions. Visible on the MO form and optionally surfaced on the shopfloor dashboard for the assigned station.
When a station is assigned to an MO and the MO is confirmed, the station's state is automatically set to busy. When the MO is marked done, the state reverts to available.
product.template — Product Extensions
Added FieldTypeDescription
drkds_shopfloor_instructions Html Per-product HTML instructions that describe how this product should be manufactured or handled on the shopfloor. Shown as a new tab Shopfloor on the product form.
drkds_default_station_id Many2one Default shopfloor station that will be auto-suggested when a Manufacturing Order is created for this product. Managers can override per MO.
🛠 Settings (Technical)

Settings are implemented by extending res.config.settings and adding a new <app> block in the MRP settings view.

Implementation pattern
# models/res_config_settings.py
class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    group_mfg_core_barcode = fields.Boolean(
        string='Enable Barcode Operations',
        implied_group='drkds_mfg_core.group_mfg_core_barcode_feature',
    )
    group_mfg_core_shopfloor = fields.Boolean(
        string='Enable Shopfloor Dashboard',
        implied_group='drkds_mfg_core.group_mfg_core_shopfloor_feature',
    )
Odoo 19 critical rule: The settings view block uses a unique name= attribute on the <app> element. Never reuse name="mrp" — it causes a duplicate key OWL error. This module uses name="drkds_mfg_core".
🔒 Access Rights

Access rights are defined in security/ir.model.access.csv. The table below shows the full access matrix.

Model Group Read Write Create Delete
drkds.station.type Operator
Manager
drkds.shopfloor.station Operator
Manager
drkds.barcode.operation Operator
Manager
drkds.barcode.scan.wizard Operator + Manager
The scan wizard requires full CRUD for all users since transient model records must be created, read, and auto-cleaned. No station or operation data is modified by the wizard directly — it creates stock transfers via the stock.picking model.
📋 Scenario Guides
1

Morning Station Setup

Manager creates and configures shopfloor stations before the production shift begins.

  • 1
    Navigate to Station Types Manager
    Go to Manufacturing → Shopfloor → Station Types. Verify the 6 default types are present. If a custom type is needed (e.g. "Painting"), click New, enter a name, code (e.g. PAINT), and pick a color.
  • 2
    Create Stations Manager
    Navigate to Manufacturing → Shopfloor → Stations → New. Create three stations:
    • Assembly-01 — Type: Assembly, Code: A01, Capacity: 2, Workcenter: Assembly Line 1
    • Welding-02 — Type: Welding, Code: W02, Capacity: 1, Workcenter: Welding Bay
    • QC-01 — Type: Quality, Code: QC1, Capacity: 3, Workcenter: QC Bench
  • 3
    Add Shopfloor Instructions Manager
    On each station form, fill the Instructions tab with HTML content — safety guidelines, checklist items, or process notes. This will appear on the dashboard for operators.
  • 4
    Open Shopfloor Dashboard Operator
    Navigate to Manufacturing → Shopfloor → Dashboard. All three stations appear as Kanban cards with their state (Available, green). The operator can see their assigned station's instructions without navigating away.
  • 5
    Operator Check-In Operator
    The manager assigns current_operator_id on the station record (or the operator scans their badge barcode if that flow is configured). The station card on the dashboard shows the operator name.
2

Goods Receipt via Barcode

Warehouse operator uses the barcode scan wizard to receive a supplier shipment without opening the full stock module.

  • 1
    Enable Barcode Operations Manager
    Go to Manufacturing → Configuration → Settings. Ensure Enable Barcode Operations is checked. Save.
  • 2
    Configure a Receipt Operation Manager
    Go to Manufacturing → Barcode Operations → Operations Config → New. Set:
    • Name: Quick Receipt — Dock A
    • Type: receipt
    • Picking Type: Receipts (WH/IN)
    • Auto-Validate: ✓ checked
    • Require Lot: unchecked (for this product)
    Save.
  • 3
    Open Scan Wizard Operator
    Navigate to Manufacturing → Barcode Operations → Scan. The wizard dialog opens.
  • 4
    Select Operation & Scan Operator
    Select Quick Receipt — Dock A from the Operation dropdown. Click into the Barcode field and scan the product barcode with a USB/BT scanner. The Product field auto-populates.
  • 5
    Enter Quantity & Confirm Operator
    Enter the received quantity in the Qty field. Click Confirm. Because Auto-Validate is enabled, the stock transfer is created and validated instantly. A green success notification appears. No further action needed.
For lot-tracked products: Enable Require Lot on the operation. The wizard will show a Lot / Serial field that must be filled before Confirm becomes active.
3

Manufacturing Order with Station Assignment

Production manager confirms an MO, assigns it to a station, and adds operator-specific instructions.

  • 1
    Set Default Station on Product Manager
    Open the product (e.g. Bearing Assembly) and go to the Shopfloor tab. Set drkds_default_station_id to Assembly-01. Save. Now any MO for this product will suggest Assembly-01 automatically.
  • 2
    Create Manufacturing Order Manager
    Go to Manufacturing → Manufacturing Orders → New. Select Bearing Assembly as the product. The Station field (drkds_station_id) auto-suggests Assembly-01.
  • 3
    Add Operator Notes Manager
    In the Operator Notes field (drkds_operator_notes), type specific instructions for this production run, e.g.: "Use Loctite 243 on bolts. Torque to 25 Nm. QC sign-off required before packing."
  • 4
    Confirm MO Manager
    Click Confirm. The MO state changes to In Progress. The linked station (Assembly-01) state automatically changes to busy and shows the MO reference on the shopfloor dashboard card.
  • 5
    Operator Views Instructions on Dashboard Operator
    The operator at Assembly-01 opens the shopfloor dashboard and sees the station card in Busy state with the MO reference and the operator notes displayed. They follow the instructions and mark the MO done.
  • 6
    MO Completion — Station Returns Available Operator
    When the MO is set to Done, the station state reverts to available (green) on the dashboard. The station is ready for the next order.

DRKDS Manufacturing Core v1.0.0 · Odoo 19 Community Edition · Generated February 2026

Module path: /home/odoo19/drkds_addons/drkds_mfg_core