LVISnet‑tukkuhintojen tuonti#

LVISnet on suomalaisten LVI- ja sähkötukkujen yhteinen hinta‑ ja tuotekatalogi. ELT käyttää sitä saadakseen reaaliaikaiset tukkuhinnat asentajien PWA:n tuotehakuun: kun asentaja skannaa viivakoodin kohteessa, hän näkee oikean tukkuhinnan ja saatavuuden.

Tuemme näitä tukkuja: Onninen, Dahl, Ahlsell, Sonepar.

Miten tuonti toimii#

Field Service → LVISnet → Fetch Sources näyttää tukkujen listan. Jokaiselle tukulle on:

  • Active-flag: pitääkö LVISnet:n hakea automaattisesti?
  • Last run -tila ja päiväys
  • Pricelist johon hinnat tallentuvat
  • Wholesaler -kytkös (tukkukauppa Odoo-puolella)

Automaattihaku on kuukauden 1. päivä klo 21:25 (_cron_fetch_all). Hae manuaalisesti jos LVISnetistä on tullut tieto väliaikuisesta hinnanpäivityksestä:

  1. Field Service → LVISnet → Fetch Sources.
  2. Klikkaa Onninen / Dahl / Ahlsell / Sonepar rivi.
  3. Fetch now -nappi.
  4. Tukku merkitään “fetch_requested” -tilaan; dispatcher‑cron (joka minuutti) noukkii ja käynnistää.

Mitä yksi haku tekee#

  1. Listaa OpusCapita-katalogi (REST API) → lista zip-tiedostoja.
  2. Lataa zipin (esim. OLTUOTE.zip — Onninen Tuotetiedosto).
  3. Avaa ja löytää sisältä TXT-tiedoston OVT-muodossa.
  4. Tunnistaa tyypin:
    • HINTA.txt → hinnat → siirtyy pricelist:in pricelist_item:eihin
    • TUOTE.txt → tuotetiedot → siirtyy product_template:iin
  5. Tuo rivi kerrallaan, commitoi joka 1000 riviä (200.14 alkaen).

Tuonti on iso operaatio: yhden tukun TUOTE-tiedosto voi olla 170 000+ riviä, kestää ~2 tuntia ensimmäisellä kerralla. Kun valtaosa tuotteista on jo kannassa, päivittäinen ajo on nopeampi (~20-30 min) koska monet rivit ovat UPDATE eikä CREATE.

Edistyksen seuranta#

Field Service → LVISnet → Fetch Runs:

SarakeMikä
SourceMikä tukku
Staterunning / ok / error / partial
Started / FinishedAikajakso
Files importedKuinka monta tiedostoa onnistui
SummaryReaaliaikainen edistyminen, esim. “Importing OLTUOTE.txt: 87 000 / 171 540 rows” — päivittyy joka ~40 s

Summary on uusi (200.15) — aiemmin tila näytti vain “running” koko tunnin tai pari, joten ei nähnyt etenikö se vai jumissa.

Watchdog#

Jos jokin tuonti roikkuu yli 4 tuntia ilman edistystä (tyypillisesti: worker‑prosessi kuoli SIGKILL:lla, container restartti), _unstick_stale_runs-watchdog merkitsee sen automaattisesti error-tilaan ja avaa muut tukut uudelleen ajoon.

Ennen (60 min watchdog) tämä tappoi terveitä pitkiä tuonteja — nyt 4 h on riittävä headroom (200.15).

Päivittäisen toiminnan tarkistus#

Aamulla:

  1. Avaa Fetch Runs, suodata “Päivän”.
  2. Tarkista että 4 tukkua kaikki: ok-tila.
  3. Jos joku on error, klikkaa → Summary kertoo syyn:
    • Stuck for >240min → tutki onko Odoo:ssa lukko-ongelmia
    • XML parse error → kerrottu PR-pyynnössä, kysele toimitusten ottajalta
    • Connection refused → LVISnet on alhaalla, odota ja yritä uudestaan
  4. Jos partial, jokin tiedosto onnistui mutta toinen ei. Voi yrittää uudestaan Fetch now -napilla.

Tuotteiden ja hintojen näkyvyys#

Tuonnin jälkeen:

  • Tuotteet näkyvät Inventory → Products:ssä
  • Tukkuhinnat näkyvät kunkin tuotteen Pricelists-tabilla
  • Saatavuus näkyy lvisnet.product.wholesaler.stock-mallin riveissä (per tuote × tukku)
  • PWA tuotehakuun synkkautuu automaattisesti: asentaja näkee oikean tukkuhinnan kun skannaa viivakoodin

Vianetsintä#

Tuonti antoi ’lock timeout'
Yleisin syy: joku muu deploy / cron yrittää käyttää samaa `product_template` -taulua samaan aikaan. **200.14:n per-batch commit** korjasi pahimman tilanteen, mutta jos ongelma toistuu, tarkista: - **Onko muita elt_fsm-deployja menossa juuri nyt?** - **Onko toinen LVISnet-haku käynnissä?** (uusin parannus: cron estää samanaikaisia)
Sama EAN-koodi on kahdella tuotteella
Aiemmin tämä kaatoi koko tuonnin. **200.13**:n korjaus: try/except joka jättää barcode-kentän pois rivillä joka törmää unique‑constraint:iin. Lopputulos: tuote luodaan ilman barcode:a, toinen tuote säilyttää EAN:in. Datassa on jo olemassa duplikaatteja vanhemmilta ajoilta. Siivous on suunnitteilla — kysele kehittäjältä jos haluat aikatauluttaa.
Joku tuote puuttuu PWA:n tuotehausta
- **PWA-cache on offline**? Asentaja pakottaa: Asetukset → "Synkronoi inventaario nyt". - **Tuote on uusi LVISnet-luettelossa**? Tarkista että edellinen haku on ajettu sen lisäyksen jälkeen. - **Tuote on arkistoitu (`active=False`)**? Etsi `product.template`-listalta filtteri "Arkistoidut".