Dynamics 365 / NAV / GP to Odoo Migration | OAuth2 + OData REST | 10 Pre-Built BC Templates | Dry-Run · Resumable · Idempotent
by Moaz Nabil https://github.com/moaaznaabilali
Odoo
$ 130.00
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 1363 |
| Technical Name |
mn_dynamics_migration |
| License | OPL-1 |
| Website | https://github.com/moaaznaabilali |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 1363 |
| Technical Name |
mn_dynamics_migration |
| License | OPL-1 |
| Website | https://github.com/moaaznaabilali |
D365 BUSINESS CENTRAL · NAV · GP → ODOO · v19.0.1
Move off Microsoft Dynamics. Without an SI engagement.
A complete data-migration platform for moving from Microsoft Dynamics 365 Business Central (cloud or on-prem), Dynamics NAV, or Dynamics GP into Odoo. OAuth2 with Microsoft Entra ID + OData REST connector + CSV fallback. 10 pre-built Business Central templates: Customer, Vendor, Item, G/L Account, Sales Invoice, Purchase Invoice, Sales Order, Purchase Order, Employee, Bank Account.
Connect. Map. Validate. Dry-run. Execute. Resume.
$130 · ONE-TIME · OPL-1
★ HOW IT WORKS · EIGHT STEPS ★
From "I have a BC tenant" to "data is in Odoo".
STEP 1
Connect
Register an app in Microsoft Entra ID, copy
tenant_id + client_id + client_secret. Pick BC cloud / NAV / GP. One click "Test connection".STEP 2
Introspect
OData service document lists all available entities. Auto-discover Customer, Vendor, Item, GL, Sales/Purchase docs, Employees, BankAccount.
STEP 3
Pick a template
10 pre-built BC templates ship with column-by-column suggested mappings â apply with one click.
STEP 4
Map columns
12 transformers â
odata_date_to_iso, country_code_to_id, to_bool, etc. Inline Python expressions for edge cases.STEP 5
Validate
Target field exists on Odoo model? Type compatible? Errors surfaced before any data is touched.
STEP 6
Dry-run
Fetch first N rows from BC, run the pipeline, render JSON of resulting Odoo records. Zero commits.
STEP 7
Execute
Chunked OData calls (default 500/batch). Checkpoint per batch. Resumable. Re-runs UPDATE via ir.model.data idempotency keys.
STEP 8
Verify + re-run failed
Per-row error log with the exact message. Export failed rows to CSV, fix, re-run failed-only.
★ LIVE OPS DASHBOARD ★
Watch the migration in flight.
7 KPI tiles · jobs grid with progress bars · recent errors with source preview. Auto-refresh every 15 s.

PROJECTS & JOBS
One project. Many jobs. Dependency order.
01 · PROJECTS LIST

02 · PROJECT FORM — nested jobs with progress

CONNECTIONS · OAUTH2
Microsoft Entra ID, the right way.
03 · CONNECTIONS LIST

04 · CONNECTION FORM — tenant_id / client_id / client_secret / scope · one-click test

10 PRE-BUILT BC TEMPLATES
Business Central → Odoo, ready to apply.
05 · TEMPLATES KANBAN — 10 cards grouped by category

06 · TEMPLATE FORM — suggested mapping JSON

JOBS · the heart of the platform
Source · target · mapping · runs · failed rows.
07 · JOBS LIST — rows/second throughput included

08 · JOB FORM — mapping editor + $filter + incremental field + auto_xmlid toggle

EXECUTION + AUDIT + EXTRAS
Every run logged. Every row traceable.
09 · RUN HISTORY

10 · LOOKUP TABLES — BC status → Odoo state, etc.

11 · NOTIFICATIONS — email + Teams webhook + threshold breach

12 · TRANSFORMERS — 12 reusable functions + Python expressions

13 · BULK-APPLY WIZARD — spawn N jobs at once

EVERYTHING IN THE BOX
30+ features. 11 models. 10 templates.
🔗 OAUTH2 + ENTRA ID
Standard Microsoft client-credentials flow.
tenant_id / client_id / client_secret. Scope configurable.🌐 OData v4 REST
$top / $skip / $filter / $select. Server-side count via $count. BC cloud + on-prem + NAV 19+.
📁 CSV FALLBACK
For Dynamics GP installs and locked-down NAV that don't expose REST. Same mapping pipeline.
📋 10 BC TEMPLATES
Customer · Vendor · Item · G/L Account · Sales Invoice · Purchase Invoice · Sales Order · Purchase Order · Employee · Bank Account.
⚙ 12 TRANSFORMERS
identity · upper · lower · strip · to_int · to_float · to_bool · odata_date_to_iso · digits_only · default_if_empty · country_code_to_id · currency_code_to_id.
📝 PYTHON EXPRESSIONS
Per-mapping inline Python â overrides transformer.
v is the raw value.🎯 IDEMPOTENT
Re-runs UPDATE existing records via ir.model.data — never duplicate.
⏳ RESUMABLE
Checkpoint commit per batch.
last_progress_offset picks up after interruption.📹 DRY-RUN PREVIEW
JSON preview wizard — verify mappings before going live.
📊 LIVE DASHBOARD
OWL component. 7 KPI tiles, jobs grid, errors. Auto-refresh 15 s.
🔗 DEPENDENCY ORDER
Multi-job dependencies via parent_job_ids. Customers → Invoices, Items → SO lines.
💾 MAPPING JSON I/O
Export current mappings as JSON for version control. Import to reuse.
⚠ PER-ROW ERROR LOG
Every failed row gets line with error + source preview. Filterable, exportable.
🔎 LOOKUP TABLES
Value-mapping (BC 'Posted' → Odoo 'posted'). 2 seed lookups included.
🔔 NOTIFICATIONS
Email + webhook + Microsoft Teams. Trigger on job_done / failed / threshold breach.
🏮 BATCH SIZE
Per-job tunable. Default 500. OData $top + $skip pagination.
🔨 ODATA $FILTER
Optional OData filter string — e.g.
blocked eq false. Migrate only the rows you want.🔇 INCREMENTAL SYNC
Pick
lastModifiedDateTime as incremental field for delta-sync after first migration.⚙ 2 SECURITY GROUPS
User (RW projects/jobs) vs Admin (full CRUD + connection edits + templates).
🧮 FORWARD-COMPATIBLE
Pure Python stdlib — no external deps. Works on any Odoo host out of the box.
WHAT YOU GET FOR $130
A Dynamics SI engagement, for one-tenth the cost.
11 models (connection · template · project · job · mapping · run · line · transformer · lookup · notification · dashboard) ~$2,200
OAuth2 + OData REST driver with token refresh + $top/$skip/$filter ~$1,400
12 reusable transformers + Python evaluator ~$600
10 pre-built Business Central templates ~$3,000
Resumable batched importer + checkpoint commit ~$1,200
Idempotent UPSERT via ir.model.data + re-run-failed-only ~$800
OWL dashboard with auto-refresh ~$900
Lookups · notifications · bulk-apply wizard · dry-run ~$900
Mapping JSON export/import · per-row error log ~$500
Source code · 2 security groups · lifetime updates · OPL-1 ~$400
Bespoke equivalent ≈ $11,900 Your price: $130
$130.
Install in ten seconds.
Install for $130 →
DYNAMICS MIGRATION · v19.0.1.0.0 · OPL-1
Built by Moaz Nabil · moaaznaabilali@gmail.com
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module