Het CRM van NationwideLegal, op Odoo 18
NationwideLegal draait haar commerciële operatie op een CRM dat Polargate bouwde op Odoo 18 Enterprise en waarvan het nog steeds de technische regie voert: één eigen module, vijf nieuwe modellen, rechten opnieuw opgebouwd rond hoe het team echt verkoopt, en na elke deploy een verificatie tegen productie.

- 99
- geautomatiseerde tests voor de module, vanaf nul
- 313 ms
- om de nieuwe velden over 400 echte productierecords te lezen
Het probleem
Het CRM moest passen bij een verkoopteam, niet bij een organigram. Odoo levert één brede beheerdersrol en bijna niets tussen die rol en een gewone gebruiker, dus de verkoper die de hele pijplijn moest zien, kon uiteindelijk ook alles wijzigen, en wie een collega wilde toevoegen had daar beheerdersrechten voor nodig. De activiteiten maakten het erger, want de agenda liet ieders werk aan iedereen zien. Daar kwam bij dat de transactionele e-mail faalde, dat de invoerschermen niet leken op de tool waar het team vandaan kwam, en dat niemand had gecontroleerd of een toekomstige upgrade ongedaan te maken was zonder dataverlies.
Wat we bouwden
Eén eigen module op Odoo 18 Enterprise, zonder afhankelijkheden buiten Community-modules: vijf nieuwe modellen, elk met een volledig rechtenbestand zonder gaten, plus uitbreidingen van de standaardmodellen voor verkoopkansen, contactpersonen, activiteiten en fasen. Het rechtenmodel is herbouwd als vier losse instellingen per gebruiker in plaats van één monolithische rol. Een eigen groep maakt gebruikers aan met een barrière in het model zelf, zodat die nooit een beheerder kan aanmaken of aanraken. De agenda is buiten de recordregels om opgelost, want op dat model bepalen recordregels het lezen niet. De e-mail is hersteld in de authenticatielaag, niet in het ERP. En de deliveryketen heeft eigen regels: de testsuite draait bij elke development- en staging-build, de stap naar productie zet een mens, en elke deploy eindigt met alleen-lezen controles tegen het live systeem.
Het resultaat
Vijftien deliverables afgerond in vijf weken, samengebracht in een overdrachtsdocument. De module ging van geen eigen tests naar 99 groene, met ook de negatieve gevallen geverifieerd. Elke verkoper ziet de eigen agenda, de beheerder ziet ze allemaal. Gebruikers kunnen worden aangemaakt zonder beheerdersrechten uit te delen, geverifieerd in de browser met een account dat alleen dat recht heeft. De transactionele e-mail verstuurt. Migraties zijn omkeerbaar omdat de rollback is gerepeteerd: 132 rijen en 56 relaties over 200 records kwamen intact terug. Van merge tot de live versie in productie duurt tien tot vijftien minuten, en elke deploy eindigt met dezelfde controles: bij de laatste werden de nieuwe velden over 400 echte records in 313 ms gelezen.
Stack
- Odoo
De context
De klant is NationwideLegal. De commerciële operatie draait op een CRM: verkoopkansen, de firma's waar ze bij horen, de contactpersonen binnen elke firma en de adressen daarachter. Polargate bouwde dat CRM op Odoo 18 Enterprise en voert sindsdien de technische regie.
Alles wat op maat is gemaakt, zit in één eigen module. Die is nergens van afhankelijk buiten Community-modules, dus er staat geen addon van derden in het kritieke pad. De module voegt vijf nieuwe modellen toe, elk met een volledig rechtenbestand zonder gaten, en breidt de standaardmodellen voor verkoopkansen, contactpersonen, activiteiten en fasen uit.
De deliveryketen is bewust saai: een private repository, een beheerd Odoo-project en de productieomgeving van de klant die naar diezelfde omgeving wijst. Het platform draait de testsuite bij elke development- en staging-build. Naar productie gaat het nooit vanzelf, een mens zet die stap met de hand. Van merge tot de live versie in productie duurt tien tot vijftien minuten.
Rechten gebouwd rond hoe het team echt verkoopt
We hebben het rechtenmodel opnieuw opgebouwd rond de manier waarop de verkopers echt werken, met vier losse instellingen per gebruiker in plaats van één monolithische rol. Een gebruiker kan de ene wel krijgen en de andere niet, en dat is precies wat een verkoopteam nodig heeft en wat één rol niet kan uitdrukken.
De agenda
Elke verkoper ziet de eigen activiteiten, de beheerder ziet en beheert ze allemaal. Daar kwamen we niet met een recordregel. In Odoo wordt het lezen van activiteiten niet door recordregels bepaald, omdat dat model een eigen native zoek- en toegangscontrole meebrengt, dus het moest anders. De eerste versie leunde op een contextvlag en lekte. Toen de klant het meldde, hebben we het meteen hersteld en opnieuw getest met het account van de betrokken gebruiker.
Gebruikers aanmaken zonder beheerder te zijn
Odoo kent standaard geen tussenrol die gebruikers kan aanmaken zonder beheerder te zijn. Dat hebben we in een lokale omgeving geverifieerd: de enige standaardgroep met dat recht tilt zichzelf in één schrijfactie op tot beheerder. Daarom bouwden we een eigen groep, met een eigen toegangslijst en een barrière in het model zelf. Die kan niemand met beheerdersgroepen achterlaten, kan een gebruiker die dat al is niet wijzigen en kan het wachtwoord van een ander niet schrijven. Geverifieerd in de browser met een account dat alleen dat recht heeft.
Invoer die lijkt op het gereedschap waar het team vandaan kwam
Bedrijf, adres en contactpersoon gaan er op één pagina in, zoals in de tool die het team eerder gebruikte. De duplicaatdetectie draait op een genormaliseerde, geïndexeerde naam die leestekens en juridische achtervoegsels negeert: hij waarschuwt en biedt aan het record aan het bestaande te koppelen in plaats van een tweede aan te maken. De lijst met achtervoegsels moest gesnoeid worden, want een paar woorden erin trokken twee echt verschillende firma's samen tot één.
Transactionele e-mail
De e-mail faalde, en niet in het ERP maar in de authenticatielaag. Met SMTP-authenticatie aan en het juiste account ingesteld was de fout weg.
Upgrades die je ongedaan kunt maken
We namen de risico-inschatting van een migratie niet op gezag aan, we repeteerden hem reproduceerbaar in een container. De bevinding: als een veld uit het model verdwijnt, verwijdert het platform de tabel en de kolommen niet, het laat ze verweesd achter met de data er nog in. De geplante rijen overleefden de upgrade en de rollback gaf zowel de code als de toegang tot de data terug, 132 rijen en 56 relaties over 200 records. De migratie is omkeerbaar, en dat is ze omdat het getest is, niet omdat de documentatie het zegt.
Verificatie tegen productie, na elke deploy
Er is een geschreven recept en het draait na elke deploy. Lees de live versie van de module. Controleer de weergave tegen de gecombineerde definitie, niet tegen de overerving. Bevestig dat de nieuwe velden bestaan. Klok het lezen ervan over echte records: 400 verkoopkansen kwamen terug in 313 ms, en dat is de controle dat er geen lus en geen zware query is binnengeslopen. Download de assetsbundel en valideer die, want een kapotte bundel zie je pas als een gebruiker de pagina opent. De discipline is hard en simpel: in productie kijk je, je raakt niets aan.
Audits werken net zo. De eerste fase is geen code lezen, maar het scenario draaien tegen een echte omgeving in de huid van de betrokken gebruiker, met de staat voor en na elke schrijfactie erbij. Een recht valideren met een beheerdersaccount bewijst niets, want de bypass stelt dat account vrij. Een test die alleen de tekst van een attribuut controleert bewijst evenmin iets. Eén van die audits liep over 41 agenten en 2,3 miljoen tokens, met twee onafhankelijke sceptici die elke bevinding aanvochten voordat die meetelde.
Doorlopende technische regie
Vijftien deliverables afgerond in vijf weken, samengebracht in een overdrachtsdocument. De module ging van geen eigen tests naar 99 groene, met ook de negatieve gevallen geverifieerd, want een rechtentest die slaagt terwijl hij zou moeten falen is erger dan geen test.
De samenwerking rust op één regel die haar gezond houdt: scope en prioriteit worden afgesproken voordat iets op de lijst komt, niet erna, en het wekelijkse referentiedocument komt van Polargate.
Vragen over dit project
Kun je Odoo aanpassen zonder de mogelijkheid tot terugdraaien te verliezen?
Kunnen verkopers in Odoo verschillende rechten krijgen zonder beheerder te zijn?
Gerelateerd werk
Global Dynamic Security GroupMerk en tweetalige site voor Global Dynamic Security Group
Huisstijl, een handboek van 15 pagina's en een tweetalige bedrijfssite (Spaans en Engels) voor Global Dynamic Security Group (GDS), een beveiligingsgroep in de Dominicaanse Republiek, opgeleverd als één project met een vaste prijs.
2026Bekijk de case
GlobaliaHet corporate webplatform van Globalia
Globalia, de Spaanse reisgroep, had haar personeelsgegevens in Microsoft 365 staan en haar publieke website ergens anders. Polargate bouwde één webplatform op één repository: een medewerkersgids die synchroon loopt met Microsoft 365, een digitaal visitekaartje met passen voor Apple Wallet en Google Wallet, en de publieke site van de groep, leesbaar gemaakt voor AI-crawlers zonder die opnieuw te bouwen. Pedro Ciordia werkt bij Globalia, dus dit is omzet van een verbonden partij en geen klant die op de open markt is gewonnen.
2026Bekijk de case
B2B-dienstverlener, EuropaEen bedrijfswebsite hardenen die door een DNS-filter werd geblokkeerd
Het bedrijfs-DNS-filter van een van zijn eigen afnemers weigerde het domein van onze klant, waardoor die niet meer als leverancier van dat bedrijf kon opereren. De site was niet gehackt en stond niet op een blacklist. Hij was simpelweg niet gehardend. Polargate stelde dat in een week vast, verhuisde het CMS naar hosting die de klant zelf beheert en hardende de site daar, omdat het beheerpaneel de enige beschikbare toegang was.
2026Bekijk de case
Start de motor
Vertel ons in een paar korte vragen wat je bouwt. Een senior engineer antwoordt binnen twee werkdagen schriftelijk met een eerste inschatting van scope, planning en prijs.