IOBERONCash |
The IOBERONCashRegisterService type exposes the following members.
Name | Description | |
---|---|---|
CashRegister_Add_PrinterText | Pridá špecifikáciu do zoznam špecifikácií (textov k jedlu na bonovačke) v číselníku. | |
CashRegister_Delete_PrinterText | Odstráni špecifikáciu zo zoznam špecifikácií (textov k jedlu na bonovačke) v číselníku. | |
DeleteBillOpen | Odstráni otvorený účet. Môže sa vymazať len otvorený účet bez položiek. | |
DeleteBillOpenItem | Odstrániť z otvoreného účtu jednu položku. Ak už bola položka vytlačená na bonovacej tlačiarni (objednávka v prípravni jedál či nápojov), bude automaticky vytlačené STORNO objednávky. | |
DeleteLicence | Odstrániť záznam o externej licencii z databázy. | |
GetBillOpen | Vracia konkrétny otvorený účet (stôl) s položkami. | |
GetBillsOpen | Vracia zoznam aktuálne otvorených účtov (stolov). Načítajú sa len otvorené účty danej registračnej pokladnice, ktorú táto webová služba zastupuje (jedna webová služba zastupuje jednu konkrétnu registračnú pokladnicu). | |
GetBillsOpenDefinition | Vracia zoznam definície účtov (stolov), s ktorými je možné na danej registračnej pokladnici pracovať. Webová služba zastupuje jednu konkrétnu registračnú pokladnicu. | |
GetCashRegisterWeb | Metóda pre načítanie html obsahu pre zobrazenie v prehliadači. Metóda sa používa napr. pri kuchynských monitoroch. | |
GetCashRegisterWebResourceFile | Metóda vracia konkrétne súbory, potrebné v html aplikácii napr. kuchynských monitoroch. | |
GetCashRegisterWebTemplateFile | Metóda načíta vzorové súbory funkcií napr. aplikácie kuchynských monitorov. | |
GetCompanyInfo | Načítanie údajov o firme (účtovnej jednotke), s ktorou webová služba pracuje. | |
GetCompanySettings | Načítanie základných nastavení firmy (účtovnej jednotky), s ktorou webová služba pracuje. | |
GetDateTime | Vráti dátum a čas počítača, na ktorom beží webová služba. | |
GetDeliveryShippingRates | Vracia cenník dopravy pri donáške. | |
GetDeliveryTime | Vráti aktuálny predpokladaný čas donášky (v minútach). Vypočítava sa na základe iných objednávok (otvorených účtov), či už donáškových alebo aj priamo na prevádzke (otvorené stoly). | |
GetFoodMenuInfo | Vracia údaje o jedálnom alebo nápojovom lístku, napr. úvodný uvítací text v eMenu, text na začiatku jedálneho lístka, text na konci, alergény a podobne. Neobsahuje položky eMenu, tie sú dostupné v metóde GetStockCards. | |
GetHotelAccounts | Vracia zoznam aktuálne otvorených hotelových účtov v module Hotelová recepcia. Hotelový účet môže ale aj nemusí byť priradený k izbe, prípadne na jednu izbu môže byť vytvorených aj viac hotelových účtov (napr. jeden za ubytovanie, ďalší na stravu, prípadne pre každého hosťa izby samostatne). Účet v Pokladnici OBERON je možné presunúť na hotelový účet pomocou metódy SetBillOpenCompute. | |
GetLanguages | Vracia zoznam dostupných jazykov definované v systéme pre preklad údajov, napr. názov skladovej karty, popis a podobne. Jazyk, v ktorom sa majú zasielať údaje sa nastavuje pri prihlásení (./> | |
GetLicence | Vráti informácie o licencii určenej pre externý systém. | |
GetLicences | Vráti zoznam licencií určených pre externé systémy. | |
GetLoginSalt | Vráti tzv. SALT, ktorý je používaný pri hashovaní hesla pri prihlásení používateľa. Volá sa tesne pred metódou LoginUser. | |
GetMenuCategories | Vracia zoznam skupín v jedálnom lístku. Skupiny sa dajú vygenerovať aj so zoznamu skladových kariet (číselník položiek pre predaj), avšak tu je možné navyše získať aj obrázok danej skupiny. Obrázky skupín v jedálnom lístku sú napevno definované v číselníku, prípadne si používateľ môže zvoliť aj svoj vlastný obrázok. | |
GetOrderPrinterTexts | Vracia zoznam textov pre tlač na bonovacej tlačiarni. | |
GetOrders | Vracia zoznam položiek zapísaných v bonovacej knihe - spravidla vytlačených na jednej alebo viacerých bonovacích tlačiarňach. Položky sú určené na prípravu, najčastejšie jedlá a nápoje. Spravidla vracia ešte nepripravené, alebo nevynesené, tzv. otvorené položky. Môže však vracať aj všetky položky od daného dátumu a času (záleží od parametra funkcie). Používa sa pre zobrazovanie položiek na displeji v kuchyni alebo predajnom mieste. | |
GetPaymentTypes | Vracia zoznam typov platieb (spôsobov zaevidovania dokladu). Používa sa pri vytlačení (uzatvorení) dokladu na Pokladnici OBERON (metóda SetBillOpenCompute). | |
GetStockCardDetail | Vráti detailné informácie o skladovej položke, ktoré sa nenachádzjú v základnej štruktúre. Ide najmä o rozšírený popis a obrázky. | |
GetStockCards | Vracia zoznam skladových kariet. Načítajú sa len skladové karty danej registračnej pokladnice, ktorú táto webová služba zastupuje (jedna webová služba zastupuje jednu konkrétnu registračnú pokladnicu). | |
GetStockCardsLastUpdate | Vracia dátum a čas (UTC) poslednej zmeny na skladovej karte, zmenou je aj zmena množstva pri príjme alebo výdaji. | |
GetUsers | Načítanie zoznamu používateľov definovaných v systéme OBERON. | |
GetUsersLoggedOnWebService | Vráti zoznam používateľov prihlásených do tejto webovej služby. Ak sa používateľ korektne neodhlási, webová služba ho v stanovenom časovom intervale (momentálne nastavené na 2 hodiny) automaticky odhlási. | |
GetVersion | Vráti číslo verzie webovej služby. | |
IsLogin | Overenie aktuálne prihláseného používateľa (prípadne používateľa podľa parametra), či je prihlásený do webovej služby (záleží však na nastavení spôsobu autentifikácie služby). | |
LoginUser | Prihlási používateľa do webovej služby (záleží však na nastavení spôsobu autentifikácie služby). Je potrebné volať na začiatku komunikácie s webovou službou, nakoľko sa generuje tzv. GUID pre ďalšiu komunikáciu (ten musí byť súčasťou hlavičky danej požiadavky). | |
LoginUserEx | Prihlási používateľa do webovej služby (záleží však na nastavení spôsobu autentifikácie služby). Je potrebné volať na začiatku komunikácie s webovou službou, nakoľko sa generuje tzv. GUID pre ďalšiu komunikáciu (ten musí byť súčasťou hlavičky danej požiadavky). | |
Logout | Odhlásenie používateľa z webovej služby. | |
Ping | Overenie dostupnosti služby, zároveň vráti adresu IP. | |
PrintOrder | Vytvorí a vytlačí objednávku daného otvoreného účtu na bonovacej tlačiarni (vytvorí zápis aj do bonovacej knihy). Vytlačené budú vždy len položky, ktoré ešte neboli vytlačené (stav po pridaní ďalšej položky na účet, ak už bola objednávka vytlačená). | |
SetBillOpenCompute | Vytlačenie alebo len uzatvorenie dokladu (otvoreného účtu) na Pokladnici OBERON. Zoznam otvorených účtov je možné načítať metódou GetBillsOpen. Špecialitou je uzatvorenie hotelového účtu presunom na hotelový účet (v module Hotelová recepcia). Zoznam hotelových účtov je možné získať metódou GetHotelAccounts. | |
SetBillOpenDiscount | Uplatní na otvorený účet zľavu, t.j. na každú položku dokladu zapíše danú zľavu. Ak už zľava bola zadaná, bude táto zľava upravená (zmenená) - bude sa opätovne počítať z pôvodných súm. Na položky (skladové karty), na ktoré je uplatnenie zľavy nastavené na 'Pýtať sa', bude zľava uplatnená. | |
SetBillOpenDoBankTerminal | Vyvolá komunikáciu s platobným terminálom (na strane OBERON-u) pre vykonanie bankovej transakcie a tým úhrady otvoreného účtu. Započatím bankovej transakcie sa zapíše do hlavičky otvoreného účtu info o novej prebiehajúcej platobnej transakcii (TransactionID zo stavom Progress). TransactionID v prípade problémov v komunikácii umožňuje overiť platnosť platobnej transakcie. | |
SetBillOpenItem | Aktualizuje (upravuje) existujúcu položku na otvorenom účte. Položku vytlačenú na bonovacej tlačiarni už nie je možné upraviť. | |
SetBillOpenItemDiscount | Uplatní na položku otvoreného účtu zľavu. Ak už zľava bola zadaná, bude táto zľava upravená (zmenená) - bude sa opätovne počítať z pôvodných súm. Na položky (skladové karty), na ktoré je uplatnenie zľavy nastavené na 'Pýtať sa', bude zľava uplatnená. | |
SetBillOpenItemMove | Presun jednej položky otvoreného účtu na iný otvorený účet, prípadne rozdelenie položky medzi dva otvorené účty. Používa sa napr. pri rozdelení jedného účtu tak, že platia obidve osoby samostatne. Všetky činnosti sú zaznamenávané do tzv. Sledovania činností. | |
SetBillOpenItemsMerge | Zlúči položky na otvorenom účte. | |
SetBillOpenPayment | Zápis informácie o úhrade otvoreného účtu platobnou kartou. Použitím tejto metódy sa nevykonáva banková transakcia volaním bankového terminála, ale sa len zapisuje info o úhrade. Zápis úhrady môže vykonať obsluha pokladnice (napr. na mobilnej aplikácii LUKUL v režime Čašník), prípadne priamo aj zákazník, napr. ako hosť v reštaurácii pri úhrade účtu, prípadne pri donáške. Zoznam otvorených účtov je možné načítať metódou GetBillsOpen. | |
SetBillOpenState | Zapíše (zmení) príznaky na otvorenom účte (stole). Ide o príznak privolania obsluhy zákazníkom, prípadne príznak oznámenia vyúčtovania otvoreného účtu (tu je možné bližšie určiť spôsob platby). | |
SetLicence | Zapíše do databázy pre uloženie externých licencií nový záznam (ak Licence.ID = 0), prípadne aktualizuje stávajúci (je zadané Licence.ID). | |
SetNewBillOpen | Zápis (vytvorenie) nového otvoreného účtu (stola). Zápis je vykonávaný v transakcii, ak dôjde k chybe pri čo i len jednej z položiek, nebude zapísaná žiadna položka a ani hlavička otvoreného účtu. | |
SetNewBillOpenItems | Zápis nových položiek na už existujúci otvorený účet. Zápis je vykonávaný v transakcii, ak dôjde k chybe pri čo i len jednej z položiek, nebude zapísaná žiadna položka. | |
SetOrderItemDateTimeDelivery | Zapíše príznak dodanie jedla alebo nápoja na položku do bonovacej knihy (zapisuje sa aktuálny serverový dátum a čas). Dodaním sa myslí obslúženie zákazníka (vynesenie jedla), v prípade donáškovej služby to môže byť dátum a čas prevzatia kuriérom (prípadne dodania k zákazníkovi - záleží od systému práce). V prípade potreby aj zruší tento príznak. | |
SetOrderItemDateTimeTakeOut | Zapíše príznak ukončenia prípravy jedla alebo nápoja na položku do bonovacej knihy (zapisuje sa aktuálny serverový dátum a čas). V prípade potreby aj zruší tento príznak. | |
SetOrderItemExternalSystemData | Zapíše príznak z externého systému do bonovacej knihy. Tu si môže externý systém značiť ľubovolné údaje OBERON s týmito údajmi nepracuje, len ich spätne vracia. | |
SetOrderVisibleIndex | Umožňuje posunúť objednávku v poradí pri zobrazení na displeji (bonovacia obrazovka v kuchyni). Umožňuje posunie zobrazenia objednávky doľava, doprava, na prvú alebo poslednú pozíciu. | |
ShowKitchenDisplay | Zobrazí úvodnú obrazovku webovej aplikácie Systém kuchynských monitorov. | |
StockCards_Update_Specifications | Aktualizuje zoznam špecifikácií (textov k jedlu na bonovačke) na skladovej karte. | |
UploadApplicationLog | Odoslanie súboru LOG z externej aplikácie do programu OBERON Center. |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Test webovej služby</title> <!-- Tato testovacia html stranka spustena na lokalnom pocitaci pracuje korektne v Internet Exploreri, --> <!-- v inych prehliadacoch sa casto vyskytuje problem so zabezpecenim, tzv. Cross-site scripting. --> <style> .right { text-align: right; } .tb td, .tb th { padding: 4px; } .tb { border: solid 1px #808080; border-spacing: 0; } .tb thead tr { background-color: #e6e6e6; background-image: linear-gradient(top, #eeeeee, #dadada); } </style> </head> <body> <div> <form id="testWebService" action="/"> <!-- 87.197.186.118:20057 / system / system --> <input type="text" id="settAddress" placeholder="adresa webovej služby" value="87.197.186.118:20057" /> <input type="text" id="settName" placeholder="meno" value="system" /> <input type="text" id="settPassword" placeholder="heslo" value="system" /> <button id="runTest" type="submit" >Test</button> </form> </div> <div id="resultData"></div> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.2.js" type="text/javascript"></script> <script type="text/javascript" id="sha1" > (function (e) { var t = function (e, t) { return e << t | e >>> 32 - t }; var n = function (e) { var t = ""; var n; var r; var i; for (n = 0; n <= 6; n += 2) { r = e >>> n * 4 + 4 & 15; i = e >>> n * 4 & 15; t += r.toString(16) + i.toString(16) } return t }; var r = function (e) { var t = ""; var n; var r; for (n = 7; n >= 0; n--) { r = e >>> n * 4 & 15; t += r.toString(16) } return t }; var i = function (e) { e = e.replace(/\x0d\x0a/g, "\n"); var t = ""; for (var n = 0; n < e.length; n++) { var r = e.charCodeAt(n); if (r < 128) { t += String.fromCharCode(r) } else if (r > 127 && r < 2048) { t += String.fromCharCode(r >> 6 | 192); t += String.fromCharCode(r & 63 | 128) } else { t += String.fromCharCode(r >> 12 | 224); t += String.fromCharCode(r >> 6 & 63 | 128); t += String.fromCharCode(r & 63 | 128) } } return t }; e.extend({ sha1: function (e) { var n; var s, o; var u = new Array(80); var a = 1732584193; var f = 4023233417; var l = 2562383102; var c = 271733878; var h = 3285377520; var p, d, v, m, g; var y; e = i(e); var b = e.length; var w = new Array; for (s = 0; s < b - 3; s += 4) { o = e.charCodeAt(s) << 24 | e.charCodeAt(s + 1) << 16 | e.charCodeAt(s + 2) << 8 | e.charCodeAt(s + 3); w.push(o) } switch (b % 4) { case 0: s = 2147483648; break; case 1: s = e.charCodeAt(b - 1) << 24 | 8388608; break; case 2: s = e.charCodeAt(b - 2) << 24 | e.charCodeAt(b - 1) << 16 | 32768; break; case 3: s = e.charCodeAt(b - 3) << 24 | e.charCodeAt(b - 2) << 16 | e.charCodeAt(b - 1) << 8 | 128; break } w.push(s); while (w.length % 16 != 14) w.push(0); w.push(b >>> 29); w.push(b << 3 & 4294967295); for (n = 0; n < w.length; n += 16) { for (s = 0; s < 16; s++) u[s] = w[n + s]; for (s = 16; s <= 79; s++) u[s] = t(u[s - 3] ^ u[s - 8] ^ u[s - 14] ^ u[s - 16], 1); p = a; d = f; v = l; m = c; g = h; for (s = 0; s <= 19; s++) { y = t(p, 5) + (d & v | ~d & m) + g + u[s] + 1518500249 & 4294967295; g = m; m = v; v = t(d, 30); d = p; p = y } for (s = 20; s <= 39; s++) { y = t(p, 5) + (d ^ v ^ m) + g + u[s] + 1859775393 & 4294967295; g = m; m = v; v = t(d, 30); d = p; p = y } for (s = 40; s <= 59; s++) { y = t(p, 5) + (d & v | d & m | v & m) + g + u[s] + 2400959708 & 4294967295; g = m; m = v; v = t(d, 30); d = p; p = y } for (s = 60; s <= 79; s++) { y = t(p, 5) + (d ^ v ^ m) + g + u[s] + 3395469782 & 4294967295; g = m; m = v; v = t(d, 30); d = p; p = y } a = a + p & 4294967295; f = f + d & 4294967295; l = l + v & 4294967295; c = c + m & 4294967295; h = h + g & 4294967295 } var y = r(a) + r(f) + r(l) + r(c) + r(h); return y.toLowerCase() } }) })(jQuery) </script> <script type="text/javascript"> (function ($) { window.userData = ''; window.token = ''; /* --- unit test --- */ $("#testWebService").submit(function (evt) { evt.preventDefault(); var exc = myException(''), data = dataResult(), datah = {html:''}, ajaxUrl = '', post = {}, elmResult = null; elmResult = $('#resultData'); elmResult.empty(); //ping ajaxUrl = getUrl('ping'); exc = ajaxHtml(ajaxUrl, datah); if (exc.result == false) { //--- nejaká chyba elmResult.append('Ping: <p style="color: red;">' + exc.description + '</p>'); } else { elmResult.html('<br/>Ping: <p style="color: blue;">' + datah.html + '</p>'); } //get salt for sha1 hash data = dataResult(); post = { username: $('#settName').val() }; ajaxUrl = getUrl('GetLoginSalt'); exc = ajaxPost(ajaxUrl, data, post); if (exc.result == false) { //--- nejaká chyba elmResult.append('Salt: <p style="color: red;">' + exc.description + '</p>'); } else { window.token = data.data; elmResult.append('Salt: <p style="color: blue;">' + data.data + '</p>'); } //login post = { username: $('#settName').val(), password: $.sha1(data.data + $('#settPassword').val()) }; data = dataResult(); ajaxUrl = getUrl('LoginUser'); exc = ajaxPost(ajaxUrl, data, post); if (exc.result == false) { //--- nejaká chyba elmResult.append('Token: <p style="color: red;">' + exc.description + '</p>'); } else { window.token = data.data; elmResult.append('Token: <p style="color: blue;">' + data.data + '</p>'); } // is login test data = dataResult(); ajaxUrl = getUrl('IsLogin?ud=' + window.token); exc = ajaxGet(ajaxUrl, data); if (exc.result == false) { //--- nejaká chyba elmResult.append('Is Login: <p style="color: red;">FALSE</p>'); } else { elmResult.append('Is Login: <p style="color: blue;">TRUE</p>'); } // method data = dataResult(); post = { GetItems: true }; ajaxUrl = getUrl('GetBillsOpen'); exc = ajaxPost(ajaxUrl, data, post); if (exc.result == false) { //--- nejaká chyba elmResult.append('Zoznam otvorených účtov: <p style="color: red;">' + exc.description + '</p>'); } else { elmResult.append('<p style="color: Purple;">Zoznam otvorených účtov: </p>'); var str = '<table border="0" class="tb"><thead><tr><th>IDNum</th><th>Predajné miesto</th><th>Názov stola</th><th class="right">Suma [EUR]</th></tr></thead><tbody>'; data.data.forEach(function (item, index) { str += '<tr>'; str += '<td>' + item.IDNum + '</td>'; str += '<td>' + item.SalesPoint + '</td>'; str += '<td>' + item.Name + '</td>'; str += '<td class="right">' + item.TotalPrice + '</td>'; str += '</tr>'; }); str += '</tbody></table>'; elmResult.append(str); } // logout ajaxUrl = getUrl('Logout?ud=' + window.token); exc = ajaxGet(ajaxUrl, data); if (exc.result == false) { //--- nejaká chyba elmResult.append('<br/>Logout: OK<br/>'); } else { elmResult.append('<br/>Logout: OK<br/>'); } }); function getUrl(method) { return 'http://' + $('#settAddress').val() + '/' + method; } function ajaxGet(ajaxurl, rfResult, jdata, processdata) { var exc = myException(''); if (!processdata) { processdata = false; } if (!jdata) { jdata = null; } $.ajax({ type: 'GET', cache: false, async: false, dataType: 'json', contentType: 'application/json; charset=utf-8', url: ajaxurl, processData: processdata, data: JSON.stringify(jdata), //--- musí byt konverzia na text, beforeSend: function (xhr) { xhr.setRequestHeader('userData', window.userData); }, success: function (data, textStatus, xhr) { dataResultGet(data, rfResult); if (rfResult.result == false && rfResult.errNumber === 2) { // chyba užívateľ nie je prihlásený } window.userData = xhr.getResponseHeader('userData'); exc.result = true;//--- default je true if (rfResult.result == false) { exc.result = false; exc.errNumber = rfResult.errNumber; exc.description = rfResult.description; } }, error: function (xhr, exception, errorThrown) { exc = z_GetAjaxException(xhr, exception, errorThrown); } }); return exc; } function ajaxPost(ajaxurl, rfResult, jdata, processdata) { var exc = myException(''); if (!processdata) { processdata = false; } if (!jdata) { jdata = null; } $.ajax({ type: 'POST', cache: false, async: false, dataType: 'json', contentType: 'application/json; charset=utf-8', url: ajaxurl, processData: processdata, data: JSON.stringify(jdata), //--- musí byt konverzia na text, beforeSend: function (xhr) { xhr.setRequestHeader('userData', window.userData); }, success: function (data, textStatus, xhr) { dataResultGet(data, rfResult); if (rfResult.result == false && rfResult.errNumber === 2) { // chyba užívateľ nie je prihlásený } window.userData = xhr.getResponseHeader('userData'); exc.result = true;//--- default je true if (rfResult.result == false) { exc.result = false; exc.errNumber = rfResult.errNumber; exc.description = rfResult.description; } }, error: function (xhr, exception, errorThrown) { exc = z_GetAjaxException(xhr, exception, errorThrown); } }); return exc; } function ajaxHtml(ajaxurl, rfResult, callType, jdata) { var exc = myException(''); if (!callType) { callType = 'GET'; } $.ajax({ type: callType, url: ajaxurl, cache: false, async: false, dataType: 'html', contentType: 'text/html; charset=utf-8', processData: false, data: JSON.stringify(jdata), beforeSend: function (xhr) { xhr.setRequestHeader('userData', window.userData); }, success: function (data, textStatus, xhr) { window.userData = xhr.getResponseHeader('userData'); rfResult.html = data; exc.result = true; }, error: function (xhr, exception, errorThrown) { exc = z_GetAjaxException(xhr, exception, errorThrown); } }); return exc; } /* --- Support methods --- */ function myException(descr, msg, errNum, res) { //exception object return { result: !res ? false : res, errNumber: !errNum ? 0 : errNum, message: !msg ? '' : msg, description: !descr ? '' : descr }; }; function dataResult() { //data result object return { result: false, errNumber: 0, description: '', data: null }; }; function dataResultGet(data, rfResult) {//rfResult musí byť inicializovaný pomocou 'dataResult' rfResult.result = data.result; rfResult.errNumber = data.errNumber; rfResult.description = data.description; rfResult.data = data.data; } function z_GetAjaxException(jqXHR, exception, errorThrown) { var exc = myException(); if (jqXHR.status === 0) { exc = myException('Server webovej služby je v tejto chvíli nedostupný.', '', 111); } else if (jqXHR.status == 404) { exc = myException('Metóda pre spracovanie požiadavky nebola nájdená.', '', 404); } else if (jqXHR.status == 500) { exc = myException('Interná chyba servera webovej služby.', '', 500); } else if (exception === 'parsererror') { exc = myException('Chyba pre spracovaní JSON dát zo servera.', '', 900); } else if (exception === 'timeout') { exc = myException('Čas pre spracovanie požiadavky vypršal.', '', 901); } else if (exception === 'abort') { exc = myException('Asynchrónne volanie bolo prerušené.', '', 902); } else { exc = myException('Neznáma chyba.<br/>' + jqXHR.statusText, '', 99); } return exc; } })(jQuery); </script> </body> </html>