//var API_KEY = "db6e7683455ed41ad984e32d21416a04c"; //d var API_KEY = "p286b393ea55d4665877a44369653e221"; //p var FUNCKEY = ""; var canStamp = false; // prevent duplicated stamping var waiting = false; var RESULT; var COUPON_MODE = false; var VERIFY_MODE = false; var CARD_COUPON_CODE; var MKTG_COUPON_CODE; var MKTG_COUPON_INFO; var COUPON_LIST_INDEX; var COUPONS; var SHOP_COUPON_INFO_SMOKING var SHOP_COUPON_INFO_NOSMOKING var MCNT_LIST; var AREA = { "A01":{ "area_name":"新松戸エリア", "lat":"35.8254725", "lon":"139.920711", "zoom":15 } }; $(document).on("ready", function () { var hSize = $(window).height(); $(".full").height(hSize); // ブラウザの縦のサイズを取得 }); $(window).on("resize", function () { // ページをリサイズした時の処理 var hSize = $(window).height(); $(".full").height(hSize); // ブラウザの縦のサイズを取得 }); $(window).on("load", function () { showLoading(); buttonReactioner(); $.get("api/getMcntList/", function(result){ MCNT_LIST = JSON.parse(result); $.get("api/getCouponList/",function(r){ SHOP_COUPON_INFO_SMOKING = JSON.parse(r).A; SHOP_COUPON_INFO_NOSMOKING = JSON.parse(r).B; rakluIdInit( true, function(){ echoss.initialize(API_KEY, echoss.REGION_CODE_TYPE.JAPAN); hideLoading(); //addToHomescreen({skipFirstVisit:false,displayPace:500}); }, function(){ window.location.href = "/theme/jt/snslogin/"; } ); }); }); }); window.addEventListener('load', function() { window.setTimeout(function() { var bubble = new google.bookmarkbubble.Bubble(); var parameter = 'bmb=1'; bubble.hasHashParameter = function() { //return false; return window.location.hash.indexOf(parameter) != -1; }; bubble.setHashParameter = function() { if (!this.hasHashParameter()) { window.location.hash += parameter; } }; bubble.getViewportHeight = function() { window.console.log('Example of how to override getViewportHeight.'); return window.innerHeight; }; bubble.getViewportScrollY = function() { window.console.log('Example of how to override getViewportScrollY.'); return window.pageYOffset; }; bubble.registerScrollHandler = function(handler) { window.console.log('Example of how to override registerScrollHandler.'); window.addEventListener('scroll', handler, false); }; bubble.deregisterScrollHandler = function(handler) { window.console.log('Example of how to override deregisterScrollHandler.'); window.removeEventListener('scroll', handler, false); }; bubble.showIfAllowed(); }, 1000); }, false); echoss.initializeSuccess = function () { //if(CUST_ID == "WuFEVsg4LzzKktV8SKbd9A.."){window.location.href="/theme/jt/index2.html";} echoss.setLanguageCode(echoss.Common.LANGUAGE_CODE_TYPE.JAPANESE); if (typeof (DISABLEICON) == "undefined") { echoss.Icon.init(); echoss.Icon.disableIcon(true); echoss.Icon.setOtpData( { aprvData: "1" + "," + CUST_ID + "," + FUNCKEY, funcCd: echoss.Icon.OTP_FUNC_CODE.STAMP_CARD, isuDivCd: echoss.Icon.OTP_ISSUE_TYPE.COLLECT, cntYn: "N", } , otpSuccess , otpFailed ); } echoss.Stamp.init( function (locUseTyp) { //$("#echossIcon").click(function () { callOtp(); }); //callOtp(); if(IS_SMOKING){ $("#smoking_mode").html("喫煙者用"); COUPONS = SHOP_COUPON_INFO_SMOKING; FUNCKEY = "V00A010B001S0005FSC001"; }else{ $("#smoking_mode").html("非喫煙者/未成年者用"); COUPONS = SHOP_COUPON_INFO_NOSMOKING; FUNCKEY = "V00A010B001S0005FSC002"; } if(IS_VERIFIED || !IS_SMOKING){ getDetailinfo(); }else{ $(".wrapper").hide(); doAgeVerify(); } }, function (errorCode, errorMsg) { logError(CUST_ID, errorCode, errorMsg, "echoss.Stamp.init()",false); doAlert(errorCodeToMsg(errorMsg)); } ); }; function buttonReactioner(){ $(".button").on("touchstart mousedown",function(){ $(this).addClass("mousedown"); }); $(".button").on("touchend mouseup",function(){ $(this).removeClass("mousedown"); }); } function doAgeVerify(){ $("#age-verify").show(); //$(".age-verify-wrapper").animate({top:0},400); VERIFY_MODE = true; } async function ageVerifyComplete(){ await setProfileVerified(CUST_ID); window.location.reload(); } function clearTempProfile(){ Cookies.remove("raklu-jt-profile", { path: ""}); window.location.reload(); clearProfile(); } function getDetailinfo(callback = null) { echoss.Stampcard.addAndGetDetailinfo({ id: CUST_ID, funckey: FUNCKEY }, function (result) { RESULT = result; if (callback) { callback(); } reloadBranchStampInfo(); }, function (errorCode, errorMessage) { logError(CUST_ID, errorCode, errorMessage, "getDetailinfo()",false); doAlert(errorCodeToMsg(code)); }); } function reloadBranchStampInfo() { var stampCount = 1; $(".stamp-history").removeClass("stampon"); $(".select-coupon-button").removeClass("select-coupon-button-enable"); $(".select-coupon-button").removeClass("button"); $(".select-coupon-button").off("click"); RESULT.accuList.forEach(function(accu){ $("#stamp" + stampCount).addClass("stampon"); if( $("#select-coupon-button" + stampCount).length > 0 ){ $("#select-coupon-button" + stampCount).addClass("select-coupon-button-enable"); $("#select-coupon-button" + stampCount).addClass("button"); $("#select-coupon-button" + stampCount).click(function(){ CARD_COUPON_CODE = RESULT.cardCpnList[this.dataset.cpnindex].code; showCouponSelector(this.dataset.cpnindex); }); } stampCount++; }); buttonReactioner(); hideLoading(); return; } function showStamping(){ $("#stamping").show(); $("#stamping").animate({top:0},200,function(){ canStamp=true; }); } function closeStamping(){ canStamp=false; $("#stamping").animate({top:"100vh"},200,function(){ $("#stamping").hide(); $(".stamping-stamp-area").removeClass("stampon-big"); }); } async function showCouponSelector(idx){ //idxがnullの場合は利用店舗マップにして表示させる。 if(idx != null){ $(".coupon-list").show(); $("#selector-title").show();$("#shopmap-title").hide(); $("#map").removeClass("fullmap");$("#map").addClass("compactmap"); canStamp = false; COUPON_MODE = true; COUPON_LIST_INDEX = idx; if(typeof (COUPONS[COUPON_LIST_INDEX]) == "undefined"){ //doAlert("選択できるクーポンがありません"); closeCouponSelector(); return; } }else{ $(".coupon-list").hide(); $("#selector-title").hide();$("#shopmap-title").show(); $("#map").removeClass("compactmap");$("#map").addClass("fullmap"); COUPON_LIST_INDEX = null; } await initMap(); var areaSelectorHtml = ""; Object.keys(AREA).forEach(function(area){ areaSelectorHtml += '
' + AREA[area].area_name + '
'; }); $(".area-selector-box").html(areaSelectorHtml); $("#coupon-selector").show(); $("#coupon-selector").scrollTop(0); $("#coupon-selector").animate({left:'0'},300,function(){ $(".wrapper").hide(); $(".area-selector-box").children(0).click(); }); buttonReactioner(); } function closeCouponSelector(){ canStamp = false; COUPON_MODE = false; CARD_COUPON_CODE = null; stopStampAnimation(); hideCoupon(); $(".wrapper").show(); $("#coupon-selector").animate({left:'100vw'},300, function(){ $("#coupon-selector").hide(); }); getDetailinfo(); } async function changeArea(area){ showLoading(); var cpnHtml = ""; var smoke = IS_SMOKING ? "喫煙者用" : "非喫煙者用"; console.log(COUPONS); if(COUPON_LIST_INDEX){ for(shopIdx in COUPONS[COUPON_LIST_INDEX][area]){ var showShopName = true; for(cpnIdx in COUPONS[COUPON_LIST_INDEX][area][shopIdx]){ var cpnCode = COUPONS[COUPON_LIST_INDEX][area][shopIdx][cpnIdx]; var couponDetails = await getCouponDetail(cpnCode); if(showShopName){ //cpnHtml += '
' + shopIdx + '
'; showShopName = false; } cpnHtml += '
'; cpnHtml += '
'; cpnHtml += '
'; cpnHtml += '
' + shopIdx + '
'; cpnHtml += '
' + couponDetails.result.coupons[0].name + '
'; cpnHtml += '
'; cpnHtml += '
'; cpnHtml += '
'; } } } pointShops(AREA[area].lat, AREA[area].lon, AREA[area].zoom); $(".coupon-list").html(cpnHtml); $(".area-selector").removeClass("area-selected"); $("#" + area).addClass("area-selected"); buttonReactioner(); hideLoading(); } async function showCoupon(cpnCode) { var cpnDetail = await getCouponDetail(cpnCode); console.log(cpnDetail); viewCouponDetail({ "name":cpnDetail.result.coupons[0].name, "imgDetailUrl":cpnDetail.result.coupons[0].detailImageUrl, "shopname":cpnDetail.result.brands[0].stores[0].name }); $("#coupon-detail").show(); $("#coupon-detail").animate({left:'0'},300,function(){ $("#coupon-selector").hide(); }); MKTG_COUPON_CODE = cpnCode; } function hideCoupon(){ $("#coupon-selector").show(); $("#coupon-detail").animate({left:"100vw"},300, function(){ $("#coupon-detail").hide(); }); } function getCouponDetail(id){ return new Promise(resolve =>{ $.get( "api/getCouponInfo/?couponid=" + id, function(r){ var result = JSON.parse(r); if(result.result){ resolve(result); }else{ logError(CUST_ID, "", "不正な操作が行われました。", "getCouponDetail()",false); doAlert("不正な操作が行われました。"); } } ); }); } function viewCouponDetail(obj) { $(".coupon-detail-img img").attr("src", obj.imgDetailUrl); $(".coupon-image img").attr("src", obj.imgDetailUrl); $(".coupon-detail-title").html(obj.name); $(".coupon-detail-shop-info-name").html(obj.shopname); } function showCouponStampBox(){ doAlert( "クーポンを使用すると" + RESULT.accuCount + "ポイントが
すべて消費されます

よろしいですか?", "","images/logo-mini.svg",true, "はい","いいえ", function(){ $("#use-coupon").show(); $("#use-coupon").animate({top:'0'},300); $(".coupon-used").hide(); canStamp = true; } ); } function closeCouponStampBox(){ $("#use-coupon").animate({top:"100vh"},300,function(){ $("#use-coupon").hide(); }); } /****************************************************** * ECHOSS ICON ******************************************************/ var OTP_DIV_CODE_SAVE_UP = "1"; var OTP_DIV_CODE_CANCEL_SAVING_UP = "2"; var OTP_DIV_CODE_USE_COUPON = "3"; function makeEchossServiceApproveKey(otpStampType, custNo, funcKey, issuedCouponNo) { // 구분코드,고객번호,매장키,쿠폰발행번호 // 구분코드 : 1:적립, 2:적립취소, 3:쿠폰사용 var key = otpStampType + "," + custNo + "," + funcKey; if (issuedCouponNo != undefined) { key += ("," + issuedCouponNo); } else { key += ("," + "0"); } console.log("Echoss Approve Key : " + key); return key; } var otpSuccess = function () { console.log("otpSuccess"); echoss.Icon.clseGuideView(); $(".popup_coupon_complete").show(); //echoss.Icon.hideIcon(); showLoading(); getDetailinfo(); } var otpFailed = function (code, message) { console.log("otpFailed : " + code + " " + message); } function callOtp() { $(".img_logo_echoss").attr("src", "../images/opt-logo.png"); $(".step_part_subtitle").text("ワンタイムパスコード"); $(".part01_remain_time_sub").text("有効時間内にスタッフにご提示ください。") $("#echossIcon").click(); $(".btn_step_part_confirm.change_color.otp_back_color.btn_receive_number.default.delay4").click(); $("#echoss_icon_otp_description").text("以下のワンタイムパスコードをスタッフにご提示ください。"); $(".btn_step_part_confirm").css("width", "90vw"); $(".btn_step_part_confirm.otp_number").css("font-size", "22vw"); $(".btn_step_part_confirm.otp_number").css("font-weight", "600"); $(".btn_step_part_confirm.otp_number").css("height", "30vw"); $(".btn_step_part_confirm.otp_number").css("line-height", "30vw"); } /****************************************************** * STAMPING ******************************************************/ echoss.Stamp.onError = function (code, message) { console.log(message); logError(CUST_ID, code, message, "echoss.Stamp.onError()",false); if(code == "ES08"){ alert("画面を縦にしてご利用ください。横画面では正常に動作しません。"); }else{ doAlert(errorCodeToMsg(code)); } } echoss.Stamp.onStamp = async function (stampParams) { if(VERIFY_MODE && IS_SMOKING){ stopStampAnimation(); $(".age-verify-stamp-area").addClass("ageverified"); setTimeout(function(){ $(".health-alert-wrapper").show(); },1000); return; } if(waiting == true){ doAlert("スタンプを連打しないでください。
2秒以上の間隔を開けでください。"); return;} if(canStamp == false && COUPON_MODE == false && VERIFY_MODE == false){ doAlert("「スタンプを押す」ボタンを押してからスタンプしてください。") } if(canStamp == false){ return; } startStampAnimation(); canStamp = false; if(COUPON_MODE){ var targetCpnIssueNo = null; if(RESULT.custCpnList.length > 0){ targetCpnIssueNo = RESULT.custCpnList[0].issueNo; }else{ await echossIssueCouponManually(CUST_ID, FUNCKEY, CARD_COUPON_CODE); var detailInfo = await echossStampcardGetDetailInfo(CUST_ID, FUNCKEY); targetCpnIssueNo = detailInfo.custCpnList[0].issueNo; } var mktgCpnIssueResult = await echossMktgCouponIssue(targetCpnIssueNo, MKTG_COUPON_CODE); if(mktgCpnIssueResult.result.list.length > 0){ var mktgCpnUseResult = await echossMktgCouponUse(targetCpnIssueNo, mktgCpnIssueResult.result.list[0].couponNo, stampParams); if(mktgCpnUseResult.length){ var cancelResult = await echossCancelCouponManually(CUST_ID, FUNCKEY, targetCpnIssueNo); doAlert("この店舗では利用できないクーポンです。"); }else{ var cancelResult = await echossCancelCouponManually(CUST_ID, FUNCKEY, targetCpnIssueNo); echoss.Stampcard.removeStampcard( {id: CUST_ID, funckey: FUNCKEY}, function(result){ console.log(result);}, function(code, msg){logError(CUST_ID, code, msg, "echoss.Stampcard.removeStampcard()",true);} ); $(".coupon-used").show(); } stopStampAnimation(); hideCoupon(); closeCouponSelector(); setTimeout(function(){ closeCouponStampBox(); },1000); } console.log(targetCpnIssueNo); }else{ if(RESULT.accuList.length == 9){ doAlert("これ以上スタンプできません。
クーポンに引き換えてください"); canStampWait(); stopStampAnimation(); canStamp = false; return; } echoss.Stampcard.collect({ id: CUST_ID, funckey: FUNCKEY, stampParams: stampParams }, function (result) { canStamp = false; stopStampAnimation(); chkDailyStamps( result, function(){ logError(CUST_ID, "", "当日中は同じ店舗でスタンプはできません。", "chkDailyStamps()",false); doAlert("当日中は同じ店舗でスタンプはできません。"); getDetailinfo(); closeStamping(); }, function(){ $(".stamping-stamp-area").addClass("stampon-big"); canStampWait(); showLoading(); getDetailinfo(); setTimeout(function(){ closeStamping(); },1000); } ); }, function (code, message) { stopStampAnimation(); canStampWait(); logError(CUST_ID, code, message, "echoss.Stampcard.collect()",false); doAlert(errorCodeToMsg(code)); closeStamping(); }); } } function chkDailyStamps(result, isStampedCallback, noStampCallback){ var lastStampedMcntId = result.accuList[result.accuList.length-1].accuMcntId; var today = moment().format("YYYYMMDD"); var isStampedToday = false; result.accuList.forEach(function(accu){ if(accu.accuNo < result.allStampAccuCnt){ if(accu.accuDate == today && accu.accuMcntId == lastStampedMcntId){ isStampedToday = true; } } }); //noStampCallback(); //return; if(isStampedToday){ echoss.Stampcard.cancelCollectingByMerchant( { id: CUST_ID, funckey: FUNCKEY, merchant: lastStampedMcntId }, function(r){ isStampedCallback(); }, function(c,m){ logError(CUST_ID, c, m, "echoss.Stampcard.cancelCollectingByMerchant()"); console.log(c + " / " + m); } ); }else{ noStampCallback(); } } function canStampWait(){ waiting = true; setTimeout(function(){ waiting = false; },2000); } function echossIssueCouponManually(id, funckey, cpncode){ return new Promise(resolve =>{ echoss.Stampcard.issueCouponManually( {id: id, funckey: funckey, coupon: cpncode }, function(result){ resolve(result); }, function(code,msg){ logError(CUST_ID, code, msg, "echossIssueCouponManually()",true); closeCouponSelector(); } ); }); } function echossCancelCouponManually(id, funckey, issueno){ return new Promise(resolve =>{ echoss.Stampcard.cancelCouponManually( { id: id, funckey: funckey, issueNo: issueno }, function(result){ resolve(result); }, function(code,msg){ logError(CUST_ID, code, msg, "echossCancelCouponManually()",true); closeCouponSelector(); } ); }); } function echossStampcardGetDetailInfo(id, funckey){ return new Promise(resolve =>{ echoss.Stampcard.getDetailInfo( {id: id, funckey: funckey}, function(result){ resolve(result); }, function(code, msg){ logError(CUST_ID, code, msg, "echossStampcardGetDetailInfo()",true); closeCouponSelector(); } ); }); } function echossStampcardUseCoupon(id, funckey, issueNo, stampParams){ return new Promise(resolve =>{ echoss.Stampcard.useCoupon( {id: id, issueNo: issueNo, funckey: funckey, type: "1",stampParams: stampParams}, function(result){ $.get( "api/useCoupon/?custid=" + issueNo + "&cpnno=" + MKTG_COUPON_INFO.result.list[0].couponNo + "&merchant=" + result.merchant, function(result2){ resolve(JSON.parse(result2)); }, ); }, function(code, msg){ logError(CUST_ID, code, msg, "echossStampcardUseCoupon()",true); closeCouponSelector(); } ); }); } function echossMktgCouponUse(id, cpnno, stampParams){ return new Promise(resolve =>{ echoss.MarketingCoupon.useCoupon({ userId: id, couponNo: cpnno, stampParams: stampParams }, function (result) { resolve(result); }, function (code, msg) { logError(CUST_ID, code, msg, "echossMktgCouponUse()",true); resolve(code); }); }); } function echossMktgCouponIssue(id, cpnCode){ return new Promise(resolve =>{ $.get( "api/issueCoupon/?custid=" + id + "&cpncode=" + cpnCode, function(result){ resolve(JSON.parse(result)); }, ); }); } function echossMktgCouponCancel(cpnno){ return new Promise(resolve =>{ $.get( "api/cancelCoupon/?cpnno=" + cpnno, function(result){ resolve(JSON.parse(result)); }, ); }); } function echossMktgCouponUseByMerchant(id, cpnno, merchant){ return new Promise(resolve =>{ $.get( "api/useCoupon/?custid=" + id + "&cpnno=" + cpnno + "&merchant=" + merchant, function(result){ resolve(JSON.parse(result)); }, ); }); } function setProfileVerified(id){ return new Promise(resolve =>{ $.get( "api/setAgeVerified/?encid=" + id, function(result){ if(result == "err"){ logError(CUST_ID, "", "年齢認証できませんでした", "setProfileVerified()",false); doAlert("年齢認証できませんでした"); clearFromStorage(ENCID_KEY); window.location.reload(); }else{ resolve(); } }, ); }); } function logError(id,code,msg,func,doAlert=false){ $.get( "api/errorLog/?userid=" + id + "&code=" + code + "&msg=" + msg + "&func=" + func ); if(doAlert){ doAlert("再度読み込みを行ってからお試しください。("+code+")","エラーが発生しました。") } } function clearProfile(){ doAlert( "アカウント削除をすると溜めたスタンプやプロフィール情報は全て消去されます。よろしいですか?", "","images/logo-mini.svg",true, "はい","いいえ", function(){ $.get( "api/deleteProfile/?id=" + CUST_ID, function(result){ clearFromStorage(ENCID_KEY); window.location.reload(); } ); } ); } function clearBrowser(){ clearFromStorage(ENCID_KEY); window.location.reload(); } function errorCodeToMsg(code){ switch(code){ case "A001": return "スタンプを正しく認識できませんでした。画面内にゆっくりとスタンプを押してください(A001)"; case "ES06": return "スタンプを正しく認識できませんでした。画面内にゆっくりとスタンプを押してください(ES06)"; } return "エラーが発生しました(" + code + ")"; }