Projecten Module Technische Referentie
De Projectenmodule beheert projectmetagegevens op hoog niveau, subprojecthiërarchieën, fasegebaseerde mapping en Favorietenstatus.
Codebase-kaart
| Laag | Pad | Doel |
|---|---|---|
| Frontend-UI | qml/features/projects/ | Aanzichten en gedetailleerde componenten voor projecten |
| State & Logica | models/project.js | JS-helpermodules, fasequery's en favoriete status |
| Backend-service | src/sync_from_odoo.py | Synchroniseer werker die projecten en fasen ophaalt |
| D-Bus-interface | src/backend.py | D-Bus-methoden die projectlijsten blootleggen |
Databaseschema
Projecten en fasen worden lokaal opgeslagen in de volgende SQLite-tabellen:
project_project_app
id(INTEGER, primaire sleutel): unieke project-ID (Odoo externe ID).name(TEXT): Projecttitel.parent_id(INTEGER): Verwijzingen naar het bovenliggende project (zelfrelatie voor subprojecten).date_start(TEXT): Startdatum van het project.date(TEXT): Einddatum/deadline van het project.description(TEXT): Gedetailleerde beschrijving van de projectomvang.user_id(INTEGER): Toegewezen eigenaar/beheerder.allocated_hours(REAL): Gebudgetteerde urentoewijzing.color(INTEGER): Accentkleurindex.favorite(INTEGER): Favoriete statusvlag (0 = Nee, 1 = Ja).stage_id(INTEGER): Verwijst naar de huidige projectfase.
project_project_stage_app
id(INTEGER, primaire sleutel): Fase-ID.name(TEXT): Fasenaam (bijvoorbeeld In uitvoering, Geannuleerd, In de wacht, Klaar).sequence(INTEGER): Bestelvolgorde.
Synchronisatiemechanisme en netwerkprotocol
Odoo XML-RPC-modeltoewijzing
- Extern model:
project.project(projectentiteit),project.project.stage(fasen) - Synchronisatierichting: Pull-georiënteerd (alleen-lezen mapping voor structuur, schakelen tussen lokale favorieten).
De frontend vraagt projecten rechtstreeks op en werkt deze bij in de lokale SQLite-database met behulp van functies die zijn gedefinieerd in:
Pad: models/project.js
Waar de logica is gedefinieerd:
getProjectsForAccount(accountId): Retourneert projecten die zijn gekoppeld aan een bepaald account.getProjectsForAccountPaginated(accountId, limit, offset): Gepagineerde versie voor oneindig scrollen.getProjectsFilteredPaginated(options): Wordt gebruikt om projecten in de UI te zoeken en te filteren.