Skip to content

Device Inventory Module — Overview

Module: device_inventory Version: 19.0.2.14.0 Platform: Odoo 19 Author: Reyder Enterprises


Module Overview

The device_inventory module manages the full lifecycle of mobile device consignment inventory for Reyder Enterprises and its device owner partner, Axis Mobile. Built on top of Odoo 19's stock, purchase, sale, and accounting frameworks, it extends core functionality to handle IMEI-level device tracking, consignment agreements, QC workflows, delivery manifests, settlement reporting, retail sales, inter-company transfers, and warehouse operations — all within a multi-company environment.

From the moment a device arrives on a purchase order through receiving, QC grading, consignment or retail sale, and final financial settlement, every step is captured and auditable. The module enforces strict data separation between Reyder (the consignee/seller) and Axis Mobile (the device owner), ensuring that each company sees only the financial and operational data it is entitled to see.

Home Page


Key Business Entities

Model Technical Name Description
Device (Serial/IMEI) stock.lot Individual mobile device tracked by IMEI. Carries attributes such as storage capacity, color, grade, lock status, battery health, and carrier check result.
Manifest device.manifest Receiving and delivery manifests. A receiving manifest records devices arriving on a PO; a delivery manifest records devices shipped to a customer on an SO.
Manifest Line device.manifest.line One line per device (IMEI) on a manifest. Holds stock_lot_id, status, and QC notes.
Consignment Agreement device.consignment.agreement Defines the owner-consignee relationship, commission type (flat or percentage), and commission rate.
Settlement Report consignment.settlement.report Financial reconciliation document generated after a delivery manifest is completed. Two paired reports are created per delivery: an owner report (for Axis Mobile) and a consignee report (for Reyder).
Retail Sale device.retail.sale Tracks a device sale through Reyder's retail channel, with its own invoice, COGS entry, and settlement.
Retail Reservation device.retail.reservation Holds a device for a retail customer before the sale is finalized. Auto-closes if not converted.
Transfer Order device.transfer.order Manages inter-company device transfers between Reyder and Axis Mobile warehouses.
Device Grade device.grade Configuration model for condition grades (Excellent, Good, Fair, Poor).
Packing Box packing.box Groups devices into physical shipping boxes with barcode label support.
Warehouse Task warehouse.task Discrete warehouse operations (pick, pack, ship) with barcode scanning support.
Device Movement device.movement Audit log of every location change for a device (stock move history).

Company Roles

Company Odoo ID Role
Reyder Enterprises id = 1 Consignee and seller. Owns and operates the warehouse, manages all purchase orders, creates manifests, issues customer invoices, and runs daily warehouse operations.
Axis Mobile id = 2 Device owner. Consigns devices to Reyder under a consignment agreement. Receives owner-side settlement reports showing commissions and net owner amounts, but never sees Reyder's customer names, SO numbers, or sale prices.

Data Separation Rules

  • Settlement reports carry a company_id record rule: ('company_id', 'in', company_ids).
  • Owner-side report lines intentionally omit sale_order_id, customer name, and sale price fields.
  • Axis Mobile users accessing the system can only view their own settlement reports and device records — they cannot navigate to Reyder consignee reports via the paired_report link.
  • The axis_user account (uid=5) belongs only to Axis Mobile company and is used to validate data isolation.

Module Architecture

device_inventory/
├── models/           Core business logic (stock.lot, manifests, agreements, settlements, etc.)
├── wizard/           Transient wizards (intake, QC handoff, allocation, retail import)
├── views/            XML view definitions and menus
├── report/           QWeb report templates (settlement reports, packing labels)
├── security/         Access control lists and record rules
├── data/             Sequences, picking types, grade data, locations, cron jobs
├── static/src/       OWL components for barcode scanning (manifest, packing, task)
├── controllers/      HTTP endpoints (barcode scanner integration)
└── docs/             This documentation

Device Inventory Menu

Device Inventory Menu

The module installs a top-level Device Inventory application in Odoo. The menu is organized into the following sections:

Menu Section Key Items
Devices All Devices, IMEI Manifests, Movement History
Purchasing Purchase Orders, Receiving Manifests
Quality Control QC Handoff Wizard, Device Grades Config
Sales Sales Orders, Delivery Manifests, Retail Sales, Retail Reservations
Consignment Consignment Agreements, Settlement Reports
Transfers Inter-Company Transfer Orders
Warehouse Warehouse Tasks, Packing Boxes, Inventory Overview
Reporting Owner Reports, Settlement Reports
Configuration Settings, Device Accounting, M360 Integration

Consignment Flow Summary

PO Created
   └─> Receiving Manifest (device.manifest, type=receiving)
          └─> Barcode / QC Scan (manifest lines, stock.lot created)
                 └─> QC Handoff (qc_handoff_wizard)
                        └─> Devices available in stock
                               └─> Consignment Agreement set on SO
                                      └─> Device Allocation (sale.order.line.device)
                                             └─> Confirm SO → Delivery Manifest (type=delivery)
                                                    └─> Pick Devices → Mark Complete
                                                           └─> Settlement Reports (owner + consignee)
                                                                  └─> Vendor Bill (owner) + Customer Invoice

Glossary

Term Definition
IMEI International Mobile Equipment Identity — a unique 15-digit serial number identifying an individual mobile device. Used as the stock.lot name throughout the module.
Consignment A business arrangement where Axis Mobile (the owner) delivers devices to Reyder (the consignee) to sell on its behalf. Ownership does not transfer until the device is sold.
Settlement The financial reconciliation performed after a batch of consigned devices is sold. Generates an owner settlement report (commission + net owner amount) and a consignee report (full sale details).
QC (Quality Control) The process of inspecting received devices, assigning grades, verifying IMEI status, checking battery health, and confirming lock/carrier status before devices enter saleable inventory.
M360 Third-party IMEI verification service integrated via the m360_integration model. Used during QC to check device lock status, carrier, and blacklist status automatically.
Manifest A document listing devices (by IMEI) associated with a receiving shipment or a customer delivery. Type is either receiving or delivery.
Grade A condition rating assigned to a device during QC. Configured in device.grade. Standard values: Excellent, Good, Fair, Poor.
Purchase Cost The per-unit cost recorded on the purchase order line, used as the device's standard cost and inventory valuation basis.
COGS Cost of Goods Sold — the accounting entry that moves the device's inventory value from the asset (valuation) account to the expense (COGS) account when a device is sold.
Valuation Account The stock valuation (asset) account that holds the inventory value of devices in stock. Debited on receiving; credited when devices are sold or transferred.
Commission The fee earned by Reyder for selling a consigned device on behalf of Axis Mobile. Defined in the consignment agreement as a flat amount or percentage of the sale price. Computed and stored on sale.order.line.device.

Documentation Index

File Description
setup.md Installation prerequisites, Docker Compose setup, module installation, initial configuration steps, and company setup.
purchasing-receiving.md Creating purchase orders for device lots, generating receiving manifests, barcode scanning during receiving, and GL entries on receipt.
quality-control.md QC inspection workflow, the QC handoff wizard, assigning grades, running M360 IMEI checks, and moving devices to saleable stock.
consignment-agreements.md Creating and managing consignment agreements between Axis Mobile and Reyder, commission types, rates, and agreement lifecycle.
sales-orders.md Creating sales orders with device product lines, the Device Allocation tab, allocating specific IMEIs to SO lines, and confirming orders.
delivery-manifests.md How delivery manifests are auto-created on SO confirmation, picking devices, barcode scanning delivery, and marking manifests complete.
settlement-reports.md How paired settlement reports (owner + consignee) are generated, report structure, data separation enforcement, marking as paid, and vendor bill creation.
retail-operations.md Retail sale workflow, retail reservations (auto-close behavior), retail invoicing, COGS entries, and retail settlement reports.
inter-company-transfers.md Creating and processing inter-company device transfer orders between Reyder and Axis Mobile, stock moves, and valuation.
warehouse-operations.md Warehouse tasks, packing boxes, barcode scanning for pick/pack/ship, warehouse location structure, and inventory adjustments.
accounting-reference.md Complete reference for all GL entries generated by the module: receiving, COGS, customer invoice, vendor bill, settlement, and inter-company transfers.
security-multicompany.md Record rules, access control lists, multi-company data isolation, the cids cookie behavior, and testing data separation with axis_user.
device-lifecycle.md End-to-end state diagram of a device from PO receipt through QC, allocation, sale, and settlement. Covers all device_status transitions on stock.lot.
troubleshooting.md Common errors, known gotchas (Selection field callables, commission_rate decimal storage, groups_idgroup_ids rename), module upgrade commands, and shell debugging snippets.

Last updated: 2026-03-04 | Module version: 19.0.2.14.0