Introduktion
I Odoo beskriver modeller hur affärsdata organiseras och sparas i databasen. Allt från kunder och produkter till offerter och fakturor finns representerat som modeller — de är systemets datamodell.
Att förstå Odoo-modeller är lika viktigt för utvecklare som för funktionella konsulter. Modellerna utgör grunden i Odoos datalager: de definierar fält, relationer och den viktigaste affärslogiken som styr hur data beter sig.
Den här texten fokuserar på en av de mest centrala modellerna i Odoo: sales.order. Oavsett om du bygger egna moduler, kopplar externa system eller ställer in säljprocesser kommer du regelbundet att möta den här modellen.
Vad är modellen sales.order?
Modellen sales.order fångar in offerter och kundorder. Här samlas informationen om beställningen tills den har levererats och/eller fakturerats — det är navet för säljtransaktioner.
Modellen används primärt av försäljningsmodulen i Odoo.
I praktiken skapar en säljare en offert som blir en sales.order-post i systemet. När kunden accepterar flyttas posten från utkast till bekräftad order. Samma modell hanterar både utkast och bekräftade orders; fältet för status styr var i processen ordern befinner sig.
Andra moduler bygger på sales.order genom Odoos arvsmekanismer. CRM kan länka en möjlighet till en order, redovisningen lägger till fakturarelaterade fält och lagerhanteringen adderar leveransdatum och åtaganden — utan att duplicera basstrukturen.
Viktiga fält i modellen
Nedan följer de fält som oftast är relevanta när du jobbar med offerter och ordrar. Att känna till dem gör det lättare att konfigurera och anpassa flöden.
1. name
Typ: Char. Orderns referens eller offertnummer. Vanligtvis autogenererat (t.ex. S00042) och syns i listor och utskrifter. Fungerar som den synliga identifieraren för ordern.
2. state
Typ: Selection. Visar var i livscykeln ordern befinner sig. Vanliga värden: draft (utkast), sent (offert skickad), sale (bekräftad), done (levererad/fakturerad), cancel (avbruten). Status bestämmer vilka åtgärder som tillåts.
3. partner_id
Typ: Many2one (res.partner). Kunden eller huvudsaklig kontakt. Obligatioriskt. Används i all kundlogik och vid rapportering.
4. partner_invoice_id
Typ: Many2one (res.partner). Fakturaadress. Om den inte är angiven används partner_id som standard. Används när fakturaadressen skiljer sig från huvudkontakten.
5. partner_shipping_id
Typ: Many2one (res.partner). Leveransadress. Om den saknas faller det tillbaka på partner_id. Påverkar plocklistor och fraktberäkningar.
6. user_id
Typ: Many2one (res.users). Ansvarig säljare eller användare. Används för uppföljning, provision och uppgiftsansvar. Sätts ofta utifrån säljteamet eller CRM-möjligheten.
7. team_id
Typ: Many2one (crm.team). Säljteamet. Grupperar säljare för rapportering och målsättning. Påverkar dashboards och quota-beräkningar.
8. date_order
Typ: Datetime. Orderdatum. För utkast: skapelsedatum. För bekräftade orders: bekräftelsedatum. Viktigt vid rapportering och sortering.
9. validity_date
Typ: Date. Offertens giltighetsdatum. Efter detta datum kan offerten anses ogiltig — praktiskt för tidsbegränsade erbjudanden.
10. commitment_date
Typ: Datetime. Lovad leveransdag. När detta är satt planeras leveranser utifrån det istället för standard ledtider — viktigt för kundlöften.
11. order_line
Typ: One2many (sale.order.line). Orderraderna. Varje rad innehåller produkt, kvantitet, pris och skatter — det huvudsakliga innehållet i en order.
12. amount_untaxed
Typ: Float. Delbelopp före moms. Beräknas från orderraderna och används i vyer och rapporter.
13. amount_tax
Typ: Float. Total momsbelopp. Beräknas utifrån skatteupplägg på raderna och visas på ordern och fakturan.
14. amount_total
Typ: Float. Totalt belopp inklusive moms. Det som faktureras och rapporteras som ordervärde.
15. currency_id
Typ: Many2one (res.currency). Valutan för ordern. Sätts ofta från företagets inställningar eller prislistan och påverkar alla monetära fält.
16. pricelist_id
Typ: Many2one (product.pricelist). Prislistan som styr enhetspriser på raderna. Kan hämtas från kunden eller väljas manuellt.
17. payment_term_id
Typ: Many2one (account.payment.term). Betalvillkor (t.ex. 30 dagar netto eller delbetalning). Används vid fakturaskapande.
18. fiscal_position_id
Typ: Many2one (account.fiscal.position). Skatteposition för att mappa skatter korrekt vid internationell handel eller särskilda skatteregimer.
19. client_order_ref
Typ: Char. Kundens egen referens eller inköpsordernummer. Syns på dokument och underlättar spårbarhet mot kundens system.
20. origin
Typ: Char. Ursprungsdokumentet. Till exempel namnet på en CRM-möjlighet som genererat ordern — bra för historik och spårning.
21. create_date
Typ: Datetime. Tidpunkt då posten skapades. Hanteras automatiskt av Odoo och används i revision och rapporter.
22. write_date
Typ: Datetime. Tidpunkt för senaste ändring. Också automatisk och hjälper till att se när data senast uppdaterades.
23. note
Typ: Text. Fria anteckningar, villkor eller interna instruktioner. Kan visas på offerter och fakturor vid behov.
24. require_signature
Typ: Boolean. Om sann krävs kundens signatur online innan ordern kan bekräftas — vanligt i e-handel och kundportal.
25. require_payment
Typ: Boolean. Om sann krävs betalning före bekräftelse, till exempel vid förskottsbetalningar eller depositioner.
26. invoice_status
Typ: Selection. Visar faktureringsläget: no (ej fakturerad), to invoice (faktureras), invoiced (fakturerad), upsell (ytterligare rader att fakturera).
27. locked
Typ: Boolean. Om sann kan inte ordern ändras. Sätts automatiskt vid bekräftelse eller när relaterade bokföringsposter är skapade.
28. company_id
Typ: Many2one (res.company). Anger vilket företag i en multi-company-installation ordern tillhör. Påverkar åtkomst och synlighet.
29. tag_ids
Typ: Many2many (crm.tag). Taggar för kategorisering. Bra för filtrering, segmentering och skräddarsydd rapportering.
30. signed_by
Typ: Char. Namnet på den person som signerat när require_signature används. Sparas för revisionsspår.
31. signed_on
Typ: Datetime. Tidpunkt för signaturen. Används när signatur krävs för att avsluta ordern.
32. prepayment_percent
Typ: Float. Procentandel som ska betalas i förskott. Kombineras med require_payment för deposit- eller förhandsbetalningsflöden.
Hur modellen används i affärsflöden
1. Från offert till order
Säljaren skapar en offert i utkastläge, lägger till rader och priser och skickar den till kunden. När kunden godkänner flyttas posten till bekräftad order (state = sale) och vidare till fakturering och leverans.
2. Webbshop och kundportal
Beställningar från webbplatsen blir sales.order-poster. Inställningar som require_signature och require_payment kan tvinga kundsignatur eller betalning online innan ordern bekräftas.
3. Från CRM till försäljning
När en möjlighet i CRM vinner skapas ofta en offert från den. Fältet origin pekar tillbaka på möjligheten och ansvarig användare samt säljteam påverkar rapporter och provisioner.
4. Fakturering
Från en bekräftad order skapas fakturor där fakturarader bygger på orderrader. Betalvillkor och skattepositioner följer med från ordern och invoice_status visar fakturastatus.
5. Leverans och åtagande
commitment_date används för planering av leveranser — när det finns styrs tidplanen av detta datum. partner_shipping_id anger var leveransen ska gå.
Hur utvecklare kan utöka modellen
Utvecklare utökar sales.order med flera mönster, där modellärv är det vanligaste verktyget.
Modellärv
Sätt _inherit = 'sale.order' i din modul för att lägga till fält, skriva om metoder eller införa constraint-regler. På så sätt håller du anpassningar separata och lättare uppgraderingsbara.
Lägga till fält
Definiera nya fält i din ärvda modell med rätt typ: Char, Many2one, Boolean, Integer, Text eller Selection. Tänk på företagsspecifika fält i multi-company-miljöer.
Python-utökningar
Skriv över metoder som action_confirm, create eller write för att lägga in logik. Anropa alltid super() där det behövs och var noga med beroenden för beräknade fält.
Odoo Studio
Odoo Studio låter dig lägga till fält och enkla anpassningar utan kod — praktiskt för snabba ändringar. För mer komplexa krav och långsiktig förvaltning rekommenderas fristående moduler.
God praxis
- Använd alltid rätt status i flödet. Hoppa inte över steg eller kringgå bekräftelselogik utan att förstå konsekvenserna.
- Sätt commitment_date när kunden har ett utlovat leveransdatum — det underlättar planering i lager och logistik.
- Använd commercial_partner_id när du behöver det överordnade företaget för kredituppföljning eller konsoliderad rapportering.
- Vid API-integrationer använd XML-RPC eller JSON-RPC. sales.order är tillgänglig via Odoos API; matcha externa ID:n noggrant för att undvika duplikat.
- Ge egna fält ett prefix (t.ex.
x_eller modulnamn) för att minimera krockar vid framtida Odoo-uppgraderingar.
Vanliga misstag
- Ändra inte bekräftade orderrader utan att kontrollera fältet locked — låsta orderposter ska hanteras via revisionsflöden eller korrekta arbetssteg.
- Förväxla inte partner_id med partner_invoice_id och partner_shipping_id — de har olika roller och bör sättas korrekt när adresser skiljer sig.
- Att skriva över action_confirm utan att anropa super() kan rubba andra modulers beteenden och göra framtida uppgraderingar svårare.
- Lägg inte till obligatoriska fält utan att ge standardvärden — annars kan äldre poster bli ogiltiga vid uppgraderingar.
- Göm inte att ange pricelist_id när valuta eller prisbildning skiljer sig från företagets standard; fel prislista leder lätt till felaktig fakturering.
Sammanfattning
sales.order är kärnan i Odoo Sales: här hanteras offerter och ordrar. Kunskap om modellens fält och hur den kan utökas gör det enklare att konfigurera, anpassa och integrera systemet.
Oavsett om du kartlägger säljprocesser eller utvecklar anpassade moduler så sparar en god förståelse för sales.order både tid och misstag.
Behöver du hjälp med din Odoo-implementation?
Dasolo hjälper företag att implementera, anpassa och optimera Odoo. Vi är specialiserade på API-integrationer och utveckling med djup erfarenhet av Odoos datamodell, inklusive sales.order.
Behöver du hjälp med implementation, skräddarsydda moduler eller integrationer i Odoo — vi kan bistå. Boka en demo för att diskutera ditt projekt.