Navigation

Första egna Odoo-modulen: arc_industrial_core

Att lära sig Odoo-utveckling genom att bygga

Jag är ingen utvecklare. Jag har bred teknisk bakgrund inom polymerer, medicin och juridik, men att skriva Python-kod var nytt territorium. Ändå bestämde jag mig för att bygga min första Odoo-modul själv. Med Claude som AI-parprogrammerare gick det faktiskt.

arc_industrial_core blev navet i hela PlastShop-installationen. Det är modulen som hanterar produktdata, tekniska specifikationsblad, kundklassificering, dokumenthantering och mycket mer. Allt det som Odoo inte kunde ur lådan.

Modulstruktur i Odoo 18

En Odoo-modul är i grunden en mapp med en specifik struktur. Du behöver minst en __manifest__.py som beskriver modulen och en __init__.py som importerar dina Python-filer. Utöver det har du mappar för models (Python-logik), views (XML för gränssnittet), security (åtkomstregler) och data (standarddata).

arc_industrial_core/
├── __manifest__.py
├── __init__.py
├── models/
│   ├── __init__.py
│   ├── product_template.py
│   ├── tsb_document.py
│   └── customer_classification.py
├── views/
│   ├── product_views.xml
│   ├── tsb_views.xml
│   └── menu_views.xml
├── security/
│   └── ir.model.access.csv
└── data/
    └── classification_data.xml

Det som förvånade mig var hur logiskt det var uppbyggt. Varje del har sin plats. Manifest-filen deklarerar beroenden, version och vilka filer som ska laddas. Det är som ett pakets innehållsförteckning.

TSB – Tekniska specifikationsblad

Första funktionen jag byggde var TSB-hanteringen. Varje plastmaterial har ett tekniskt datablad med egenskaper som draghållfasthet, temperaturintervall och kemisk resistens. Jag skapade en ny modell – arc.tsb.document – som kopplas till produkter via many2one-relationer.

Varje TSB har versionshantering. När leverantören skickar en uppdaterad specifikation lägger vi till en ny version och den gamla arkiveras. Kunder på webbshopen ser alltid senaste versionen. Internt kan vi gå tillbaka och se historiken.

Kundklassificering

PlastShop har kunder som handlar för 500 kr om året och kunder som handlar för 500 000 kr. De kan inte behandlas likadant. Jag byggde ett klassificeringssystem med tre nivåer: Standard, Silver och Gold. Klassificeringen baseras på omsättning senaste 12 månaderna och uppdateras automatiskt via en schemalagd uppgift (ir.cron).

Klassificeringen styr vilken prislista kunden får, vilken SLA som gäller för ärenden och vilka kampanjer de ser i webbshopen. Allt sker automatiskt utan manuell hantering.

Att lära sig OWL 2.0

Odoo 18 använder OWL 2.0 som frontend-ramverk. Det är Odoos eget komponentbaserade JavaScript-ramverk, inspirerat av React och Vue men med sin egen syntax och sina egna egenheter.

OWL var den brantaste inlärningskurvan i hela projektet. Dokumentationen är tunn. Exemplen är få. Och felmeddelanden från OWL är ungefär lika hjälpsamma som ”Error: something went wrong”. Men när du väl förstår mönstret – komponent, template, state, hooks – blir det kraftfullt.

Jag använde OWL framför allt för interaktiva komponenter i backend-gränssnittet. Dashboards med realtidsdata, dynamiska formulär som anpassar sig baserat på produkttyp och visualiseringar av kunddata.

XML-vyer och arv

Odoos vy-system är baserat på XML och fungerar med arv. Du behöver sällan skriva en hel vy från grunden. Istället ärver du en befintlig vy och lägger till, tar bort eller ändrar element med xpath-uttryck.

Viktigt att veta i Odoo 18: det heter <list> nu, inte <tree>. Det gamla tree-elementet fungerar fortfarande men är deprecated. Jag fick gå tillbaka och byta ut det i alla mina vyer efter att ha kopierat gammal dokumentation.

Arvsmekanismen är elegant men kan bli komplex. När fem moduler ärver samma vy och lägger till saker via xpath kan det bli svårt att förstå vad slutresultatet blir. Jag lärde mig att alltid testa vyerna visuellt efter varje ändring.

Säkerhet och åtkomstregler

Odoo har ett granulerat åtkomstsystem baserat på grupper och regler. Varje modell behöver en rad i ir.model.access.csv som definierar vem som får läsa, skriva, skapa och radera poster. Glömmer du detta får användarna ett kryptiskt felmeddelande om saknade rättigheter.

Jag skapade egna användargrupper: PlastShop User, PlastShop Manager och PlastShop Admin. Varje grupp har tillgång till specifika funktioner. Det tog tid att sätta upp men det är värt det för att undvika att säljavdelningen råkar radera produktkategorier.

Vad jag lärde mig

Den största lärdomen var att Odoo-utveckling handlar mer om att förstå ramverket än om att kunna Python. Python-koden i sig är ofta enkel – det svåra är att veta var den ska ligga, vilka metoder man ska överskugga och hur Odoo förväntar sig att data flödar.

Claude som parprogrammerare var ovärderligt. Jag beskrev vad jag ville uppnå och fick fungerande kod tillbaka. Inte perfekt varje gång, men en startpunkt jag kunde testa och iterera på. Utan AI hade det här projektet tagit tre gånger så lång tid.

arc_industrial_core är idag runt 4000 rader Python och 3000 rader XML. Det är inte mycket för en erfaren utvecklare, men för en icke-programmerare är det ett helt nytt kapitel.

Vad tycker du?

Jag vill gärna höra dina tankar. Kommentera nedan eller nå mig på LinkedIn.

0 0 röster
Article Rating
Prenumerera
Meddela vid
guest
0 Kommentarer
Äldsta
Senaste Mest omröstade
Inline feedback
Visa alla kommentarer

Relaterade inlägg

Vad är ett förlossningsbrev och varför är det bra att ha?
Vård
Vad är ett förlossningsbrev?

Inför en förlossning är det en strålande iidé att skriva ett förlossningsbrev! En förlossning är en av livets mest intensiva upplevelser. Det är också en

Chrille Hedberg logotyp
Chrille Hedberg

Använd gärna detta formulär för att komma i kontakt med mig.

0
Lämna gärna en kommentarx
()
x