Wolt API integracija

Konsultantams ir atstovams.

Aprašymas

Wolt API integracija leidžia siųsti kainų (items update) ir prekių likučių (inventory update) informaciją.
Siuntimo metu fiksuojami paskutiniai duomenys, o vėliau perduodami tik atnaujinimai, t. y. naujos kainos ir tik tos pozicijos, kurių likučiai pasikeitė.

Duomenys paimami naudojant Rivile Gama formules (Servisas → Kortelės → Formulės), todėl integracijos nereikia keisti keičiant konfigūraciją.

Standartinės formulės importuojamos pirmą kartą paleidus integraciją. Vienas iš parametrų yra formulės kodas.

Reikalavimai

  • Rivile GAMA versija: nuo 119
  • Rivile API

Pasiruošimas

  1. Gauti prisijungimo duomenis iš Wolt (vartotojo vardas ir slaptažodis) bei parduotuvių Venue ID (unikalūs parduotuvių identifikavimo kodai).
  2. Prekių identifikavimo kodai tarp Wolt ir Rivile Gama sistemų turi sutapti:
    • Rivile Gama pusėje gali būti naudojamas prekės kodas, barkodas, kliento prekės kodas ar kita formulėje aprašyta reikšmė.
    • Wolt pusėje naudojami gtin, sku arba external_id laukai.
  3. Prisijungimo vardas ir slaptažodis nurodomi parametre WOLT_USER.
  4. Venue ID išsaugoma prie padalinio (laukas nurodomas formulėje).
  5. Pataisoma formulė WOLT1, kurioje patikslinamas asortimento, kainos parinkimo ir likučių algoritmas

Pirmą kartą paleidus wolt_api() , susikuria reikalingi parametrai ir šabloninė formulė.

Paleidimas

Paleidimui gali būti naudojamas papildomas klavišas:

m.wolt = wolt_api() && parametrų objektas
m.wolt.formule = "WOLT1"
m.wolt.field_kodas = "sku"
m.wolt.init() && Items + Inventory update
* m.wolt.init(1) && Items update - tik kainų siuntimas
* m.wolt.init(2) && Inventory update - tik likučių siuntimas

Automatinis paleidimas naudojant Task Scheduler

Task Scheduler vartotojo sisteminio INIT'o pavyzdys:

public wolt
m.wolt = wolt_api() && parametrų objektas
m.wolt.formule = "WOLT1"
m.wolt.field_kodas = "sku"
m.wolt.debug = .t.
m.wolt.hide_log = .t.
Task Scheduler action: .F. .F. 1 VARDAS slaptažodis XXF m.wolt.init()

Formulės prekių asortimento ir kainų valdymui

Šabloninė formulė WOLT1 - "Wolt - kainos iš sutarties":

&& prekių asortimentas ir kainos pardavimo sutartyse
&& kainos vienodos visiems Wolt padaliniams
&& visuomet nuskaitoma visų pozicijų kainos ir kiekiai, o bus siunčiami tik pasikeitimai
&& kaina prieš nuolaidą vedama lauke N52_KAINA3

&& Wolt kliento kodas Rivilėje
private kodas_ks
m.kodas_ks = "WOLT"

&& prekei identifikuoti Wolt sistemoje naudojamas kodas
&& matavimo vienetas nesiunčiamas, todėl kodas turi būti unikalus
local kodo_laukas
m.kodo_laukas = "n37_bar_kodas" && "n37_bar_kodas", "kodas_ps", arba "n87_kodas"

&& Venue ID pirmame papildomame padalinio lauke
=f_select("select n07_kodas_is as kodas_is, dbo.pap(l11_laukas, 1, 1) as venue_id " + ;
    "from n07_imon inner join l11_pap1 on l11_kodas_nr = 'ISN07' and n07_kodas_is = l11_kodas1 where dbo.pap(l11_laukas, 1, 1) <> ''", "padaliniai")

&& Venue ID padalinio fakso lauke
*!* =f_select("select n07_kodas_is as kodas_is, n07_fax as venue_id from n07_imon where n07_fax <> ''", "padaliniai")

&& sritis rezultato išsaugojimui
*!* create cursor wolt (venue_id c(30), kodas c(30), kaina n(12, 4), kaina_pries_nuol n(12, 4), kiekis n(12, 3), isjungta n(1))

&& asortimentas ir kainos iš sutarčių
=f_select("select " + iif(m.kodo_laukas = "kodas_ps", "n52_kodas", m.kodo_laukas) + " as kodas, " + ;
    "n52_kaina as kaina, n52_kaina3 as kaina_pries_nuol, cast(0 as numeric(12, 3)) as kiekis, cast(0 as numeric(1)) as ijungta " + ;
    "from (select n52_kodas, n52_kodas_us2, n52_kaina, n52_kaina3, " + ;
    "row_number() over (partition by n52_kodas, n52_kodas_us2 order by n51_prioritetas, n52_prioritetas) as num_row " + ;
    "from n51_suth inner join n52_sutd on n51_kodas_kt = n52_kodas_kt " + ;
    "where n51_tipas = 2 and n52_rusis = 1 and n52_poz_kaina = 1 and n52_kodas_us2 <> '' and n52_kaina <> 0 and n51_kodas_ks=?m.kodas_ks " + ;
    "and n51_viskas = 0 and (n51_poz_date = 0 or convert(char(10), getdate(), 102) between n51_beg_date and n51_end_date) " + ;
    "and n52_viskas = 0 and (n52_poz_date = 0 or convert(char(10), getdate(), 102) between n52_beg_date and n52_end_date)) scr " + ;
    "inner join n37_pmat on n52_kodas = n37_kodas_ps and n52_kodas_us2 = n37_kodas_us " + ;
    "left join n87_tpre on n87_kodas_ks = ?m.kodas_ks and n52_kodas = n87_kodas_ps and n52_kodas_us2 = n87_kodas_us " + ;
    "where num_row = 1", "wolt_sut")

insert into wolt select nvl(venue_id, ""), nvl(kodas, ""), nvl(kaina, 0), nvl(kaina_pries_nuol, 0), 0, 0 from wolt_sut, padaliniai

&& kiekiai padaliniuose
=f_select("select " + iif(m.kodo_laukas = "kodas_ps", "i17_kodas_ps", m.kodo_laukas) + " as kodas, " + ;
    "i17_kodas_is, sum(i17_kiekis - i17_atiduota - i17_rezervas) / n37_koefici as kk " + ;
    "from i17_vpro inner join n37_pmat on i17_kodas_ps=n37_kodas_ps and i17_kodas_us_a=n37_kodas_us " + ;
    "left join n87_tpre on n87_kodas_ks = ?m.kodas_ks and i17_kodas_ps = n87_kodas_ps and i17_kodas_us_a = n87_kodas_us " + ;
    "group by " + iif(m.kodo_laukas = "kodas_ps", "", m.kodo_laukas + ", ") + "i17_kodas_is, i17_kodas_ps, i17_kodas_us, n37_koefici", "wolt_kiekiai")

update wolt set kiekis = kk from wolt_kiekiai inner join padaliniai on i17_kodas_is = kodas_is ;
    where wolt.venue_id = padaliniai.venue_id and wolt.kodas = wolt_kiekiai.kodas

&& išjungiamos prekės neturinčios likučio arba kainos
update wolt set isjungta = 1 where kiekis <= 0 or kaina <= 0

=bal_kadr_close("padaliniai", "wolt_sut", "wolt_kiekiai") && uždaromos sritys

Kitokia šabloninė formulė WOLT2 - "Wolt - padalinių kainos":

&& padalinių prekių kainos (I33)
&& prekių asortimentas pagal likučius padaliniuose
&& visuomet nuskaitoma visų pozicijų kainos ir kiekiai, o bus siunčiami tik pasikeitimai

&& Wolt kliento kodas Rivilėje
private kodas_ks
m.kodas_ks = "WOLT"

&& prekei identifikuoti Wolt sistemoje naudojamas kodas
&& matavimo vienetas nesiunčiamas, todėl kodas turi būti unikalus
local kodo_laukas
m.kodo_laukas = "n37_bar_kodas" && "n37_bar_kodas", "kodas_ps", arba "n87_kodas"

&& Venue ID
local venue_id
m.venue_id = "dbo.pap(l11_laukas, 1, 1)" && pirmame papildomame padalinio lauke
*!* m.venue_id = "n07_fax" && padalinio fakso lauke

=f_select("select n07_kodas_is as kodas_is, dbo.pap(l11_laukas, 1, 1) as venue_id " + ;
    "from n07_imon inner join l11_pap1 on l11_kodas_nr = 'ISN07' and n07_kodas_is = l11_kodas1 where dbo.pap(l11_laukas, 1, 1) <> ''", "padaliniai")

&& Venue ID padalinio fakso lauke
*!* =f_select("select n07_kodas_is as kodas_is, n07_fax as venue_id from n07_imon where n07_fax <> ''", "padaliniai")

&& sritis rezultato išsaugojimui
*!* create cursor wolt (venue_id c(30), kodas c(30), kaina n(12, 4), kaina_pries_nuol n(12, 4), kiekis n(12, 3), isjungta n(1))

&& asortimentas ir kiekiai iš likučių + padalinio kainos
=f_select("select " + m.venue_id + " as venue_id, " + iif(m.kodo_laukas = "kodas_ps", "i17_kodas_ps", m.kodo_laukas) + " as kodas, " + ;
    "max(isnull(i33_kaina, 0)) as kaina, cast(0 as numeric(12, 4)) as kaina_pries_nuol, " + ;
    "sum(i17_kiekis - i17_atiduota - i17_rezervas) / n37_koefici as kiekis, cast(0 as numeric(1)) as isjungta "+ ;
    "from i17_vpro inner join n37_pmat on i17_kodas_ps=n37_kodas_ps and i17_kodas_us_a=n37_kodas_us " + ;
    "left join n87_tpre on n87_kodas_ks = ?m.kodas_ks and i17_kodas_ps = n87_kodas_ps and i17_kodas_us_a = n87_kodas_us " + ;
    "left join i33_pkai on i17_kodas_ps = i33_kodas_ps and i17_kodas_is = i33_kodas_is and i17_kodas_us_a = i33_kodas_us " + ;
    "inner join n07_imon on i17_kodas_is = n07_kodas_is " + ;
    "left join l11_pap1 on l11_kodas_nr = 'ISN07' and n07_kodas_is = l11_kodas1 " + ;
    "where isnull(" + m.venue_id + ", '') <> '' " + ;
    "group by " + m.venue_id + ", " + iif(m.kodo_laukas = "kodas_ps", "", m.kodo_laukas + ", ") + ;
    "i17_kodas_is, i17_kodas_ps, i17_kodas_us, n37_koefici", "wolt_i33")

insert into wolt select nvl(venue_id, ""), nvl(kodas, ""), nvl(kaina, 0), nvl(kaina_pries_nuol, 0), nvl(kiekis, 0), nvl(isjungta, 0) from wolt_i33

&& išjungiamos prekės neturinčios likučio arba kainos
update wolt set isjungta = 1 where kiekis <= 0 or kaina <= 0

=bal_kadr_close("wolt_i33") && uždaromos sritys