Siirry sisältöön

sales.order-malli: Odoo Sales Orderin rakenne ja toiminta

Kattava opas Odoon myyntitilausmalliin kehittäjille ja konsulttiprojekteihin
10. maaliskuuta 2026 kirjoittanut
sales.order-malli: Odoo Sales Orderin rakenne ja toiminta
Dasolo
| Ei vielä kommentteja

Johdanto


Odoossa tiedot järjestetään malleihin: jokainen liiketoiminnan olio — tilaus, lasku tai asiakas — tallennetaan oman mallinsa riveiksi ja kentiksi tietokantaan.


Odoon malleihin perehtyminen on pakollinen taito sekä kehittäjälle että toiminnalliselle konsultille. Mallit muodostavat sovelluksen tietorakenteen, määrittävät kentät, suhteet ja sen, missä liiketoimintasääntöjä ajetaan.


Tässä artikkelissa syvennytään yhteen myynnin ytimessä olevaan malliin: sales.order. Olitpa rakentamassa moduulia, integroimassa ulkoisia järjestelmiä tai määrittämässä myyntiprosesseja, tähän malliin törmäät varmasti.

Mikä on sales.order‑malli


sales.order edustaa tarjouksia ja myyntitilauksia Odoossa — se on paikka, johon kaikki myyntitapahtuman tiedot kerätään ennen laskutusta ja toimitusta.


Mallia käyttää Odoon Myyntimoduuli (=Sales), joka hoitaa tarjousten luomisen, vahvistuksen ja niihin liittyvät prosessit.


Myyjä luo tarjouksen sales.order‑tietueena. Kun asiakas hyväksyy, tila kirjaa tilan muutoksen luonnoksesta vahvistetuksi. Sama malli pitää sisällään sekä luonnokset että vahvistetut tilaukset; lifecycle‑tila (state) kertoo missä vaiheessa ollaan.


Muita moduuleja laajentavat sales.orderia periytyvillä lisillä: CRM voi linkittää mahdollisuuden tilaukseen, kirjanpito lisätä laskutukseen liittyviä kenttiä ja varasto tuoda toimitusaikoja. Laajennukset lisäävät oman logiikkansa ilman, että core‑rakenne kopioidaan.

Mallin keskeiset kentät


Seuraavaksi käydään läpi tärkeimmät kentät, joiden tuntemus helpottaa tarjousten ja tilausten käsittelyä ja raportointia.


1. name

Tyyppi: Char. Tilaus- tai tarjousviite, usein automaattisesti generoitu (esim. SO00042). Näkyy listoissa ja tulostusmateriaaleissa — perusidentifikaattori tilaukselle.


2. state

Tyyppi: Selection. Seuraa tilauksen elinkaarta: draft (luonnos), sent (lähetetty), sale (vahvistettu), done (toimitettu/laskutettu) ja cancel (peruttu). Tilakenttä määrää, mitä toimintoja voidaan suorittaa.


3. partner_id

Tyyppi: Many2one (res.partner). Asiakas tai pääkontakti. Pakollinen kenttä, jota käytetään kaikkeen asiakaskohtaiseen logiikkaan ja raportointiin.


4. partner_invoice_id

Tyyppi: Many2one (res.partner). Laskutusosoite. Jos jätetään tyhjäksi, käytetään partner_id:tä. Käytetään tapauksissa, joissa laskutusosoite poikkeaa pääyhteyshenkilöstä.


5. partner_shipping_id

Tyyppi: Many2one (res.partner). Toimitusosoite. Oletuksena partner_id. Vaikuttaa toimituksiin ja kulkulaskentaan.


6. user_id

Tyyppi: Many2one (res.users). Myyjä tai vastuuhenkilö. Käytetään CRM‑raportoinnissa, provisioissa ja aktiviteettien kohdistamisessa.


7. team_id

Tyyppi: Many2one (crm.team). Myyntitiimi. Ryhmittelyt ja tiimikohtainen seuranta perustuvat tähän kenttään.


8. date_order

Tyyppi: Datetime. Tilauksen päivämäärä: luonnoksilla tyypillisesti luonnoksen luontipäivä, vahvistetuilla tilannevoreilla vahvistuspäivä. Tärkeä kenttä raportoinnissa.


9. validity_date

Tyyppi: Date. Tarjouksen voimassaoloaika. Tämän jälkeen tarjous voi vanhentua — hyödyllinen määräaikaisissa tarjouksissa.


10. commitment_date

Tyyppi: Datetime. Sovittu toimituspäivä. Kun asetetaan, toimitukset ajoitetaan tämän mukaan, mikä auttaa lupausten pitämisessä.


11. order_line

Tyyppi: One2many (sale.order.line). Tilausrivit — jokaisella rivillä tuote, määrä, hinta ja verot. Tämä osa sisältää tilauksen varsinaisen sisällön.


12. amount_untaxed

Tyyppi: Float. Summa ilman veroja. Lasketaan tilauserivien perusteella, käytetään näyttöön ja raportointiin.


13. amount_tax

Tyyppi: Float. Verojen yhteismäärä. Lasketaan rivikohtaisten verojen perusteella ja näytetään tilauksella ja laskulla.


14. amount_total

Tyyppi: Float. Kokonaismäärä sisältäen verot — olennainen summa laskutusta ja raportointia varten.


15. currency_id

Tyyppi: Many2one (res.currency). Valuutta. Periytyy yleensä yritykseltä tai hinnastolta; kaikki rahakentät käyttävät tätä valuuttaa.


16. pricelist_id

Tyyppi: Many2one (product.pricelist). Hinnasto, joka määrittää yksikköhinnat riville. Voidaan asettaa asiakkaan kautta tai manuaalisesti.


17. payment_term_id

Tyyppi: Many2one (account.payment.term). Maksuehdot (esim. 14 pv, 50% etukäteen). Käytetään laskutusta luotaessa.


18. fiscal_position_id

Tyyppi: Many2one (account.fiscal.position). Verotuksen kartoituspaikka—käytetään, kun asiakkaalla on erityinen verokäytäntö tai eri maa.


19. client_order_ref

Tyyppi: Char. Asiakkaan oma viitenumero tai ostotilausnumero. Näkyy dokumenteissa ja raportoinnissa.


20. origin

Tyyppi: Char. Lähdedokumentti tai brändätty alkuperä (esim. voittoketju CRM‑mahdollisuudesta). Auttaa jäljitettävyydessä.


21. create_date

Tyyppi: Datetime. Tallenna tietueen luontiajankohdan automaattisesti — hyödyllinen auditoinneissa.


22. write_date

Tyyppi: Datetime. Viimeisin muokkausaika, myös automaattinen — kertoo, milloin tietoja viimeksi muutettiin.


23. note

Tyyppi: Text. Lisäehdot, sisäiset muistiinpanot tai mukaansopivat ehdot, jotka voidaan halutessa näyttää tarjouksella tai laskulla.


24. require_signature

Tyyppi: Boolean. Jos päällä, asiakas tarvitsee sähköisen allekirjoituksen ennen vahvistusta — käytetään verkkokaupassa ja portaalissa.


25. require_payment

Tyyppi: Boolean. Jos päällä, maksu vaaditaan ennen tilausta — tyypillinen ennakkomaksu‑ tai käsirahamalli.


26. invoice_status

Tyyppi: Selection. Seuraa laskutuksen tilaa: no (ei laskutettu), to invoice (laskutettavissa), invoiced (laskutettu), upsell (lisälaskutusmahdollisuus).


27. locked

Tyyppi: Boolean. Kun päällä, tilausta ei voi muokata — asetetaan automaattisesti vahvistuksen tai muistiinpanojen jälkeen.


28. company_id

Tyyppi: Many2one (res.company). Moniyritysympäristössä tämä kertoo, mille yritykselle tilaus kuuluu ja määrittää näkyvyyden sekä käyttöoikeudet.


29. tag_ids

Tyyppi: Many2many (crm.tag). Merkinnät luokitteluun: suodatus, segmentointi ja mukautetut työnkulut hyödyntävät tageja.


30. signed_by

Tyyppi: Char. Nimen kenttä, joka tallentaa allekirjoittajan, jos allekirjoitus vaadittiin — hyödyllinen auditissa.


31. signed_on

Tyyppi: Datetime. Allekirjoitusajankohta — kertoo, milloin asiakas hyväksyi sähköisesti.


32. prepayment_percent

Tyyppi: Float. Ennakkomaksun prosentti tilauksen loppusummasta. Käytetään yhdessä require_paymentin kanssa käsiraha‑toiminnoissa.

Miten malli linkittyy liiketoimintaprosesseihin


1. Tarjouksesta vahvistettuun tilaukseen

Myyjä laatii tarjouksen, lisää rivit ja hinnat ja lähettää asiakkaalle. Asiakas hyväksyy — tila muuttuu luonnoksesta vahvistetuksi ja tilauksesta voidaan luoda lasku tai toimitusasiakirjat.


2. Verkkokauppa ja asiakasportaali

Verkkokaupan tilaukset syntyvät sales.order‑tietueiksi. Asetukset kuten require_signature ja require_payment mahdollistavat, että verkko‑ostoksessa vaaditaan maksu tai allekirjoitus ennen vahvistusta.


3. CRM‑mahdollisuudesta tilaukseksi

Voitetusta mahdollisuudesta luodaan tarjous, joka linkittyy alkuperäiseen mahdollisuuteen origin‑kentässä. user_id ja team_id ohjaavat raportointia ja provisiolaskentaa.


4. Laskutusprosessit

Vahvistetusta tilauksesta luodaan laskuja: rivit tuodaan tilaukselta, maksuehdot ja verokäytännöt periytyvät, ja invoice_status seuraa etenemistä.


5. Toimitukset ja toimituslupaukset

commitment_date ohjaa toimitusaikataulutusta: kun se on asetettu, varaston lähdöt ajoittuvat sen mukaan ja partner_shipping_id määrittää toimitusosoitteen.

Miten kehittäjät laajentavat mallia


Kehittäjät laajentavat sales.orderia eri tavoilla; tyypillisin tapa on Odoon periytyvä malli‑inheritance.


Mallien periytyminen

Käytä _inherit = 'sale.order' luodaksesi laajennuksen. Lisää kenttiä, ylikirjoita metodeja tai lisää rajoitteita. Muutos pidetään erillisessä moduulissa, mikä helpottaa päivityksiä ja ylläpitoa.


Uusien kenttien lisääminen

Määrittele kentät periytetyssä mallissa oikealla tyypillä: Char, Many2one, Boolean, Integer, Text tai Selection. Huomioi myös yrityskohtaiset kentät moniyritysmalleissa.


Python‑laajennukset

Ylikirjoita metodeja kuten action_confirm, create tai write lisälogiikan tarpeen mukaan. Käytä aina super()‑kutsua alkuperäisen toiminnallisuuden säilyttämiseksi ja huomioi laskettujen kenttien riippuvuudet.


Odoo Studio

Odoo Studio soveltuu nopeisiin kenttä‑ ja näkymämuutoksiin ilman koodausta. Monimutkaisissa tai pitkän elinkaaren muutoksissa custom‑moduuli on usein kestävämpi ratkaisu.

Parhaat käytännöt


  • Käytä oikeaa tilaa (state) jokaisessa prosessivaiheessa — älä ohita tilojen logiikkaa tai pakota tilaa manuaalisesti.
  • Aseta commitment_date aina, kun asiakkaalle on luvattu tietty toimituspäivä: se parantaa varaston ajoitusta ja lupauksen pitämistä.
  • Kun tarvitset ylin yritys‑tai konsernitason asiakasyhteenvetoja (esim. luottoarviot), käytä commercial_partner_id:tä — se ryhmittelee tytäryhtiöiden tiedot oikein.
  • API‑integraatioissa käytä XML‑RPC:tä tai JSON‑RPC:tä; sales.order on saatavilla ja ulkoisten ID‑kenttien kartoitus kannattaa tehdä huolella.
  • Oman kentän nimeämisessä suositaan x_‑ tai moduuliprefiksiä välttämään konfliktit tulevien Odoo‑versioiden kanssa.

Yleisimmät virheet


  • Kun muokkaat vahvistettua tilausta, tarkista locked‑kenttä. Lukittuja tilauksia ei voi muuttaa suoraan — tee uusi revisio tai käytä oikeaa työnkulkua.
  • Yleisimmät osoitevirheet syntyvät partner_id, partner_invoice_id ja partner_shipping_id sekoittamisesta — käytä kaikkia, jos osoitteet eroavat toisistaan.
  • Älä ylikirjoita action_confirmia ilman super()‑kutsua — se rikkoo muiden moduulien odotuksia ja vaikeuttaa päivityksiä.
  • Lisääntöjen vaatimat pakolliset kentät ilman oletusarvoja aiheuttavat validointivirheitä olemassa oleville tilauksille päivityksissä.
  • Unohdetut hinnastot tai väärä currency_id johtavat virheelliseen hinnoitteluun ja laskutukseen — muista asettaa pricelist_id oikein.

Yhteenveto


sales.order on myynnin keskeinen malli Odoossa: tarjousten ja tilausten tallennus, tilan seuranta ja laajennettavuus tekevät siitä avainkomponentin järjestelmässä.


Toiminnallista prosessikartoitusta tekeville ja kehittäjille perusteellinen sales.order‑osaaminen säästää aikaa ja ehkäisee virheitä toteutuksissa.

Tarvitsetko apua Odoo‑käyttöönotossa?


Dasolo tarjoaa apua Odoo‑käyttöönotossa, integroitumisessa ja räätälöinneissä. Meillä on syvä kokemus Odoon tietomalleista ja erityisesti sales.orderin kaltaisista ydinkomponenteista.


Tarvitsetko apua Odoo‑projektiisi, moduulatekniikkaan tai integraatioihin? Ota yhteyttä — autamme mielellämme. Varaa demonstraatio keskustellaksesi projektistasi.

sales.order-malli: Odoo Sales Orderin rakenne ja toiminta
Dasolo 10. maaliskuuta 2026
Jaa tämä kirjoitus
Kirjaudu sisään jättääksesi kommentin