Introduktion
I Odoo definerer modeller, hvordan data er struktureret og gemt i databasen. Hver enkelt del af forretningsdata, du arbejder med, fra salgsordrer til fakturaer til kontakter, lever i en model.
At forstå Odoo-modeller er essentielt for både udviklere og funktionelle konsulenter. Modellerne er fundamentet for Odoo's dataarkitektur. De definerer felter, relationer og forretningslogik.
Denne artikel fokuserer på en af de vigtigste modeller i Salgsmodulet: sale.order.line. Uanset om du bygger tilpassede moduler, integrerer eksterne systemer eller konfigurerer prisarbejdsgange, vil du arbejde med denne model.
Hvad er sale.order.line modellen
Modellen sale.order.line repræsenterer individuelle linjeposter på et tilbud eller en salgsordre i Odoo. Hver linje svarer typisk til ét produkt, med mængde, pris og skatteoplysninger.
Denne model i Odoo bruges af Salgsmodulet (sale). Den arver fra analytic.mixin til projektomkostningssporing og timesheet-integration. Når du tilføjer et produkt til et tilbud, opretter du en sale.order.line-post.
Modellen er defineret i salgsmodulet. Andre moduler udvider den gennem Odoo-modelarv. For eksempel tilføjer sale_stock leveringsrelaterede felter. sale_margin tilføjer marginberegninger. Hvert modul tilføjer det, det har brug for, uden at duplikere den grundlæggende struktur.
Nøglefelter i modellen
Her er de vigtigste Odoo-felter i sale.order.line-modellen. At forstå disse vil hjælpe dig med at arbejde effektivt med tilbud og salgsordrer.
1. order_id
Type: Many2one (sale.order). Påkrævet. Reference til den overordnede salgsordre. Dette felt forbinder hver linje til sin overordnede. Linjer slettes, når ordren slettes (kaskade).
2. sequence
Type: Integer. Standard 10. Kontrollerer visningsrækkefølgen af linjer på ordren. Bruges til sortering af sektioner, noter og produktlinjer.
3. company_id
Type: Many2one (res.company). Relateret fra order_id. Bruges til multi-selskabsregler og adgangskontrol.
4. currency_id
Type: Many2one (res.currency). Relateret fra order_id. Bruges til alle monetære felter på linjen. Sikrer korrekt valuta for prissætning.
5. order_partner_id
Type: Many2one (res.partner). Relateret fra order_id. Kunden. Bruges til prislist og skatteregler.
6. salesman_id
Type: Many2one (res.users). Relateret fra order_id. Salgspersonen. Bruges til provision og rapportering.
7. state
Type: Selection. Relateret fra order_id. Ordrestatus (udkast, sendt, salg, færdig, annulleret). Bestemmer hvilke felter der kan redigeres.
8. display_type
Type: Selection. Værdier: line_section eller line_note. Når den er indstillet, er linjen en sektion overskrift eller en note, ikke en produktlinje. Produktfelter er tomme.
9. is_downpayment
Type: Boolean. Angiver om linjen er en forskudsbetaling. Forskudsbetalinger faktureres separat.
10. is_expense
Type: Boolean. Sand, når linjen kommer fra en udgift eller leverandørfaktura. Bruges til projektomkostningssporing.
11. product_id
Type: Many2one (product.product). Det produkt, der sælges. Domænet begrænser sig til salgbare produkter. Påkrævet for produktlinjer.
12. product_template_id
Type: Many2one (product.template). Beregnet fra product_id. Bruges af produktkonfiguratoren til variantvalg.
13. name
Type: Text. Linjebeskrivelsen. Beregnet fra produkt- og brugerdefinerede attributter. Inkluderer variantdetaljer, når det er relevant.
14. product_uom_qty
Type: Float. Påkrævet. Den bestilte mængde. Standard 1.0. Kan styres af emballage.
15. product_uom
Type: Many2one (uom.uom). Enhed for måling. Standard fra produkt. Bruges til mængde og prissætning.
16. tax_id
Type: Many2many (account.tax). Skatter anvendt på linjen. Beregnet fra produkt og skattemæssig position.
17. pris_enhed
Type: Float. Påkrævet. Enhedspris pr. produkt_uom. Beregnet fra prisliste eller produkt. Kan overskrives manuelt.
18. rabat
Type: Float. Rabatprocent. Anvendes på pris_enhed før skat.
19. pris_delbeløb
Type: Monetary. Delbeløb før skat. Beregnet fra mængde, enhedspris og rabat.
20. pris_skat
Type: Float. Samlet skattebeløb. Beregnet fra pris_delbeløb og tax_id.
21. pris_total
Type: Monetary. Total inklusive skat. Hovedbeløbet til fakturering.
22. produkt_pakning_id
Type: Many2one (product.packaging). Valgfri emballage (f.eks. kasse med 12). Når den er indstillet, kan mængden styres af emballagen.
23. customer_lead
Type: Float. Ledetid i dage. Dage mellem ordrebekræftelse og forsendelse. Bruges til beregning af leveringsdato.
24. qty_delivered
Type: Float. Leveret mængde. Opdateres af lagerbevægelser eller manuelt. Bruges til delvis fakturering.
25. qty_invoiced
Type: Float. Mængde der allerede er faktureret. Beregnet ud fra fakturalinjer.
26. qty_to_invoice
Type: Float. Resterende mængde til fakturering. Beregnet ud fra qty_delivered og qty_invoiced.
27. invoice_status
Type: Selection. Værdier: upselling, faktureret, til fakturering, nej. Angiver faktureringsstatus for linjen.
28. invoice_lines
Type: Many2many (account.move.line). Links til fakturalinjer oprettet fra denne salgslinje. Bruges til sporbarhed.
29. create_date
Type: Datetime. Hvornår posten blev oprettet. Håndteres automatisk af Odoo.
30. write_date
Type: Datetime. Hvornår posten sidst blev ændret. Bruges til revision.
Hvordan denne model bruges i forretningsarbejdsgange
1. Tilbud og Salgsordre
Når en sælger opretter et tilbud, tilføjer de produkter. Hvert produkt bliver en sale.order.line. Linjerne viser mængde, pris, rabat og total. Ordren bekræftes, når kunden accepterer.
2. Prisliste og Rabatter
Prislister anvendes pr. linje. Felterne price_unit og discount beregnes ud fra prislisteregler. Volumenrabatter eller kundespecifikke priser håndteres her.
3. Levering og Fakturering
Når lageret leveres, opdateres qty_delivered. Fakturering kan ske pr. levering eller samlet. Feltet invoice_status vejleder brugeren om, hvad der er tilbage at fakturere.
4. Projekt og Tjenester
For serviceprodukter linker linjerne til projektopgaver og tidsregistreringer. Analytic.mixin arv muliggør omkostningssporing pr. projekt.
5. E-handel og Portal
Webstedets besøgende tilføjer produkter til indkøbskurven. Hver indkøbskurvlinje bliver en sale.order.line, når ordren oprettes. Produktkonfiguratoren bruger product_template_id og brugerdefinerede attributter.
Hvordan udviklere udvider denne model
Udviklere udvider sale.order.line ved hjælp af flere mønstre. Odoo modelarv er den primære mekanisme.
Model Arv
Brug _inherit = 'sale.order.line' til at udvide modellen. Tilføj nye felter, overskriv metoder eller tilføj begrænsninger. Den arvede model i Odoo holder dine ændringer i et separat modul for nem opgradering.
Tilføjelse af Felter
Definer nye Odoo-felter i din arvede model. Brug den rigtige felttype: Char, Many2one, Boolean, Integer, Text, Selection. Overvej selskabsafhængige felter til multi-selskab.
Python Udvidelser
Overskriv _compute_price_unit, _compute_price_subtotal, eller opret/skriv for at tilføje logik. Brug super() til at kalde den oprindelige. Vær forsigtig med beregnede felter og deres afhængigheder.
Odoo Studio
Odoo Studio lader dig tilføje felter uden kode. Godt til hurtige tilpasninger. For kompleks logik eller opgraderinger er tilpassede moduler mere vedligeholdelige.
Bedste praksis
- Brug display_type til sektioner og noter i stedet for falske produktlinjer. Dette holder rapporteringen ren.
- Når du bygger API-integrationer, skal du oprette linjer via order_id. Brug feltet order_line_ids på sale.order med det korrekte kommandformat.
- Respekter SQL-begrænsningerne. En produktlinje skal have product_id og product_uom. En sektion eller note skal have display_type.
- For tilpasset prissætning, brug prislisteregler når det er muligt. Overskriv compute-metoder kun når du har brug for logik, der ikke understøttes af prislister.
- For brugerdefinerede felter, brug
x_præfikset eller et modulpræfiks for at undgå konflikter med fremtidige Odoo-versioner.
Almindelige fejl
- Oprettelse af linjer uden order_id. Feltet er påkrævet. Opret altid linjer i konteksten af en ordre.
- At blande product_id og product_template_id. For produktlinjer, sæt product_id. For konfigurationsflows, brug product_template_id til at vælge en variant.
- Ændring af price_unit eller rabat efter fakturering. Når qty_invoiced er større end nul, kan prisændringer forårsage inkonsistenser.
- Overskrivning af kerne metoder uden at kalde super(). Dette kan bryde andre moduler eller fremtidige opgraderinger.
- At glemme at sætte display_type for sektion eller notelinjer. Uden det vil linjen blive behandlet som en produktlinje og vil fejle validering.
Konklusion
sale.order.line-modellen er central for Odoo Salg. Den gemmer hver produktlinje på tilbud og ordrer. At forstå dens felter og hvordan moduler udvider den vil hjælpe dig med at konfigurere, tilpasse og integrere Odoo effektivt.
Uanset om du er en funktionel konsulent, der kortlægger forretningsprocesser, eller en udvikler, der bygger brugerdefinerede moduler, vil en solid forståelse af sale.order.line spare tid og forhindre fejl.
Har du brug for hjælp med din Odoo-implementering?
Dasolo hjælper virksomheder med at implementere, tilpasse og optimere Odoo. Vi specialiserer os i API-integrationer og Odoo-udvikling. Vores team har dyb erfaring med Odoo-datastrukturen og modeller som sale.order.line.
Hvis du har brug for hjælp til din Odoo-implementering, tilpassede moduler eller integrationer, er vi her for at hjælpe. Book en demo for at diskutere dit projekt.