(function ($) { "use strict"; var trinity = function () { var o = this; }; var p = trinity.prototype; p.host_lm = 'http://localhost:5000/';//адрес локального модуля p.login = ''; p.password = ''; p.access_token = '';//токен доступа p.refresh_token = '';//токен для обновления токена доступа p.access_token_exp = '';//срок действия токена доступа p.webroot = '';//корень сайта p.headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', 'authorization': '' } p.valid_error = [0,2,3]; //коды ошибок валидации токена p.check = null;//чек p.request_number = null; //p.transaction_id = null; //индентификатор транзакции pos терминала p.init = function(init_data) { p.login = init_data.login; p.password = init_data.password; p.access_token = init_data.access_token; p.refresh_token = init_data.refresh_token; p.access_token_exp = init_data.access_token_exp;//'2022-05-06T10:20:33'; p.webroot = '/'+window.location.pathname.split('/')[1]+'/'; console.log(p.access_token); }; //авторизоваться или обновление токена p.apicheck = function() { load_start(); if (p.access_token=="") { p.authenticate(); }else { p.refresh(); } } //авторизация p.authenticate = function() { $.postJSON(p.host_lm + 'api/Authentication/Authenticate',{ "login": p.login, "password": p.password },function(data){ data = p.check_response(data); if (data) { p.access_token = data['accessToken']; p.refresh_token = data['refreshToken']; p.access_token_exp = data['accessTokenExpiration']; p.update_session(); }; load_finish(); }).fail(function(jqXHR, textStatus, error) { load_finish(); ajax_msg('main_trinity', 'danger', 'Возникла проблема, обратитесь к администратору', 1); }); } //обновить токен доступа через refresh_token p.refresh = function() { return $.postJSON(p.host_lm + 'api/Authentication/RefreshToken',{ "refreshToken": p.refresh_token }).done(function(data){ //console.log(data); data = p.check_response(data); if (data) { p.access_token = data['accessToken']; p.refresh_token = data['refreshToken']; p.access_token_exp = data['accessTokenExpiration']; p.update_session(); }; load_finish(); }).fail(function(jqXHR, textStatus, error) { load_finish(); ajax_msg('main_trinity', 'danger', 'Возникла проблема, обратитесь к администратору', 1); }); } p.sale_prepare = function(data) { return $.post(p.webroot + 'trinity/prepare_sale',data); } //продажа p.sale = function(_data, after_fn) { p.check_token().then(function (response) { if (response['error'] == undefined) { p.sale_prepare(_data).done(function(data){ if (is_json(data)) { var obj=JSON.parse(data); console.log(obj); if (obj['ExternalCheckNumber'] != undefined) { //отправка в ЛМ p.headers.authorization = p.access_token; if (p.request_number != null) p.headers['Request-Number'] = p.request_number; p.check_operation(obj).then(function(data) { console.log(data); if (data['error'] == undefined) { if (after_fn != undefined) { p.check = data['data']; // p.check_number = data['data']['checkNumber']; // p.transaction_id = data['data']['transactionId']; after_fn(); } } else { p.check_response(data); //ajax_msg('main', 'danger', p.check_response(data), 1); } }); } } else { console.log(data); ajax_msg('main','danger','Возникла проблема. Обратитесь к администратору',1); } }); } else { p.check_response(response); //ajax_msg('main', 'danger', , 1); } }); } //подготовка к возврату p.return_prepare = function(data) { return $.post(p.webroot + 'trinity/prepare_return',data); } //возврат p.return = function(_data, after_fn) { p.check_token().then(function (response) { if (response['error'] == undefined) { p.return_prepare(_data).done(function(data){ if (is_json(data)) { var obj=JSON.parse(data); console.log(obj); if (obj['ExternalCheckNumber'] != undefined) { //отправка в ЛМ obj['ExternalCheckNumber'] = 'RETURN'+obj['ExternalCheckNumber']; p.headers.authorization = p.access_token; p.check_operation(obj).then(function(data) { console.log(data); if (data['error'] == undefined) { if (after_fn != undefined) { p.check = data['data']; after_fn(); } } else { ajax_msg('main', 'danger', data['error']['text'], 1); } }); } } else { console.log(data); ajax_msg('main','danger','Возникла проблема. Обратитесь к администратору',1); } }); } else { ajax_msg('main', 'danger', response['error']['text'], 1); } }); } //подготовка к печати чека p.print_check_prepare = function(data) { return $.post(p.webroot + 'trinity/prepare_print_check',data); } //Печать чека p.print_check = function(ext_guid) { p.check_token().then(function (response) { if (response['error'] == undefined) { p.print_check_prepare({'ext_guid':ext_guid}).done(function(data){ if (is_json(data)) { var obj=JSON.parse(data); console.log(obj); if (obj['ExternalCheckNumber'] != undefined) { //отправка в ЛМ p.headers.authorization = p.access_token; p.check_operation(obj).then(function(data) { console.log(data); if (data['error'] != undefined) { ajax_msg('main', 'danger', data['error']['text'], 1); } }); } } else { console.log(data); ajax_msg('main','danger','Возникла проблема. Обратитесь к администратору',1); } }); } else { ajax_msg('main', 'danger', response['error']['text'], 1); } }); } //z-отчет p.zreport = function() { load_start(); p.check_token().then(function (response) { if (response['error'] == undefined) { p.headers.authorization = p.access_token; $.postJSON(p.host_lm + 'api/Cashbox/CloseShift', { 'withdraw': false }) .done(function(data, textStatus, xhr){ console.log(data); if (data['error'] != undefined) { ajax_msg('main', 'danger', data['error']['text'], 1); } else { p.reg_zreport(data); } load_finish(); }) .fail(function(xhr, status, error) { console.log(xhr);console.log(status);console.log(error); ajax_msg('main', 'danger', xhr.responseText, 1); }); } else { load_finish(); ajax_msg('main', 'danger', response['error']['text'], 1); } }); } //x-отчет p.xreport = function() { load_start(); p.check_token().then(function (response) { if (response['error'] == undefined) { p.headers.authorization = p.access_token; $.postJSON(p.host_lm + 'api/Cashbox/XReport', {}) .done(function(data, textStatus, xhr){ console.log(data); if (data['error'] != undefined) { ajax_msg('main', 'danger', data['error']['text'], 1); } else { p.reg_xreport(data); } load_finish(); }) .fail(function(xhr, status, error) { console.log(xhr);console.log(status);console.log(error); ajax_msg('main', 'danger', xhr.responseText, 1); }); } else { load_finish(); ajax_msg('main', 'danger', response['error']['text'], 1); } }); } //снятие наличности p.withdraw = function(cash) { p.check_token().then(function (response) { if (response['error'] == undefined) { p.headers.authorization = p.access_token; $.postJSON(p.host_lm + 'api/Cashbox/MoneyOperation', { 'sum': parseInt(cash), 'operationType': 1 }, function(data){ //регистрация операции на сервере p.reg_transaction('remove_cash', {cash: parseInt(cash)}); $('#formTrinityTransaction').modal('hide'); ajax_msg('main','success', 'Cумма '+cash+' успешно изъята.', 1); }).fail(function(xhr, status, error) { console.log(xhr); ajax_msg('main', 'danger', p.error_connect(xhr.responseText), 1); }); } else { $('#formTrinityTransaction').modal('hide'); ajax_msg('main', 'danger', response['error']['text'], 1); } }); } //внесение наличности p.deposit = function(cash) { p.check_token().then(function (response) { if (response['error'] == undefined) { p.headers.authorization = p.access_token; $.postJSON(p.host_lm + 'api/Cashbox/MoneyOperation', { 'sum': parseInt(cash), 'operationType': 0 }, function(data){ //регистрация операции на сервере p.reg_transaction('deposit_cash', {cash: parseInt(cash)}); $('#formTrinityTransaction').modal('hide'); ajax_msg('main','success', 'Cумма '+cash+' успешно внесена.', 1); }).fail(function(xhr, status, error) { console.log(xhr); ajax_msg('main', 'danger', p.error_connect(xhr.responseText), 1); }); } else { $('#formTrinityTransaction').modal('hide'); ajax_msg('main', 'danger', response['error']['text'], 1); } }); } //регистрация z-отчета на сервере p.reg_zreport = function(data){ $.post(p.webroot + 'Trinity/zreport',data, function(data){ if (data['error'] != undefined) { ajax_msg('main','danger', data['error']['text'],1); }else { window.frames["print_frame"].document.body.innerHTML=data; setTimeout('window.frames["print_frame"].window.focus();window.frames["print_frame"].window.print();', 500); ajax_msg('main','success','Z отчет успешно получен. Смена закрыта.',1); } }); } //регистрация x-отчета на сервере p.reg_xreport = function(_data){ $("#modal_trinity_xreport").html('Подождите, идет запрос данных ...'); $("#formTrinityXreport .modal-title").text('X-отчет'); $("#formTrinityXreport").modal('show'); $.post(p.webroot + 'Trinity/xreport',_data, function(data){ if (data['error'] != undefined) { ajax_msg('main','danger', data['error']['text'],1); }else { $("#modal_trinity_xreport").html(data); ajax_msg('main','success','X отчет успешно сформирован.',1); } }); } //данные текущей смены(x отчет без вывода) p.current_shift = function() { p.headers.authorization = p.access_token; return $.postJSON(p.host_lm + 'api/Cashbox/XReport', {}, function(data){ if (data['error'] != undefined) { ajax_msg('main','danger', data['error']['text'],1); } }).fail(function(xhr, status, error) { console.log(xhr);console.log(status);console.log(error); ajax_msg('main', 'danger', xhr.responseText, 1); }); } //регистрация операций на сервере (для кассовых отчетов) p.reg_transaction = function(operation, data){ $.post(p.webroot + 'Trinity/reg_transaction/'+operation, data, function(data){ console.log('reg_transaction'); console.log(data); }); } //обновляем сессионные переменные p.update_session = function(){ console.log(p.access_token); $.post(p.webroot + 'trinity/update_session',{ "access_token": p.access_token, "refresh_token": p.refresh_token, "access_token_exp": p.access_token_exp }, function(data){ console.log('session updated'); console.log(data); }); } p.check_operation = function(data, msg_show) { msg_show = msg_show ? msg_show : false; //return var jd = $.postJSON(p.host_lm + 'api/Cashbox/CheckOperation', data) .done(function(data, textStatus, xhr){ //p.request_number = xhr.getResponseHeader("Request-Number"); console.log(xhr.getAllResponseHeaders()); console.log(xhr.responseText); if (data['error'] != undefined) { if (p.valid_error.includes(data['error']['code']) && msg_show) ajax_msg('main', 'danger', data['error']['text'], 1); else if (!p.valid_error.includes(data['error']['code'])) ajax_msg('main', 'danger', data['error']['text'], 1); } }) .fail(function(xhr, status, error) { console.log(xhr);console.log(status);console.log(error); ajax_msg('main', 'danger', xhr.responseText, 1); }); // jd.always(function(){ // //here is how to access the response header // console.log(jd.getAllResponseHeaders()); // }); return jd; } //вывод ошибок p.check_response = function(data) { if(data['data']) { ajax_msg('main_trinity', 'success', 'Токен успешно обновлён', 1); return data['data']; } if (data['error']) { var msg = "ТИС Trinity: "+data['error']['text']+"(code "+data['error']['code']+")"; if (data['error']['code'] == 6) msg += ' Повторить попытку'; ajax_msg('main_trinity', 'danger', msg, 1); ajax_msg('main', 'danger', msg, 1); } return false; } p.generateUUID = function () { //1 - 999.999.999 var uuid = Math.floor(Math.random() * Date.now()).toString(); return uuid.substring(uuid.length-9, uuid.length); }; //проверка токена p.check_token = async function() { //console.log(new Date() > new Date(p.access_token_exp)); if (p.access_token_exp=="") { var error = {'error': {'text':'ТИС Trinity: Необходимо авторизоваться'}}; return await error; }else if(new Date() > new Date(p.access_token_exp)){ return p.refresh(); }else { return await {}; } }; $.postJSON = function(url, data, callback) { // console.log( p.headers ); // console.log( data ); return $.ajax({ headers: p.headers, 'type': 'POST', 'url': url, 'data': JSON.stringify(data), 'dataType': 'json', 'success': callback }); }; window.Trinity = new trinity; }(jQuery));