Inleiding
In Odoo definiëren modellen hoe gegevens zijn gestructureerd en opgeslagen in de database. Elk stuk bedrijfsgegevens waar je mee werkt, van verkooporders tot facturen tot contacten, leeft in een model.
Het begrijpen van Odoo-modellen is essentieel voor zowel ontwikkelaars als functionele consultants. Modellen zijn de basis van de Odoo-gegevensarchitectuur. Ze definiëren velden, relaties en bedrijfslogica.
Dit artikel richt zich op een van de belangrijkste modellen in Odoo: res.partner. Of je nu aangepaste modules bouwt, externe systemen integreert of workflows configureert, je zult met dit model werken.
Wat is het res.partner Model
Het res.partner-model vertegenwoordigt contacten, klanten, leveranciers en bedrijven in Odoo. Het is de centrale plek waar alle informatie over partijen wordt opgeslagen.
Dit model in Odoo wordt in bijna elk module gebruikt. Verkoop, CRM, facturatie, inkoop en e-commerce verwijzen allemaal naar res.partner. Wanneer je een klant in Verkoop aanmaakt, een lead in CRM of een leverancier in Inkoop, maak je een res.partner-record aan of koppel je eraan.
Het model is gedefinieerd in de basismodule. Andere modules breiden het uit via Odoo-modelovererving. CRM voegt velden gerelateerd aan leads toe. Boekhouding voegt krediet- en betalingsvoorwaarden toe. Elke module voegt toe wat het nodig heeft zonder de kernstructuur te dupliceren.
Belangrijke Velden in het Model
Hier zijn de belangrijkste Odoo-velden in het res.partner-model. Het begrijpen hiervan zal je helpen om effectief te werken met contacten en partners.
1. naam
Type: Char. Dit veld slaat de naam van het record op. Voor een bedrijf is het de bedrijfsnaam. Voor een persoon is het de volledige naam. Het wordt in veel Odoo-weergaven weergegeven en is de primaire identificator voor de partner.
2. create_date
Type: Datetime. Slaat de datum en tijd op wanneer het record is aangemaakt. Automatisch beheerd door Odoo. Nuttig voor rapportage en auditing.
3. write_date
Type: Datetime. Slaat de datum en tijd van de laatste wijziging op. Ook automatisch beheerd. Helpt bij het bijhouden wanneer gegevens voor het laatst zijn bijgewerkt.
4. email
Type: Char. Het primaire e-mailadres. Gebruikt voor communicatie, facturatie en portaltoegang. Odoo valideert het e-mailformaat wanneer mogelijk.
5. telefoon
Type: Char. Het hoofdtelefoonnummer. Weergegeven in contactformulieren en gebruikt voor communicatieworkflows.
6. mobiel
Type: Char. Mobiele telefoonnummer. Vaak gebruikt voor SMS of dringende meldingen wanneer dit verschilt van het hoofdtelefoonnummer.
7. straat
Type: Char. De eerste regel van het adres. Onderdeel van het standaard adresblok dat op documenten en formulieren wordt gebruikt.
8. straat2
Type: Char. De tweede regel van het adres. Gebruikt voor appartementnummers, gebouwnamen of aanvullende adresdetails.
9. stad
Type: Char. De stad of het dorp. Adresopmaak kan per land verschillen.
10. postcode
Type: Char. Post- of ZIP-code. Gebruikt voor adresvalidatie en verzendcalculaties.
11. state_id
Type: Many2one (res.country.state). De staat of provincie. Het domein is gefilterd op land. Niet alle landen gebruiken staten.
12. country_id
Type: Many2one (res.country). Het land. Bepaalt de adresopmaak, belastingregels en lokalisatie.
13. is_company
Type: Boolean. Geeft aan of het record een bedrijf of een persoon is. Bedrijven kunnen kindcontacten hebben. Personen kunnen via parent_id aan een bedrijf worden gekoppeld.
14. parent_id
Type: Many2one (res.partner). Voor contactrecords, dit koppelt aan het gerelateerde bedrijf. Maakt de bedrijf-contact hiërarchie mogelijk. Wanneer ingesteld, kunnen adres- en andere velden van de ouder erven.
15. child_ids
Type: One2many (res.partner). De inverse van parent_id. Lijst alle contacten die tot een bedrijf behoren. Gebruikt om van een bedrijf naar zijn contacten te navigeren.
16. company_id
Type: Many2one (res.company). In multi-company setups geeft dit aan tot welk Odoo bedrijf de partner behoort. Beïnvloedt de zichtbaarheid en toegang van records.
17. btw
Type: Char. Belasting-ID of btw-nummer. Gevalideerd volgens het landformaat. Gebruik een schuine streep om aan te geven dat de partner niet onderhevig is aan belasting. Belangrijk voor facturering en naleving.
18. klant_rang
Type: Integer. Geeft de klantstatus aan. Odoo verhoogt dit wanneer de partner verkopen heeft. Gebruikt om klanten te filteren en prioriteren in lijsten en rapporten.
19. leverancier_rang
Type: Integer. Geeft de leverancierstatus aan. Verhoogd wanneer de partner aankooporders of facturen heeft. Gebruikt om leveranciers te identificeren.
20. gebruiker_id
Type: Many2one (res.users). De verkoper of verantwoordelijke gebruiker. Gebruikt voor CRM, verkoopteams en taaktoewijzing.
21. type
Type: Selectie. Adres type voor kindcontacten: Contact, Factuur, Levering of Anders. Bepaalt welk adres op documenten wordt gebruikt. Alleen relevant voor contacten onder een bedrijf.
22. ref
Type: Char. Interne referentie of code. Nuttig voor mapping met externe systemen en aangepaste nummering.
23. website
Type: Char. Website-URL. Gebruikt op het contactformulier en in e-commerce contexten.
24. comment
Type: Html. Interne notities. Zichtbaar voor interne gebruikers. Vaak gebruikt voor verkoopnotities of speciale instructies.
25. active
Type: Boolean. Soft delete-vlag. Wanneer False, wordt het record gearchiveerd en verborgen voor standaardweergaven. Records worden niet fysiek verwijderd.
26. lang
Type: Selection. Voorkeurs taal. E-mails en documenten die naar deze partner worden verzonden, kunnen worden vertaald. Geërfd van de bovenliggende wanneer van toepassing.
27. image_1920
Type: Binary. Partnerafbeelding of logo. Odoo slaat meerdere formaten op. Gebruikt in formulieren, rapporten en op de website.
28. category_id
Type: Many2many (res.partner.category). Tags of categorieën. Gebruikt voor segmentatie, filtering en marketing. Flexibel voor aangepaste classificatie.
Hoe Dit Model Wordt Gebruikt in Bedrijfsworkflows
1. Verkoop en CRM
Wanneer een verkoper een offerte aanmaakt, selecteert hij een klant uit res.partner. Hetzelfde partnerrecord wordt gebruikt voor de lead, kans en bestelling. Klantrang en user_id sturen rapportage en toewijzing.
2. Facturatie
Facturen en rekeningen verwijzen naar een partner voor het factuuradres. Het btw-veld wordt gebruikt voor belastingberekeningen. Kredietlimiet en betalingsvoorwaarden worden vaak opgeslagen op de partner.
3. Aankoop en Leveranciers
Inkooporders en leveranciersfacturen zijn gekoppeld aan res.partner. Leverancier rang identificeert actieve leveranciers. Het buyer_id veld wijst een verantwoordelijke gebruiker toe voor leveranciersbeheer.
4. E-commerce en Portaal
Websitebezoekers kunnen partnerrecords aanmaken bij registratie. Deze records worden gebruikt voor bestellingen, offertes en portaaltoegang. Adres- en contactgegevens komen van de partner.
5. Multi-Company en Consolidatie
In multi-company setups kan dezelfde juridische entiteit bestaan als verschillende partnerrecords per bedrijf. Het company_id veld en inter-company regels bepalen hoe gegevens worden gedeeld.
Hoe Ontwikkelaars Dit Model Uitbreiden
Ontwikkelaars breiden res.partner uit met verschillende patronen. Odoo modelovererving is het belangrijkste mechanisme.
Modelovererving
Gebruik _inherit = 'res.partner' om het model uit te breiden. Voeg nieuwe velden toe, overschrijf methoden of voeg beperkingen toe. Het erfmodel in Odoo houdt je wijzigingen in een aparte module voor gemakkelijke upgrades.
Velden Toevoegen
Definieer nieuwe Odoo-velden in je geërfde model. Gebruik het juiste veldtype: Char, Many2one, Boolean, Integer, Text, Selection. Overweeg bedrijfsspecifieke velden voor meerdere bedrijven.
Python Uitbreidingen
Overschrijf create, write of unlink om logica toe te voegen. Gebruik super() om de originele aanroep te doen. Wees voorzichtig met berekende velden en hun afhankelijkheden.
Odoo Studio
Odoo Studio stelt je in staat om velden toe te voegen zonder code. Goed voor snelle aanpassingen. Voor complexe logica of upgrades zijn aangepaste modules beter onderhoudbaar.
Beste Praktijken
- Gebruik de bedrijf-contact hiërarchie correct. Maak eerst het bedrijf aan, voeg vervolgens contacten toe met parent_id.
- Stel country_id in voor de juiste adresopmaak en belastingverwerking.
- Gebruik commercial_partner_id wanneer je de bovenliggende entiteit nodig hebt voor groepering (bijv. voor krediet of rapportage).
- Bij het bouwen van API-integraties, gebruik de XML-RPC of JSON-RPC API. Het res.partner model is volledig blootgesteld. Map externe ID's zorgvuldig.
- Voor aangepaste velden, gebruik de
x_prefix of een moduleprefix om conflicten met toekomstige Odoo-versies te vermijden.
Veelvoorkomende Fouten
- Duplicaatpartners aanmaken in plaats van bestaande te zoeken. Gebruik
email_normalizedofrefvoor deduplicatie. - Verwarring tussen parent_id en company_id. parent_id is voor de link tussen contact en bedrijf. company_id is voor multi-company Odoo.
- Vergeten het type in te stellen op kindcontacten. Factuur- en afleveradressen hebben het juiste type nodig voor documenten.
- Kernmethoden overschrijven zonder super() aan te roepen. Dit kan andere modules of toekomstige upgrades breken.
- Vereiste aangepaste velden toevoegen zonder standaardwaarden. Bestaande records zullen falen bij validatie tijdens de upgrade.
Conclusie
Het res.partner model is centraal in Odoo. Het slaat contacten, klanten en leveranciers op. Begrijpen van de velden en hoe modules het uitbreiden zal je helpen Odoo effectief te configureren, aanpassen en integreren.
Of je nu een functionele consultant bent die bedrijfsprocessen in kaart brengt of een ontwikkelaar die aangepaste modules bouwt, een goed begrip van res.partner zal tijd besparen en fouten voorkomen.
Hulp Nodig Bij Je Odoo Implementatie?
Dasolo helpt bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo. We zijn gespecialiseerd in API-integraties en Odoo-ontwikkeling. Ons team heeft diepgaande ervaring met de Odoo-gegevensarchitectuur en modellen zoals res.partner.
Als je hulp nodig hebt bij je Odoo-implementatie, aangepaste modules of integraties, zijn we hier om te helpen. Boek een demo om je project te bespreken.