(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));