ERP migration
Field-level mapping, validation, and rollback between ManEx and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
ManEx
Source
Odoo ERP
Destination
Compatibility
11 of 12
objects map 1:1 between ManEx and Odoo ERP.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from ManEx to Odoo ERP is a structural migration driven by product stagnation and API limitations. ManEx has no documented public API, forcing all extraction through direct database access or flat-file exports, while Odoo exposes a REST API for clean inbound migration. ManEx's Cube successor has been in extended beta for over three years, creating long-term support uncertainty. We extract customer, vendor, PO, SO, BOM, shop floor, inventory, and AP/AR data via direct DB queries, decompose multi-level BOM structures into Odoo's mrp.bom model, map RMA status codes to Odoo's stock.picking.return move states, and resolve GL account codes against Odoo's chart of accounts. We do not migrate ManEx documents (proprietary formats, no API access), workflows, or Stimulsoft reports; we deliver written inventories of these for the customer's admin to rebuild in Odoo Studio.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a ManEx object lands in Odoo ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
ManEx
Customer
Odoo ERP
res.partner (Customer flag)
1:1ManEx Customer records map to Odoo res.partner with the customer flag set to True. We extract contact details, address data, and account assignments from ManEx's flat customer schema via direct DB query. The partner's name, email, phone, and street/city/state/zip fields map directly. We preserve the original ManEx customer ID in a custom field x_manex_customer_id for audit traceability. If ManEx stores multiple contacts per customer account, we create one res.partner per contact and set the parent_id to the primary account partner.
ManEx
Vendor
Odoo ERP
res.partner (Vendor flag)
1:1ManEx Vendor records map to Odoo res.partner with the supplier flag set to True. Vendor PO history and RMA associations from ManEx are preserved as related purchase.order and stock.picking records in Odoo. The vendor-supplier relationship is held separate from customer accounts to avoid merging two distinct business entity types into one Odoo partner record. Vendor-specific fields like tax ID and payment terms map to res.partner's fiscal_country_ids and property_supplier_payment_term_id.
ManEx
Chart of Accounts
Odoo ERP
account.account
1:1ManEx GL accounts map to Odoo account.account entries with standard account types (asset, liability, equity, revenue, expense). We extract the full account code, name, and type from ManEx and create matching Odoo records in the correct sequence so that child accounts reference valid parent accounts. Inactive or suspended ManEx accounts are imported with the active flag set to False in Odoo. Account codes that conflict with Odoo's default chart of accounts require a custom chart-of-accounts template or a fresh account import before any AP/AR migration begins.
ManEx
Purchase Order
Odoo ERP
purchase.order + purchase.order.line
1:1ManEx PO records map to Odoo purchase.order with line items in purchase.order.line. The PO's vendor assignment, line items tied to BOMs, and receiving status all migrate. Partially received ManEx POs are created as purchase.order records with the state set to in_progress and the received quantity on each line reflecting the current ManEx status. We resolve the vendor res.partner reference before PO import so that the vendor_id foreign key is satisfied at insert time. PO dates and currency codes map to Odoo's date_order and currency_id fields.
ManEx
Sales Order
Odoo ERP
sale.order + sale.order.line
1:1ManEx SO records map to Odoo sale.order with line items in sale.order.line. Pricing, customer linkage, and fulfillment status migrate directly. Multi-price-list pricing on ManEx SOs requires value-mapping because ManEx price list IDs are not portable to Odoo; we recreate the price list structure in Odoo and map the ManEx price list name to the corresponding Odoo product.pricelist. SO state mapping (open, confirmed, done, cancelled) translates to Odoo's sale_order states during import.
ManEx
Bill of Materials
Odoo ERP
mrp.bom + mrp.bom.line
lossyManEx BOMs include multi-level component structures and routing data that require decomposition for Odoo MRP. Complex multi-level BOMs with phantom assemblies are either flattened (single-level BOM with all components at the top level) or preserved as nested mrp.bom records with type=subassembly depending on the destination configuration. We handle the component-to-product mapping, quantity per finished good, and unit of measure conversion during transformation. Routing data (workcenters, cycle times, sequence) maps to mrp.routing.workcenter on the Odoo bom_id if the customer activates the Manufacturing app's routing feature.
ManEx
Shop Floor Transaction
Odoo ERP
mrp.workorder + stock.move
1:1ManEx real-time shop floor data tracks labor time, machine cycles, and material consumption per work order. These transactional records are timestamped and contextual. We map them to Odoo mrp.workorder records linked to the corresponding mrp.production, with time tracking stored in mrp.workcenter.productivity records. Material consumption maps to stock.move lines with consume_location resolved from ManEx's warehouse and location codes. If ManEx shop floor data uses a proprietary transaction log format, we parse it row-by-row and batch-insert into Odoo's mrp.workorder and stock.move tables via direct DB write or Odoo's XML-RPC with batch chunking.
ManEx
Inventory Record
Odoo ERP
stock.quant + stock.location
1:1ManEx inventory quantities, locations, and lot/serial data migrate to Odoo stock.quant and stock.location. We handle multiple warehouse locations by creating Odoo stock.location records in a hierarchy (WH/Stock, WH/Stock/Location1, etc.) mapped from ManEx's location codes. Lot and serial traceability preserves as lot_id and last_lot_id on stock.quant. On-hand quantities per location and per product are aggregated from ManEx's materials management module before insert into Odoo to avoid duplicate quant records. If ManEx uses lot expiration dates, these map to stock.productionlot.removal_date_id in Odoo.
ManEx
AP/AR Ledger Entry
Odoo ERP
account.move (in_invoice, out_invoice, in_refund, out_refund)
1:1Open payables and receivables from ManEx migrate as Odoo account.move records in draft state for customer/admin review before posting. Current status, aging buckets, and payment terms are preserved in Odoo move lines linked to the corresponding res.partner account. Historical transactions require special handling because ManEx may store them in archived or compressed tables; we identify the archive location during discovery and extract them if the customer requests historical AP/AR migration. Posted moves require explicit customer sign-off before migration because posting a move in Odoo affects financial reporting.
ManEx
Time and Attendance Record
Odoo ERP
hr.attendance + mrp.workcenter.productivity
1:1Time entries from ManEx's optional Time and Attendance module are tied to employees and work orders. We map them to Odoo hr.attendance (check-in/check-out records) for HR reporting and to mrp.workcenter.productivity (labor tracking on work orders) for manufacturing costing. If Odoo is deployed without the HR app, time entries attach to mrp.workorder records only. We flag any employee records that do not have a corresponding Odoo hr.employee for the customer's admin to provision before the time migration phase.
ManEx
RMA Record
Odoo ERP
stock.picking (return) + crm.claim (if CRM installed)
1:1ManEx RMA records represent return or repair states tied to original SOs or POs. Their status codes (open, in-progress, closed) require explicit value-mapping because the state machine differs between ManEx and Odoo. Open RMAs map to Odoo stock.picking with picking_type_id set to the return type, linked to the original purchase.order or sale.order via origin. We preserve the RMA number as the picking's origin reference and the RMA status as a custom field x_manex_rma_status for reconciliation. If the customer uses Odoo CRM with the claims module, we map repair-class RMAs to crm.claim records as a parallel path.
ManEx
Document Attachment
Odoo ERP
ir.attachment (flagged, not migrated)
1:1Document attachments stored within ManEx's document management module are not accessible via a public API and may use proprietary formats. We do not migrate attachments directly. We flag the document module as out-of-scope in the migration scope document and provide a manifest of the document paths and metadata (filename, record type, date) that the customer's admin can manually migrate using Odoo's document management module or a file-server copy script post-migration. If ManEx stores documents as BLOB fields in the database, we extract the raw BLOB data and save it to a fileshare for manual handoff.
| ManEx | Odoo ERP | Compatibility | |
|---|---|---|---|
| Customer | res.partner (Customer flag)1:1 | Fully supported | |
| Vendor | res.partner (Vendor flag)1:1 | Fully supported | |
| Chart of Accounts | account.account1:1 | Fully supported | |
| Purchase Order | purchase.order + purchase.order.line1:1 | Fully supported | |
| Sales Order | sale.order + sale.order.line1:1 | Fully supported | |
| Bill of Materials | mrp.bom + mrp.bom.linelossy | Fully supported | |
| Shop Floor Transaction | mrp.workorder + stock.move1:1 | Fully supported | |
| Inventory Record | stock.quant + stock.location1:1 | Fully supported | |
| AP/AR Ledger Entry | account.move (in_invoice, out_invoice, in_refund, out_refund)1:1 | Fully supported | |
| Time and Attendance Record | hr.attendance + mrp.workcenter.productivity1:1 | Fully supported | |
| RMA Record | stock.picking (return) + crm.claim (if CRM installed)1:1 | Fully supported | |
| Document Attachment | ir.attachment (flagged, not migrated)1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
ManEx gotchas
No public API forces direct database exports
On-premise backup responsibility is the customer’s
Cube successor product remains in extended beta
Quoting module fails for complex manufacturing BOMs
Stimulsoft reporting has rendering limitations
Odoo ERP gotchas
No rollback for CSV imports
External ID conflicts on re-import
Many2many field encoding in CSV imports
Large export timeouts require batching
Version schema drift between Odoo releases
Pair-specific challenges
Migration approach
Discovery and direct DB audit
We conduct a structured discovery with the customer covering active ManEx modules (base ERP plus optional Project Management, Repair, Time and Attendance), database type and version, active optional modules, and record volume per object class. We negotiate read-only database credentials or a full DB dump from the customer. We run a database-level table scan to identify all tables including archived AP/AR tables, custom field tables, and any Stimulsoft report BLOB storage. The discovery output is a written migration scope document listing every object to migrate, the extraction method per object, the record count estimate, and any DB access constraints.
Odoo instance provisioning and app activation
We confirm the Odoo edition and active apps. For manufacturing-focused migrations, the Manufacturing app must be installed. For financial migrations, the Accounting app must be active. We provision a staging Odoo instance (either Odoo.sh staging branch or a local Docker instance) that mirrors the production target configuration. We create the Odoo chart of accounts structure, warehouse and location hierarchy, and any required product categories before data migration pipelines are built.
Data extraction and transformation
We extract data from ManEx via direct SQL queries against the source database or via flat-file exports for tables where DB access is restricted. Transformation logic handles multi-level BOM decomposition, RMA state mapping, price list name resolution, and unit of measure standardization. Shop floor transactions are extracted as timestamped rows and batched for bulk insert into Odoo mrp.workorder and stock.move tables. Multi-price-list pricing is resolved by matching ManEx price list names to Odoo product.pricelist records created in step 2.
Sandbox migration and reconciliation
We run a full migration into the staging Odoo instance. The customer's operations lead reconciles record counts (Customers in, Vendors in, POs in, SOs in, BOMs in, Inventory quants in, AP/AR moves in) against the ManEx source counts. We spot-check 25-50 records per object class for field-level accuracy and flag any transformation issues. BOM decomposition quality is verified by running an Odoo MRP planning simulation on a sample production order and comparing component consumption against ManEx's work order output. All reconciliation corrections are applied to the transformation scripts before production migration.
Production migration in dependency order
We run production migration in record-dependency sequence: chart of accounts first (all other financial records require valid account IDs), then warehouse and location setup, then res.partner records (customers and vendors), then product products and product pricelists, then mrp.bom records, then purchase.order and sale.order, then stock.quant inventory, then account.move AP/AR entries, then mrp.production and mrp.workorder for shop floor, then hr.attendance for time entries, then RMA records. Each phase emits a row-count report before the next phase begins. A final delta migration captures any records modified during the cutover window.
Cutover, validation, and rebuild handoff
We freeze ManEx writes during cutover, execute the final delta migration, and enable Odoo ERP as the system of record. We deliver a written inventory of ManEx workflows, automations, and Stimulsoft reports that require rebuild in Odoo Studio or via custom development. We flag the document module as out-of-scope with a file manifest for manual migration. We support a one-week hypercare window for reconciliation issues. We do not rebuild ManEx automations as Odoo server actions inside the migration scope; that work is documented and handled by the customer's Odoo admin or a separate Odoo implementation engagement.
Platform deep dives
ManEx
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across ManEx and Odoo ERP.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
ManEx: Not publicly documented.
Data volume sensitivity
ManEx doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during ManEx to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your ManEx to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave ManEx
Other ways to arrive at Odoo ERP
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.