Add comprehensive TODO.md with 1:1 Python Odoo comparison
Honest gap analysis: 19.925 Go LOC vs 92.733 Python LOC (core). Business addons at 3-9% code depth vs Python. Prioritized roadmap for reaching feature parity. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
250
TODO.md
Normal file
250
TODO.md
Normal file
@@ -0,0 +1,250 @@
|
||||
# odoo-go TODO — Weg zur 1:1 Paritaet mit Python Odoo
|
||||
|
||||
Stand: 2026-04-02 | Go: 19.925 LOC | Python Referenz: 92.733 LOC (core) + Addons
|
||||
|
||||
---
|
||||
|
||||
## Legende
|
||||
- [ ] Offen
|
||||
- [x] Erledigt
|
||||
- ~70% = UI/Demo funktioniert, ~25% = Code-Tiefe vs Python
|
||||
|
||||
---
|
||||
|
||||
## 1. ORM-Kern (aktuell ~75%)
|
||||
|
||||
### Erledigt
|
||||
- [x] CRUD (create/read/write/unlink)
|
||||
- [x] Domain-Compiler (AND/OR/NOT, child_of, parent_of, any, dot-notation JOINs)
|
||||
- [x] read_group mit Aggregation (sum/avg/min/max/count, Date-Granularitaet)
|
||||
- [x] Computed Fields mit Dependency-Tracking
|
||||
- [x] _inherits (Delegation: res.users→res.partner, product.product→product.template)
|
||||
- [x] Related Fields (Read + Write-back)
|
||||
- [x] Record Rules (domain_force parsing, global AND + group OR)
|
||||
- [x] Copy/Duplicate mit IsCopyable
|
||||
- [x] Constraints in Create + Write
|
||||
- [x] Readonly-Skip in Write
|
||||
- [x] active_test Auto-Filter in Search
|
||||
- [x] Onchange mit Compute-Triggering
|
||||
- [x] sanitizeFieldValue (false→nil fuer non-boolean)
|
||||
- [x] name_search / name_create
|
||||
|
||||
### Offen
|
||||
- [ ] _inherit (Model-Extension/Mixin) — aktuell nur neue Models, kein Erweitern bestehender
|
||||
- [ ] Inverse Fields (Compute write-back via benannte Methode)
|
||||
- [ ] Multi-hop Related Fields (aktuell nur single-hop "fk.field")
|
||||
- [ ] Batch-Create (Liste von Values statt einzeln)
|
||||
- [ ] Prefetch/Lazy Loading (aktuell alles auf einmal)
|
||||
- [ ] SQL Constraints (UNIQUE, CHECK)
|
||||
- [ ] Field-Level Groups (Feld-Sichtbarkeit nach Gruppen)
|
||||
- [ ] Translatable Fields (translate=True → ir.translation Lookup)
|
||||
- [ ] Properties Field (JSONB key-value)
|
||||
- [ ] parent_path (Hierarchie-Optimierung)
|
||||
- [ ] Flush/Recompute Ordering (Python hat _recompute_todo Queue)
|
||||
- [ ] Environment.ref() vollstaendig (aktuell nur basic)
|
||||
- [ ] Recordset Arithmetic (+ - & | Operatoren vollstaendig)
|
||||
|
||||
---
|
||||
|
||||
## 2. Web/RPC Server (aktuell ~80%)
|
||||
|
||||
### Erledigt
|
||||
- [x] JSON-RPC Dispatch (/web/dataset/call_kw, call_button)
|
||||
- [x] web_search_read / web_read / web_save
|
||||
- [x] web_read_group / read_group
|
||||
- [x] O2M Child Records in web_read Response
|
||||
- [x] get_views mit Comodel-Metadaten
|
||||
- [x] Onchange RPC
|
||||
- [x] Action Loading (/web/action/load)
|
||||
- [x] Menu Loading (/web/webclient/load_menus)
|
||||
- [x] Session Management (PostgreSQL-persistent)
|
||||
- [x] File Upload/Download (ir.attachment)
|
||||
- [x] CSV Export (/web/export/csv)
|
||||
- [x] HTML Reports (/report/html/)
|
||||
- [x] Translations Endpoint
|
||||
- [x] call_button mit Action-Return
|
||||
- [x] get_formview_action / name_create / ir.http stub
|
||||
|
||||
### Offen
|
||||
- [ ] PDF Reports (wkhtmltopdf oder Go-PDF-Library)
|
||||
- [ ] QWeb Template Engine (Report-Templates wie Python)
|
||||
- [ ] /web/dataset/export (XLSX Export)
|
||||
- [ ] /web/action/run (Server Actions ausfuehren)
|
||||
- [ ] /web/view/edit_custom (Custom View Saves)
|
||||
- [ ] /web/model/get_definitions
|
||||
- [ ] Kanban auto_unfold (Gruppen standardmaessig offen mit Records)
|
||||
- [ ] Binary Field Serving (Bilder in Form-Views)
|
||||
- [ ] Websocket/Longpoll (Bus fuer Live-Updates)
|
||||
- [ ] Mail-Integration (SMTP senden)
|
||||
|
||||
---
|
||||
|
||||
## 3. Views/UI (aktuell ~70%)
|
||||
|
||||
### Erledigt
|
||||
- [x] List View (auto-generiert + stored)
|
||||
- [x] Form View (auto-generiert + stored, mit Header-Buttons)
|
||||
- [x] Kanban View (auto-generiert + stored)
|
||||
- [x] Search View (auto-generiert mit Filters/Group-By)
|
||||
- [x] Stored Views aus DB (14 Views)
|
||||
- [x] Auto-generierte Views als Fallback
|
||||
- [x] O2M Inline-Listen in Form-Views (editable)
|
||||
- [x] Statusbar Widget mit clickable States
|
||||
|
||||
### Offen
|
||||
- [ ] View Inheritance (XPath-basiert, inherit_id)
|
||||
- [ ] Pivot View
|
||||
- [ ] Graph View
|
||||
- [ ] Calendar View
|
||||
- [ ] Gantt View
|
||||
- [ ] Activity View
|
||||
- [ ] Map View
|
||||
- [ ] View Customization (ir.ui.view.custom)
|
||||
- [ ] Dynamic Visibility (invisible/readonly Conditions in XML)
|
||||
- [ ] Widget-System (many2one_avatar, priority, statusbar etc.)
|
||||
- [ ] Chatter/Mail-Thread in Form-Views
|
||||
|
||||
---
|
||||
|
||||
## 4. Business-Module (aktuell ~25% Code-Tiefe)
|
||||
|
||||
### Account (1.072 / 40.910 LOC = 2.6%)
|
||||
- [x] account.move (Invoice CRUD, action_post, button_cancel)
|
||||
- [x] account.move.line (Buchungszeilen)
|
||||
- [x] account.journal, account.account, account.tax
|
||||
- [x] account.payment + payment.register Wizard
|
||||
- [ ] Reconciliation (Payment↔Invoice Matching) — **KRITISCH**
|
||||
- [ ] Bank Statements (Import, Matching)
|
||||
- [ ] Tax Reports (Umsatzsteuervoranmeldung)
|
||||
- [ ] Asset Management
|
||||
- [ ] Aged Receivable/Payable Reports
|
||||
- [ ] Fiscal Year / Period Management
|
||||
- [ ] Payment Provider Integration
|
||||
- [ ] Chart of Accounts Import (volle l10n_de)
|
||||
|
||||
### Sale (641 / 8.009 LOC = 8%)
|
||||
- [x] sale.order + sale.order.line (CRUD, Confirm, Create Invoice)
|
||||
- [x] Computed Amounts (untaxed, tax, total, line subtotal)
|
||||
- [ ] Sale Order Line Tax-Berechnung (tax_id → tax lines)
|
||||
- [ ] Pricelist-Support (Rabatte, Staffelpreise)
|
||||
- [ ] Quotation Templates
|
||||
- [ ] Sale Order Cancellation + Refund
|
||||
- [ ] Delivery Integration (Lieferschein-Erstellung korrekt)
|
||||
- [ ] Margin-Berechnung
|
||||
- [ ] Sale Reports (Revenue, Pipeline)
|
||||
|
||||
### Stock (588 / 17.672 LOC = 3.3%)
|
||||
- [x] stock.picking, stock.move, stock.location, stock.warehouse
|
||||
- [x] stock.quant (Basic)
|
||||
- [ ] Quant-Management (Reservation, Unreserve) — **KRITISCH**
|
||||
- [ ] Stock Valuation (FIFO, Average Cost)
|
||||
- [ ] Reorder Rules (stock.warehouse.orderpoint)
|
||||
- [ ] Barcode/Lot Tracking
|
||||
- [ ] Inventory Adjustments
|
||||
- [ ] Stock Reports (Valuation, Moves)
|
||||
- [ ] Multi-Warehouse Routing
|
||||
- [ ] Package Management
|
||||
|
||||
### Purchase (350 / 3.977 LOC = 8.8%)
|
||||
- [x] purchase.order + purchase.order.line (CRUD, Confirm)
|
||||
- [ ] 3-Way Matching (PO → Receipt → Bill)
|
||||
- [ ] Purchase Agreements
|
||||
- [ ] Vendor Bills aus PO erstellen
|
||||
- [ ] Purchase Reports
|
||||
|
||||
### CRM (300 / 5.019 LOC = 6%)
|
||||
- [x] crm.lead + crm.stage + crm.lost.reason
|
||||
- [x] Pipeline Kanban mit Stages
|
||||
- [x] Won/Lost Actions
|
||||
- [ ] Lead Scoring / Probability
|
||||
- [ ] Email Integration (Lead aus Email)
|
||||
- [ ] Activities / Planned Actions
|
||||
- [ ] Lead Assignment Rules
|
||||
- [ ] CRM Reports (Pipeline, Revenue)
|
||||
|
||||
### HR (200 / 4.609 LOC = 4.3%)
|
||||
- [x] hr.employee, hr.department, hr.job
|
||||
- [ ] Contracts (hr.contract)
|
||||
- [ ] Leave Management (hr.leave)
|
||||
- [ ] Attendance Tracking
|
||||
- [ ] Payroll Integration
|
||||
- [ ] Employee Documents
|
||||
|
||||
### Project (200 / 6.730 LOC = 3%)
|
||||
- [x] project.project, project.task
|
||||
- [ ] Task Stages / Kanban
|
||||
- [ ] Timesheet Integration
|
||||
- [ ] Project Updates / Milestones
|
||||
- [ ] Burndown Charts
|
||||
|
||||
---
|
||||
|
||||
## 5. System/Admin (aktuell ~68%)
|
||||
|
||||
### Erledigt
|
||||
- [x] Settings-Seite (res.config.settings mit Firmen-Fields)
|
||||
- [x] Users/Companies/Groups Verwaltung
|
||||
- [x] Technical Menu (Views, Actions, Parameters, Security, Logging)
|
||||
- [x] Session-Persistenz (PostgreSQL)
|
||||
- [x] ir.config_parameter (get_param/set_param)
|
||||
- [x] ir.cron Model (registriert)
|
||||
- [x] ir.logging Model
|
||||
- [x] res.lang + ir.translation Models
|
||||
- [x] Password Hashing (bcrypt)
|
||||
- [x] change_password Methode
|
||||
|
||||
### Offen
|
||||
- [ ] ir.cron Runner (Goroutine Scheduler der Jobs ausfuehrt)
|
||||
- [ ] Mail Server (ir.mail_server, SMTP Config)
|
||||
- [ ] Authentik SSO / OAuth2 (geplant, siehe memory)
|
||||
- [ ] API Key Auth (Token-basierter Zugriff)
|
||||
- [ ] Module Install/Upgrade Lifecycle
|
||||
- [ ] XML Data Loading (aus Addon data/ Ordnern)
|
||||
- [ ] User Audit Log (wer hat was geaendert)
|
||||
- [ ] Database Backup/Restore
|
||||
- [ ] Multi-Database Support
|
||||
|
||||
---
|
||||
|
||||
## 6. Infrastruktur
|
||||
|
||||
### Erledigt
|
||||
- [x] Docker Compose (Go Server + PostgreSQL)
|
||||
- [x] OWL 19.0 Frontend eingebettet
|
||||
- [x] JS Transpiler (ES6→odoo.define)
|
||||
- [x] XML Template Compiler
|
||||
- [x] CSS Bundling
|
||||
- [x] Database Manager (/web/database/manager)
|
||||
|
||||
### Offen
|
||||
- [ ] Tests (aktuell 0 Go-Tests fuer ORM)
|
||||
- [ ] CI/CD Pipeline
|
||||
- [ ] Migrations (Schema-Upgrades bei Model-Aenderungen)
|
||||
- [ ] Performance-Benchmarks
|
||||
- [ ] Logging Framework (strukturiert, nicht nur log.Printf)
|
||||
- [ ] Configuration File (statt nur Env-Vars)
|
||||
- [ ] Odoo.com URLs entfernen (5 Stellen identifiziert)
|
||||
- [ ] Health-Check erweitern (DB + Dependencies)
|
||||
|
||||
---
|
||||
|
||||
## Priorisierung fuer naechste Sessions
|
||||
|
||||
### Prio 1 — Blockiert echte Nutzung
|
||||
1. Account Reconciliation (Payment↔Invoice)
|
||||
2. Stock Quant Management (Reservation)
|
||||
3. View Inheritance (XPath)
|
||||
4. PDF Reports (wkhtmltopdf)
|
||||
|
||||
### Prio 2 — Verbessert UX stark
|
||||
5. Kanban auto_unfold
|
||||
6. Binary Field Serving (Bilder)
|
||||
7. Pivot/Graph Views
|
||||
8. Dynamic Visibility in Views
|
||||
|
||||
### Prio 3 — Vervollstaendigung
|
||||
9. ir.cron Runner
|
||||
10. Mail Server Integration
|
||||
11. Authentik SSO
|
||||
12. Tests schreiben
|
||||
13. Weitere Module vertiefen
|
||||
Reference in New Issue
Block a user