(function($){
"use strict";
var loyalty=function(){
var o=this;
};
var p=loyalty.prototype;
//base data point
p.webroot='/'+window.location.pathname.split('/')[1]+'/';
p.url='';
p.log='';
p.ajaxmsg='modal_loyalty';
p.point_id=null;
p.net_id=null;
p.aftersearch=false;
//sms more
p.timeout=10;//лимит ожидания в секундах
p.timerId=null;//идентификатор таймера
//client session
p.session={};//данные сессии покупателя
p.balance={};//данные полный баланс клиента
//funct from iglobal
p.set_session = null;
p.check_session=function(action,callback_null,callback_ok){
$.post(p.webroot+'Settings/get_session',{type:'memory_form', action:action},function(data){
data=data||null;
if(data==null){
if(p.isFunction(callback_null)) callback_null();
}else if(p.isFunction(callback_ok)) callback_ok();
});
}
//инициализация
p.init = async function(data,session,balance){
console.log('Loyalty init start ...');
if (data) {
for (var key in data) {
switch (key) {
case "set_session":
p.set_function_set_session(data[key]);
break;
default:
p[key] = data[key];
break;
}
}
}
if(p.isEmpty(p.point_id) || (p.isEmpty(p.net_id))) console.log('device HAS NOT point/net');
if(!p.isEmpty(session) && !p.isEmpty(session['cashbox_wlid'])){
p.session=session;
p.session['cashbox_wlphone_old']=p.session['cashbox_wlphone'];
p.session['cashbox_wlid_old']=p.session['cashbox_wlid'];
if(!p.isEmpty(balance)){
p.balance=balance;
console.log('set balance as >>>');
console.log(balance);
}else{
console.log('load balance ...');
p.post('Loyalty/Client/info',{},p.balance_load)
}
}
console.log(p);
console.log('Loyalty init(ok)');
$("#m_discount").hide();
p.client_render();
}
p.client_select=function(){
Loyalty.go_step();
}
p.client_render=function(){
$("#box_ajax_msg"+p.ajaxmsg).hide();
//$('.alert').hide();
//$('.msg_rules').hide();
if(!p.isEmpty(p.session['cashbox_wlid'])){
p.check_session('cashbox_wlid',p.client_clear,function(){
$('.m-dd-menu').dropdown('toggle');
$("#m_loyalty_bonus").select();
});
}
//$("#wl_text").html('');// акции и скидки
p.render_btn();
p.render_balance();
//mb_aftersearch=true;
p.aftersearch=false;
}
p.render_btn=function(){
console.log(p.session);
if(!p.isEmpty(p.session['cashbox_wlid'])){
$("#a_phone_trash").show();
$("#a_phone_name").text(p.session['cashbox_wlphone']);
$("#m_filter_name").text(p.session['cashbox_wlbonus']+' б');
$("#m_loyalty_bonus").val(parseInt(p.session['cashbox_wlbonus']));
$("#m_loyalty_id").val(p.session['cashbox_wlid']);
}else{
$("#a_phone_trash").hide();
$("#a_phone_name").text("Лояльность VBonus");
$("#m_filter_name").text('VB');
$("#m_loyalty_bonus").val(0);
$("#m_loyalty_allbonus").data("available",0);
$("#m_loyalty_allbonus").text(0);
$("#m_loyalty_id").val('');
}
}
p.render_balance=function(){
if(!p.isEmpty(p.session['cashbox_wlid']) && !p.isEmpty(p.balance['name'])){
console.log(p.balance);
$(".loyalty_bonus").show();
$("#m_filter_name").html($("#m_loyalty_bonus").val()+' б');
$("#m_loyalty_namebalance").html(p.balance['name']+" +"+p.session['cashbox_wlphone']);
$("#m_loyalty_allbonus").text(p.balance['available']);
$("#m_loyalty_allbonus").data('available',p.balance['available']);
console.log('bonus=');
console.log(parseInt($("#m_loyalty_bonus").val()));
$("#modal_rule_mbonus").html('Всего бонусов: ' +p.balance['total']+" б
в т.ч. в блоке "+p.balance['blocked']+"");
$("#modal_rule_mbonus").show();
}else{
$("#modal_rule_mbonus").hide();
$("#m_loyalty_namebalance").text('Балльный счет - не авторизован');
}
}
//trash icon
p.client_clear=function(callback_func){
//remote $_SESSION
for(var key in p.session){
p.set_session(key,'');
}
p.session={};
p.client_render();
$("#wl_text_cashback, .item-wbonus").html('');
p.aftersearch=false;
if(p.isFunction(callback_func)) callback_func();
$("#m_loyalty_id").val('');
}
p.client_init=function(session,balance,callback_func){
if(!p.isEmpty(session)){
// данные сессии
p.session=session;
for(var key in p.session){
p.set_session(key,p.session[key]);
}
}
if(!p.isEmpty(p.session)){
//догружаем баланс клиента
if(!p.isEmpty(balance)){
p.balance=balance;
}else p.post('Loyalty/Client/info',{},p.balance_load)
p.client_render();
//p.aftersearch=false;
}
if(p.isFunction(callback_func)) callback_func();
}
// save bonus in session and recheck
p.set_bonus=function(new_bonus){
var current_bonus=0;
if(!p.isEmpty(p.session['cashbox_wlid'])){
p.check_session('cashbox_wlid',p.client_clear,function(){
if($("#m_loyalty_bonus").val().trim()=='') $("#m_loyalty_bonus").val(0);
var current_bonus=parseInt($("#m_loyalty_bonus").val());
if(typeof new_bonus === "undefined")
new_bonus=current_bonus;
if(current_bonus!=parseInt(new_bonus)){
current_bonus=new_bonus;
}
if(current_bonus>parseInt(p.balance['available'])){
current_bonus=parseInt(p.balance['available']);
p.ajax_msg('Установлено максимальное количество баллов к списанию - '+current_bonus+' б','info','main_wl');
}
$('.m-dd-menu').dropdown('toggle');
if(p.save_bonus(current_bonus)){
p.client_render();
p.pre_check();
}
});
}
}
p.pre_check=function(){
p.post("Loyalty/Client/pre_check",{},p.done_check,null,'main_wl');
}
p.done_check=function(obj){
console.log(obj);
//p.balance_load(obj);
var bonus_max=obj['bonus']['max'];
if(obj['bonus']['max']>obj['bonus']['available']) bonus_max=obj['bonus']['available'];
bonus_max='Максимальное списание по чеку - '+bonus_max+' б..'
$("#wl_text_cashback").html('');
if(obj['bonus']['wlbonus']>obj['bonus']['max']){
p.ajax_msg('Доступные баллы к списанию скорректированы по чеку с '+obj['bonus']['wlbonus']+' на '+obj['bonus']['max']+' б.'
+bonus_max,'warning','main_wl')
setTimeout(function(){
p.set_bonus(obj['bonus']['max']);
p.client_render();}
,2000);
}else if(p.session['cashbox_wlbonus'] != obj['bonus']['wlbonus']){
p.ajax_msg('Доступные баллы к списанию скорректированы по чеку с '+p.session['cashbox_wlbonus']+' на '+obj['bonus']['wlbonus']+' б.'
+bonus_max,'warning','main_wl')
setTimeout(function(){
p.set_bonus(obj['bonus']['wlbonus']);
p.client_render();}
,2000);
}else{
p.ajax_msg('Количество баллов к списанию '+obj['bonus']['wlbonus']+' б. подтверждено.'
+bonus_max,'success','main_wl');
p.render_check(obj['items'],obj['total']);
}
}
p.render_check=function(items,total){
var html_lines='';
var total_discount_wl=0;
var total_bonus_add=0;
var total_sum=0;
var total_discount=0;
$("#wl_text_cashback, .item-wbonus").html('');
if(items){
console.log('old_total_discount='+old_total_discount+'; old_total_sum='+old_total_sum);
var cnt_lines=Object.keys(items).length;
$.each(items, function(k,v) {
//console.log(cnt_lines);
var html_line='';
//console.log(k);
//console.log(v);
//console.log($(".item-tr-"+k+" .item-name .item-wbonus").html());
if($(".item-tr-"+k+" .item-name .item-wbonus").text()===''){
$(".item-tr-"+k+" .item-name").append('+'+(v['bonus']['cashback']||'0')+' б');
$(".item-tr-"+k+" .item-discount").append('+'+(v['bonus']['wlbonus'] ||'0')+'');
}else{
$(".item-tr-"+k+" .item-name .item-wbonus").text('+'+(v['bonus']['cashback']||'0')+' б');
$(".item-tr-"+k+" .item-discount .item-wbonus").text('+'+(v['bonus']['wlbonus']||'0'));
}
$("#item_sum_"+k).text(parseInt(v['sum']));//parseInt($("#h_sum_"+k).val())-parseInt(v['discount']));
total_bonus_add=total_bonus_add+(v['bonus']['cashback']||0);
total_discount_wl=total_discount_wl+parseInt(v['bonus']['wlbonus']);
if (!--cnt_lines) {
//console.log(cnt_lines);
$("#wl_text_cashback").html('Кэшбек '+total_bonus_add+' балл/а(ов)
');
//console.log('total_discount_wl='+total_discount_wl);
total_sum=parseInt(old_total_sum)-parseInt(total_discount_wl);
total_discount=parseInt(old_total_discount)+parseInt(total_discount_wl);
//console.log('total_sum='+total_sum+'; total_discount='+total_discount);
//console.log(total);
console.log(total_sum+' VS '+parseInt(total['sum']));
$('#total').html(total_sum);
$('#total_discount').html(total_discount);
if(total_sum==parseInt(total['sum'])){
set_session('cashbox_wlcheck','{"total_sum":"'+total_sum+'","total_discount":"'+total_discount+'","total_cashback":"'+total_bonus_add+'"}');
console.log('sum check - ok!');
}else{
p.ajax_msg('Сумма чека отличается от расчетной Wiedman Loyalty. Должна составлять '+total['sum'],'warning','main_wl');
}
money();
}
});
}
}
p.save_bonus=function(bonus){
if(p.isEmpty(p.session['cashbox_wlid'])) return false;
p.set_session('cashbox_wlbonus',bonus);
p.session['cashbox_wlbonus']=bonus;
// check bonus??
return true;
}
//FORMS LOYALTY - auth,reg,resume
p.go_step=function(step,obj_profile){
step=step||1;
if($("#formloyalty").is(':hidden'))
$("#formloyalty").modal("show");
//if($("#step"+step).is(":hidden")){
$(".m-step").hide();
$("#step"+step).show();
$("#li_main").show();
//}
switch (step) {
case 1:
$(".m_fields").val('');
$("#m_phone").select();
break;
case 2:
$("#m_sms").focus();
p.timer_start();
break;
case 3:
$("#m_user_phone").text(p.session['cashbox_wlphone']);
$("#m_user_fio").focus();
if(!p.isEmpty(obj_profile)){
$(".m_fields").val('');
$("#m_user_email").val(obj_profile['email']);
$("#m_user_fio").val(obj_profile['fio']);
$("#m_user_male").val(obj_profile['sex']);
$("#m_user_birth").val(obj_profile['birth']);
}
break;
default:
$("#li_main").hide();
break;
}
}
p.timer_start=function(){
p.timeout=10;
$("#l_sms_send").hide();
$("#modal_loyalty_rule_sms").show();
p.timer_render();
}
p.timer_render=function(){
if(p.timerId){clearTimeout(p.timerId);}
p.timerId=setTimeout(function(){
if(p.timeout!=0){
p.timeout=p.timeout-1;
$("#modal_loyalty_rule_sms").text('Отправить СМС повторно через '+p.toMMSS(p.timeout));
p.timer_render();
}else{
$("#modal_loyalty_rule_sms").hide();
$("#l_sms_send").show();
}
},1000);
}
// вход/регистрация с отправкой СМС
p.enter=function(type_enter,msg){
type_enter=type_enter||$("#m_type_sms").val();
$("#m_type_sms").val(type_enter);
$("#m_btn_approve").addClass('disabled');
$('.alert').hide();
$('.msg_rules').hide();
msg=msg||null;
if(msg!=null) p.ajax_msg(msg);//ajax_msg('modal_loyalty','danger',msg,1);
$("#m_sms").val('');
var params={phone:$("#m_phone").val(),type:type_enter};
p.post("Loyalty/Client/enter",params,p.sms_step,p.go_step);
}
p.enter_done=function(obj){
$("#m_loyalty_id").val('');
p.client_init({'cashbox_wlid':obj['id'],'cashbox_wlphone':obj['phone'],'cashbox_wlbonus':obj['balance']['available']},obj['balance']);
p.set_bonus(obj['balance']['available']);
//alert(obj);
//mb_phone=$("#m_phone").val();
//mb_id=obj['loyalty_id'];
$('.alert').hide();
$('.msg_rules').hide();
if(($("#m_type_sms").val()=='auth' && p.isEmpty(obj['profile']['email']))
|| $("#m_type_sms").val()=='reg'){
p.ajax_msg('Заполните данные участника программы лояльности VBonus');
p.go_step(3,obj['profile']);
}else{
p.close('Клиент успешно авторизован в системе лояльности.');
}
}
// повторный смс
p.sms=function(type_enter){
var params={phone:$("#m_phone").val(),id:$("#m_loyalty_id").val(),type:$("#m_type_sms").val()};
p.post("Loyalty/Client/enter",params,p.sms_step,p.go_step);
}
// ШАГ СМС: форма ввода СМС
p.sms_step=function(obj){
var msg='Сообщение успешно отправлено. Проверьте телефон и укажите код авторизации';
if((obj['sms']['chat_id']||"")==""){
msg='Для завершения регистрации клиенту необходимо пройти по ссылке(сканировать QR-код) и нажать кнопку "Подать заявку". Затем в чате нажать кнопку "Отправить контакт". После этого будет отправлен код авторизации';
}
setTimeout(function(){$("#m_btn_approve").removeClass('disabled');p.ajax_msg(msg,'success');}, 2000);
$("#m_loyalty_id").val(obj['id']);
$("#m_type_sms").val(obj['sms']['type']);
$("#m_phone_sms").val($("#m_phone").val());
//TODO только пока не подключены СМС
$("#m_sms").val(obj['sms']['code']);
p.render_qrlink("#m_qrcode");
p.go_step(2);
}
// ШАГ СМС: подтвердить СМС
p.sms_confirm=function(){
//as loyalty_auth
$('.alert').hide();
$('.msg_rules').hide();
$("#a_phone_trash").hide();
p.post("Loyalty/Client/confirm_sms",{
phone:$("#m_phone").val(),
type:$("#m_type_sms").val(),
sms:$("#m_sms").val()
},p.enter_done);
}
p.close=function(msg){
msg=msg||null;
if(msg!=null) p.ajax_msg(msg,'success','main_wl');
else if(p.isEmpty(p.session['cashbox_wlid'])){
p.ajax_msg('Вход в систему лояльности прерван.','info','main_wl');
p.client_clear();
}
$("#formloyalty").modal('hide');
}
p.profile_save=function(){
p.post("Loyalty/Client/profile_save",{phone:p.session['cashbox_wlphone'],
email:$("#m_user_email").val(),
fio:$("#m_user_fio").val(),
sex:$("#m_user_male").val(),
birth:$("#m_user_birth").val()},
p.close)
}
p.balance_load=function(obj){
console.log(obj);
if(!p.isEmpty(p.session['cashbox_wlid'])){
p.balance=obj['balance'];
p.render_balance();
//p.set_bonus();
}
}
p.print_qr=function(data){
console.log(data);
window.frames["print_frame"].document.body.innerHTML=data;
setTimeout('window.frames["print_frame"].window.focus();window.frames["print_frame"].window.print();', 1000);
}
p.render_qrlink=function(selector){
var text_html=' '+
'
'+ p['link'].substring(0,18)+'..
' $(selector).html(text_html); } p.copy_clipboard=function(text){ navigator.clipboard.writeText(text).then(function() { console.log('Async: Copying to clipboard was successful!'); }, function(err) { console.error('Async: Could not copy text: ', err); }); } // View/settings.ctp ---> p.settings_show=function(point_params,net_params){ console.log('settigns start ...'); console.log(point_params); var full_name=""; if (point_params) { for (var key in point_params) { $("#settings_wlpoint_"+key).val(point_params[key]); } $("#ttl_point").text('скидка '+point_params['bonus']+'%, кэшбек '+point_params['cashback']); full_name=point_params['name']||''; } if (net_params) { for (var key in net_params) { $("#settings_wlnet_"+key).val(net_params[key]); } $("#ttl_net").text('скидка '+net_params['bonus']+'%, кэшбек '+net_params['cashback']) full_name=(net_params['name']||'')+': '+full_name; } $("#settings_wlpoint_fullname").val(full_name); console.log(net_params); p.setting_toggle(); } p.setting_toggle=function(){ if($("#settings_loyalty_use").is(":checked")){ $(".wl_bonus").show(); $(".settings_wlpoint").hide(); }else{ $(".wl_bonus").hide(); } } p.settings_counttype=function(selector,value){ console.log(selector,value); if(value=="") $("#"+selector+"_count").val('').hide(); else if($("#"+selector+"_count").is(":hidden")) $("#"+selector+"_count").show(); } p.settings_save=function(){ var data=$(".input_wlbonus").serialize(); //data['loyalty_use']=$("#settings_loyalty_use").is(":checked"); p.post("Loyalty/Main/settings_save",data,p.settings_done); } p.settings_done=function(obj){ console.log(obj) p.ajax_msg('Настройки успешно сохранены.','success',p.ajaxmsg); p.settings_show(obj['point']['params'],obj['net']['params']); } // <---- p.post=function(link,params,callback_done,callback_error,rulecheck){ params=params||{}; rulecheck=rulecheck||p.ajaxmsg;//'modal_loyalty'; $.post(p.webroot+link, params, function(response) { console.log(response); if (!p.isEmptyObject(response)) { if(p.rule_check(rulecheck,obj)) if(p.isFunction(callback_done)) callback_done(obj['data']); else{ if(p.isFunction(callback_error)) callback_error(); } } }) .fail(function(xhr, status, error) { console.log('FAIL POST -->'); console.log(xhr);console.log(status);console.log(data); console.log('<-- FAIL POST'); p.ajax_msg('Bad Gateway','danger',rulecheck); }); } p.rule_check=function(id,obj){ console.log(id); if(obj["status"]=="ok" || ((typeof obj["status"]=="boolean") && obj["status"])){ var msg=obj["msg"]||""; if(msg!=""){ p.ajax_msg(msg,'success',id); } return true; }else{ console.log('rules!'); console.log(obj); //alert('rules'); ajax_rules(id,obj["rules"]); status='danger'; if(!p.isEmpty(obj["status"]) && obj["status"]!='error') status=obj["status"]; p.ajax_msg(obj["msg"],status,id); return false; } } p.ajax_msg=function(msg,status,ajaxmsg){ ajaxmsg=ajaxmsg||p.ajaxmsg; status=status||"success"; msg=msg||'Данных для вывода в сообщении нет'; ajax_msg(ajaxmsg, status, msg); } //индикатор загрузки p.load = function(comand){ if (comand == 'start') $('.wlload').addClass('spin'); else $('.wlload').removeClass('spin'); } p.isEmpty = function(str) { return (!str || str.length === 0 ); } p.isEmptyObject = function(str,ajaxmsg){ try { obj=JSON.parse(str); if (Object.keys(obj).length==0) throw new SyntaxError("Данные некорректны - объект пуст."); } catch (e) { console.log(str) p.ajax_msg('Произошла ошибка при обращении к серверу программы лояльности VBonus.','danger'); //ajaxmsg=ajaxmsg||p.ajaxmsg; //ajax_msg(ajaxmsg, 'danger', 'Произошла ошибка при обращении к серверу программы лояльности VBonus.', 1); return true; } return false; } p.isFunction=function(functionToCheck) { var getType = {}; return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; } /* p.is_json = function(str) { try { JSON.parse(str); } catch (e) { console.log() return false; } return true; }*/ // set funct from iglobal p.set_function_set_session = function(func) { p.set_session=func; } p.toMMSS = function(times) { var sec_num = parseInt(times, 10); var hours = Math.floor(sec_num / 3600); var minutes = Math.floor((sec_num - (hours * 3600)) / 60); var seconds = sec_num - (hours * 3600) - (minutes * 60); if (minutes < 10) {minutes = "0"+minutes;} if (seconds < 10) {seconds = "0"+seconds;} return minutes+':'+seconds; } window.Loyalty = new loyalty; }(jQuery));