Bolt API integracija

Konsultantams ir atstovams.

Aprašymas

Bolt API integracija leidžia siųsti prekių likučių (items update) ir prekių kainų (price 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.

Nusiuntus pardavimo kainas į Bolt, jos automatiškai nepasikeičia, jas būtina patvirtinti Bolt sistemoje. Bolt rekomenduoja kainų tvirtinimą atlikti vieną kartą per keturias valandas.

Bolt sistemoje prekės matomumo statusas priklauso nuo bendro prekės likučio arba pardavimo kainos.

Reikalavimai

  • Rivile GAMA versija: nuo 119
  • Rivile API

Pasiruošimas

  1. Gauti prisijungimo duomenis iš Bolt (Integration ID ir Secret key) bei parduotuvių Provider ID (unikalūs parduotuvių identifikavimo kodai) ir Region ID (unikalūs regionų identifikavimo kodai).
  2. Prekių identifikavimo kodai tarp Bolt 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ė.
    • Bolt pusėje naudojamas sku laukas.
  3. Prisijungimo vardas ir slaptažodis nurodomi parametre BOLT_KEY.
  4. Provider ID ir Region ID išsaugoma prie padalinio (laukai nurodomi formulėje).
  5. Pataisoma formulė BOLT1, kurioje patikslinamas asortimento, kainos parinkimo ir likučių algoritmas

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

Paleidimas

Paleidimui gali būti naudojamas papildomas klavišas:

m.bolt = bolt_api() && parametrų objektas
m.bolt.formule = "BOLT1"
m.bolt.init() && Items + Price update
* m.bolt.init(1) && Items update - tik kiekių
* m.bolt.init(2) && Price update - tik kainų siuntimas

Automatinis paleidimas naudojant Task Scheduler

Task Scheduler vartotojo sisteminio INIT'o pavyzdys:

public bolt
m.bolt = bolt_api() && parametrų objektas
m.bolt.formule = "BOLT1"
m.bolt.debug = .t.
m.bolt.hide_log = .t.
Task Scheduler action: .F. .F. 1 VARDAS slaptažodis XXF m.bolt.init()

Formulės prekių asortimento ir kainų valdymui

Šabloninė formulė BOLT1 - "Bolt - padalinių kainos įtraukiant nuolaidas":

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

&& prekei identifikuoti Bolt 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"
m.kodo_laukas = "kodas_ps"

&& Provider ID
local provider_id
m.provider_id = "dbo.pap(l11_laukas, 1, 1)" && pirmame papildomame padalinio lauke

&& Region ID
local region_id
m.region_id = "dbo.pap(l11_laukas, 2, 1)" && antrame papildomame padalinio lauke

&& akcijų data
private ldDatetime
m.ldDatetime=datetime()

&& korekcijos kiekis
local lnKoreg
m.lnKoreg=3

&& asortimentas ir kiekiai iš likučių + padalinio kainos

f_select("select " + m.provider_id + " as provider_id, " + m.region_id + " as region_id, " + iif(m.kodo_laukas = "kodas_ps", "i17_kodas_ps", m.kodo_laukas) + " as kodas, " + ;
"       min(isnull(kain.kaina_p, 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 ( " + ;
"       select kodas_ps, kodas_us, kodas_is, min(kaina) as kaina_p " + ;
"       from ( " + ;
"           select n13_kodas_ps as kodas_ps, n13_kodas_us as kodas_us, n13_kodas_is as kodas_is, min((case when n13_poz_nuolaida = 1 then n13_kaina1 - (n13_kaina1 * (n13_nuolaida1/100)) else n13_kaina1 end)) kaina " + ;
"           from n13_akc " + ;
"           where n13_poz_kaina <> 0 and n13_poz_kaina <> 0 and ?m.ldDatetime between n13_date_pr and n13_date_pb " + ;
"           group by n13_kodas_ps, n13_kodas_us, n13_kodas_is " + ;
"           union all " + ;
"           select i33_kodas_ps as kodas_ps, i33_kodas_us as kodas_us, i33_kodas_is as kodas_is, min(case when n13_poz_nuolaida = 1 then  i33_kaina - (i33_kaina * (n13_nuolaida1/100)) else i33_kaina end) kaina " + ;
"           from i33_pkai " + ;
"               left join n13_akc on i33_pkai.i33_kodas_ps = n13_akc.n13_kodas_ps and i33_pkai.i33_kodas_is = n13_akc.n13_kodas_is and i33_pkai.i33_kodas_us = n13_akc.n13_kodas_us " + ;
"                                    and 1 = n13_akc.n13_poz_nuolaida and 0 = n13_akc.n13_poz_kaina and ?m.ldDatetime between n13_date_pr and n13_date_pb " + ;
"               where i33_kaina <> 0 " + ;
"           group by i33_kodas_ps, i33_kodas_us, i33_kodas_is " + ;
"       ) as k " + ;
"       group by kodas_ps, kodas_us, kodas_is " + ;
"   ) as kain on i17_kodas_ps = kain.kodas_ps and i17_kodas_is = kain.kodas_is and i17_kodas_us_a = kain.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.provider_id + ", '') <> '' and isnull(" + m.region_id + ", '') <> '' " + ;
"group by " + m.provider_id + ", " + m.region_id + ", " + iif(m.kodo_laukas = "kodas_ps", "", m.kodo_laukas + ", ") + ;
"i17_kodas_is, i17_kodas_ps, i17_kodas_us, n37_koefici", "bolt_i33")

select bolt_i33

insert into bolt select nvl(provider_id, ""), nvl(region_id, ""), nvl(kodas, ""), nvl(kaina, 0), nvl(kaina_pries_nuol, 0), nvl(kiekis, 0), nvl(isjungta, 0) from bolt_i33

&& sugrupuojama ir susumuojama informacija
select provider_id, region_id, kodas, max(kaina) as kaina, max(kaina_pries_nuol) as kaina_pries_nuol, sum(kiekis) as kiekis, min(isjungta) as isjungta ;
from bolt ;
where !empty(alltrim(nvl(provider_id, ""))) and !empty(alltrim(nvl(region_id, ""))) and !empty(alltrim(nvl(kodas, ""))) group by provider_id, region_id, kodas into cursor bolt readwrite

&& atliekama kiekių korekcija
select provider_id, region_id, kodas, kaina, kaina_pries_nuol, iif(int(kiekis)-m.lnKoreg < 1,0, int(kiekis)-m.lnKoreg) as kiekis, isjungta ;
from bolt into cursor bolt readwrite

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