Tilaukset — Odoo → Custobar
Workflow: 🧾 Päivitä tilaukset Custobariin
ID: AxwSZp8rfdeizJwU
Ajastus: Joka 5 minuutti
Toimintaperiaate
Hakee Odoosta vahvistetut myyntitilaukset ja niiden tilausrivit, yhdistää ne, laskee verolliset yksikköhinnat ja alennukset sentteinä, ja lähettää erissä Custobariin. Jokainen tilausrivi muodostaa oman Custobar-sales-tietueen.
flowchart LR
A["⏰ Schedule<br/>5 min"] --> B["📥 Get Odoo<br/>Orders"]
A --> C["📥 Get Odoo<br/>Order Lines"]
B --> D["🔗 Merge"]
C --> D
D --> E["🔄 Transform<br/>Orders"]
E --> F["📦 Batch<br/>Builder"]
F --> G["🔁 Loop"]
G -->|erä| H["📤 HTTP POST<br/>/sales/upload/"]
H --> I["⏳ Wait 10s"]
I --> G
G -->|valmis| J["💾 Save<br/>Timestamp"]
J --> K["✅ Done"]
Odoo-haku
Tilausworkflow tekee kaksi rinnakkaista hakua ja yhdistää tulokset:
Haku 1: Myyntitilaukset
| Asetus | Arvo |
|---|---|
| Malli | sale.order |
| Suodattimet | state = "sale", write_date > edellinen_ajo |
Kentät:
| Odoo-kenttä | Kuvaus |
|---|---|
name |
Tilausnumero (esim. SO12345) |
date_order |
Tilauspäivä |
currency_id |
Valuutta |
amount_total |
Kokonaissumma (verollinen) |
id |
Tilauksen ID |
partner_id |
Asiakas [id, "nimi"] |
write_date |
Muutosaika |
state |
Tila |
Haku 2: Tilausrivit
| Asetus | Arvo |
|---|---|
| Malli | sale.order.line |
| Suodattimet | price_unit > 0, write_date > edellinen_ajo |
Kentät:
| Odoo-kenttä | Kuvaus |
|---|---|
order_id |
Tilauksen viite [id, "SO12345"] |
name |
Rivin kuvaus |
product_id |
Tuote [id, "nimi"] |
price_total |
Verollinen kokonaishinta |
product_uom_qty |
Määrä |
price_unit |
Veroton yksikköhinta |
price_tax |
Veron osuus |
discount |
Alennusprosentti |
Merge (yhdistäminen)
Tilaukset ja tilausrivit yhdistetään Combine by Position -moodilla. Tilausrivit saavat ylätason tilauksen tiedot (asiakas, tilauspäivä, kokonaissumma) mukaan muunnoksessa.
Hintalogiikka
const qty = product_uom_qty || 1;
// Verollinen yksikköhinta (Odoon price_total sisältää veron)
const unitPriceWithTax = qty > 0 ? price_total / qty : 0;
// Alennussumma sentteinä
const discountAmount = discount > 0
? Math.round(price_unit * (discount / 100) * qty * 100)
: 0;
Esimerkki
Tilausrivi: 3 kpl tuotetta, price_unit = 10,00 €, price_total = 37,20 € (sis. ALV 24 %), discount = 0 %
unit_price= 37,20 / 3 = 12,40 € → 1240 senttiätotal= 37,20 € → 3720 senttiädiscount= 0 → 0 senttiä
Custobar-data
Endpoint: POST https://rst-steel.custobar.com/api/sales/upload/
Jokainen tilausrivi lähetetään omana sales-tietueenaan:
{
"sales": [
{
"sale_external_id": "SO12345",
"sale_customer_id": "5678",
"sale_date": "2026-02-27 14:30:00",
"sale_total": 9920,
"external_id": "44001",
"product_id": "12345",
"unit_price": 2480,
"quantity": 4,
"discount": 0,
"total": 9920
}
]
}
Kenttäkartoitus
| Custobar-kenttä | Odoo-lähde | Muunnos |
|---|---|---|
sale_external_id |
order_id[1] tai name |
Tilausnumero (esim. SO12345) |
sale_customer_id |
partner_id[0] |
Asiakkaan ID merkkijonona |
sale_date |
date_order |
Tilauksen vahvistuspäivä |
sale_total |
amount_total |
Kokonaissumma sentteinä |
external_id |
id (tilausrivi) |
Rivin ID merkkijonona |
product_id |
product_id[0] |
Tuotteen ID merkkijonona |
unit_price |
price_total / qty |
Verollinen yksikköhinta sentteinä |
quantity |
product_uom_qty |
Kappalemäärä |
discount |
price_unit * discount% * qty |
Alennussumma sentteinä |
total |
price_total |
Rivin verollinen summa sentteinä |
Odoo-tuplet
Odoo palauttaa viitekenttät tupleina: partner_id = [42, "Asiakas Oy"]. Ensimmäinen arvo on ID, toinen näyttönimi. Custobariin lähetetään vain ID (partner_id[0]).