Tuotteet — Odoo → Custobar
Workflow: 📦 Päivitä tuotteet Custobariin
ID: n04fY4inMcJ80Y7C
Ajastus: Joka 15 minuutti
Toimintaperiaate
Hakee Odoosta myytävät tuotteet, laskee verollisen hinnan, ja lähettää ne 100 tuotteen erissä Custobariin.
flowchart LR
A["⏰ Schedule<br/>15 min"] --> B["📥 Get Odoo<br/>Products"]
B --> C["🔄 Transform<br/>Products"]
C --> D["📦 Batch<br/>Builder"]
D --> E["🔁 Loop"]
E -->|erä| F["📤 HTTP POST<br/>/products/upload/"]
F --> G["⏳ Wait 5s"]
G --> E
E -->|valmis| H["💾 Save<br/>Timestamp"]
H --> I["✅ Done"]
Odoo-haku
| Asetus | Arvo |
|---|---|
| Malli | product.product |
| Operaatio | search_read (getAll) |
| Suodattimet | sale_ok = true, write_date > edellinen_ajo |
| Credential | Odoo account |
Haettavat kentät:
| Odoo-kenttä | Kuvaus |
|---|---|
list_price |
Veroton hinta |
taxes_id |
Vero-ID:t (lista) |
categ_id |
Tuotekategoria [id, "nimi"] |
name |
Tuotteen nimi |
__last_update |
Viimeinen muutosaika |
sale_ok |
Myytävissä-lippu |
quantity_svl |
Varastomäärä |
weight |
Paino (kg) |
default_code |
SKU/tuotekoodi |
barcode |
EAN-viivakoodi |
write_date |
Muutosaikaleima |
Verolaskenta
Hinta lasketaan verolliseksi käyttämällä Odoon vero-ID:tä:
const TAX_RATES = {
75: 25.5, 77: 25.0, 38: 24.0, 39: 14.0, 40: 10.0,
41: 0.0, 42: 24.0, 43: 14.0, 44: 10.0, 55: 0.0,
56: 0.0, 63: 0.0, 65: 0.0, 68: 0.0, 72: 0.0
};
const taxRate = taxes_id.reduce((sum, id) => sum + (TAX_RATES[id] || 0), 0);
const priceWithTax = list_price * (1 + taxRate / 100);
const priceCents = Math.round(priceWithTax * 100);
Esimerkki
Tuote hinnaltaan 19,95 € (veroton), vero-ID 38 (ALV 24 %):
19.95 * 1.24 = 24.738 € → 2474 senttiä
Custobar-data
Endpoint: POST https://rst-steel.custobar.com/api/products/upload/
Jokainen erä lähetetään JSON-muodossa:
{
"products": [
{
"external_id": "12345",
"title": "Teräslevy 2mm",
"price": 2474,
"weight": 5.2,
"visible": true,
"category": "Teräslevyt",
"category_id": "42",
"date": "2026-02-27 10:30:00",
"sku": "TERA-002",
"ean": "6430012345678",
"stock": [
{
"shop_id": "Verkkokauppa",
"quantity": 150
}
]
}
]
}
Kenttäkartoitus
| Custobar-kenttä | Odoo-lähde | Muunnos |
|---|---|---|
external_id |
id |
Muunnetaan merkkijonoksi |
title |
name |
Suoraan |
price |
list_price + taxes_id |
Verollinen hinta sentteinä |
weight |
weight |
Suoraan (kg) |
visible |
sale_ok |
Boolean |
category |
categ_id[1] |
Kategorian nimi |
category_id |
categ_id[0] |
Kategorian ID merkkijonona |
date |
__last_update |
Suoraan |
sku |
default_code |
Vain jos ei false |
ean |
barcode |
Vain jos ei false |
stock[].shop_id |
— | Kiinteä: "Verkkokauppa" |
stock[].quantity |
quantity_svl |
Minimi 0 (ei negatiivisia) |
False-arvot
Odoo palauttaa tyhjät kentät arvona false (Python boolean). Kentät sku ja ean jätetään pois datasta jos arvo on false tai "false", koska Custobar ei hyväksy niitä.