Hyppää sisältöön

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ä.