',
nextArrow: '
',
responsive: [{
breakpoint: 1199,
settings: {
slidesToShow: 3,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 2,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._dataArray = [];
$scope._dataArrayDone = false;
$scope._getDataArray = function(id) {
var dataSend = {
'txt_referral_id': id
};
GAEAPI.get('referral/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
console.log("_dataArray", $scope._dataArray);
}
});
};
$scope._getDataArray($scope.referralid);
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope.openCity = function(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " active";
}
$scope.displayImage = function(image_url, prefix) {
return GAEAPI.getGaeImageUrl(image_url, prefix);
}
};
return promise;
});_ui_share_app.directive('componentCategoryFeaturedSildeA', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryFeaturedSildeA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.carousel = function(cover_in, carousel_in) {
$scope.getData().consoleLog("imageCarousel : cover_in : ", cover_in);
$scope.getData().consoleLog("imageCarousel : carousel_in :", carousel_in);
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: false,
arrows: false,
autoplay: true,
autoplaySpeed: 5000,
slidesToShow: 4,
slidesToScroll: 4,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
responsive: [{
breakpoint: 1199,
settings: {
slidesToShow: 4,
slidesToScroll: 4,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 2,
slidesToScroll: 2,
}
}]
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1500);
};
$scope.getData = function() {
var data = {
consoleLog: function(name, data) {
/* console.log(name, data); */
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(number, api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(number, api, dataSend);
},
getApi: function(number, api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(number, output);
});
},
titleUrl: function(str) {
var url = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return url;
},
locationUrlProductDetail: function(product_id, product_title) {
var _self = this;
var url = 'product-detail/';
url += product_id + '-';
url += _self.titleUrl(product_title);
_self.locationUrl(url, '');
},
locationUrl: function(url) {
if (url != "") {
$location.url(url).replace();
}
},
windowLocation: function(url) {
if (url != "") {
window.location.href = url;
}
},
main: function() {
var _self = this;
}
}
return data;
};
$scope.dataArray = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataSet = [{
number: 0,
api: "referral/lists",
dataSend: {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 5,
'txt_sortby': 'referral_sort_index_asc_time_desc',
'txt_filter_json': JSON.stringify({
"badge_id_array": [16]
})
},
}, {
number: 1,
api: "product/lists",
dataSend: {},
}];
$scope.getData().dataSend($scope.dataSet[0].number, $scope.dataSet[0].api, $scope.dataSet[0].dataSend, function(number, api, dataSend) {
$scope.dataArrayState = $scope.getData().stateData(true, false);
$scope.getData().getApi(0, api, dataSend, function(number, output) {
$scope.dataArray = output.data.dataList;
$scope.dataArrayState = $scope.getData().stateData(false, true);
$scope.getData().consoleLog("getData : dataArray : ", $scope.dataArray);
for (var a = 0; a < output.data.dataList.length; a++) {
$scope.dataArray[a].referral_product_carousel = a;
$scope.dataArray[a].referral_product_state = $scope.getData().stateData(true, false);
$scope.dataArray[a].referral_products = [];
var filter_json = {
referral_id_array: [output.data.dataList[a].referral_id],
}
$scope.dataSet[1].dataSend = {
'cur_page': 1,
'per_page': 8,
'txt_sortby': 'product_lastest_create',
'txt_filter_json': JSON.stringify(filter_json)
}
$scope.getData().dataSend(a, $scope.dataSet[1].api, $scope.dataSet[1].dataSend, function(a, api, dataSend) {
$scope.getData().getApi(a, api, dataSend, function(number, output) {
$scope.dataArray[number].referral_products = output.data.dataList;
$scope.dataArray[a].referral_product_state = $scope.getData().stateData(false, true);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.getData().consoleLog("getData : a : ", a);
$scope.getData().consoleLog("getData : product_lists : ", $scope.dataArray[number].referral_products);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.getData().consoleLog("getData : dataArray : ", $scope.dataArray);
});
});
}
});
});
};
return promise;
});_ui_share_app.directive('componentCategoryFeaturedTabsTypeA', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryFeaturedTabsTypeA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.getData = function() {
var data = {
consoleLog: function(name, data) {
/* console.log(name, data); */
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(number1, number2, api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : number1 : ", number1);
_self.consoleLog("getData : number2 : ", number2);
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(number1, number2, api, dataSend);
},
getApi: function(number1, number2, api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : number1 : ", number1);
_self.consoleLog("getData : number2 : ", number2);
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(number1, number2, output);
});
},
main: function() {
var _self = this;
},
titleUrl: function(str) {
var url = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return url;
},
locationUrlProductDetail: function(product_id, product_title) {
var _self = this;
var url = 'product-detail/';
url += product_id + '-';
url += _self.titleUrl(product_title);
_self.locationUrl(url, '');
},
locationUrl: function(template, data) {
$location.url(template + data).replace();
},
getHeight: function() {
return ($(window).width() > 767) ? 100 : 60;
}
}
return data;
};
$scope.buy = function() {
var data = {
buyProcess: function(product_id, product_total_stock) {
var _self = this;
if (product_total_stock != '0') {
_self.isSelected(product_id, function(selected) {
console.log("buy : buyProcess : isSelected : ", selected);
if (!selected) {
_self.isProgress(product_id, function(progress) {
console.log("buy : buyProcess : isProgress : ", progress);
if (!progress) {
var root_virtual_cart_type_b = $('#root-virtual-cart-type-b').hasClass('show');
if (!root_virtual_cart_type_b) {
$virtualCartTypeB.isCart();
} else {
$virtualCartTypeB.isLoad();
}
UiCart.delegate.product.add(product_id, 1, 0, function(output) {
console.log("buy : buyProcess : add : ", output);
if (!root_virtual_cart_type_b) {
$virtualCartTypeB.isCart();
} else {
$virtualCartTypeB.isLoad();
}
});
}
});
}
});
} else {
alert("สินค้าหมดแล้วนะค่ะ");
}
},
isSelected: function(product_id, callback) {
var selected = UiCart.delegate.product.isSelected(product_id);
callback(selected);
},
isProgress: function(product_id, callback) {
var progress = UiCart.delegate.product.isProgress(product_id);
callback(progress);
}
}
return data;
};
$scope.tags = {
index: '0'
};
$scope.dataArray = [];
$scope.dataSet = [{
api: "referral/short_lists",
dataSend: {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 10,
'txt_badge_id': 16,
'txt_parent_id': 0,
'txt_sortby': 'referral_sort_index_asc_time_desc',
},
}, {
api: "referral/map",
dataSend: {},
}, {
api: "product/lists",
dataSend: {},
}];
$scope.getData().dataSend(0, 0, $scope.dataSet[0].api, $scope.dataSet[0].dataSend, function(number1, number2, api, dataSend) {
$scope.getData().getApi(number1, number2, api, dataSend, function(number1, number2, output) {
$scope.dataArray = output.data.dataList;
$scope.getData().consoleLog("getData : dataArray : ", $scope.dataArray);
for (var a = 0; a < output.data.dataList.length; a++) {
$scope.getData().getRouteParams(function(params) {
if (typeof params.root_id != 'undefined') {
$scope.tags.index = params.root_id.toString();
} else {
$scope.tags.index = output.data.dataList[0].referral_id.toString();
}
});
$scope.dataArray[a].referral_sub_array_state = $scope.getData().stateData(true, false);
$scope.dataArray[a].referral_sub_array = [];
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.getData().consoleLog("getData : number : ", a);
$scope.getData().consoleLog("getData : referral_id : ", output.data.dataList[a].referral_id);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.dataSet[1].dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': output.data.dataList[a].referral_id
}
$scope.getData().dataSend(a, 0, $scope.dataSet[1].api, $scope.dataSet[1].dataSend, function(number1, number2, api, dataSend) {
$scope.getData().getApi(number1, number2, api, dataSend, function(number1, number2, output) {
$scope.dataArray[number1].referral_sub_array = output.data;
$scope.dataArray[number1].referral_sub_array_state = $scope.getData().stateData(false, true);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.getData().consoleLog("getData : number1 : ", number1);
$scope.getData().consoleLog("getData : referral_sub_array : ", $scope.dataArray[number1].referral_sub_array);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
for (var b = 0; b < output.data.length; b++) {
$scope.dataArray[number1].referral_sub_array[b].product_state = $scope.getData().stateData(true, false);
$scope.dataArray[number1].referral_sub_array[b].product_list = [];
$scope.getData().consoleLog("getData : dataSend to getApi to for : for : ", "------- dataSet.dataArray -------");
$scope.getData().consoleLog("getData : number2 : ", b);
$scope.getData().consoleLog("getData : referral_id : ", output.data[b].referral_id);
$scope.getData().consoleLog("getData : dataSend to getApi to for : for : ", "------- dataSet.dataArray -------");
var filter_json = {
"referral_id_array": [output.data[b].referral_id],
}
$scope.dataSet[2].dataSend = {
'cur_page': 1,
'per_page': 200,
'txt_sortby': 'product_lastest_create',
'txt_filter_json': JSON.stringify(filter_json)
}
$scope.getData().dataSend(number1, b, $scope.dataSet[2].api, $scope.dataSet[2].dataSend, function(number1, number2, api, dataSend) {
$scope.getData().getApi(number1, number2, api, dataSend, function(number1, number2, output) {
$scope.getData().consoleLog("getData : getApi : output : ", output);
$scope.dataArray[number1].referral_sub_array[number2].product_list = output.data.dataList;
$scope.dataArray[number1].referral_sub_array[number2].product_state = $scope.getData().stateData(false, true);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.getData().consoleLog("getData : number1 : ", number1);
$scope.getData().consoleLog("getData : number2 : ", number2);
$scope.getData().consoleLog("getData : product_list : ", $scope.dataArray[number1].referral_sub_array[number2].product_list);
$scope.getData().consoleLog("getData : dataSend to getApi to for : ", "------- dataSet.dataArray -------");
$scope.getData().getRouteParams(function(params) {
if (typeof params.referral_id != 'undefined' && typeof params.referral_id != '0') {
$timeout(function() {
$('html, body').animate({
scrollTop: $("div[id='" + params.referral_id + "']").offset().top - $scope.getData().getHeight()
}, 200);
}, 1000);
}
});
});
});
}
});
});
}
});
});
};
return promise;
});_ui_share_app.directive('componentCategoryFeaturedTabsTypeB', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryFeaturedTabsTypeB';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.getData = function() {
var getFunction = {
consoleLog: function(name, data) {
console.log('componentCategoryFeaturedTabsTypeB : ', name, data);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(load, done) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : load : ", load);
_self.consoleLog("getData : done : ", done);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: load,
done: done
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
titleUrl: function(str) {
var url = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return url;
},
locationUrl: function(template) {
$location.url(template).replace();
},
categoryUrl: function(rootId, referralId) {
var _self = this;
var template = "category-lists";
var res_template = template.concat("?root_id=", rootId, "&referral_id=", referralId, "&referral_type=category");
_self.locationUrl(res_template);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.cover_top = "products";
$scope.state = "";
$scope.dataArrayMain = [];
$scope.dataArrayMainState = $scope.getData().stateData(false, false);
$scope.dataArray = [];
$scope.dataArrayState = $scope.getData().stateData(false, false);
$scope.getData().getRouteParams(function(params) {
$scope.routeParams = params;
$scope.dataArrayState = $scope.getData().stateData(true, false);
if (params.root_id == undefined && params.referral_id == undefined && params.sendtag == undefined && params.badge_id == undefined) {
$scope.cover_top = "products";
$scope.state = "main_category";
var txt_filter_json = {
badge_id_array: [16, 18]
};
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.dataArrayMainState = $scope.getData().stateData(true, false);
$scope.getData().dataSend('referral/map', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(output) {
$scope.dataArrayMain = output.data;
$scope.dataArrayMainState = $scope.getData().stateData(false, true);
for (var i = 0; i < output.data.length; i++) {
var loop = 0;
var txt_filter_json = {};
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': output.data[i].referral_id,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.dataArrayState = $scope.getData().stateData(true, false);
$scope.getData().dataSend('referral/map', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(res_output) {
var oldData = $scope.dataArray;
$scope.dataArray = oldData.concat(res_output.data);
loop = loop + 1;
if (output.data.length == loop) {
$scope.dataArrayState = $scope.getData().stateData(false, true);
}
});
});
}
});
});
} else if (params.root_id == '0' && params.referral_id != undefined && params.sendtag == undefined && params.badge_id == undefined) {
$scope.state = "sub_category";
var dataSend = {
'txt_referral_id': params.referral_id
};
$scope.getData().dataSend('referral/id', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(output) {
console.log("referral/id : output.data : ", output.data);
$scope.cover_top = output.data.referral_name;
});
});
var txt_filter_json = {
'badge_id_array': [16, 18]
};
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.dataArrayMainState = $scope.getData().stateData(true, false);
$scope.getData().dataSend('referral/map', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(output) {
$scope.dataArrayMain = output.data;
$scope.dataArrayMainState = $scope.getData().stateData(false, true);
});
});
var txt_filter_json = {};
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': params.referral_id,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.dataArrayState = $scope.getData().stateData(true, false);
$scope.getData().dataSend('referral/map', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(output) {
$scope.dataArray = output.data;
$scope.dataArrayState = $scope.getData().stateData(false, true);
});
});
} else if (params.root_id != '0' && params.referral_id != undefined && params.sendtag == undefined && params.badge_id == undefined) {
$scope.state = "sub_category";
var dataSend = {
'txt_referral_id': params.referral_id
};
$scope.getData().dataSend('referral/id', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(output) {
$scope.cover_top = output.data.referral_name;
});
});
var txt_filter_json = {
'badge_id_array': [16, 18]
};
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.dataArrayMainState = $scope.getData().stateData(true, false);
$scope.getData().dataSend('referral/map', dataSend, function(api, dataSend) {
$scope.getData().getApi(api, dataSend, function(output) {
$scope.dataArrayMain = output.data;
$scope.dataArrayMainState = $scope.getData().stateData(false, true);
});
});
$scope.dataArrayState = $scope.getData().stateData(false, true);
} else if (params.root_id == undefined && params.referral_id == undefined && params.sendtag != undefined && params.badge_id == undefined) {
$scope.state = "sendtag_products";
$scope.dataArrayState = $scope.getData().stateData(false, true);
} else if (params.root_id == undefined && params.referral_id == undefined && params.sendtag == undefined && params.badge_id != undefined) {
$scope.state = "badge_products";
$scope.dataArrayState = $scope.getData().stateData(false, true);
} else {
$scope.dataArrayState = $scope.getData().stateData(false, true);
}
});
};
return promise;
});_ui_share_app.directive('componentCategoryFeaturedTabsTypeBp', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryFeaturedTabsTypeBp';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
referralid: '@referralid',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope._component = {
name: "componentCategoryFeaturedTabsTypeBp",
show: (window.location.hostname == "localhost") ? true : false
};
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
/* scope */
$scope._name = ($scope.name != undefined && $scope.name != "") ? $scope.name : "default";
$scope._margin = ($scope.margin != undefined && $scope.margin != "") ? {
margin: $scope.margin
} : {
margin: 0
};
$scope._limit = ($scope.limit != undefined && $scope.limit != "") ? parseInt($scope.limit) : 1;
/* scope */
$scope.getData = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._component.show) {
console.log($scope._component.name, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams", "params", params);
callback(_self, params, state);
},
getBlogId: function(params, callback) {
var _self = this;
var blog_id = (params.blog_id != undefined) ? params.blog_id.split("-", 1).join("") : false;
_self.consoleLog("getBlogId", "blog_id", blog_id);
callback(blog_id);
},
formatDataSend: function(data, callback) {
var _self = this;
_self.consoleLog("formatDataSend", "data", data);
callback(data);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData", "state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend", "api", api);
_self.consoleLog("dataSend", "dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi", "ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.consoleLog("getApi", "res_api", res_api);
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi", "res_ok", res_ok);
state = _self.stateData(false, true);
_self.consoleLog("checkGetApi", "state", state);
callback(res_ok, res_api, state);
})
});
},
getDate: function(locale, format, lifetime, callback) {
var _self = this;
locale = (locale == '') ? 'en' : locale;
format = (format == '') ? 'LL' : format;
lifetime = (lifetime != "-1" && lifetime != "") ? lifetime : "";
if (lifetime != "") {
moment.locale(locale);
lifetime = moment.unix(parseInt(lifetime)).format(format);
}
_self.consoleLog("getDate", "lifetime", lifetime);
callback(lifetime);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
getCur: function(index, total, show, start, end, callback) {
var _self = this;
if (index == 1 && total > show) {
end = show;
} else if (index == total && total > show) {
start = total - (show - 1);
} else if (index < show && index <= (show / 2) && total > show) {
end = show;
} else if (index > (show / 2) && (index + (show / 2)) <= total && total > show) {
start = (index - ((show / 2) - 1));
end = (index + ((show / 2)));
} else if (index < total && total > show) {
start = total - (show - 1);
}
_self.getCurArray(start, end, function(res_cur_page_array) {
_self.consoleLog("getCur", "res_cur_page_array", res_cur_page_array);
callback(res_cur_page_array);
});
},
getCurArray: function(start, end, callback) {
var _self = this;
var cur_page_array = [];
for (var i = start; i <= end; i++) {
var item = {
state: true,
number: i
}
cur_page_array.push(item);
}
_self.consoleLog("getCurArray", "cur_page_array", cur_page_array);
callback(cur_page_array);
},
getCurPageArray: function(curPage, perPage, totalRows, callback) {
var _self = this;
var show = 6;
var cur_pages = Math.round(totalRows / perPage);
var cur_page_array = [];
var cur = {
start: 1,
end: cur_pages
}
_self.getCur(curPage, cur_pages, show, cur.start, cur.end, function(res_cur_page_array) {
cur_page_array = res_cur_page_array;
});
_self.consoleLog("getCurPageArray", "cur_page_array", cur_page_array);
callback(cur_page_array);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getPages = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._component.show) {
console.log($scope._component.name, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageBlog: function(page_name, blog_id, blog_name_url) {
var _self = this;
var page = page_name;
page = (blog_id == '' || blog_name_url == '') ? page : page + "/" + blog_id + "-" + blog_name_url;
_self.locationUrlReplace(page);
}
}
return getFunction;
};
$scope.getCur = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._component.show) {
console.log($scope._component.name, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getLeft: function() {
var _self = this;
var index = ($scope.data_api.load_more.cur_page - 1 != 0) ? $scope.data_api.load_more.cur_page - 1 : false;
_self.consoleLog("getLeft", "index", index);
if (index != false) {
$scope.loadPage(index);
}
},
getRight: function() {
var _self = this;
var _self = this;
var cur_pages = Math.round($scope.data_api.load_more.total_rows / $scope.data_api.load_more.per_page);
var index = ($scope.data_api.load_more.cur_page + 1 < cur_pages) ? $scope.data_api.load_more.cur_page + 1 : false;
_self.consoleLog("getRight", "index", index);
if (index != false) {
$scope.loadPage(index);
}
},
}
return getFunction;
};
/* get api */
$scope.data_api = {
blog_id: false,
load_more: {
load: false,
cur_page: 1,
cur_page_array: [],
per_page: 9,
total_rows: 0
},
product: {
data_send: {},
api: "product/lists",
ok: false,
data_array: [],
data_array_state: {
load: false,
done: false
}
}
};
$scope.loadPage = function(index) {
$scope.data_api.product = {
data_send: {},
api: "product/lists",
ok: false,
data_array: [],
data_array_state: {
load: false,
done: false
}
}
$scope.data_api.load_more.cur_page = parseInt(index);
$scope.getData().getRouteParams(function(_self, params, state) {
$scope.data_api.product.data_array_state = state;
_self.getBlogId(params, function(res_blog_id) {
_self.formatDataSend($scope.data_api.product, function(res_data) {
var filter_json = {
"referral_id_array": [$scope.referralid],
}
var dataSend = {
'cur_page': $scope.data_api.load_more.cur_page,
'per_page': $scope.data_api.load_more.per_page,
'txt_sortby': 'product_lastest_create',
'txt_filter_json': JSON.stringify(filter_json)
}
res_data.data_send = dataSend;
_self.dataSend(res_data.api, res_data.data_send, function(res_api, res_data_send) {
_self.getApi(res_api, res_data_send, function(res_ok, res_api, res_state) {
res_data.ok = res_ok;
res_data.data_array = res_api.data.dataList;
res_data.data_array_state = res_state;
_self.consoleLog("getApiData", "res_data", res_data);
$scope.data_api.load_more.total_rows = res_api.data.total_rows;
_self.getCurPageArray($scope.data_api.load_more.cur_page, $scope.data_api.load_more.per_page, res_api.data.total_rows, function(res_cur_page_array) {
$scope.data_api.load_more.cur_page_array = res_cur_page_array;
});
});
});
});
});
});
};
$scope.getData().getRouteParams(function(_self, params, state) {
$scope.data_api.product.data_array_state = state;
_self.getBlogId(params, function(res_blog_id) {
_self.formatDataSend($scope.data_api.product, function(res_data) {
var filter_json = {
"referral_id_array": [$scope.referralid],
}
var dataSend = {
'cur_page': $scope.data_api.load_more.cur_page,
'per_page': $scope.data_api.load_more.per_page,
'txt_sortby': 'product_lastest_create',
'txt_filter_json': JSON.stringify(filter_json)
}
res_data.data_send = dataSend;
_self.dataSend(res_data.api, res_data.data_send, function(res_api, res_data_send) {
_self.getApi(res_api, res_data_send, function(res_ok, res_api, res_state) {
res_data.ok = res_ok;
res_data.data_array = res_api.data.dataList;
res_data.data_array_state = res_state;
_self.consoleLog("getApiData", "res_data", res_data);
$scope.data_api.load_more.total_rows = res_api.data.total_rows;
_self.getCurPageArray($scope.data_api.load_more.cur_page, $scope.data_api.load_more.per_page, res_api.data.total_rows, function(res_cur_page_array) {
$scope.data_api.load_more.cur_page_array = res_cur_page_array;
});
});
});
});
});
});
/* get api */
};
return promise;
});_ui_share_app.directive('componentCategoryFeaturedTypeA', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryFeaturedTypeA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.getData = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
locationUrl: function(url) {
if (url != "") {
$location.url(url).replace();
}
},
windowLocation: function(url) {
if (url != "") {
window.location.href = url;
}
},
main: function() {
var _self = this;
}
}
return data;
};
$scope.dataArray = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataSet = [{
api: "referral/lists",
dataSend: {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 5,
'txt_sortby': 'referral_sort_index_asc_time_desc',
'txt_filter_json': JSON.stringify({
"badge_id_array": [16]
})
},
}];
$scope.getData().dataSend($scope.dataSet[0].api, $scope.dataSet[0].dataSend, function(api, dataSend) {
$scope.dataArrayState = $scope.getData().stateData(true, false);
$scope.getData().getApi(api, dataSend, function(output) {
$scope.dataArray = output.data.dataList;
$scope.dataArrayState = $scope.getData().stateData(false, true);
$scope.getData().consoleLog("getData : dataArray : ", $scope.dataArray);
});
});
};
return promise;
});_ui_share_app.directive('componentCategoryIdA', function($rootScope, $routeParams) {
var templateName = 'componentCategoryIdA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
referralid: '@referralid',
size: '@size',
sizelist: '@sizelist',
sort: '@sort',
col: '@col',
component: '@component',
stylebutton: '@stylebutton',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.size = (typeof $scope.size !== 'undefined') ? $scope.size : 8;
$scope.sizelist = (typeof $scope.sizelist !== 'undefined') ? $scope.sizelist : 4;
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(referralid) {
$scope._dataArrayState = $scope.StateData(true, false);
var txt_filter_json = {
'referral_id_array': [referralid]
};
var dataSend = {
'cur_page': 1,
'per_page': $scope.sizelist,
'txt_sortby': $scope.sort,
'txt_filter_json': JSON.stringify(txt_filter_json)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data.dataList;
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope.referralid);
$scope.$watch('col', function(newValue, oldValue) {
if (!newValue) {
return;
}
$scope._col = newValue.toString().split(",");
});
$scope.getCol = function(n) {
return (typeof $scope._col != 'undefined') ? (typeof $scope._col[n] != 'undefined' && $scope._col[n] != '') ? $scope._col[n] : 12 : 12;
};
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentCategoryListsA', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryListsA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
pagename: '@pagename',
categorycol: '@categorycol',
productcol: '@productcol',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.params_referral_id = $routeParams.referral_id;
$scope.tab = "";
$scope.view = 'category';
$scope.viewRouteParams = function() {
return $routeParams || false;
};
$scope.$watch('categorycol', function(newValue, oldValue) {
if (!newValue) {
return;
}
$scope._categorycol = newValue.toString().split(",");
});
$scope.getCategoryCol = function(n) {
return (typeof $scope._categorycol != 'undefined') ? (typeof $scope._categorycol[n] != 'undefined' && $scope._categorycol[n] != '') ? $scope._categorycol[n] : 12 : 12;
};
$scope.$watch('productcol', function(newValue, oldValue) {
if (!newValue) {
return;
}
$scope._productcol = newValue.toString().split(",");
});
$scope.getProductCol = function(n) {
return (typeof $scope._productcol != 'undefined') ? (typeof $scope._productcol[n] != 'undefined' && $scope._productcol[n] != '') ? $scope._productcol[n] : 12 : 12;
};
$scope._dataArrayLength = 0;
$scope._dataArrayId = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArrayId = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {};
var dataSend = {
'txt_referral_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log("componentCategoryListsA _getDataArrayId dataSend : ", dataSend);
GAEAPI.get('referral/id', dataSend, $scope).then(function(output) {
if (output.ok === 1) {
$scope._dataArrayId = output.data;
console.log("componentCategoryListsA _getDataArrayId _dataArrayId : ", $scope._dataArrayId);
$scope.tab = output.data.referral_name;
console.log("componentCategoryListsA _getDataArrayId tab : ", $scope.tab);
$scope._getDataArrayProduct(id);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope._dataArrayProduct = [];
$scope._getDataArrayProduct = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {
"referral_id_array": [id],
};
var dataSend = {
'cur_page': 1,
'per_page': 24,
'txt_sortby': 'product_lastest_create',
'txt_filter_json': JSON.stringify(filter_json)
};
console.log("componentCategoryListsA _getDataArrayProduct dataSend : ", dataSend);
GAEAPI.get('product/lists', dataSend, $scope).then(function(output) {
if (output.ok === 1) {
$scope._dataArrayProduct = output.data.dataList;
$scope._dataArrayLength = output.data.dataList.length;
console.log("componentCategoryListsA _getDataArrayProduct _dataArrayProduct : ", $scope._dataArrayProduct);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._getDataArray = function() {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_asc'
};
console.log("componentCategoryListsA _getDataArray dataSend : ", dataSend);
GAEAPI.get('referral/map', dataSend, $scope).then(function(output) {
if (output.ok === 1) {
$scope._dataArray = output.data;
$scope._dataArrayLength = output.data.length;
console.log("componentCategoryListsA _getDataArray _dataArray : ", $scope._dataArray);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
// $scope.intab = function(id, data) {
// $scope.tab = data;
// console.log('intab : ', id, data);
// $scope._getDataArrayId(id);
// };
$scope.$watch('params_referral_id', function(newValue, oldValue) {
console.log("params_referral_id : ", newValue, oldValue);
if (newValue != undefined) {
$scope._getDataArray();
$scope._getDataArrayId(newValue);
$scope.view = 'product';
} else {
$scope._getDataArray();
$scope.view = 'category';
}
});
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentCategoryListsIdA', function($rootScope, $routeParams) {
var templateName = 'componentCategoryListsIdA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
refid: '@refid',
_font: '@font',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
if (typeof $scope.refid !== 'undefined') {
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': id,
};
} else {
var dataSend = {
'txt_referral_type_id': 11,
};
}
GAEAPI.get('referral/map', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope.refid);
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentCategoryListsProductA', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryListsProductA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
referralid: '@referralid',
productcol: '@productcol',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.viewRouteParams = function() {
return $routeParams || false;
};
$scope.$watch('productcol', function(newValue, oldValue) {
if (!newValue) {
return;
}
$scope._productcol = newValue.toString().split(",");
});
$scope.getProductCol = function(n) {
return (typeof $scope._productcol != 'undefined') ? (typeof $scope._productcol[n] != 'undefined' && $scope._productcol[n] != '') ? $scope._productcol[n] : 12 : 12;
};
$scope._dataArrayProduct = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArrayProduct = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {
"referral_id_array": [id],
};
var dataSend = {
'cur_page': 1,
'per_page': 100,
'txt_sortby': 'product_lastest_create',
'txt_filter_json': JSON.stringify(filter_json)
};
console.log("componentCategoryListsA _getDataArrayProduct dataSend : ", dataSend);
GAEAPI.get('product/lists', dataSend, $scope).then(function(output) {
if (output.ok === 1) {
$scope._dataArrayProduct = output.data.dataList;
console.log("componentCategoryListsA _getDataArrayProduct _dataArrayProduct : ", $scope._dataArrayProduct);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope.$watch('referralid', function(newValue, oldValue) {
console.log("referralid : ", newValue, oldValue);
if (newValue != undefined) {
$scope._getDataArrayProduct(newValue);
}
});
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentCategoryMapA', function($rootScope, $routeParams) {
var templateName = 'componentCategoryMapA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
refid: '@refid',
_font: '@font',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope._dataArray = [];
$scope._dataArrayDone = false;
$scope._getDataArray = function() {
if (typeof $scope.refid !== 'undefined') {
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': $scope.refid,
};
} else {
var dataSend = {
'txt_referral_type_id': 11,
};
}
GAEAPI.get('referral/map', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope._dataArrayDone = true;
console.log("_dataArray", $scope._dataArray);
}
});
};
$scope._getDataArray();
$scope.viewDataWidth = function() {
return $(window).width();
};
$scope.viewDataHeight = function() {
return $(window).height();
};
$scope._arrayControlView = [];
$scope._controlView = null;
$scope.controlView = function() {
if ($(window).width() >= 1200) {
$scope._controlView = 4;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 4;
}
} else if ($(window).width() >= 992) {
$scope._controlView = 4;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 4;
}
} else if ($(window).width() >= 768) {
$scope._controlView = 3;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 3;
}
} else if ($(window).width() < 768) {
$scope._controlView = 3;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 3;
}
}
return $scope._controlView;
};
$scope.controlView();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debugcategory !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentCategoryMenuDropdownA', function($rootScope, $routeParams) {
var templateName = 'componentCategoryMenuDropdownA';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
_font: '@font',
imgpath: '@imgpath',
_menustart: '@menustart',
refid: '@refid',
_color: '@color',
_backgroundcolor: '@backgroundcolor',
_backgroundcolordropdown: '@backgroundcolordropdown',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.activeMenu = function() {
/*document.getElementById("activeMenu").classList.toggle("show");
$('body').css('position','fixed');*/
if (!angular.element('._headings').hasClass('active')) {
angular.element('._headings').addClass('active')
} else {
angular.element('._headings').removeClass('active')
}
};
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._heading = '';
if (typeof $scope._viewRouteParams().referral_name !== 'undefined' && typeof $scope._viewRouteParams().referral_name != '') {
$scope._heading = $scope._viewRouteParams().referral_name;
} else {
$scope._heading = $scope._menustart;
}
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.myFunctionDropdown = function(len) {
if (len > 0) {
if ($scope._viewRouteParams().referral_name != 'สั่งอาหาร') {
$scope.activeMenu();
document.getElementById("myDropdown").classList.toggle("show");
}
}
}
$scope.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
$scope._category_id = false;
$scope._get_category_id = function() {
if (typeof $scope.refid !== 'undefined') {
var dataSend = {
'txt_referral_id': $scope.refid,
};
}
GAEAPI.get('referral/id', dataSend, $scope).then(function(res) {
if (res.ok === 1) {
$scope._category_id = res.data;
/*$scope._heading = $scope._category_id.referral_name;*/
}
});
};
$scope._get_category_id();
$scope._page_lists = false;
$scope._page_lists_load = false;
$scope._get_page_lists = function() {
$scope._clear_page_lists();
var dataSend = {
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'page_lastest_create'
};
GAEAPI.get('page/lists', dataSend, $scope).then(function(res) {
$scope._page_lists_load = true;
if (res.ok === 1) {
$scope._page_lists = res.data.dataList;
angular.forEach($scope._page_lists, function(item, key) {
if (item.page_search_url == "") {
item.page_search_url = item.page_id;
}
});
}
});
};
$scope._clear_page_lists = function() {
$scope._page_lists = false;
$scope._page_lists_load = false;
};
$scope._get_page_lists();
$scope._page_category = false;
$scope._page_category_load = false;
$scope._get_page_category = function() {
$scope._clear_page_lists();
if (typeof $scope.refid !== 'undefined') {
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': $scope.refid,
};
} else {
var dataSend = {
'txt_referral_type_id': 11,
};
}
GAEAPI.get('referral/map', dataSend, $scope).then(function(res) {
$scope._page_category_load = true;
if (res.ok === 1) {
$scope._page_category = res.data;
}
});
};
$scope._clear_page_category = function() {
$scope._page_category = false;
$scope._page_category_load = false;
};
$scope._get_page_category();
$scope.displayImage = function(image_url, prefix) {
var urlreturn = GAEAPI.getGaeImageUrl(image_url, prefix);
return urlreturn;
}
$scope.viewDataWidth = function() {
return $(window).width();
};
$scope.viewDataHeight = function() {
return $(window).height();
};
$scope._testspeed = null;
$scope._arrayControlView = [];
$scope._controlView = null;
$scope.controlView = function() {
if ($(window).width() >= 1200) {
$scope._controlView = 4;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 4;
}
} else if ($(window).width() >= 992) {
$scope._controlView = 4;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 4;
}
} else if ($(window).width() >= 768) {
$scope._controlView = 3;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 5; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 3;
}
} else if ($(window).width() < 768) {
$scope._controlView = 3;
$scope._arrayControlView[0] = 0;
for (var i = 1; i <= 10; i++) {
$scope._arrayControlView[i] = $scope._arrayControlView[i - 1] + 3;
}
}
return $scope._controlView;
};
$scope.controlView();
$scope.showDebug = function() {
return (typeof $routeParams.debugcategorymenu !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentCategorySilde', function($rootScope, $routeParams) {
var templateName = 'componentCategorySilde';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
refid:'@refid',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.mkCarouselData = function(elem) {
console.debug('mkCarouselData: trigger');
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 10,
slidesToScroll: 1,
infinite: true,
speed: 600,
prevArrow: '',
nextArrow: '',
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 10,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 8,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 6,
}
}, {
breakpoint: 692,
settings: {
slidesToShow: 4,
}
},{
breakpoint: 540,
settings: {
slidesToShow: 2,
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._dataArray = [];
$scope._dataArrayDone = false;
$scope._getDataArray = function() {
if(typeof $scope.refid !== 'undefined'){
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': $scope.refid,
};
}else{
var dataSend = {
'txt_referral_type_id': 11,
};
}
GAEAPI.get('referral/map', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
console.log("_dataArray",$scope._dataArray);
}
});
};
$scope._getDataArray();
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope.openCity = function(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " active";
}
$scope.displayImage = function(image_url, prefix) {return GAEAPI.getGaeImageUrl(image_url, prefix);}
};
return promise;
});_ui_share_app.directive('componentCategoryTable', function($rootScope, $routeParams) {
var templateName = 'componentCategoryTable';
var componentMain = 'componentCategory';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.getData = function() {
var getFunction = {
consoleLog: function(name, data) {
console.log('componentCategoryTable : ', name, data);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(array, api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(array, api, dataSend);
},
getApi: function(array, api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(array, output);
});
},
titleUrl: function(str) {
var url = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return url;
},
locationUrl: function(template, data) {
$location.url(template + data).replace();
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.dataArrayPageState = {
load: false,
done: false,
cur_page: 1,
per_page: 300,
total_rows: 0
};
$scope.dataMapArray = [];
$scope.dataMapArrayState = $scope.getData().stateData(false, false);
$scope.dataArray = [];
$scope.dataArrayState = $scope.getData().stateData(false, false);
/* category */
/* $scope.getData().getRouteParams(function(params) {
$scope.dataArrayState = $scope.getData().stateData(true, false);
var txt_filter_json = {};
var dataSend = {
'txt_referral_type_id': 11,
'cur_page': $scope.dataArrayPageState.cur_page,
'per_page': $scope.dataArrayPageState.per_page,
'txt_sortby': $scope.sort,
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.getData().dataSend(0, 'referral/lists', dataSend, function(array, api, dataSend) {
$scope.getData().getApi(array, api, dataSend, function(array, output) {
$scope.dataArray = output.data.dataList;
$scope.dataArrayPageState.total_rows = output.data.total_rows;
$scope.dataArrayState = $scope.getData().stateData(false, true);
for (var i = 0; i < output.data.dataList.length; i++) {
var txt_filter_json = {};
var dataSend = {
'txt_referral_id': output.data.dataList[i].referral_id
};
$scope.getData().dataSend(i, 'referral/relation', dataSend, function(array, api, dataSend) {
$scope.getData().getApi(array, api, dataSend, function(array, output) {
$scope.dataMapArray[array] = output.data;
});
});
}
});
});
}); */
/* category */
/* product */
$scope.getData().getRouteParams(function(params) {
$scope.dataArrayState = $scope.getData().stateData(true, false);
var txt_filter_json = {};
var dataSend = {
'cur_page': $scope.dataArrayPageState.cur_page,
'per_page': $scope.dataArrayPageState.per_page,
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.getData().dataSend(0, 'product/lists', dataSend, function(array, api, dataSend) {
$scope.getData().getApi(array, api, dataSend, function(array, output) {
$scope.dataArray = output.data.dataList;
$scope.dataArrayPageState.total_rows = output.data.total_rows;
$scope.dataArrayState = $scope.getData().stateData(false, true);
});
});
});
/* product */
$scope.loadMore = function() {
var getFunction = {
consoleLog: function(name, data) {
console.log('componentCategoryTable : ', name, data);
},
stateData: function(state) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", state);
_self.consoleLog("getData : ", "------- stateData -------");
return state;
},
main: function() {
var _self = this;
}
}
return getFunction;
};
/* category */
/* $scope.load = function() {
if ($scope.dataArrayPageState.load != true) {
$scope.dataArrayPageState.load = $scope.loadMore().stateData(true);
$scope.dataArrayPageState.cur_page++;
$scope.getData().getRouteParams(function(params) {
$scope.dataArrayState = $scope.getData().stateData(true, false);
var txt_filter_json = {};
var dataSend = {
'txt_referral_type_id': 11,
'cur_page': $scope.dataArrayPageState.cur_page,
'per_page': $scope.dataArrayPageState.per_page,
'txt_sortby': $scope.sort,
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.getData().dataSend(0, 'referral/lists', dataSend, function(array, api, dataSend) {
$scope.getData().getApi(array, api, dataSend, function(array, output) {
if ($scope.dataArray.length < output.data.total_rows) {
var oldData = $scope.dataArray;
$scope.dataArray = oldData.concat(output.data.dataList);
$scope.dataArrayPageState.total_rows = output.data.total_rows;
for (var i = 0; i < output.data.dataList.length; i++) {
var txt_filter_json = {};
var dataSend = {
'txt_referral_id': output.data.dataList[i].referral_id
};
var int_array = ($scope.dataArrayPageState.per_page * ($scope.dataArrayPageState.cur_page - 1)) + i;
$scope.getData().dataSend(int_array, 'referral/relation', dataSend, function(array, api, dataSend) {
$scope.getData().getApi(array, api, dataSend, function(array, output) {
$scope.dataMapArray[array] = output.data;
});
});
}
} else {
$scope.dataArrayPageState.cur_page--;
}
$scope.dataArrayPageState.load = $scope.loadMore().stateData(false);
$scope.dataArrayState = $scope.getData().stateData(false, true);
});
});
});
}
}; */
/* category */
/* product */
$scope.load = function() {
if ($scope.dataArrayPageState.load != true) {
$scope.dataArrayPageState.load = $scope.loadMore().stateData(true);
$scope.dataArrayPageState.cur_page++;
$scope.getData().getRouteParams(function(params) {
$scope.dataArrayState = $scope.getData().stateData(true, false);
var txt_filter_json = {};
var dataSend = {
'cur_page': $scope.dataArrayPageState.cur_page,
'per_page': $scope.dataArrayPageState.per_page,
'txt_filter_json': JSON.stringify(txt_filter_json)
};
$scope.getData().dataSend(0, 'product/lists', dataSend, function(array, api, dataSend) {
$scope.getData().getApi(array, api, dataSend, function(array, output) {
if ($scope.dataArray.length < output.data.total_rows) {
var oldData = $scope.dataArray;
$scope.dataArray = oldData.concat(output.data.dataList);
$scope.dataArrayPageState.total_rows = output.data.total_rows;
} else {
$scope.dataArrayPageState.cur_page--;
}
$scope.dataArrayPageState.load = $scope.loadMore().stateData(false);
$scope.dataArrayState = $scope.getData().stateData(false, true);
});
});
});
}
};
/* product */
/* download */
$scope.imageDownload = function(url, fileName) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function() {
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL(this.response);
var tag = document.createElement('a');
tag.href = imageUrl;
tag.download = fileName;
document.body.appendChild(tag);
tag.click();
document.body.removeChild(tag);
}
xhr.send();
};
/* download */
};
return promise;
});_ui_share_app.directive('componentCategoryCustomslideA', function($rootScope, $routeParams) {
var componentMain = 'componentCategory';
var componentChild = 'customslideA';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + componentChild + '/' + componentChild + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
dataItem: '=data',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = {};
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.imgPath = CUR_THEME.file_url() + 'images/';
/*$scope.test_json = JSON.stringify($scope.data);
$scope.dataItem = JSON.parse($scope.test_json);*/
$scope.slideProductDeal = function(elem) {
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 3000,
slidesToShow: 4,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 4,
}
}, {
breakpoint: 991,
settings: {
arrows: false,
slidesToShow: 3
}
}, {
breakpoint: 768,
settings: {
arrows: false,
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
slidesToShow: 1
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
};
return promise;
});_ui_share_app.directive('componentCategoryCustomslideB', function($rootScope, $routeParams) {
var componentMain = 'componentCategory';
var componentChild = 'customslideB';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + componentChild + '/' + componentChild + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
dataItem: '=data',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = {};
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.imgPath = CUR_THEME.file_url() + 'images/';
/*$scope.test_json = JSON.stringify($scope.data);
$scope.dataItem = JSON.parse($scope.test_json);*/
$scope.slideProductDeal = function(elem) {
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 3000,
slidesToShow: 3,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 3,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 2,
}
}, {
breakpoint: 768,
settings: {
slidesToShow: 2,
}
}, {
breakpoint: 480,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
};
return promise;
});
_ui_share_app.directive('componentCategoryCardA', function ($rootScope, $routeParams) {
var templateName = 'componentCategoryCardA';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
childcomponent: '@childcomponent',
imgpath: '@imgpath',
stylebutton :'@stylebutton',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
$scope.ref_id = $routeParams.referral_id;
/*
* fetch only referral category type (tree-list);
* @params none
* @return {Array}
*/
$scope.ReferralDisplayArray = [];
$scope.FetchDisplayCategory = function (ref_id) {
$scope.ReferralDisplayArray = [];
$scope.ReferralBrandArray = [];
var d = {'txt_referral_type_id': 11,'txt_sortby':'referral_sort_index_asc_name_asc'};
if(typeof ref_id !== 'undefined'){
d.txt_parent_id = ref_id;
}
GAEAPI.get('referral/map', d, $scope).then(function (e) {
if (e.ok === 1) {
$scope.ReferralDisplayArray = e.data;
}
console.log("referral display", d, e.data, ref_id);
});
};
/*if (!$scope.ReferralDisplayArray.length) {
$scope.FetchDisplayCategory();
}*/
/*
* view current routeParams
* @params (default)
* @return function
*/
$scope._viewRouteParams = function () {
return $routeParams || false;
};
/*
* params listener
* @params (default)
* @return function
*/
$scope.$watch('ref_id', function (newValue, oldValue) {
if (!newValue || newValue == 0){
return $scope.FetchDisplayCategory();
}
$scope.FetchDisplayCategory(newValue);
});
/* Check if seo enable */
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
/* Check if child array exist */
$scope.checkChild = function(object){
return (!object.referral_sub_array.length) ? true : false;
};
$scope.buildTitleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
};
return promise;
});
_ui_share_app.directive('componentCategoryGridA', function ($rootScope, $routeParams) {
var templateName = 'componentCategoryGridA';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
primary:'@primary',
color:'@color',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
$scope.dataArray = [];
$scope.getData = function(){
var jsonFilter = JSON.stringify({'type_number':$scope.type});
var d = {
'txt_referral_type_id': 11
};
GAEAPI.get('referral/map',d,$scope).then(function(e){
if(e.ok === 1){
$scope.dataArray = e.data;
}
});
};
$scope.getData();
};
return promise;
});
_ui_share_app.directive('componentCategoryGridC', function ($rootScope, $routeParams) {
var templateName = 'componentCategoryGridC';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
primary:'@primary',
color:'@color',
name:'@name',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
$scope.dataArray = [];
$scope.getData = function(){
var jsonFilter = JSON.stringify({'type_number':$scope.type});
var d = {
'txt_referral_type_id': 11
};
GAEAPI.get('referral/map',d,$scope).then(function(e){
if(e.ok === 1){
$scope.dataArray = e.data;
}
});
};
$scope.getData();
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
};
return promise;
});
_ui_share_app.directive('componentCategoryGridCa', function ($rootScope, $routeParams) {
var componentMain = 'componentCategoryGridC';
var componentChild = 'a';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + componentChild + '/' + componentChild+ '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
primary:'@primary',
color:'@color',
name:'@name',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
$scope.dataArray = [];
$scope.getData = function(){
var jsonFilter = JSON.stringify({'type_number':$scope.type});
var d = {
'txt_referral_type_id': 11
};
GAEAPI.get('referral/map',d,$scope).then(function(e){
if(e.ok === 1){
$scope.dataArray = e.data;
}
});
};
$scope.getData();
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
};
return promise;
});
_ui_share_app.directive('componentCategoryGridF', function ($rootScope, $routeParams) {
var templateName = 'componentCategoryGridF';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
primary:'@primary',
color:'@color',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
$scope.dataArray = [];
$scope.getData = function(){
var d = {
'txt_referral_type_id': 11,
'cur_page':1,
'per_page' : 2,
'txt_sortby' : 'referral_oldest_create'
};
GAEAPI.get('referral/lists',d,$scope).then(function(e){
if(e.ok === 1){
$scope.dataArray = e.data.dataList;
}
});
};
$scope.getData();
};
return promise;
});
_ui_share_app.directive('componentCategoryGridG', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCategoryGridG';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
'auto':'@auto',
'feature':'@feature',
'referralid':'@referralid',
'imgpath':'@imgpath',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval) {
$scope.use_auto = (typeof $scope.auto !== 'undefined' && $scope.auto == 'true') ? true : false;
$scope.use_feature = (typeof $scope.feature !== 'undefined' && $scope.feature == 'true') ? true : false;
/**
* Check if object array available for "website application" or "Mobile application" or "Featured"
* @params object array
* return true | false (default)
*/
$scope._showWeb = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 18) {
r = true;
break;
}
}
return r;
};
$scope._showApp = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 19) {
r = true;
break;
}
}
return r;
};
$scope._showFeature = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 16) {
r = true;
break;
}
}
return r;
};
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/*
* view current routeParams
* @params (default)
* @return function
*/
$scope._viewRouteParams = function () {
return $routeParams || false;
};
$scope.data = [];
$scope.data_done = false;
/* Get referral data (all)
* @params none
* @return array
*/
$scope.getData = function(){
$scope.data = [];
$scope.data_done = false;
var filterJson = {'badge_id_array':[18]};
if($scope.use_feature){
filterJson.badge_id_array.push(16);
}
var d = {
'txt_referral_type_id':11,
};
GAEAPI.get('referral/map',d,$scope).then(function(e){
if(e.ok == 1){
console.log("3a : before", e.data);
if($scope.use_feature){
var dummy = [];
angular.forEach(e.data, function(item,key){
if($scope._showFeature(item.referral_badge)){
dummy.push(item);
}
});
$scope.data = dummy;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
console.log("3a : dummy", dummy);
console.log("3a", $scope.data);
} else{
$scope.data = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
console.log("3a", $scope.data);
}
}
});
};
/* Get referral data (by referral_id)
* @params id = referral_id
* @return array
*/
$scope.getDataReferral = function(id){
$scope.data = [];
$scope.data_done = false;
var d = {
'txt_referral_id':id
};
GAEAPI.get('referral/id_map',d,$scope).then(function(e){
if(e.ok == 1){
$scope.data[0] = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
}
});
};
/*
* params listener
* @params newValue
* @params oldValue
* @return function
*/
$scope.$watch('auto', function (newValue, oldValue) {
if (!newValue){
if(typeof $scope.referralid !== 'undefined' && $scope.referralid !== ''){
return $scope.getDataReferral($scope.referralid);
} else {
return $scope.getData();
}
}
$scope.getData();
});
/*
* check if image array exist or build dummy image array
* @params arrayObject = object array
* @return array
*/
$scope.buildImageSlider = function(){
var imageArray = function(idx){
if(idx == 0){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1.jpg'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},
];
} else if(idx == 1){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_2.png'},
];
} else {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},
];
}
};
var imageBannerArray = function(idx){
if(idx == 0){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1.jpg'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2.jpg'},
];
} else if(idx == 1) {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1_2.png'},
];
} else {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2_2.png'},
];
}
};
angular.forEach($scope.data, function(item, key){
if(!item.referral_image.length){
item.referral_image = imageArray(key);
}
item.referral_image_banner = imageBannerArray(key);
});
};
/* Make Carousel */
$scope._makeProductToCarousel = function (keyCustom) {
var elementName = '[data-id="' + keyCustom + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, "", keyCustom);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(){
return "-" + (($('.row.slick-slider[data-id="'+$scope._uniqueKey+'"]').height() / 2) + 34) + "px";
};
/* Carousel Arrow Click */
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
/* Carousel Arrow Click */
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Event Listener when ng-repeat end */
$rootScope.$on('repeatend', function() {
if($('[data-id*="gallery-"]').length){
$('[data-id*="gallery-"]').not('.slick-initialized').each(function(Key,Object){
if($(this).find('.imageItem').length > 0){
$scope._makeProductToCarousel($(this).attr('data-id'));
}
});
}
});
/* Check if seo enable */
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
};
return promise;
});
_ui_share_app.directive('componentCategoryGridH', function ($rootScope, $routeParams, sliderProvider, $location) {
var templateName = 'componentCategoryGridH';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
'auto':'@auto',
'feature':'@feature',
'referralid':'@referralid',
'imgpath':'@imgpath',
'margin':'@margin',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.use_auto = (typeof $scope.auto !== 'undefined' && $scope.auto == 'true') ? true : false;
$scope.use_feature = (typeof $scope.feature !== 'undefined' && $scope.feature == 'true') ? true : false;
/**
* Check if object array available for "website application" or "Mobile application" or "Featured"
* @params object array
* return true | false (default)
*/
$scope._showWeb = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 18) {
r = true;
break;
}
}
return r;
};
$scope._showApp = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 19) {
r = true;
break;
}
}
return r;
};
$scope._showFeature = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 16) {
r = true;
break;
}
}
return r;
};
/* --------- START : 1 ------------*/
/* Extract sub referral id from parent */
$scope._mergeSubReferral = function(originalArray, r){
if(!r.referral_sub_array.length){
return originalArray;
}
var a = [];
angular.forEach(r.referral_sub_array, function(i, k) {
if($scope._showFeature(i.referral_badge)){
a.push(parseInt(i.referral_id));
$scope.dummyFeatureName.push(i);
if(i.referral_image.length){
$scope.dummyReferralImage.push(i.referral_image[0]);
}
}
if(i.referral_sub_array.length > 0){
angular.forEach(i.referral_sub_array, function(ii,kk){
if($scope._showFeature(ii.referral_badge)){
a.push(parseInt(ii.referral_id));
$scope.dummyFeatureName.push(ii);
if(ii.referral_image.length){
$scope.dummyReferralImage.push(ii.referral_image[0]);
}
}
if(ii.referral_sub_array.length > 0){
angular.forEach(ii.referral_sub_array, function(iii,kkk){
if($scope._showFeature(iii.referral_badge)){
a.push(parseInt(iii.referral_id));
$scope.dummyFeatureName.push(iii);
if(iii.referral_image.length){
$scope.dummyReferralImage.push(iii.referral_image[0]);
}
}
if(iii.referral_sub_array.length > 0){
angular.forEach(iii.referral_sub_array, function(iiii,kkk){
if($scope._showFeature(iiii.referral_badge)){
a.push(parseInt(iiii.referral_id));
$scope.dummyFeatureName.push(iiii);
if(iiii.referral_image.length){
$scope.dummyReferralImage.push(iiii.referral_image[0]);
}
}
});
}
});
}
});
}
});
return (a.length) ? a.concat(originalArray) : originalArray;
};
/* --------- END : 1 ------------*/
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/*
* view current routeParams
* @params (default)
* @return function
*/
$scope._viewRouteParams = function () {
return $routeParams || false;
};
$scope.data = [];
$scope.data_done = false;
$scope.dummyFeatureName = [];
$scope.dummyReferralImage = [];
/* Get referral data (all)
* @params none
* @return array
*/
/*
$scope.getData = function(){
$scope.data = [];
$scope.data_done = false;
$scope.dummyFeatureName = [];
var filterJson = {'badge_id_array':[18]};
var d = {
'txt_referral_type_id':11,
};
var dummy = [];
GAEAPI.get('referral/map',d,$scope).then(function(e){
if(e.ok == 1){
console.log("3a : before", e.data);
if($scope.use_feature){
var dummyReferral = [];
dummy = [];
angular.forEach(e.data, function(item, key){
item.referral_product_array = [];
if($scope._showFeature(item.referral_badge)){
dummyReferral.push(item);
dummy.push(parseInt(item.referral_id));
if(item.referral_sub_array.length){
dummy = $scope._mergeSubReferral(dummy, item);
}
}
});
$scope.data = dummyReferral;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
} else{
dummy = [];
angular.forEach(e.data, function(item, key){
dummy.push(parseInt(item.referral_id));
if(item.referral_sub_array.length){
dummy = $scope._mergeSubReferral(dummy, item);
}
});
$scope.data = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
}
}
if(dummy.length){
$scope.getDataProductByReferralArray(dummy);
}
});
};
*/
var referralDisplayClass = function(){
var object = {
getOnlyBadgeIdArray(badgeArray){
var result = [];
for(var index in badgeArray){
var badgeData = badgeArray[index];
var badge_id = GAEAPI.getValue(badgeData["badge_id"],"");
if(badge_id!=""){
result.push(badge_id);
}
}
return result;
},
getOnlyReferralIdArray(referralArray){
var result = [];
for(var index in referralArray){
var referralData = referralArray[index];
var referral_id = GAEAPI.getValue(referralData["referral_id"],"");
if(referral_id!=""){
result.push(referral_id);
}
}
return result;
},
getAllSubReferral(referralArray,resultArray){
var self = this;
for(var index in referralArray){
var referralData = referralArray[index];
var badgeIdArray = self.getOnlyBadgeIdArray(referralData.referral_badge);
if(badgeIdArray.indexOf("16")>=0){
resultArray.push(referralData);
}
var subReferralArray = GAEAPI.getValue(referralData["referral_sub_array"],[]);
if(subReferralArray.length>0){
self.getAllSubReferral(subReferralArray,resultArray);
}
}
},
getImageDataArray(referralArray,imageArray){
for(var index in referralArray){
var referralData = referralArray[index];
var referralImageArray = GAEAPI.getValue(referralData["referral_banner_array"],[]);
if(referralImageArray.length>0){
imageArray.push(referralImageArray[0]);
}
}
},
getImageBannerDataArray(referralArray,imageArray){
for(var index in referralArray){
var referralData = referralArray[index];
var referralBannerArray = GAEAPI.getValue(referralData["referral_image"],[]);
if(referralBannerArray.length>0){
for(indexTwo in referralBannerArray){
if(referralBannerArray[indexTwo]["banner_is_enable"] != 0){
imageArray.push(referralBannerArray[indexTwo]);
}
}
}
}
},
generateCategoryDisplay(index,referralArray,callback){
var self = this;
if(referralArray.length<=index){
if(callback){callback();}
return false;
}
var referralData = referralArray[index];
var referral_id = GAEAPI.getValue(referralData["referral_id"],"");
var subReferralIdArray = [];
console.log("subReferralIdArray : start 1",subReferralIdArray);
console.log("subReferralIdArray : start 1",referralData);
self.getAllSubReferral(referralData.referral_sub_array,subReferralIdArray);
console.log("subReferralIdArray : function 2 getAllSubReferral",subReferralIdArray);
console.log("subReferralIdArray : function 2 getAllSubReferral",referralData);
referralData["referral_sub_array_two_d"] = referralData.referral_sub_array;
referralData["referral_feature_name"] = subReferralIdArray;
var resultIdArray = self.getOnlyReferralIdArray(subReferralIdArray);
resultIdArray.push(referral_id);
referralData["id_array"] = resultIdArray;
console.log("data_product_array_55 : ",resultIdArray);
var dataSend = {
'cur_page': 1,
'per_page': 8,
'txt_filter_json':JSON.stringify({'badge_id_array':[18,16],'referral_id_array_or':resultIdArray})
};
console.log("product/lists : generateCategoryDisplay : dataSend ",dataSend);
GAEAPI.get("product/lists",dataSend,$scope).then(function(res){
console.log("product/lists : generateCategoryDisplay : res : ",res);
var productArray = [];
if(res.ok==1){
productArray = res.data.dataList;
}
referralData["referral_product_array"] = productArray;
});
console.log("generateCategoryDisplay : index : "+index+" : ",referralData);
self.generateCategoryDisplay((index+1),referralArray,callback);
var badgeIdArray = self.getOnlyBadgeIdArray(referralData.referral_badge);
if(badgeIdArray.indexOf("16")>=0){
$scope.data.push(referralData);
console.log("data_array_first_top",$scope.data);
var imageArray = GAEAPI.getValue(referralData["referral_image"],[]);
self.getImageDataArray(subReferralIdArray,imageArray);
referralData["referral_image_all_array"] = imageArray;
}
}
};
return object;
}
var referralDisplay = referralDisplayClass();
var mapDataArray = [];
$scope.getData = function(){
$scope.data = [];
$scope.data_done = false;
$scope.dummyFeatureName = [];
var filterJson = {'badge_id_array':[18]};
var dataSend = {
'txt_referral_type_id':11,
'txt_sortby' : "referral_sort_index_desc_name_asc",
};
var dummy = [];
console.log('referral/map : dataSend : ',dataSend);
GAEAPI.get('referral/map',dataSend,$scope).then(function(res){
console.log('referral/map : res : ',res);
if(res.ok==1){
mapDataArray = res.data;
referralDisplay.generateCategoryDisplay(0,mapDataArray,function(){
$scope.data_done = true;
});
}
});
};
$scope.data_product = [];
$scope.data_product_done = false;
/* Get product list by referral array
* @params {objectArray} referral array
* @return array
*/
$scope.getDataProductByReferralArray = function(objectArray){
var d = {
'cur_page': 1,
'per_page': 8,
'txt_filter_json':JSON.stringify({'badge_id_array':[18,16],'referral_id_array_in':objectArray})
};
var dummy = [];
$scope.data_product_done = false;
GAEAPI.get('product/lists',d,$scope).then(function(e){
if(e.ok === 1){
$scope.data_product = e.data.dataList;
$scope.data_product_done = true;
angular.forEach($scope.data, function(item,key){
item.referral_feature_name = $scope.dummyFeatureName;
item.referral_product_array = e.data.dataList;
item.referral_image_all_array = $scope.dummyReferralImage;
});
console.log("getDataProductByReferralArray: referral data",$scope.data);
console.log("getDataProductByReferralArray: referral_id_array_in",objectArray);
console.log("getDataProductByReferralArray: params",d);
console.log("getDataProductByReferralArray: data",e);
}
});
};
/* Get referral data (by referral_id)
* @params id = referral_id
* @return array
*/
$scope.getDataReferral = function(id){
$scope.data = [];
$scope.data_done = false;
var d = {
'txt_referral_id':id
};
GAEAPI.get('referral/id_map',d,$scope).then(function(e){
if(e.ok == 1){
$scope.data[0] = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
console.log("data_array_first",e.data);
}
});
};
/*
* params listener
* @params newValue
* @params oldValue
* @return function
*/
$scope.$watch('use_auto', function (newValue, oldValue) {
if (!newValue && typeof $scope.referralid !== 'undefined' && $scope.referralid !== ''){
return $scope.getDataReferral($scope.referralid);
}
$scope.getData();
});
/*
* check if image array exist or build dummy image array
* @params arrayObject = object array
* @return array
*/
$scope.dummyArrayImageGallery = [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_2.png'},
];
$scope.buildImageSlider = function(){
var imageArray = function(idx){
if(idx == 0){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1.jpg'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},
];
} else if(idx == 1){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_2.png'},
];
} else {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},
];
}
};
var imageBannerArray = function(idx){
if(idx == 0){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1.jpg'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2.jpg'},
];
} else if(idx == 1) {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1_2.png'},
];
} else {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2_2.png'},
];
}
};
angular.forEach($scope.data, function(item, key){
if(!item.referral_image.length){
item.referral_image = imageArray(key);
}
item.referral_image_banner = imageBannerArray(key);
});
};
/* Make Carousel */
$scope._makeProductToCarousel = function (keyCustom, type) {
var elementName = '[data-id="' + keyCustom + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, "", keyCustom);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(){
return "-" + (($('.row.slick-slider[data-id="'+$scope._uniqueKey+'"]').height() / 2) + 34) + "px";
};
/* Carousel Arrow Click */
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
/* Carousel Arrow Click */
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Event Listener when ng-repeat end */
$rootScope.$on('repeatend', function() {
$timeout(function(){
if($('.gallery-block[data-id]').length){
$('.gallery-block[data-id]').not('.slick-initialized').each(function(Key,Object){
if($(this).find('.imageItem').length > 0){
$scope._makeProductToCarousel($(this).attr('data-id'), 'gallery');
}
});
}
},500);
});
/*angular.element($window).bind('load', function(){*/
if($location.path() == '/' || $location.path() == '/home'){
var checkSliderImageProduct = setInterval(function(){
console.log("checking...", $('.cart-block').not('.slick-initialized').length);
if($('.cart-block.slick-initialized').length == $('.cart-block').length && $scope.data_product.length > 0){
clearInterval(checkSliderImageProduct);
return;
} else {
$('.cart-block').not('.slick-initialized').each(function(){
if($(this).find('.row-product').length){
var elementName = '[data-id="' + $(this).data('id') + '"]';
var paramsOptions = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
sliderProvider(elementName, paramsOptions, "", $(this).data('id'));
}
});
}
},1000);
}
/*});*/
$scope.displayImage = function(image_url, prefix) {return GAEAPI.getGaeImageUrl(image_url, prefix);}
/* Check if seo enable */
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
/* Calculate discount (simple mode)
* @params {expensivePrice}
* @params {salePrice}
* @return int
*/
$scope.calculateDiscount = function(expensivePrice, salePrice){
var dif = expensivePrice - salePrice;
return parseInt(dif * 100 / expensivePrice);
};
/* Open Link in other windows */
$scope.openWindows = function(stringUrl){
return window.open(stringUrl, '_blank', 'location=yes,height='+$(window).height()+',width='+$(window).width()+',scrollbars=yes,status=yes');
};
};
return promise;
});
_ui_share_app.directive('componentCategoryGridI', function ($rootScope, $routeParams, sliderProvider, $location) {
var templateName = 'componentCategoryGridI';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
'auto':'@auto',
'feature':'@feature',
'referralid':'@referralid',
'imgpath':'@imgpath',
'margin':'@margin',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.use_auto = (typeof $scope.auto !== 'undefined' && $scope.auto == 'true') ? true : false;
$scope.use_feature = (typeof $scope.feature !== 'undefined' && $scope.feature == 'true') ? true : false;
/**
* Check if object array available for "website application" or "Mobile application" or "Featured"
* @params object array
* return true | false (default)
*/
$scope._showWeb = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 18) {
r = true;
break;
}
}
return r;
};
$scope._showApp = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 19) {
r = true;
break;
}
}
return r;
};
$scope._showFeature = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 16) {
r = true;
break;
}
}
return r;
};
/* --------- START : 1 ------------*/
/* Extract sub referral id from parent */
$scope._mergeSubReferral = function(originalArray, r){
if(!r.referral_sub_array.length){
return originalArray;
}
var a = [];
angular.forEach(r.referral_sub_array, function(i, k) {
if($scope._showFeature(i.referral_badge)){
a.push(parseInt(i.referral_id));
$scope.dummyFeatureName.push(i);
if(i.referral_image.length){
$scope.dummyReferralImage.push(i.referral_image[0]);
}
}
if(i.referral_sub_array.length > 0){
angular.forEach(i.referral_sub_array, function(ii,kk){
if($scope._showFeature(ii.referral_badge)){
a.push(parseInt(ii.referral_id));
$scope.dummyFeatureName.push(ii);
if(ii.referral_image.length){
$scope.dummyReferralImage.push(ii.referral_image[0]);
}
}
if(ii.referral_sub_array.length > 0){
angular.forEach(ii.referral_sub_array, function(iii,kkk){
if($scope._showFeature(iii.referral_badge)){
a.push(parseInt(iii.referral_id));
$scope.dummyFeatureName.push(iii);
if(iii.referral_image.length){
$scope.dummyReferralImage.push(iii.referral_image[0]);
}
}
if(iii.referral_sub_array.length > 0){
angular.forEach(iii.referral_sub_array, function(iiii,kkk){
if($scope._showFeature(iiii.referral_badge)){
a.push(parseInt(iiii.referral_id));
$scope.dummyFeatureName.push(iiii);
if(iiii.referral_image.length){
$scope.dummyReferralImage.push(iiii.referral_image[0]);
}
}
});
}
});
}
});
}
});
return (a.length) ? a.concat(originalArray) : originalArray;
};
/* --------- END : 1 ------------*/
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/*
* view current routeParams
* @params (default)
* @return function
*/
$scope._viewRouteParams = function () {
return $routeParams || false;
};
$scope.data = [];
$scope.data_done = false;
$scope.dummyFeatureName = [];
$scope.dummyReferralImage = [];
/* Get referral data (all)
* @params none
* @return array
*/
/*
$scope.getData = function(){
$scope.data = [];
$scope.data_done = false;
$scope.dummyFeatureName = [];
var filterJson = {'badge_id_array':[18]};
var d = {
'txt_referral_type_id':11,
};
var dummy = [];
GAEAPI.get('referral/map',d,$scope).then(function(e){
if(e.ok == 1){
console.log("3a : before", e.data);
if($scope.use_feature){
var dummyReferral = [];
dummy = [];
angular.forEach(e.data, function(item, key){
item.referral_product_array = [];
if($scope._showFeature(item.referral_badge)){
dummyReferral.push(item);
dummy.push(parseInt(item.referral_id));
if(item.referral_sub_array.length){
dummy = $scope._mergeSubReferral(dummy, item);
}
}
});
$scope.data = dummyReferral;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
} else{
dummy = [];
angular.forEach(e.data, function(item, key){
dummy.push(parseInt(item.referral_id));
if(item.referral_sub_array.length){
dummy = $scope._mergeSubReferral(dummy, item);
}
});
$scope.data = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
}
}
if(dummy.length){
$scope.getDataProductByReferralArray(dummy);
}
});
};
*/
var referralDisplayClass = function(){
var object = {
getOnlyBadgeIdArray(badgeArray){
var result = [];
for(var index in badgeArray){
var badgeData = badgeArray[index];
var badge_id = GAEAPI.getValue(badgeData["badge_id"],"");
if(badge_id!=""){
result.push(badge_id);
}
}
return result;
},
getOnlyReferralIdArray(referralArray){
var result = [];
for(var index in referralArray){
var referralData = referralArray[index];
var referral_id = GAEAPI.getValue(referralData["referral_id"],"");
if(referral_id!=""){
result.push(referral_id);
}
}
return result;
},
getAllSubReferral(referralArray,resultArray){
var self = this;
for(var index in referralArray){
var referralData = referralArray[index];
var badgeIdArray = self.getOnlyBadgeIdArray(referralData.referral_badge);
if(badgeIdArray.indexOf("16")>=0){
resultArray.push(referralData);
}
var subReferralArray = GAEAPI.getValue(referralData["referral_sub_array"],[]);
if(subReferralArray.length>0){
self.getAllSubReferral(subReferralArray,resultArray);
}
}
},
getImageDataArray(referralArray,imageArray){
for(var index in referralArray){
var referralData = referralArray[index];
var referralImageArray = GAEAPI.getValue(referralData["referral_banner_array"],[]);
if(referralImageArray.length>0){
imageArray.push(referralImageArray[0]);
}
}
},
getImageBannerDataArray(referralArray,imageArray){
for(var index in referralArray){
var referralData = referralArray[index];
var referralBannerArray = GAEAPI.getValue(referralData["referral_image"],[]);
if(referralBannerArray.length>0){
for(indexTwo in referralBannerArray){
if(referralBannerArray[indexTwo]["banner_is_enable"] != 0){
imageArray.push(referralBannerArray[indexTwo]);
}
}
}
}
},
generateCategoryDisplay(index,referralArray,callback){
var self = this;
if(referralArray.length<=index){
if(callback){callback();}
return false;
}
var referralData = referralArray[index];
var referral_id = GAEAPI.getValue(referralData["referral_id"],"");
var subReferralIdArray = [];
self.getAllSubReferral(referralData.referral_sub_array,subReferralIdArray);
referralData["referral_feature_name"] = subReferralIdArray;
var resultIdArray = self.getOnlyReferralIdArray(subReferralIdArray);
resultIdArray.push(referral_id);
referralData["id_array"] = resultIdArray;
var dataSend = {
'cur_page': 1,
'per_page': 8,
'txt_json_filter':JSON.stringify({'badge_id_array':[18,16],'referral_id_array_in':resultIdArray})
};
console.log("product/lists : dataSend : ",dataSend);
GAEAPI.get("product/lists",dataSend,$scope).then(function(res){
console.log("product/lists : res : ",res);
var productArray = [];
if(res.ok==1){
productArray = res.data.dataList;
}
referralData["referral_product_array"] = productArray;
console.log("product/lists : referralData : ",referralData);
});
console.log("generateCategoryDisplay : index : "+index+" : ",referralData);
self.generateCategoryDisplay((index+1),referralArray,callback);
var badgeIdArray = self.getOnlyBadgeIdArray(referralData.referral_badge);
if(badgeIdArray.indexOf("16")>=0){
$scope.data.push(referralData);
var imageArray = GAEAPI.getValue(referralData["referral_image"],[]);
self.getImageDataArray(subReferralIdArray,imageArray);
referralData["referral_image_all_array"] = imageArray;
}
}
};
return object;
}
var referralDisplay = referralDisplayClass();
var mapDataArray = [];
$scope.getData = function(){
$scope.data = [];
$scope.data_done = false;
$scope.dummyFeatureName = [];
var filterJson = {'badge_id_array':[18]};
var dataSend = {
'txt_referral_type_id':11,
};
var dummy = [];
console.log('referral/map : dataSend : ',dataSend);
GAEAPI.get('referral/map',dataSend,$scope).then(function(res){
console.log('referral/map : res : ',res);
if(res.ok==1){
mapDataArray = res.data;
referralDisplay.generateCategoryDisplay(0,mapDataArray,function(){
$scope.data_done = true;
});
}
});
};
$scope.data_product = [];
$scope.data_product_done = false;
/* Get product list by referral array
* @params {objectArray} referral array
* @return array
*/
$scope.getDataProductByReferralArray = function(objectArray){
var d = {
'cur_page': 1,
'per_page': 8,
'txt_json_filter':JSON.stringify({'badge_id_array':[18,16],'referral_id_array_in':objectArray})
};
var dummy = [];
$scope.data_product_done = false;
GAEAPI.get('product/lists',d,$scope).then(function(e){
if(e.ok === 1){
$scope.data_product = e.data.dataList;
$scope.data_product_done = true;
angular.forEach($scope.data, function(item,key){
item.referral_feature_name = $scope.dummyFeatureName;
item.referral_product_array = e.data.dataList;
item.referral_image_all_array = $scope.dummyReferralImage;
});
console.log("getDataProductByReferralArray: referral data",$scope.data);
console.log("getDataProductByReferralArray: referral_id_array_in",objectArray);
console.log("getDataProductByReferralArray: params",d);
console.log("getDataProductByReferralArray: data",e);
}
});
};
/* Get referral data (by referral_id)
* @params id = referral_id
* @return array
*/
$scope.getDataReferral = function(id){
$scope.data = [];
$scope.data_done = false;
var d = {
'txt_referral_id':id
};
GAEAPI.get('referral/id_map',d,$scope).then(function(e){
if(e.ok == 1){
$scope.data[0] = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
}
});
};
/*
* params listener
* @params newValue
* @params oldValue
* @return function
*/
$scope.$watch('use_auto', function (newValue, oldValue) {
if (!newValue && typeof $scope.referralid !== 'undefined' && $scope.referralid !== ''){
return $scope.getDataReferral($scope.referralid);
}
$scope.getData();
});
/*
* check if image array exist or build dummy image array
* @params arrayObject = object array
* @return array
*/
$scope.dummyArrayImageGallery = [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_2.png'},
];
$scope.buildImageSlider = function(){
var imageArray = function(idx){
if(idx == 0){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1.jpg'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},
];
} else if(idx == 1){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1_2.png'},
];
} else {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},
];
}
};
var imageBannerArray = function(idx){
if(idx == 0){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1.jpg'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2.jpg'},
];
} else if(idx == 1) {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1_2.png'},
];
} else {
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2_1.png'},
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2_2.png'},
];
}
};
angular.forEach($scope.data, function(item, key){
if(!item.referral_image.length){
item.referral_image = imageArray(key);
}
item.referral_image_banner = imageBannerArray(key);
});
};
/* Make Carousel */
$scope._makeProductToCarousel = function (keyCustom, type) {
var elementName = '[data-id="' + keyCustom + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, "", keyCustom);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(){
return "-" + (($('.row.slick-slider[data-id="'+$scope._uniqueKey+'"]').height() / 2) + 34) + "px";
};
/* Carousel Arrow Click */
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
/* Carousel Arrow Click */
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Event Listener when ng-repeat end */
$rootScope.$on('repeatend', function() {
$timeout(function(){
if($('.gallery-block[data-id]').length){
$('.gallery-block[data-id]').not('.slick-initialized').each(function(Key,Object){
if($(this).find('.imageItem').length > 0){
$scope._makeProductToCarousel($(this).attr('data-id'), 'gallery');
}
});
}
},500);
});
/*angular.element($window).bind('load', function(){*/
if($location.path() == '/' || $location.path() == '/home'){
var checkSliderImageProduct = setInterval(function(){
console.log("checking...", $('.cart-block').not('.slick-initialized').length);
if($('.cart-block.slick-initialized').length == $('.cart-block').length && $scope.data_product.length > 0){
clearInterval(checkSliderImageProduct);
return;
} else {
$('.cart-block').not('.slick-initialized').each(function(){
if($(this).find('.row-product').length){
var elementName = '[data-id="' + $(this).data('id') + '"]';
var paramsOptions = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
sliderProvider(elementName, paramsOptions, "", $(this).data('id'));
}
});
}
},1000);
}
/*});*/
/* Check if seo enable */
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
/* Calculate discount (simple mode)
* @params {expensivePrice}
* @params {salePrice}
* @return int
*/
$scope.calculateDiscount = function(expensivePrice, salePrice){
var dif = expensivePrice - salePrice;
return parseInt(dif * 100 / expensivePrice);
};
/* Open Link in other windows */
$scope.openWindows = function(stringUrl){
return window.open(stringUrl, '_blank', 'location=yes,height='+$(window).height()+',width='+$(window).width()+',scrollbars=yes,status=yes');
};
};
return promise;
});
_ui_share_app.directive('componentCategoryLanding', function ($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryLanding';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.viewRouteParams=function(){
return $routeParams || false;
};
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
$scope.data_parent = false;
$scope.data_load = false;
$scope.getData=function(){
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
if(typeof $routeParams.referral_id !== 'undefined' && $routeParams.referral_id != 0){
var d = {'txt_referral_type_id':11,'txt_parent_id':$routeParams.referral_id};
} else {
var d = {'txt_referral_type_id':11};
}
GAEAPI.get('referral/map',d).then(function(e){
if(e.data.length > 0){
$scope.data = e.data;
console.log("category-landing : no",d,e);
angular.forEach($scope.data, function(item){
if(item.referral_sub_array.length > 0){
$scope.data_multi.push(item);
$scope.data_load = true;
} else {
$scope.data_none_multi.push(item);
$scope.getParentData(item.referral_parent_id);
$scope.data_load = true;
}
});
} else {
$timeout(function(){
$scope.data_load = true;
},2000);
$scope.matchReferral.root_id='';
$scope.matchReferral.referral_parent_id='';
$scope.matchReferral.referral_id='';
console.log("category-landing : new", $routeParams.referral_id);
return $scope.getRelation($routeParams.referral_id);
}
});
};
$scope.getData();
$scope.getParentData = function(id){
if($scope.data_parent==false){
var d = {'txt_referral_id':id};
GAEAPI.get('referral/id',d).then(function(e){
if(e.ok == 1){
$scope.data_parent = e.data;
}
});
}
};
$scope.$watch('data_none_multi',function(newValue,oldValue){
if(!newValue.length || !newValue){
return;
}
});
$scope.displayImage = function(image_url, prefix) {
return GAEAPI.getGaeImageUrl(image_url, prefix);
};
$scope.relation = [];
$scope.matchReferral = {
root_id:'',
referral_parent_id:'',
referral_id:'',
};
$scope.matchCount = 0;
$scope.getRelation = function(refId){
console.log("category-landing: getRelation", refId);
$scope.matchReferral.referral_id = refId;
$scope.matchCount = $scope.matchCount+1;
GAEAPI.get('referral/relation',{'txt_referral_id':refId}).then(function(e){
if(e.data.length){
/*$scope.relation = e.data;*/
var first = 0;
var last = e.data.length - 1;
console.log("category-landing: e.data", e.data);
console.log("category-landing: fist-last", first, last);
if(parseInt(e.data[first].referral_parent_id) <= 0){
console.log("category-landing: root_id", e.data[first].referral_id);
console.log("category-landing: -root_id",parseInt(e.data[first].referral_parent_id));
$scope.matchReferral.root_id = e.data[first].referral_id;
$scope.matchCount = $scope.matchCount+1;
}
if(parseInt(e.data[last].referral_parent_id) > 0){
console.log("category-landing: referral_parent_id", e.data[last].referral_parent_id);
console.log("category-landing: -referral_parent_id", parseInt(e.data[last].referral_parent_id));
$scope.matchReferral.referral_parent_id = e.data[last].referral_parent_id;
$scope.matchCount = $scope.matchCount+1;
}
}
});
};
$scope.$watch('matchCount',function(newValue,oldValue){
console.log("category-landing: matchCount", newValue);
if(newValue >= 2){
console.log("category-landing: matchCount : ready", $scope.matchReferral);
$timeout(function(){
window.location.href="category-lists?root_id="+$scope.matchReferral.root_id+"&referral_parent_id="+$scope.matchReferral.referral_parent_id+"&referral_id="+$scope.matchReferral.referral_id+"&referral_type=category";
},100);
}
});
};
return promise;
});
_ui_share_app.directive('componentCategoryLandingB', function ($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryLandingB';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.viewRouteParams=function(){
return $routeParams || false;
};
$scope._params = $routeParams.referral_id;
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
$scope.data_parent = false;
$scope.data_load = false;
$scope.getData=function(){
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
if(typeof $routeParams.referral_id !== 'undefined' && $routeParams.referral_id != 0){
var d = {'txt_referral_type_id':11,'txt_parent_id':$routeParams.referral_id};
} else {
var d = {'txt_referral_type_id':11};
}
GAEAPI.get('referral/map',d).then(function(e){
if(e.data.length > 0){
$scope.data = e.data;
console.log("category-landing : no",d,e);
angular.forEach($scope.data, function(item){
if(item.referral_sub_array.length > 0){
$scope.data_multi.push(item);
$scope.data_load = true;
} else {
$scope.data_none_multi.push(item);
$scope.getParentData(item.referral_parent_id);
$scope.data_load = true;
}
});
} else {
$timeout(function(){
$scope.data_load = true;
},2000);
$scope.matchReferral.root_id='';
$scope.matchReferral.referral_parent_id='';
$scope.matchReferral.referral_id='';
console.log("category-landing : new", $routeParams.referral_id);
return $scope.getRelation($routeParams.referral_id);
}
});
};
$scope.getData();
$scope.getParentData = function(id){
if($scope.data_parent==false){
var d = {'txt_referral_id':id};
GAEAPI.get('referral/id',d).then(function(e){
if(e.ok == 1){
$scope.data_parent = e.data;
}
});
}
};
$scope._data_referral_relate_ = [];
$scope._get_referral_relate_ = function (array) {
var dataSend = {
'txt_referral_id': array,
};
GAEAPI.get('referral/relation', dataSend).then(function (e) {
if (e.ok === 1) {
$scope._data_referral_relate_ = e.data;
}
});
};
$scope.$watch('data_none_multi',function(newValue,oldValue){
if(!newValue.length || !newValue){
return;
}
});
$scope.$watch('_params', function(newValue, oldValue) {
if(newValue){
$scope._get_referral_relate_(newValue);
}
if (!newValue) return;
});
$scope.displayImage = function(image_url, prefix) {
return GAEAPI.getGaeImageUrl(image_url, prefix);
};
$scope.relation = [];
$scope.matchReferral = {
root_id:'',
referral_parent_id:'',
referral_id:'',
};
$scope.matchCount = 0;
$scope.getRelation = function(refId){
console.log("category-landing: getRelation", refId);
$scope.matchReferral.referral_id = refId;
$scope.matchCount = $scope.matchCount+1;
GAEAPI.get('referral/relation',{'txt_referral_id':refId}).then(function(e){
if(e.data.length){
/*$scope.relation = e.data;*/
var first = 0;
var last = e.data.length - 1;
console.log("category-landing: e.data", e.data);
console.log("category-landing: fist-last", first, last);
if(parseInt(e.data[first].referral_parent_id) <= 0){
console.log("category-landing: root_id", e.data[first].referral_id);
console.log("category-landing: -root_id",parseInt(e.data[first].referral_parent_id));
$scope.matchReferral.root_id = e.data[first].referral_id;
$scope.matchCount = $scope.matchCount+1;
}
if(parseInt(e.data[last].referral_parent_id) > 0){
console.log("category-landing: referral_parent_id", e.data[last].referral_parent_id);
console.log("category-landing: -referral_parent_id", parseInt(e.data[last].referral_parent_id));
$scope.matchReferral.referral_parent_id = e.data[last].referral_parent_id;
$scope.matchCount = $scope.matchCount+1;
}
}
});
};
$scope.$watch('matchCount',function(newValue,oldValue){
console.log("category-landing: matchCount", newValue);
if(newValue >= 2){
console.log("category-landing: matchCount : ready", $scope.matchReferral);
$timeout(function(){
window.location.href="category-lists?root_id="+$scope.matchReferral.root_id+"&referral_parent_id="+$scope.matchReferral.referral_parent_id+"&referral_id="+$scope.matchReferral.referral_id+"&referral_type=category";
},100);
}
});
};
return promise;
});
_ui_share_app.directive('componentCategoryLandingC', function($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryLandingC';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.viewRouteParams = function() {
return $routeParams || false;
};
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
$scope.data_parent = false;
$scope.data_load = false;
$scope.getData = function() {
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
if (typeof $routeParams.referral_id !== 'undefined' && $routeParams.referral_id != 0) {
var d = {
'txt_referral_type_id': 11,
'txt_parent_id': $routeParams.referral_id
};
} else {
var d = {
'txt_referral_type_id': 11
};
}
GAEAPI.get('referral/map', d, $scope).then(function(e) {
if (e.data.length > 0) {
$scope.data = e.data;
console.log("category-landing : no", d, e);
angular.forEach($scope.data, function(item) {
if (item.referral_sub_array.length > 0) {
$scope.data_multi.push(item);
$scope.data_load = true;
} else {
$scope.data_none_multi.push(item);
$scope.getParentData(item.referral_parent_id);
$scope.data_load = true;
}
});
} else {
$timeout(function() {
$scope.data_load = true;
}, 300);
$scope.matchReferral.root_id = '';
$scope.matchReferral.referral_parent_id = '';
$scope.matchReferral.referral_id = '';
console.log("category-landing : new", $routeParams.referral_id);
return $scope.getRelation($routeParams.referral_id);
}
});
};
$scope.getData();
$scope.getParentData = function(id) {
if ($scope.data_parent == false) {
var d = {
'txt_referral_id': id
};
GAEAPI.get('referral/id', d, $scope).then(function(e) {
if (e.ok == 1) {
$scope.data_parent = e.data;
}
});
}
};
// $scope.$watch('data_none_multi',function(newValue,oldValue){
// if(!newValue.length || !newValue){
// return;
// }
// });
$scope.displayImage = function(image_url, prefix) {
return GAEAPI.getGaeImageUrl(image_url, prefix);
};
$scope.relation = [];
$scope.matchReferral = {
root_id: '',
referral_parent_id: '',
referral_id: '',
referral_name: '',
};
$scope.matchCount = 0;
$scope.getRelation = function(refId) {
console.log("category-landing: getRelation", refId);
$scope.matchReferral.referral_id = refId;
$scope.matchReferral.referral_name = $scope.viewRouteParams().referral_name;
$scope.matchCount = $scope.matchCount + 1;
GAEAPI.get('referral/relation', {
'txt_referral_id': refId
}, $scope).then(function(e) {
if (e.data.length) {
/*$scope.relation = e.data;*/
var first = 0;
var last = e.data.length - 1;
console.log("category-landing: e.data", e.data);
console.log("category-landing: fist-last", first, last);
if (parseInt(e.data[first].referral_parent_id) <= 0) {
console.log("category-landing: root_id", e.data[first].referral_id);
console.log("category-landing: -root_id", parseInt(e.data[first].referral_parent_id));
$scope.matchReferral.root_id = e.data[first].referral_id;
$scope.matchCount = $scope.matchCount + 1;
}
if (parseInt(e.data[last].referral_parent_id) > 0) {
console.log("category-landing: referral_parent_id", e.data[last].referral_parent_id);
console.log("category-landing: -referral_parent_id", parseInt(e.data[last].referral_parent_id));
$scope.matchReferral.referral_parent_id = e.data[last].referral_parent_id;
$scope.matchCount = $scope.matchCount + 1;
}
}
});
};
$scope.$watch('matchCount', function(newValue, oldValue) {
console.log("category-landing: matchCount", newValue);
if (newValue >= 2) {
console.log("category-landing: matchCount : ready", $scope.matchReferral);
$timeout(function() {
var url = "category-lists?root_id=" + $scope.matchReferral.root_id + "&referral_parent_id=" + $scope.matchReferral.referral_parent_id + "&referral_id=" + $scope.matchReferral.referral_id + "&referral_type=category" + "&referral_name=" + $scope.matchReferral.referral_name;
$location.url(url).replace();
// window.location.href = "category-lists?root_id=" + $scope.matchReferral.root_id + "&referral_parent_id=" + $scope.matchReferral.referral_parent_id + "&referral_id=" + $scope.matchReferral.referral_id + "&referral_type=category" + "&referral_name=" + $scope.matchReferral.referral_name;
}, 100);
}
});
};
return promise;
});
_ui_share_app.directive('componentCategoryLandingD', function ($rootScope, $routeParams, $location) {
var templateName = 'componentCategoryLandingD';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.viewRouteParams=function(){
return $routeParams || false;
};
$scope._params = $routeParams.referral_id;
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
$scope.data_parent = false;
$scope.data_load = false;
$scope.getData=function(){
$scope.data = [];
$scope.data_none_multi = [];
$scope.data_multi = [];
if(typeof $routeParams.referral_id !== 'undefined' && $routeParams.referral_id != 0){
var d = {'txt_referral_type_id':11,'txt_parent_id':$routeParams.referral_id};
} else {
var d = {'txt_referral_type_id':11};
}
GAEAPI.get('referral/map',d , $scope).then(function(e){
if(e.data.length > 0){
$scope.data = e.data;
console.log("category-landing : no",d,e);
angular.forEach($scope.data, function(item){
if(item.referral_sub_array.length > 0){
$scope.data_multi.push(item);
$scope.data_load = true;
} else {
$scope.data_none_multi.push(item);
$scope.getParentData(item.referral_parent_id);
$scope.data_load = true;
}
});
} else {
$timeout(function(){
$scope.data_load = true;
},2000);
$scope.matchReferral.root_id='';
$scope.matchReferral.referral_parent_id='';
$scope.matchReferral.referral_id='';
console.log("category-landing : new", $routeParams.referral_id);
return $scope.getRelation($routeParams.referral_id);
}
});
};
$scope.getData();
$scope.getParentData = function(id){
if($scope.data_parent==false){
var d = {'txt_referral_id':id};
GAEAPI.get('referral/id',d , $scope).then(function(e){
if(e.ok == 1){
$scope.data_parent = e.data;
}
});
}
};
$scope._data_referral_relate_ = [];
$scope._get_referral_relate_ = function (array) {
var dataSend = {
'txt_referral_id': array,
};
GAEAPI.get('referral/relation', dataSend ,$scope).then(function (e) {
if (e.ok === 1) {
$scope._data_referral_relate_ = e.data;
}
});
};
$scope.$watch('data_none_multi',function(newValue,oldValue){
if(!newValue.length || !newValue){
return;
}
});
$scope.$watch('_params', function(newValue, oldValue) {
if(newValue){
$scope._get_referral_relate_(newValue);
}
if (!newValue) return;
});
$scope.displayImage = function(image_url, prefix) {
return GAEAPI.getGaeImageUrl(image_url, prefix);
};
$scope.relation = [];
$scope.matchReferral = {
root_id:'',
referral_parent_id:'',
referral_id:'',
};
$scope.matchCount = 0;
$scope.getRelation = function(refId){
console.log("category-landing: getRelation", refId);
$scope.matchReferral.referral_id = refId;
$scope.matchCount = $scope.matchCount+1;
GAEAPI.get('referral/relation',{'txt_referral_id':refId},$scope).then(function(e){
if(e.data.length){
/*$scope.relation = e.data;*/
var first = 0;
var last = e.data.length - 1;
console.log("category-landing: e.data", e.data);
console.log("category-landing: fist-last", first, last);
if(parseInt(e.data[first].referral_parent_id) <= 0){
console.log("category-landing: root_id", e.data[first].referral_id);
console.log("category-landing: -root_id",parseInt(e.data[first].referral_parent_id));
$scope.matchReferral.root_id = e.data[first].referral_id;
$scope.matchCount = $scope.matchCount+1;
}
if(parseInt(e.data[last].referral_parent_id) > 0){
console.log("category-landing: referral_parent_id", e.data[last].referral_parent_id);
console.log("category-landing: -referral_parent_id", parseInt(e.data[last].referral_parent_id));
$scope.matchReferral.referral_parent_id = e.data[last].referral_parent_id;
$scope.matchCount = $scope.matchCount+1;
}
}
});
};
$scope.$watch('matchCount',function(newValue,oldValue){
console.log("category-landing: matchCount", newValue);
if(newValue >= 2){
console.log("category-landing: matchCount : ready", $scope.matchReferral);
$timeout(function(){
window.location.href="category-lists?root_id="+$scope.matchReferral.root_id+"&referral_parent_id="+$scope.matchReferral.referral_parent_id+"&referral_id="+$scope.matchReferral.referral_id+"&referral_type=category";
},100);
}
});
};
return promise;
});
_ui_share_app.directive('componentCategoryMenuDropdown', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCategoryMenuDropdown';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {};
promise.controller = function ($scope, $timeout, $interval, $window, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.myFunctionDropdown = function () {
document.getElementById("myDropdown").classList.toggle("show");
}
$scope.onclick = function (event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
$scope._page_lists = false;
$scope._page_lists_load = false;
$scope._get_page_lists = function () {
$scope._clear_page_lists();
var dataSend = {
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'page_lastest_create'
};
GAEAPI.get('page/lists', dataSend ,$scope).then(function (res) {
$scope._page_lists_load = true;
if (res.ok === 1) {
$scope._page_lists = res.data.dataList;
angular.forEach($scope._page_lists, function (item, key) {
if (item.page_search_url == "") {
item.page_search_url = item.page_id;
}
});
}
});
};
$scope._clear_page_lists = function () {
$scope._page_lists = false;
$scope._page_lists_load = false;
};
/*$scope._get_page_lists();*/
/*$scope._page_category = (typeof window.referralMap !== 'undefined') ? window.referralMap.data : false;*/
$scope._page_category_load = false;
$scope._get_page_category = function () {
/*$scope._clear_page_lists();
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_asc'
};
GAEAPI.get('referral/map', dataSend).then(function(res) {
$scope._page_category_load = true;
if (res.ok === 1) {
$scope._page_category = res.data;
}
});*/
};
$scope._clear_page_category = function () {
$scope._page_category = false;
$scope._page_category_load = false;
};
/*$scope._get_page_category();*/
$scope.requestApiArray = [];
$scope.chainRerrealRequest = function (txt_referral_type_id, txt_parent_id, callbackData, childCount) {
var dataSend = {
'cur_page': 1,
'per_page': (txt_parent_id <= 0) ? 20 : childCount,
'txt_referral_type_id': txt_referral_type_id,
'txt_parent_id': txt_parent_id,
'txt_badge_id': 18,
'txt_sortby' : 'referral_sort_index_asc_name_asc',
'base_shop_name': 'myhappyphone',
};
if (parseInt(txt_referral_type_id) > 0) {
dataSend.txt_view_referral_child = 1;
}
$http.get(GURL.base_api_url() + 'referral/short_lists', {params: dataSend} , $scope).then(function (res) {
$scope.requestApiArray[txt_referral_type_id] = $timeout(function () {
var e = res.data;
if (e.ok === 1) {
if (typeof callbackData == undefined || callbackData == undefined) {
$scope._page_category = e.data.dataList;
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
} else {
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
return callbackData(e);
}
}
}, 20);
});
};
$scope.chainRerrealRequest(11, 0);
$scope.chainReferralHover = function (objectParent, level) {
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_count);
if (objectParent.referral_sub_count > 0 && objectParent.referral_sub_array.length <= 0) {
$scope.chainRerrealRequest(11, objectParent.referral_id, function (e) {
if (e.ok === 1 && e.data.dataList.length) {
objectParent.referral_sub_array = e.data.dataList;
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_array);
}
}, objectParent.referral_sub_count);
}
};
};
return promise;
});_ui_share_app.directive('componentCategoryMenuDropdownAa', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCategoryMenuDropdownAa';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s.toLowerCase();
};
$scope.dropdown = false;
$scope.myFunctionDropdown = function() {
document.getElementById("myDropdown").classList.toggle("show");
var dropdown = $(".dropdown-menu").height() + 11;
console.log("myFunctionDropdown - content : ", dropdown);
$('.dropdown-menu').css('min-height', dropdown);
};
$("#myDropdown").mouseenter(function() {}).mouseleave(function() {
document.getElementById("myDropdown").classList.toggle("show");
var dropdown = $(".dropdown-menu").height() + 11;
console.log("myFunctionDropdown - content : ", dropdown);
$('.dropdown-menu').css('min-height', dropdown);
});
$scope.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
};
$scope._page_lists = false;
$scope._page_lists_load = false;
$scope._get_page_lists = function() {
$scope._clear_page_lists();
var dataSend = {
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'page_lastest_create'
};
GAEAPI.get('page/lists', dataSend, $scope).then(function(res) {
$scope._page_lists_load = true;
if (res.ok === 1) {
$scope._page_lists = res.data.dataList;
angular.forEach($scope._page_lists, function(item, key) {
if (item.page_search_url == "") {
item.page_search_url = item.page_id;
}
});
}
});
};
$scope._clear_page_lists = function() {
$scope._page_lists = false;
$scope._page_lists_load = false;
};
/*$scope._get_page_lists();*/
/*$scope._page_category = (typeof window.referralMap !== 'undefined') ? window.referralMap.data : false;*/
$scope._page_category_load = false;
$scope._get_page_category = function() {
/*$scope._clear_page_lists();
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_asc'
};
GAEAPI.get('referral/map', dataSend).then(function(res) {
$scope._page_category_load = true;
if (res.ok === 1) {
$scope._page_category = res.data;
}
});*/
};
$scope._clear_page_category = function() {
$scope._page_category = false;
$scope._page_category_load = false;
};
/*$scope._get_page_category();*/
$scope.requestApiArray = [];
$scope.chainRerrealRequest = function(txt_referral_type_id, txt_parent_id, callbackData, childCount) {
var dataSend = {
'cur_page': 1,
'per_page': (txt_parent_id <= 0) ? 20 : childCount,
'txt_referral_type_id': txt_referral_type_id,
'txt_parent_id': txt_parent_id,
'txt_badge_id': 18,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'base_shop_name': 'proplugin',
};
if (parseInt(txt_referral_type_id) > 0) {
dataSend.txt_view_referral_child = 1;
}
$http.get(GURL.base_api_url() + 'referral/short_lists', {
params: dataSend
}, $scope).then(function(res) {
console.log("chainRerrealRequest : dataSend : ", dataSend);
$scope.requestApiArray[txt_referral_type_id] = $timeout(function() {
var e = res.data;
console.log("chainRerrealRequest : e : ", e);
if (e.ok === 1) {
if (typeof callbackData == undefined || callbackData == undefined) {
$scope._page_category = e.data.dataList;
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
} else {
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
return callbackData(e);
}
}
}, 20);
});
};
$scope.chainRerrealRequest(11, 0);
$scope.chainReferralHover = function(objectParent, level) {
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_count);
if (objectParent.referral_sub_count > 0 && objectParent.referral_sub_array.length <= 0) {
$scope.chainRerrealRequest(11, objectParent.referral_id, function(e) {
if (e.ok === 1 && e.data.dataList.length) {
objectParent.referral_sub_array = e.data.dataList;
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_array);
}
}, objectParent.referral_sub_count);
}
};
};
return promise;
});_ui_share_app.directive('componentCategoryMenuDropdownAb', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCategoryMenuDropdownAb';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s.toLowerCase();
};
$scope.dropdown = false;
$scope.myFunctionDropdown = function() {
document.getElementById("myDropdown").classList.toggle("show");
};
$("#myDropdown").mouseenter(function() {}).mouseleave(function() {
document.getElementById("myDropdown").classList.toggle("show");
});
$scope.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
};
$scope._page_lists = false;
$scope._page_lists_load = false;
$scope._get_page_lists = function() {
$scope._clear_page_lists();
var dataSend = {
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'page_lastest_create'
};
GAEAPI.get('page/lists', dataSend, $scope).then(function(res) {
$scope._page_lists_load = true;
if (res.ok === 1) {
$scope._page_lists = res.data.dataList;
angular.forEach($scope._page_lists, function(item, key) {
if (item.page_search_url == "") {
item.page_search_url = item.page_id;
}
});
}
});
};
$scope._clear_page_lists = function() {
$scope._page_lists = false;
$scope._page_lists_load = false;
};
/*$scope._get_page_lists();*/
/*$scope._page_category = (typeof window.referralMap !== 'undefined') ? window.referralMap.data : false;*/
$scope._page_category_load = false;
$scope._get_page_category = function() {
/*$scope._clear_page_lists();
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_asc'
};
GAEAPI.get('referral/map', dataSend).then(function(res) {
$scope._page_category_load = true;
if (res.ok === 1) {
$scope._page_category = res.data;
}
});*/
};
$scope._clear_page_category = function() {
$scope._page_category = false;
$scope._page_category_load = false;
};
/*$scope._get_page_category();*/
$scope.requestApiArray = [];
$scope.chainRerrealRequest = function(txt_referral_type_id, txt_parent_id, callbackData, childCount) {
var dataSend = {
'cur_page': 1,
'per_page': (txt_parent_id <= 0) ? 20 : childCount,
'txt_referral_type_id': txt_referral_type_id,
'txt_parent_id': txt_parent_id,
'txt_badge_id': 18,
'base_shop_name': 'supercheap'
};
if (parseInt(txt_referral_type_id) > 0) {
dataSend.txt_view_referral_child = 1;
}
$http.get(GURL.base_api_url() + 'referral/short_lists', {
params: dataSend
}, $scope).then(function(res) {
$scope.requestApiArray[txt_referral_type_id] = $timeout(function() {
var e = res.data;
if (e.ok === 1) {
if (typeof callbackData == undefined || callbackData == undefined) {
$scope._page_category = e.data.dataList;
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
} else {
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
return callbackData(e);
}
}
}, 20);
});
};
$scope.chainRerrealRequest(11, 0);
$scope.chainReferralHover = function(objectParent, level) {
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_count);
if (objectParent.referral_sub_count > 0 && objectParent.referral_sub_array.length <= 0) {
$scope.chainRerrealRequest(11, objectParent.referral_id, function(e) {
if (e.ok === 1 && e.data.dataList.length) {
objectParent.referral_sub_array = e.data.dataList;
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_array);
}
}, objectParent.referral_sub_count);
}
};
};
return promise;
});_ui_share_app.directive('componentCategoryMenuDropdownAc', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCategoryMenuDropdownAc';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
category: '@category',
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.forbidden = false;
$scope.$watch('category', function(newCategory, oldCategory) {
$scope.newCat = (newCategory == undefined || newCategory == '') ? 'หมวดหมู่' : newCategory;
$scope.oldCat = oldCategory;
});
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s.toLowerCase();
};
$scope.dropdown = false;
$scope.myFunctionDropdown = function() {
document.getElementById("myDropdown").classList.toggle("show");
var dropdown = $(".dropdown-menu").height() + 11;
console.log("myFunctionDropdown - content : ", dropdown);
$('.dropdown-menu').css('min-height', dropdown);
};
$("#myDropdown").mouseenter(function() {}).mouseleave(function() {
document.getElementById("myDropdown").classList.toggle("show");
var dropdown = $(".dropdown-menu").height() + 11;
console.log("myFunctionDropdown - content : ", dropdown);
$('.dropdown-menu').css('min-height', dropdown);
});
$scope.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
};
$scope.requestApiArray = [];
$scope.chainRerrealRequest = function(txt_referral_type_id, txt_parent_id, callbackData, childCount) {
var dataSend = {
'cur_page': 1,
'per_page': (txt_parent_id <= 0) ? 20 : childCount,
'txt_referral_type_id': txt_referral_type_id,
'txt_parent_id': txt_parent_id,
'txt_badge_id': 18,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'base_shop_name': 'bypshop',
};
if (parseInt(txt_referral_type_id) > 0) {
dataSend.txt_view_referral_child = 1;
}
$http.get(GURL.base_api_url() + 'referral/short_lists', {
params: dataSend
}, $scope).then(function(res) {
console.log("chainRerrealRequest : dataSend : ", dataSend);
$scope.requestApiArray[txt_referral_type_id] = $timeout(function() {
var e = res.data;
console.log("chainRerrealRequest : e : ", e);
if (e.ok === 1) {
if (typeof callbackData == undefined || callbackData == undefined) {
$scope._page_category = e.data.dataList;
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
} else {
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
return callbackData(e);
}
}
}, 20);
});
};
$scope.chainRerrealRequest(11, 0);
$scope.chainReferralHover = function(objectParent, level) {
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_count);
if (objectParent.referral_sub_count > 0 && objectParent.referral_sub_array.length <= 0) {
$scope.chainRerrealRequest(11, objectParent.referral_id, function(e) {
if (e.ok === 1 && e.data.dataList.length) {
objectParent.referral_sub_array = e.data.dataList;
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_array);
}
}, objectParent.referral_sub_count);
}
};
};
return promise;
});_ui_share_app.directive('componentCategoryMenuDropdownAd', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCategoryMenuDropdownAd';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s.toLowerCase();
};
$scope.dropdown = false;
$scope.myFunctionDropdown = function() {
document.getElementById("myDropdown").classList.toggle("show");
var dropdown = $(".dropdown-menu").height() + 11;
console.log("myFunctionDropdown - content : ", dropdown);
$('.dropdown-menu').css('min-height', dropdown);
};
$("#myDropdown").mouseenter(function() {}).mouseleave(function() {
document.getElementById("myDropdown").classList.toggle("show");
var dropdown = $(".dropdown-menu").height() + 11;
console.log("myFunctionDropdown - content : ", dropdown);
$('.dropdown-menu').css('min-height', dropdown);
});
$scope.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
};
$scope.requestApiArray = [];
$scope.chainRerrealRequest = function(txt_referral_type_id, txt_parent_id, callbackData, childCount) {
var dataSend = {
'cur_page': 1,
'per_page': (txt_parent_id <= 0) ? 20 : childCount,
'txt_referral_type_id': txt_referral_type_id,
'txt_parent_id': txt_parent_id,
'txt_badge_id': 18,
'txt_sortby': 'referral_sort_index_asc_name_desc',
'base_shop_name': 'maeju',
};
if (parseInt(txt_referral_type_id) > 0) {
dataSend.txt_view_referral_child = 1;
}
$http.get(GURL.base_api_url() + 'referral/short_lists', {
params: dataSend
}, $scope).then(function(res) {
console.log("chainRerrealRequest : dataSend : ", dataSend);
$scope.requestApiArray[txt_referral_type_id] = $timeout(function() {
var e = res.data;
console.log("chainRerrealRequest : e : ", e);
if (e.ok === 1) {
if (typeof callbackData == undefined || callbackData == undefined) {
$scope._page_category = e.data.dataList;
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
} else {
$timeout.cancel($scope.requestApiArray[txt_referral_type_id]);
return callbackData(e);
}
}
}, 20);
});
};
$scope.chainRerrealRequest(11, 0);
$scope.chainReferralHover = function(objectParent, level) {
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_count);
if (objectParent.referral_sub_count > 0 && objectParent.referral_sub_array.length <= 0) {
$scope.chainRerrealRequest(11, objectParent.referral_id, function(e) {
if (e.ok === 1 && e.data.dataList.length) {
objectParent.referral_sub_array = e.data.dataList;
console.log(objectParent.referral_name, ' child => ', objectParent.referral_sub_array);
}
}, objectParent.referral_sub_count);
}
};
};
return promise;
});
_ui_share_app.directive('componentCategorySetSlide', function ($rootScope, $routeParams) {
var templateName = 'componentCategorySetSlide';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
/*
* fetch only referral category type (tree-list);
* @params none
* @return {Array}
*/
$scope.category_All18 = [];
$scope.get_category_All18 = function () {
var txt_filter_json = {
'badge_id_array': [18]
};
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_name_a-z',
'txt_filter_json': JSON.stringify(txt_filter_json),
};
GAEAPI.get('referral/map', dataSend , $scope).then(function (res) {
if (res.ok === 1) {
$scope.category_All18 = res.data;
console.log("esdoiwpfel :", $scope.category_All18);
}
});
};
$scope.get_category_All18();
$scope.testaa = '';
$scope.ykey =function(refid){
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': refid,
};
GAEAPI.get('referral/map', dataSend, $scope).then(function (res) {
if(res.ok != 1){
return;
}
if(res.data.length > 0){
$scope.testaa = 'yes';
return $scope.testaa;
}else{
$scope.testaa = 'no';
return $scope.testaa;
}
});
};
/*
* view current routeParams
* @params (default)
* @return function
*/
$scope._viewRouteParams = function () {
return $routeParams || false;
};
/*
* params listener
* @params (default)
* @return function
*/
/* Check if seo enable */
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
/* Check if child array exist */
$scope.checkChild = function(object){
return (!object.referral_sub_array.length) ? true : false;
};
$scope.buildTitleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
};
return promise;
});
_ui_share_app.directive('componentCategorySlideHome', function ($rootScope, $routeParams, sliderProvider, carouselData) {
var templateName = 'componentCategorySlideHome';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
size:'@size',
margin:'@margin',
name: '@name',
refid: '@refid',
};
/*promise.link = function (scope, element, attr) {};*/
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
$scope.assetsPath = 'extensions/themes/assets/';
$scope.watchCallbackArray = function(){
var r = [];
for(var i = 0; i < 6; i++){
r.push({
banner_image:[{image_url:'extensions/themes/gae_default301/staticfiles/images/default/180x150.jpg'}],
callback_array:true
});
}
return r;
};
$scope.$watch('refid',function(newValue,oldValue){
if(newValue){
$scope.getdata(newValue);
}
});
$scope.data = [];
$scope.data_desktop = [];
$scope.data_mobile = [];
$scope.type = 'categoryslide';
$scope.done = false;
$scope.prev_win_size = $(window).width();
$scope.getdata = function(newvalue){
var dataSend = {
'txt_referral_type_id': 11,
'txt_parent_id': newvalue,
};
GAEAPI.get('referral/map', dataSend, $scope).then(function (res) {
if(res.ok != 1){
return;
}
if(res.data.length > 0){
$scope.data = res.data;
}else{
$scope.data = [];
$scope.getproductdata(newvalue);
}
});
};
$scope.data_product = [];
$scope.getproductdata = function(referal_id){
var txt_filter_json = {
'referral_id_array': [referal_id],
'badge_id_array':[18],
};
var data_sent = {
'cur_page': 1,
'per_page': 12,
'txt_filter_json': JSON.stringify(txt_filter_json),
};
GAEAPI.get('product/lists', data_sent , $scope).then(function (res) {
if (res.ok === 1) {
$scope.data_product = res.data.dataList;
}
});
};
$scope.viewData = function(){
return ($(window).width() > 991) ? $scope.data_desktop : $scope.data_mobile;
};
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.imageSize = function(){
return angular.element("img.image_lazy_loaded").length;
};
$scope.initSlider = function(){
var elementName = '.component_carousel_map[data-id="'+$scope._key()+'"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 4,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false
};
optionsParmas.responsive = [
{
breakpoint: 1200,
settings: {
slidesToShow: 3,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 769,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 601,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false,
}
}, {
breakpoint: 481,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false,
dots: false,
arrows: false,
}
}
];
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
angular.element($window).bind('resize',function(){
if($scope.prev_win_size != $(window).width()){
if($(elementName).hasClass('slick-initialized') || $(elementName).hasClass('slick-slider')){
$(elementName).slick('unslick');
}
setTimeout(function(){
if($(elementName).hasClass('slick-initialized') || $(elementName).hasClass('slick-slider')){
$(elementName).slick('unslick');
}
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
}, 3000);
}
});
};
$scope.checkHide = function(){
var r = false;
if(angular.element('.component_carousel_map.slick-initialized[data-id="'+$scope._key()+'"]').length){
r = true;
}
return r;
};
$scope.viewLink = function(i){
$window.location.href=i;
};
/**
* Check if object array available for "website application" or "Mobile application"
* @params object array
* return true | false (default)
*/
$scope._showWeb = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 18) {
r = true;
break;
}
}
return r;
};
$scope._showApp = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 19) {
r = true;
break;
}
}
return r;
};
/* Watch when finish repeat */
$rootScope.$on('repeatend', function() {
if($('.component_carousel_map[data-id="'+$scope._key()+'"]').not('.slick-initialized')){
$timeout(function(){
$scope.initSlider();
}, 500);
}
});
$scope.checkHide = function(){
return ($('.component_carousel_map.slick-initialized[data-id="'+$scope._key()+'"]').length > 0) ? true : false;
};
$scope.slickGoLeft=function(){
setTimeout(function () {
$('.component_carousel_map[data-id="'+$scope._key()+'"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight=function(){
setTimeout(function () {
$('.component_carousel_map[data-id="'+$scope._key()+'"]').slick('slickNext');
}, 100);
};
$scope.checkSeo=function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
};
return promise;
});
_ui_share_app.directive('componentClientImage', function ($rootScope, $routeParams) {
var templateName = 'componentClientImage';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
component: '@component',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
};
return promise;
});
_ui_share_app.directive('componentClientImageA', function ($rootScope, $routeParams) {
var templateName = 'componentClientImageA';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
component: '@component',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval, $q, $window) {
};
return promise;
});
_ui_share_app.factory('$componentCollection', function componentCollection($routeParams, $timeout) {
return
});_ui_share_app.directive('componentCollectionIdTypeA', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCollectionIdTypeA';
var componentMain = 'componentCollection';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
col: '@col',
component: '@component',
stylebutton: '@stylebutton',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope._dataArray = [];
$scope._dataTime = {
start: 0,
end: 0
};
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
console.log("CHECK COLLECTION READY ");
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_collection_id': id,
};
GAEAPI.get('collection/id', dataSend).then(function(output) {
console.log("CHECK COLLECTION START ", output);
if (output.ok === 1) {
var item = output.data;
$scope._dataArray = item;
$scope._dataTime.start = item.collection_lifetime.lifetime_start_time;
$scope._dataTime.end = item.collection_lifetime.lifetime_end_time;
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope.collectionData = false;
$scope.collectionDataSend = false;
$scope.isLoadMore = false;
$scope.isLoadMoreHide = false;
$scope.getDetail = function(id) {
var dataSend = {
'txt_collection_id': id,
'cur_page': ($scope.collectionDataSend) ? $scope.collectionDataSend.cur_page : 1,
'per_page': ($scope.collectionDataSend) ? $scope.collectionDataSend.per_page : 12,
'txt_badge_id': 18
};
$scope.collectionDataSend = dataSend;
GAEAPI.get('collection/short_id', dataSend).then(function(e) {
console.log("collection/id: res", e);
if (dataSend.cur_page > 1) {
var oldProductArray = $scope.collectionData.collection_product_array;
var currentData = e.data.collection_product_array;
var mergeProductArray = oldProductArray.concat(currentData);
$scope.collectionData.collection_product_array = mergeProductArray;
} else {
$scope.collectionData = e.data;
}
$scope.isLoadMore = false;
var maxPage = parseInt($scope.collectionData.collection_product_pagination.total_page);
var nextPage = parseInt($scope.collectionData.collection_product_pagination.next_page);
if (dataSend.cur_page >= maxPage) {
$scope.isLoadMoreHide = true;
}
});
};
$scope.getDetail($scope._idUrl($scope._viewRouteParams().collection_id));
$scope.loadMore = function() {
$scope.collectionDataSend.cur_page = $scope.collectionDataSend.cur_page + 1;
$scope.isLoadMore = true;
$timeout(function() {
$scope.getDetail($scope._idUrl($scope._viewRouteParams().collection_id));
}, 100);
};
$scope.timeHide = function(timestampStart, timestampEnd) {
var dates = new Date().getTime();
var datesLen = dates.toString().length;
var timeStart = String(timestampStart);
var timeEnd = String(timestampEnd);
var subdate = parseInt(dates.toString().substring(0, timeEnd.length));
var end = timestampEnd - subdate;
return (timestampEnd == -1) ? 1 : end;
};
$scope.timeReplace = function(timestampStart, timestampEnd) {
var dates = new Date().getTime();
var datesLen = dates.toString().length;
var timeStart = String(timestampStart);
var timeEnd = String(timestampEnd);
var subdate = parseInt(dates.toString().substring(0, timeEnd.length));
var end = timestampEnd - subdate;
if (timestampEnd == -1) {
end = 1;
}
if (end <= 0) {
if ($scope._dataTime.end == "-1" || $scope._dataTime.end == -1) {
return;
}
window.location.href = 'home';
}
};
$scope.check = function() {
return {
start: function(inputTimeStamp) {
var todayTimeStamp = (new Date().getTime() / 1000);
var targetTimeStamp = parseInt(inputTimeStamp);
return (targetTimeStamp <= todayTimeStamp) ? true : false;
},
end: function(inputTimeStamp) {
var todayTimeStamp = (new Date().getTime() / 1000);
var targetTimeStamp = parseInt(inputTimeStamp);
if (parseInt(targetTimeStamp) == -1) {
return true;
}
return (targetTimeStamp > todayTimeStamp) ? true : false;
},
}
};
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.dates = new Date();
$scope.timeReplace($scope._dataTime.start, $scope._dataTime.end);
$scope.timeCountStart();
}, 1000);
};
$scope.$watch('col', function(newValue, oldValue) {
if (!newValue) {
return;
}
$scope._col = newValue.toString().split(",");
});
$scope.getCol = function(n) {
return (typeof $scope._col != 'undefined') ? (typeof $scope._col[n] != 'undefined' && $scope._col[n] != '') ? $scope._col[n] : 12 : 12;
};
$scope.checkShop = function() {
if (CUR_THEME.shop_id() == "646") {
return 646;
} else {
return false;
}
};
$scope.showWeb = function(objArr) {
var show = false;
for (var i = 0; i < objArr.length; i++) {
if (parseInt(objArr[i].badge_id) == 18) {
show = true;
break;
}
}
return show;
};
};
return promise;
});_ui_share_app.directive('componentCollectionIdTypeB', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCollectionIdTypeB';
var componentMain = 'componentCollection';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.viewRouteParams = function() {
return $routeParams;
};
};
return promise;
});_ui_share_app.directive('componentCollectionIdTypeC', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCollectionIdTypeC';
var componentMain = 'componentCollection';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
margin: '@margin',
card: '@card',
stylebutton: '@stylebutton',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window, $http) {
$scope._component = {
name: "componentCollectionIdTypeC",
show: (window.location.hostname == "localhost") ? true : false
};
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
/* scope */
$scope._name = ($scope.name != undefined && $scope.name != "") ? $scope.name : "default";
$scope._margin = ($scope.margin != undefined && $scope.margin != "") ? {
margin: $scope.margin
} : {
margin: 0
};
$scope._card = ($scope.card != undefined && $scope.card != "") ? $scope.card : "c";
$scope._stylebutton = ($scope.stylebutton != undefined && $scope.stylebutton != "") ? $scope.stylebutton : "border_button_small";
/* scope */
$scope.getData = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._component.show) {
console.log($scope._component.name, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams", "params", params);
callback(_self, params, state);
},
getCollectionId: function(params, callback) {
var _self = this;
var collection_id = (params.collection_id != undefined) ? params.collection_id.split("-", 1).join("") : false;
_self.consoleLog("getBranchId", "collection_id", collection_id);
callback(collection_id);
},
formatDataSend: function(data, callback) {
var _self = this;
_self.consoleLog("formatDataSend", "data", data);
callback(data);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData", "state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend", "api", api);
_self.consoleLog("dataSend", "dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi", "ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.consoleLog("getApi", "res_api", res_api);
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi", "res_ok", res_ok);
state = _self.stateData(false, true);
_self.consoleLog("checkGetApi", "state", state);
callback(res_ok, res_api, state);
})
});
},
main: function() {
var _self = this;
}
}
return getFunction;
};
/* get api */
$scope.data_api = {
load_more: {
load: false,
cur_page: 1,
per_page: 12,
total_rows: 0
},
collection_id: {
data_send: {},
api: "collection/short_id",
ok: false,
data_array: [],
data_array_state: {
load: false,
done: false
}
}
};
$scope.loadMore = function() {
if (!$scope.data_api.load_more.load) {
$scope.data_api.load_more.cur_page++;
$scope.data_api.load_more.load = true;
$scope.getData().getRouteParams(function(_self, params, state) {
_self.getCollectionId(params, function(res_collection_id) {
_self.formatDataSend($scope.data_api.collection_id, function(res_data) {
var filter_json = {};
var dataSend = {
'txt_collection_id': res_collection_id,
'cur_page': $scope.data_api.load_more.cur_page,
'per_page': $scope.data_api.load_more.per_page,
'txt_badge_id': 18,
'txt_filter_json': JSON.stringify(filter_json)
};
res_data.data_send = dataSend;
_self.dataSend(res_data.api, res_data.data_send, function(res_api, res_data_send) {
_self.getApi(res_api, res_data_send, function(res_ok, res_api, res_state) {
res_data.ok = res_ok;
if (res_data.data_array.collection_product_array.length < res_api.data.collection_product_pagination.total_rows) {
var oldData = res_data.data_array.collection_product_array;
res_data.data_array.collection_product_array = oldData.concat(res_api.data.collection_product_array);
$scope.data_api.load_more.total_rows = res_api.data.collection_product_pagination.total_rows;
_self.consoleLog("getApiData", "res_data", res_data);
} else {
$scope.data_api.load_more.cur_page--;
}
$scope.data_api.load_more.load = false;
});
});
});
});
});
}
}
$scope.getData().getRouteParams(function(_self, params, state) {
$scope.data_api.collection_id.data_array_state = state;
_self.getCollectionId(params, function(res_collection_id) {
_self.formatDataSend($scope.data_api.collection_id, function(res_data) {
var filter_json = {};
var dataSend = {
'txt_collection_id': res_collection_id,
'cur_page': $scope.data_api.load_more.cur_page,
'per_page': $scope.data_api.load_more.per_page,
'txt_badge_id': 18,
'txt_filter_json': JSON.stringify(filter_json)
};
res_data.data_send = dataSend;
_self.dataSend(res_data.api, res_data.data_send, function(res_api, res_data_send) {
_self.getApi(res_api, res_data_send, function(res_ok, res_api, res_state) {
res_data.ok = res_ok;
res_data.data_array = res_api.data;
res_data.data_array_state = res_state;
_self.consoleLog("getApiData", "res_data", res_data);
$scope.data_api.load_more.total_rows = res_api.data.collection_product_pagination.total_rows;
});
});
});
});
});
/* get api */
};
return promise;
});_ui_share_app.directive('componentCollectionSlideTypeA', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentCollectionSlideTypeA';
var componentMain = 'componentCollection';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
sortby: '@sortby',
component: '@component',
stylebutton: '@stylebutton',
margintopic: '@margintopic',
margincard: '@margincard',
limit: '@limit',
iconsize: '@iconsize',
iconnext: '@iconnext',
iconback: '@iconback',
showresult: '@showresult',
dots: '@dots',
arrows: '@arrows',
autoplay: '@autoplay',
centermode: '@centermode',
variablewidth: '@variablewidth',
infinite: '@infinite',
slidestoscroll: '@slidestoscroll',
lg: '@lg',
md: '@md',
sm: '@sm',
xs: '@xs',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'topic_top': '?topicTop',
};
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._component = (typeof $scope.component !== 'undefined' && $scope.component !== '') ? $scope.component : 'null';
$scope._limit = parseInt((typeof $scope.limit !== 'undefined' && typeof $scope.limit !== '') ? $scope.limit : 6);
$scope._sortby = (typeof $scope.sortby !== 'undefined' && typeof $scope.sortby !== '') ? $scope.sortby : 'collection_create_time_DESC';
$scope._iconsize = (typeof $scope.iconsize !== 'undefined' && typeof $scope.iconsize !== '') ? $scope.iconsize : 30;
$scope._iconback = (typeof $scope.iconback !== 'undefined' && typeof $scope.iconback !== '') ? $scope.iconback : 'icnt_outline_backbig02_light@2x.png';
$scope._iconnext = (typeof $scope.iconnext !== 'undefined' && typeof $scope.iconnext !== '') ? $scope.iconnext : 'icnt_outline_nextbig02_light@2x.png';
$scope._dots = Boolean((typeof $scope.dots !== 'undefined' && typeof $scope.dots !== '') ? $scope.dots : true);
$scope._arrows = Boolean((typeof $scope.arrows !== 'undefined' && typeof $scope.arrows !== '') ? $scope.arrows : true);
$scope._autoplay = Boolean((typeof $scope.autoplay !== 'undefined' && typeof $scope.autoplay !== '') ? $scope.autoplay : true);
$scope._centerMode = Boolean((typeof $scope.centermode !== 'undefined' && typeof $scope.centermode !== '') ? $scope.centerMode : false);
$scope._variableWidth = Boolean((typeof $scope.variablewidth !== 'undefined' && typeof $scope.variablewidth !== '') ? $scope.variablewidth : false);
$scope._infinite = Boolean((typeof $scope.infinite !== 'undefined' && typeof $scope.infinite !== '') ? $scope.infinite : true);
$scope._slidesToScroll = parseInt((typeof $scope.slidestoscroll !== 'undefined' && typeof $scope.slidestoscroll !== '') ? $scope.slidestoscroll : 4);
$scope._col_lg = parseInt((typeof $scope.lg !== 'undefined' && typeof $scope.lg !== '') ? $scope.lg : 4);
$scope._col_md = parseInt((typeof $scope.md !== 'undefined' && typeof $scope.md !== '') ? $scope.md : 3);
$scope._col_sm = parseInt((typeof $scope.sm !== 'undefined' && typeof $scope.sm !== '') ? $scope.sm : 2);
$scope._col_xs = parseInt((typeof $scope.xs !== 'undefined' && typeof $scope.xs !== '') ? $scope.xs : 1);
$scope._dataArray = [];
$scope._dataArrayState = {
load: true,
done: false
};
$scope._getCollectionArray = function() {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'cur_page': 1,
'per_page': $scope._limit,
'txt_sortby': $scope._sortby,
};
console.log('dataSend_collection_short_lists', dataSend);
GAEAPI.get('collection/short_lists', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data.dataList;
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getCollectionArray();
$scope.mkCarousel = function(elem) {
$('.component-collection-slide-id-type-a').css('height', '0');
$('.component-collection-slide-id-type-a').css('opacity', '0');
console.log("col-lg-md-xs-sm : ", $scope._col_lg, $scope._col_md, $scope._col_xs, $scope._col_sm);
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: $scope._dots,
arrows: $scope._arrows,
autoplay: $scope._autoplay,
centerMode: $scope._centerMode,
variableWidth: $scope._variableWidth,
autoplaySpeed: 4000,
slidesToShow: $scope._col_lg,
slidesToScroll: 1,
infinite: $scope._infinite,
speed: 600,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselBar: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: false,
infinite: false,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 6,
slidesToScroll: 6,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 5,
slidesToScroll: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 4,
slidesToScroll: 4,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
}
}]
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
slickCarousel: function(carousel, index) {
var _self = this;
$scope.setCarousel.index = index;
setTimeout(function() {
$('[data-key="' + carousel + '"]').slick('slickGoTo', index);
}, 100);
},
prevIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != 0) ? image_index - 1 : image - 1;
_self.consoleLog("prevIndex index", $scope.setCarousel.index);
},
nextIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != (image - 1)) ? image_index + 1 : 0;
_self.consoleLog("nextIndex index", $scope.setCarousel.index);
}
}
return getFunction;
};
$scope.getAttribute = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
productAttribute: function(productAttribute, callback) {
var _self = this;
var attribute = {
option_name: "",
option_attribute: []
};
if (productAttribute.option_data != undefined) {
if (productAttribute.option_data.variant_array != undefined && productAttribute.option_data.variant_array.length != 0) {
for (var a = 0; a < productAttribute.option_data.pclass_array.length; a++) {
attribute.option_name = attribute.option_name.concat(productAttribute.option_data.pclass_array[a].pclass_name, " ");
}
for (var b = 0; b < productAttribute.option_data.variant_array.length; b++) {
var product_attribute = {
product_id: productAttribute.option_data.variant_array[b].product_id,
product_sku: productAttribute.option_data.variant_array[b].sku,
product_title: "",
product_price: parseFloat(productAttribute.option_data.variant_array[b].price),
product_compare_price: parseFloat(productAttribute.option_data.variant_array[b].compare_price),
product_total_stock: parseFloat(productAttribute.option_data.variant_array[b].total_stock),
product_image: productAttribute.option_data.variant_array[b].variant_image
}
for (var c = 0; c < productAttribute.option_data.variant_array[b].option_name_array.length; c++) {
product_attribute.product_title = product_attribute.product_title.concat(productAttribute.option_data.variant_array[b].option_name_array[c], " ");
}
attribute.option_attribute.push(product_attribute);
}
}
}
_self.consoleLog("productAttribute attribute ", attribute);
callback(attribute);
},
checkDiscountPrice: function(productDiscount, resPrice, resComparePrice, callback) {
var _self = this;
var price = 0;
var compare_price = 0;
if (productDiscount.length == 0) {
price = parseFloat(resPrice);
compare_price = parseFloat(resComparePrice);
} else {
if (productDiscount.discount_type_id == '101') {
price = parseFloat(resPrice) - parseFloat(productDiscount.discount_price);
compare_price = parseFloat(resPrice);
} else if (productDiscount.discount_type_id == '102') {
price = (parseFloat(resPrice) * ((100 - parseFloat(productDiscount.discount_percent)) / 100));
compare_price = parseFloat(resPrice);
}
}
callback(price, compare_price);
},
checkMinPrice: function(option, callback) {
var _self = this;
var price_min = parseFloat(option.option_attribute[0].product_price);
var compare_price_min = parseFloat(option.option_attribute[0].product_compare_price);
var total_stock = parseFloat(option.option_attribute[0].product_total_stock);
for (var a = 0; a < option.option_attribute.length; a++) {
if (price_min >= parseFloat(option.option_attribute[a].product_price)) {
price_min = parseFloat(option.option_attribute[a].product_price);
compare_price_min = parseFloat(option.option_attribute[a].product_compare_price);
total_stock = parseFloat(option.option_attribute[a].product_total_stock);
}
}
_self.consoleLog("checkPriceMin price_min ", price_min);
_self.consoleLog("checkPriceMin compare_price_min ", compare_price_min);
_self.consoleLog("checkPriceMin total_stock ", total_stock);
callback(price_min, compare_price_min, total_stock);
},
getTotalStock: function(totalStock, mixStock, callback) {
var _self = this;
var total_stock = (totalStock > 0) ? ((totalStock <= mixStock) ? totalStock : mixStock) : ((totalStock == -1) ? mixStock : totalStock);
callback(total_stock);
},
checkMinPrices: function(api, attribute, callback) {
var _self = this;
var dataPrice = {
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
}
}
if (attribute.option_attribute.length == 0) {
_self.checkDiscountPrice(api.data.product_discount, api.data.product_price, api.data.product_compare_price, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(api.data.product_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, false);
});
});
});
});
});
} else {
_self.checkMinPrice(attribute, function(res_price_min, res_compare_price_min, res_total_stock) {
_self.checkDiscountPrice(api.data.product_discount, res_price_min, res_compare_price_min, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(res_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, true);
});
});
});
});
});
});
}
},
priceIncludes: function(price, includes, callback) {
var _self = this;
var priceToString = (price == null) ? 0 : price;
_self.consoleLog('priceIncludes priceToString : ', priceToString);
callback(priceToString.toString().includes(includes));
},
checkPrice: function(price, callback) {
var _self = this;
_self.priceIncludes(price, '.', function(res) {
_self.consoleLog("checkPrice res ", res);
callback((!res) ? 0 : 2);
});
},
onSelectOption: function(productId) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = productId;
_self.consoleLog("onSelectOption productId ", productId);
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
for (var a = 0; a < $scope.data.attribute.dataArray.option_attribute.length; a++) {
_self.consoleLog("onSelectOption option_attribute ", $scope.data.attribute.dataArray.option_attribute[a]);
if ($scope.data.attribute.dataArray.option_attribute[a].product_id == productId) {
if ($scope.data.attribute.dataArray.option_attribute[a].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var b = 0; b < $scope.dataApi.product.dataArray.product_image.length; b++) {
if ($scope.dataApi.product.dataArray.product_image[b].image_id == $scope.data.attribute.dataArray.option_attribute[a].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, b);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[a].product_price, $scope.data.attribute.dataArray.option_attribute[a].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[a].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
break;
}
}
},
onClickOption: function(index) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.data.attribute.productId = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
if ($scope.data.attribute.dataArray.option_attribute[index].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataApi.product.dataArray.product_image.length; i++) {
if ($scope.dataApi.product.dataArray.product_image[i].image_id == $scope.data.attribute.dataArray.option_attribute[index].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, i);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[index].product_price, $scope.data.attribute.dataArray.option_attribute[index].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[index].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
}
}
return getFunction;
};
$scope.getAttributeCustom = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
createArray: function(productCustomTemplates, callback) {
var _self = this;
var custom_attributes = [];
if (productCustomTemplates.templates.length != 0) {
if (productCustomTemplates.templates[0].option_sets.length != 0) {
_self.getAttributes(productCustomTemplates.templates[0].option_sets, function(res_attributes) {
custom_attributes = res_attributes;
});
}
}
_self.consoleLog("createArray : productCustomTemplates", productCustomTemplates);
_self.consoleLog("createArray : custom_attributes", custom_attributes);
callback(custom_attributes, true);
},
formatAttribute: function(index, optionSubsetIndex, setType, optionSetArray, callback) {
var _self = this;
var set_id = (setType == 'attribute') ? optionSetArray.set_id : optionSetArray.subset_id;
var attribute = {
attribute_index: index,
attribute_option_subset_index: optionSubsetIndex,
active_option_id: (optionSetArray.option_data.select_id != 0) ? optionSetArray.option_data.select_id : "-1",
active_option_index: -1,
active_option_index_str: "-1",
active_textarea: "",
active_array: [],
set_id: set_id,
name: optionSetArray.name,
set_type: optionSetArray.ss_type,
option: []
}
callback(attribute);
},
getOption: function(index, optionDataArray, callback) {
var _self = this;
var options = {
index: index,
ss_data_id: optionDataArray.ss_data_id,
name: optionDataArray.name,
image: optionDataArray.image,
price: optionDataArray.price,
compare_price: 0,
total_stock: 0
}
callback(options);
},
getActive: function(index, activeOptionId, activeOptionIdIn, optionDataArray, callback) {
var _self = this;
var actives_index = (optionDataArray.ss_data_id == activeOptionId) ? index : activeOptionIdIn;
var actives = (optionDataArray.ss_data_id != activeOptionId) ? "0" : "1";
callback(actives_index, actives);
},
getAttributes: function(optionSetArray, callback) {
var _self = this;
var attributes = [];
for (var index = 0; index < optionSetArray.length; index++) {
_self.formatAttribute(index, 0, 'attribute', optionSetArray[index], function(res_attribute) {
if (optionSetArray[index].option_subsets.length != 0) {
for (var option_subset_index = 0; option_subset_index < optionSetArray[index].option_subsets.length; option_subset_index++) {
_self.formatAttribute(index, option_subset_index, res_attribute.set_type, optionSetArray[index].option_subsets[option_subset_index], function(res_attribute_sub) {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_subsets[option_subset_index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute_sub.active_option_id, active_option_id, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute_sub.option = options;
res_attribute_sub.active_option_index = active_option_id;
res_attribute_sub.active_option_index_str = String(active_option_id);
res_attribute_sub.active_array = active_option_array;
attributes.push(res_attribute_sub);
});
}
} else {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute.active_option_id, active_option_id, optionSetArray[index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute.option = options;
res_attribute.active_option_index = active_option_id;
res_attribute.active_option_index_str = String(active_option_id);
res_attribute.active_array = active_option_array;
attributes.push(res_attribute);
}
});
}
callback(attributes)
},
getformatQuantity: function(index, attributeCustom, callback) {
var _self = this;
var quantity = {
name: String(index + 1),
dataArray: attributeCustom
}
callback(quantity);
},
onClickRadio: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickRadio : index", index);
_self.consoleLog("onClickRadio : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickRadio : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickDropdown: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickDropdown : index", index);
_self.consoleLog("onClickDropdown : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickDropdown : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickCheckbox: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickCheckbox : index", index);
_self.consoleLog("onClickCheckbox : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i == parseInt(index_option)) ? (($scope.data.attribute_custom.dataArray[index].active_array[i] != "0") ? "0" : "1") : $scope.data.attribute_custom.dataArray[index].active_array[i];
}
_self.consoleLog("onClickCheckbox : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
}
}
return getFunction;
};
$scope.getReward = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
momentUnix: function(callback) {
var _self = this;
var now = moment().unix();
callback(now);
},
getCalculator: function(sumProductPrice, reward, callback) {
var _self = this;
_self.consoleLog("getCalculator : sumProductPrice", sumProductPrice);
_self.consoleLog("getCalculator : reward", reward);
var point_reward = 0;
if (reward.type_id == "100") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
} else if (reward.type_id == "101") {
point_reward = reward.reward_amount;
} else if (reward.type_id == "102") {
point_reward = (reward.reward_percent * sumProductPrice.price) / 100;
} else if (reward.type_id == "103") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
}
_self.consoleLog("getCalculator : point_reward", point_reward);
callback(point_reward);
},
getProductReward: function(now, productReward, callback) {
var _self = this;
var reward = {
reward_length: (productReward.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(productReward.reward_lifetime.lifetime_start_time);
reward.lifetime_end_time = parseInt(productReward.reward_lifetime.lifetime_end_time);
reward.type_id = productReward.reward_type_id;
reward.amount = parseInt(productReward.reward_amount);
reward.percent = parseInt(productReward.reward_percent);
reward.every_price = parseInt(productReward.reward_every_price);
}
_self.consoleLog("getProductReward : reward", reward);
callback(reward);
},
getPointConfig: function(now, shopPointConfig, callback) {
var _self = this;
var reward = {
reward_length: (shopPointConfig.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(shopPointConfig.er_from);
reward.lifetime_end_time = parseInt(shopPointConfig.er_to);
reward.type_id = "100";
reward.amount = parseInt(shopPointConfig.er_earn);
reward.every_price = parseInt(shopPointConfig.er_rate);
}
_self.consoleLog("getPointConfig : reward", reward);
callback(reward);
},
checkPointReward: function(reward, callback) {
var _self = this;
var state = false;
if (reward.reward_length) {
var start = reward.lifetime_start_time < reward.lifetime_time && reward.lifetime_start_time != 0;
var end = (reward.lifetime_end_time != -1) ? reward.lifetime_time <= reward.lifetime_end_time && reward.lifetime_end_time != 0 : true;
if (start && end) {
if (reward.type_id == "100") {
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
} else if (reward.type_id == "101") {
var amount = reward.amount != 0;
if (amount) {
state = true;
}
} else if (reward.type_id == "102") {
var percent = reward.percent != 0;
if (percent) {
state = true;
}
} else if (reward.type_id == "103") {
var percent = reward.percent != 0;
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
}
}
}
callback(state);
},
checkReward: function(rewardProduct, rewardPointConfig, callback) {
var _self = this;
_self.consoleLog("checkReward : rewardProduct", rewardProduct);
_self.consoleLog("checkReward : rewardPointConfig", rewardPointConfig);
var reward = {
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
_self.checkPointReward(rewardProduct, function(res_state_product) {
_self.checkPointReward(rewardPointConfig, function(res_state_point_config) {
if (res_state_point_config) {
reward.type_id = rewardPointConfig.type_id;
reward.type_id = rewardPointConfig.type_id;
reward.amount = rewardPointConfig.amount;
reward.percent = rewardPointConfig.percent;
reward.every_price = rewardPointConfig.every_price;
} else if (res_state_product) {
reward.type_id = rewardProduct.type_id;
reward.amount = rewardProduct.amount;
reward.percent = rewardProduct.percent;
reward.every_price = rewardProduct.every_price;
}
_self.consoleLog("checkReward : reward", reward);
callback(reward);
});
});
},
checkRewardType: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.momentUnix(function(now) {
_self.getProductReward(now, productReward, function(res_reward_product) {
_self.getPointConfig(now, shopPointConfig, function(res_reward_point_config) {
_self.checkReward(res_reward_product, res_reward_point_config, function(res_reward) {
callback(res_reward);
});
});
});
});
},
createReward: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.consoleLog("createReward : productReward", productReward);
_self.consoleLog("createReward : shopPointConfig", shopPointConfig);
_self.checkRewardType(productReward, shopPointConfig, function(res_reward) {
_self.consoleLog("createReward : res_reward", res_reward);
callback(res_reward);
});
}
}
return getFunction;
};
$scope.getQuantity = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
upDateReward: function() {
var _self = this;
},
upDateReward: function() {
var _self = this;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
},
upDatePrice: function() {
var _self = this;
var product_price = $scope.data.product_price.price * $scope.data.quantity.quantity_input;
var product_compare_price = $scope.data.product_compare_price.price * $scope.data.quantity.quantity_input;
$scope.getAttribute().checkPrice(product_price, function(res_price_ecimals) {
$scope.data.sum_product_price.price = product_price;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals;
$scope.getAttribute().checkPrice(product_compare_price, function(res_compare_price_ecimals) {
$scope.data.sum_product_compare_price.price = product_compare_price;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((product_compare_price - product_price) > 0) ? product_compare_price - product_price : 0;
$scope.getAttribute().checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.upDateReward();
});
});
});
},
input: function(quantityInput) {
var _self = this;
_self.consoleLog("input : quantityInput", quantityInput);
quantityInput = (quantityInput == null) ? 1 : parseInt(quantityInput);
_self.consoleLog("input : quantityInput", quantityInput);
if (quantityInput != null) {
if (quantityInput >= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_max;
}
if (quantityInput <= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
} else {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
_self.upDatePrice();
},
minus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input - 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_min", $scope.data.quantity.quantity_min);
if (quantity >= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
},
plus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input + 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_max", $scope.data.quantity.quantity_max);
if (quantity <= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
}
}
return getFunction;
};
$scope.getBuy = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = params.product_id.split("-", 1).join("");
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
postApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.post(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
UiCartProductAdd: function(productId, quantityInput, promotionId, customOptions, callback) {
UiCart.delegate.product.add(productId, quantityInput, promotionId, function(res_data) {
callback(res_data);
});
},
isProgress: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isProgress(productId)) ? true : false;
_self.consoleLog("isProgress : productId", productId);
_self.consoleLog("isProgress : state", state);
callback(state);
},
isSelected: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
_self.consoleLog("isSelected : productId", productId);
_self.consoleLog("isSelected : state", state);
callback(state);
},
isSelectedReturn: function(productId) {
var _self = this;
var ui_cart_state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
if (!$scope.setBuy.state_active) {
$scope.setBuy.state_active = true;
var state_process = $scope.setBuy.state_process;
var state_step = $scope.setBuy.state_step;
if (ui_cart_state && !state_process && state_step != 4) /* cart */ {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else if (!ui_cart_state && !state_process && state_step != 0) /* unset */ {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
} else {
$scope.setBuy.state_active = false;
}
}
return ui_cart_state;
},
updateState: function(productId) {
_self = this;
_self.isSelected(productId, function(res_state) {
if (res_state) {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
}
return res_state;
});
},
uiCart: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
_self.UiCartProductAdd(productId, quantityInput, promotionId, customOptions, function(res_data) {
if (res_data) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
},
postApi: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
var custom_options = {};
var dataSend = {
'txt_product_id': productId,
'txt_amount': quantityInput,
'txt_is_clear_cart_before': "0",
'txt_custom_options_json': JSON.stringify(custom_options)
};
_self.dataSend("cart/product_add", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
if (res_ok) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
});
},
onProcess: function(data, productId, quantityInput, promotionId, customOptions) {
var _self = this;
if (!$scope.setBuy.state_process) {
$scope.setBuy.state_process = true;
_self.isSelected(productId, function(res_state) {
if (!res_state) {
_self.onLoad($scope.setBuy.state_step, function(res_step) {
if (data.sum_product_price.price != 0 && data.quantity.quantity_max != 0 && (data.attribute.state == (data.attribute.productId != ''))) {
/* UiCart */
_self.uiCart(productId, quantityInput, promotionId, customOptions, res_step);
/* api post offline */
/*_self.postApi(productId, quantityInput, promotionId, customOptions, res_step); */
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
} else {
$scope.setBuy.state_process = false;
}
});
}
},
onTimeout: function(time, callback) {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
callback(true)
}, time);
},
onUnset: function(step, callback) {
var _self = this;
step = (step == 0) ? 0 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onLoad: function(step, callback) {
var _self = this;
step = (step == 0 || step == 1) ? 1 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onPass: function(step, callback) {
var _self = this;
step = (step == 1 || step == 2) ? 2 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onError: function(step, callback) {
var _self = this;
step = (step == 1 || step == 3) ? 3 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onCart: function(step, callback) {
var _self = this;
step = (step == 2 || step == 4) ? 4 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
main: function(callback) {
var _self = this;
}
}
return getFunction;
};
$scope.getDetail = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getDetail: function(api, callback) {
var _self = this;
var description = api.product_description;
var info = api.product_more_info;
var specificatio = [];
if (api.product_attribute.specification_data != undefined) {
specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? api.product_attribute.specification_data.pclass_array : [];
}
var state_specificatio = false;
if (api.product_attribute.specification_data != undefined) {
state_specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? true : false;
}
var state_info = (api.product_is_more_info == 1) ? true : false;
_self.consoleLog("getDetail : description", description);
_self.consoleLog("getDetail : info", info);
_self.consoleLog("getDetail : state_info", state_info);
callback(description, info, state_info, specificatio, state_specificatio);
},
onClickDetail: function(index) {
var _self = this;
$scope.data.detail.active = index;
_self.consoleLog("onClickDetail : data.detail.active", $scope.data.detail.active);
}
}
return getFunction;
};
$scope.pages = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageName: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page_name);
},
pageUrl: function(page_name, id, name_url) {
var _self = this;
var page = page_name + "/" + id + "-" + name_url;
_self.locationUrlReplace(page);
}
}
return getFunction;
};
$scope.countDown = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getLocation: function(callback) {
var _self = this;
var res_location = $location;
_self.consoleLog("getLocation", "res_location", res_location);
callback(res_location);
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
_self.consoleLog("getRouteParams", "params", params);
callback(params);
},
getLocationUrlNameProductDetail: function(callback) {
var _self = this;
_self.getRouteParams(function(res_params) {
_self.getLocation(function(res_location) {
var url_page_name = "/product-detail/" + res_params.product_id;
var res_url_name_product_detail = (res_location.url() == url_page_name) ? true : false;
_self.consoleLog("getLocationUrlNameProductDeal", "res_url_name_product_detail", res_url_name_product_detail);
callback(res_url_name_product_detail);
});
});
},
getUnix: function(callback) {
var _self = this;
var now = moment().unix();
_self.consoleLog("getUnix", "now", now);
callback(now);
},
getCountDown: function(now, product_lifetime, callback) {
var _self = this;
var countdown_unix = parseInt(product_lifetime.lifetime_end_time) - now;
var milliseconds = moment.duration(countdown_unix * 1000, "milliseconds");
var res_countdown = ((milliseconds.days() <= 9) ? '0' + milliseconds.days() : milliseconds.days());
res_countdown = res_countdown + ' : ' + ((milliseconds.hours() <= 9) ? '0' + milliseconds.hours() : milliseconds.hours());
res_countdown = res_countdown + ' : ' + ((milliseconds.minutes() <= 9) ? '0' + milliseconds.minutes() : milliseconds.minutes());
res_countdown = res_countdown + ' : ' + ((milliseconds.seconds() <= 9) ? '0' + milliseconds.seconds() : milliseconds.seconds());
_self.consoleLog("getCountDown", "res_countdown", res_countdown);
callback(res_countdown, countdown_unix);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
countDownByProduct: function(now, data_array, callback) {
var _self = this;
if (data_array.length != 0) {
if (data_array.product_lifetime.length != 0) {
_self.getCountDown(now, data_array.product_lifetime, function(res_count_down, res_countdown_unix) {
data_array.product_lifetime.lifetime_countdown = (res_countdown_unix > 0) ? res_count_down : "";
if (data_array.product_lifetime.lifetime_countdown == "") {
_self.getNameUrl(data_array.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", data_array.product_set_array[0].product_id, res_name);
});
}
});
}
}
_self.consoleLog("countDownByProduct", "data_array", data_array);
callback(data_array);
},
loop: function() {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
_self.getUnix(function(res_now) {
_self.countDownByProduct(res_now, $scope.dataApi.product.dataArray, function(data_array) {
$scope.dataApi.product.dataArray = data_array;
_self.getLocationUrlNameProductDetail(function(res_url_name_product_detail) {
if (res_url_name_product_detail) {
_self.loop();
}
});
});
});
}, 1000);
}
}
return getFunction;
};
$scope.control = function() {
var getFunction = {
popupVideo: function(state, video_link, video_embed_code) {
var _self = this;
if (video_embed_code != '') {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
} else if (video_link != '') {
window.open(video_link, '_blank');
} else {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
}
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.data_control = {
page_video: {
popup: false,
shop_video_embed_code: ""
}
}
$scope.countDown().loop();
/* set carousel */
$scope.setCarousel = {
carousel: 0,
index: 0
};
$scope.getCarousel().getCarousel($scope.setCarousel.carousel, function(res_carousel_id) {
$scope.setCarousel.carousel = res_carousel_id;
});
/* set carousel */
/* get product api */
$scope.dataApi = {
reward: {
dataSend: {},
api: "shop/current",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
product: {
dataSend: {
txt_product_id: 0
},
api: "product/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
relation: {
dataSend: {
txt_referral_id: 0
},
api: "referral/relation",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.data = {
resParams: "",
back: {
page_name: "",
data_id: "",
data_name: ""
},
attribute: {
state: false,
productId: "",
dataArray: []
},
attribute_custom: {
state: false,
dataArray: []
},
reward: {
quantity_name: 'reward',
type_id: "0",
reward_amount: 0,
reward_percent: 0,
reward_every_price: 0,
point_reward: 0
},
quantity: {
quantity_name: 'quantity',
quantity_min: 1,
quantity_max: 1,
quantity_input: 1,
quantity_select: []
},
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
detail: {
active: '0',
dataArray: [{
index: '0',
state: true,
en: ($scope.description != undefined && $scope.description != "") ? $scope.description : 'Description',
th: '',
data: '',
dataArray: []
}, {
index: '1',
state: true,
en: ($scope.info != undefined && $scope.info != "") ? $scope.info : 'Info',
th: '',
data: '',
dataArray: []
}, {
index: '2',
state: true,
en: ($scope.specification != undefined && $scope.specification != "") ? $scope.specification : 'Specification',
th: '',
data: '',
dataArray: []
}]
}
};
$scope.setBuy = {
state_active: false,
state_process: false,
state_step: 0,
state_data_font_color: "",
state_data_background_color: "",
stepArray: [{
step: 0,
name: "unset",
icon: $scope._icebuyicon,
state: "เพิ่มในรถเข็น",
data_font_color: "",
data_background_color: ""
}, {
step: 1,
name: "load",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 2,
name: "pass",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 3,
name: "error",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 4,
name: "cart",
icon: "",
state: "ดูรถเข็น",
data_font_color: "",
data_background_color: "primary_darkest"
}]
};
/* - get api product/id start - */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.data.resParams = res_params;
$scope.getData().getDataPage(res_params, function(res_back_page, res_data_id, res_data_name) {
$scope.data.back.page_name = res_back_page;
$scope.data.back.data_id = res_data_id;
$scope.data.back.data_name = res_data_name;
});
$scope.dataApi.product.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
$scope.dataApi.product.dataSend.txt_product_id = (res_product_id != false) ? res_product_id : 0;
$scope.getData().dataSend($scope.dataApi.product.api, $scope.dataApi.product.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_product, res_state) {
$scope.dataApi.product.ok = res_ok;
$scope.dataApi.product.dataArray = get_res_api_product.data;
$scope.getData().consoleLog("get_res_api_product", get_res_api_product);
$scope.dataApi.product.dataArrayState = res_state;
/* -- get api shop/current to reward -- */
if (res_ok) {
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getData().dataSend($scope.dataApi.reward.api, $scope.dataApi.reward.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_shop, res_state) {
$scope.dataApi.reward.ok = res_ok;
$scope.dataApi.reward.dataArray = get_res_api_shop.data;
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getReward().createReward($scope.dataApi.product.dataArray.product_reward, get_res_api_shop.data.shop_point_config, function(res_reward) {
$scope.data.reward.type_id = res_reward.type_id;
$scope.data.reward.reward_amount = res_reward.amount;
$scope.data.reward.reward_percent = res_reward.percent;
$scope.data.reward.reward_every_price = res_reward.every_price;
/* --- Wait product/id ,shop/current --- */
/* ---- get attribute ---- */
$scope.getAttribute().productAttribute(get_res_api_product.data.product_attribute, function(res_attribute) {
$scope.data.attribute.dataArray = res_attribute;
$scope.getAttribute().checkMinPrices(get_res_api_product, res_attribute, function(res_data_price, res_state) {
$scope.data.attribute.state = res_state;
$scope.data.product_price = res_data_price.product_price;
$scope.data.product_compare_price = res_data_price.product_compare_price;
$scope.data.sum_product_price = res_data_price.sum_product_price;
$scope.data.sum_product_compare_price = res_data_price.sum_product_compare_price;
$scope.data.sum_product_compare_minus_sum_product_price = res_data_price.sum_product_compare_minus_sum_product_price;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
/* ----- stock ----- */
$scope.data.quantity.quantity_max = res_data_price.product_price.total_stock;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_data_price.product_price.total_stock; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* ----- stock ----- */
});
});
/* ---- get attribute ---- */
/* ---- get attribute custom ---- */
$scope.getAttributeCustom().createArray(get_res_api_product.data.product_custom_templates, function(res_custom_attribute, res_state) {
$scope.data.attribute_custom.state = res_state;
$scope.data.attribute_custom.dataArray = res_custom_attribute;
});
/* ---- get attribute custom ---- */
/* ---- get detail ---- */
$scope.getDetail().getDetail(get_res_api_product.data, function(res_description, res_info, res_state_info, res_specificatio, res_state_specificatio) {
$scope.data.detail.dataArray[0].data = res_description;
$scope.data.detail.dataArray[1].data = res_info;
$scope.data.detail.dataArray[1].state = res_state_info;
$scope.data.detail.dataArray[2].dataArray = res_specificatio;
$scope.data.detail.dataArray[2].state = res_state_specificatio;
});
/* ---- get detail ---- */
/* ---- update state ---- */
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
/* ---- update state ---- */
/* --- Wait product/id ,shop/current --- */
});
});
});
});
/* -- get api shop/current to reward -- */
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.relation.dataArrayState = res_state;
$scope.getData().getReferralId(get_res_api_product.data.product_referral_display, function(res_referral_id) {
$scope.dataApi.relation.dataSend.txt_referral_id = res_referral_id;
$scope.getData().dataSend($scope.dataApi.relation.api, $scope.dataApi.relation.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_referral, res_state) {
$scope.dataApi.relation.ok = res_ok;
$scope.dataApi.relation.dataArray = get_res_api_referral.data;
$scope.dataApi.relation.dataArrayState = res_state;
});
});
});
});
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
} else {
/* ok = false */
if ($scope.dataApi.product.dataArray.length != 0) {
/* product deal to product original */
if ($scope.dataApi.product.dataArray.product_set_array.length != 0) {
$scope.countDown().getNameUrl($scope.dataApi.product.dataArray.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", $scope.dataApi.product.dataArray.product_set_array[0].product_id, res_name);
});
} else {
$scope.pages().pageName("home");
}
} else {
/* product null */
$scope.pages().pageName("home");
}
}
});
});
});
});
/* - get api product/id end - */
/* get product api */
};
return promise;
});_ui_share_app.directive('productDetailPageEb', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageEb';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
$scope.dataTag = false;
$scope._dataArray = [];
$scope.product_id = "";
$scope.product_sku = "";
$scope.product_code = "";
$scope.product_price = 0;
$scope.product_compare_price = 0;
$scope.promotion_list = 0;
$scope._dataArrayState = {
load: true,
done: false
};
$scope.nowMoment = moment().unix();
console.log("promotion_list : ", $scope.promotion_list);
$scope.dataShopCurrent = [];
$scope.dataShopPointConfig = [];
$scope.getShopCurrent = function() {
var dataSend = {};
GAEAPI.get('shop/current', dataSend).then(function(output) {
console.log("getShopCurrent : output : ", output);
if (output.ok == 1) {
$scope.dataShopCurrent = output.data;
console.log("getShopCurrent : dataShopCurrent : ", $scope.dataShopCurrent);
$scope.dataShopPointConfig = output.data.shop_point_config;
console.log("getShopCurrent : dataShopPointConfig : ", $scope.dataShopPointConfig);
}
});
};
$scope.getShopCurrent();
$scope.getShopPointConfigRewardState = function(product_price, quantity) {
var state = 'RewardShop';
var sup_price = product_price * quantity;
if ($scope.dataShopPointConfig.length != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) != 0 && parseInt($scope.dataShopPointConfig.er_earn) != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) <= sup_price) {
state = 'RewardShop';
return state;
} else {
state = 'High';
return state;
}
} else {
return 'RewardProduct';
return state;
}
} else {
return 'RewardProduct';
}
};
$scope.getShopPointConfigReward = function(product_price, quantity) {
var sup_price = 0;
var er_rate = 0;
var er_earn = 0;
var mathFloor = 0;
var point = 0;
// console.log("getShopPointConfigReward : shop_point_config.er_rate : ",$scope.dataShopPointConfig.er_rate);
if ($scope.dataShopPointConfig.length != 0) {
sup_price = product_price * quantity;
er_rate = parseInt($scope.dataShopPointConfig.er_rate);
er_earn = parseInt($scope.dataShopPointConfig.er_earn);
mathFloor = Math.floor(sup_price / er_rate);
point = mathFloor * er_earn;
return point;
} else {
return point;
}
}
$scope._getReward = function(datain, product_price, qty) {
if (datain.length == 0) {
return 'Data Reward Error';
}
console.log("_getReward : product_price : ", product_price, " qty : ", qty);
var reward = "NULL";
if (datain.reward_type_id == "101") {} else if (datain.reward_type_id == "102") {} else if (datain.reward_type_id == "103") {
var reward_every_price = parseInt(datain.reward_every_price);
var sum_product_price = Math.round(product_price) * qty;
var reward_amount = parseInt(datain.reward_amount);
console.log("_getReward : reward_every_price : ", reward_every_price, " sum_product_price : ", sum_product_price, " reward_amount : ", reward_amount);
if (reward_every_price <= sum_product_price) {
var divided = Math.floor(sum_product_price / reward_every_price);
var multiplied = divided * reward_amount;
console.log("_getReward : divided : ", divided, " multiplied : ", multiplied);
reward = multiplied;
} else {
reward = "ZERO";
}
} else {
return 'Data Reward Type Id Error';
}
return reward;
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
if ($scope._dataArray.product_is_promotion != 0) {
if ($scope._dataArray.product_promotion) {
$scope.promotion_list = $scope._dataArray.product_promotion[0].promotion_id;
}
}
console.log("promotion_list : ", $scope.promotion_list);
console.log("_getDataArray _dataArray : ", $scope._dataArray);
$scope.product_id = $scope._dataArray.product_id;
$scope.dataPreserve = res.data;
if (res.data.product_sku != undefined) {
$scope.product_sku = res.data.product_sku;
}
if (res.data.product_code != undefined) {
$scope.product_code = res.data.product_code;
}
console.log("res.data.product_discount : ", res.data.product_discount);
if (res.data.product_discount.length != 0) {
$scope.product_price = $scope.calculate(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_lifetime.lifetime_start_time, res.data.product_discount.discount_lifetime.lifetime_end_time, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_lifetime.lifetime_start_time, res.data.product_discount.discount_lifetime.lifetime_end_time, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
} else {
$scope.product_price = res.data.product_price;
$scope.product_compare_price = res.data.product_compare_price;
}
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.dataTag = res.data.product_tags.split(",");
$scope.qtyCurrentSize(res.data.product_total_variant, res.data.product_total_stock);
$scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope._stateReward = function(datain) {
var state = false;
/* console.log("_stateReward : reward_lifetime : ", datain.reward_lifetime); */
if (datain.length != 0) {
state = true;
}
return state;
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
// $scope.pricefull = function(price, compare_price, discount_id , lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
// var pricefull = 0;
// if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= nowMoment)) {
// if (price != undefined && price != 0) {
// pricefull = price;
// $scope._pricefullState.pricefull = 'not zero';
// } else {
// pricefull = 0;
// $scope._pricefullState.pricefull = 'zero';
// }
// } else {
// if (compare_price > 0 && compare_price != undefined) {
// pricefull = compare_price;
// $scope._pricefullState.pricefull = 'not zero';
// } else {
// $scope._pricefullState.pricefull = 'zero';
// }
// }
// return pricefull;
// }
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
console.log("calculate : ", price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent);
console.log("calculate : ", lifetime_start_time <= $scope.nowMoment);
console.log("calculate : ", lifetime_end_time >= $scope.nowMoment);
console.log("calculate : ", (lifetime_end_time == -1 || lifetime_end_time >= nowMoment));
var calculate = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
// $scope.calculate = function(price, compare_price, discount_id , lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
// var calculate = 0;
// if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= nowMoment)) {
// if (discount_price != 0 && discount_percent == 0) {
// calculate = price - discount_price;
// } else if (discount_percent != 0 && discount_price == 0) {
// calculate = price - ((discount_percent / 100) * price);
// }
// } else {
// calculate = price
// }
// if (calculate != undefined && calculate != 0) {
// $scope._calculateState.calculate = 'not zero';
// } else {
// $scope._calculateState.calculate = 'zero';
// }
// return (calculate > 0) ? calculate : 0;
// }
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
if (product_total_stock >= 50) {
for (var i = 0; i < 50; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 50; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
if (dataVariants[i].sku != "") {
$scope.product_sku = dataVariants[i].sku;
} else {
$scope.product_sku = $scope._dataArray.product_sku;
}
if (dataVariants[i].sku != "") {
$scope.product_code = dataVariants[i].barcode;
} else {
$scope.product_code = $scope._dataArray.product_code;
}
console.log("$scope._dataArray.product_discount : ", $scope._dataArray.product_discount);
$scope.product_price = $scope.calculate(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_lifetime.lifetime_start_time, $scope._dataArray.product_discount.discount_lifetime.lifetime_end_time, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_lifetime.lifetime_start_time, $scope._dataArray.product_discount.discount_lifetime.lifetime_end_time, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
$scope.product_price = $scope._dataArray.product_price;
$scope.product_compare_price = $scope._dataArray.product_compare_price;
$scope.product_sku = $scope._dataArray.product_sku;
$scope.product_code = $scope._dataArray.product_code;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope._getDataArray($scope._getIdUrl());
// setTimeout(function() {
// alert($('input[name=radiogroup]:checked').val());
// }, 700);
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});_ui_share_app.directive('productDetailPageEc', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageEc';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
$scope.product_id = "";
$scope.product_sku = "";
$scope.product_code = "";
$scope.product_price = 0;
$scope.product_compare_price = 0;
$scope.promotion_list = 0;
$scope._dataArrayState = {
load: true,
done: false
};
console.log("promotion_list : ", $scope.promotion_list);
$scope.dataShopCurrent = [];
$scope.dataShopPointConfig = [];
$scope.getShopCurrent = function() {
var dataSend = {};
GAEAPI.get('shop/current', dataSend).then(function(output) {
console.log("getShopCurrent : output : ", output);
if (output.ok == 1) {
$scope.dataShopCurrent = output.data;
console.log("getShopCurrent : dataShopCurrent : ", $scope.dataShopCurrent);
$scope.dataShopPointConfig = output.data.shop_point_config;
console.log("getShopCurrent : dataShopPointConfig : ", $scope.dataShopPointConfig);
}
});
};
$scope.getShopCurrent();
$scope.getShopPointConfigRewardState = function(product_price, quantity) {
var state = 'RewardShop';
var sup_price = product_price * quantity;
if ($scope.dataShopPointConfig.length != 0) {
if (parseFloat($scope.dataShopPointConfig.er_rate) != 0 && parseFloat($scope.dataShopPointConfig.er_earn) != 0) {
if (parseFloat($scope.dataShopPointConfig.er_rate) <= sup_price) {
state = 'RewardShop';
return state;
} else {
state = 'High';
return state;
}
} else {
return 'RewardProduct';
return state;
}
} else {
return 'RewardProduct';
}
};
$scope.getShopPointConfigReward = function(product_price, quantity) {
var sup_price = 0;
var er_rate = 0;
var er_earn = 0;
var mathFloor = 0;
var point = 0;
// console.log("getShopPointConfigReward : shop_point_config.er_rate : ",$scope.dataShopPointConfig.er_rate);
if ($scope.dataShopPointConfig.length != 0) {
sup_price = product_price * quantity;
er_rate = parseFloat($scope.dataShopPointConfig.er_rate);
er_earn = parseFloat($scope.dataShopPointConfig.er_earn);
mathFloor = Math.floor(sup_price / er_rate);
point = mathFloor * er_earn;
return point;
} else {
return point;
}
}
$scope._getReward = function(datain, product_price, qty) {
if (datain.length == 0) {
return 'Data Reward Error';
}
console.log("_getReward : product_price : ", product_price, " qty : ", qty);
var reward = "NULL";
if (datain.reward_type_id == "101") {} else if (datain.reward_type_id == "102") {} else if (datain.reward_type_id == "103") {
var reward_every_price = parseFloat(datain.reward_every_price);
var sum_product_price = Math.round(product_price) * qty;
var reward_amount = parseFloat(datain.reward_amount);
console.log("_getReward : reward_every_price : ", reward_every_price, " sum_product_price : ", sum_product_price, " reward_amount : ", reward_amount);
if (reward_every_price <= sum_product_price) {
var divided = Math.floor(sum_product_price / reward_every_price);
var multiplied = divided * reward_amount;
console.log("_getReward : divided : ", divided, " multiplied : ", multiplied);
reward = multiplied;
} else {
reward = "ZERO";
}
} else {
return 'Data Reward Type Id Error';
}
return reward;
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
// if ($scope._dataArray.product_is_promotion != 0) {
// $scope.promotion_list = $scope._dataArray.product_promotion[0].promotion_id;
// }
console.log("promotion_list : ", $scope.promotion_list);
console.log("_getDataArray _dataArray : ", $scope._dataArray);
$scope.product_id = $scope._dataArray.product_id;
$scope.dataPreserve = res.data;
if (res.data.product_sku != undefined) {
$scope.product_sku = res.data.product_sku;
}
if (res.data.product_code != undefined) {
$scope.product_code = res.data.product_code;
}
$scope.product_price = $scope.calculate(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.dataTag = res.data.product_tags.split(",");
$scope.qtyCurrentSize(res.data.product_total_variant, res.data.product_total_stock);
$scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope._stateReward = function(datain) {
var state = false;
/* console.log("_stateReward : reward_lifetime : ", datain.reward_lifetime); */
if (datain.length != 0) {
state = true;
}
return state;
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
if (product_total_stock >= 20) {
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
for (var i = 0; i < parseFloat(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseFloat($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseFloat($(".d_qty").val());
} else {
check_int = parseFloat($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
if (dataVariants[i].sku != "") {
$scope.product_sku = dataVariants[i].sku;
} else {
$scope.product_sku = $scope._dataArray.product_sku;
}
if (dataVariants[i].sku != "") {
$scope.product_code = dataVariants[i].barcode;
} else {
$scope.product_code = $scope._dataArray.product_code;
}
$scope.product_price = $scope.calculate(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
$scope.product_price = $scope._dataArray.product_price;
$scope.product_compare_price = $scope._dataArray.product_compare_price;
$scope.product_sku = $scope._dataArray.product_sku;
$scope.product_code = $scope._dataArray.product_code;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope._getDataArray($scope._getIdUrl());
// setTimeout(function() {
// alert($('input[name=radiogroup]:checked').val());
// }, 700);
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
$scope._isLogin = function() {
return UiCustomerBox.delegate.get.isLogin();
};
};
return promise;
});_ui_share_app.directive('productDetailPageEd', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageEd';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
$scope.product_id = "";
$scope.product_sku = "";
$scope.product_code = "";
$scope.product_price = 0;
$scope.product_compare_price = 0;
$scope.promotion_list = 0;
$scope._dataArrayState = {
load: true,
done: false
};
console.log("promotion_list : ", $scope.promotion_list);
$scope.dataShopCurrent = [];
$scope.dataShopPointConfig = [];
$scope.getShopCurrent = function() {
var dataSend = {};
GAEAPI.get('shop/current', dataSend).then(function(output) {
console.log("getShopCurrent : output : ", output);
if (output.ok == 1) {
$scope.dataShopCurrent = output.data;
console.log("getShopCurrent : dataShopCurrent : ", $scope.dataShopCurrent);
$scope.dataShopPointConfig = output.data.shop_point_config;
console.log("getShopCurrent : dataShopPointConfig : ", $scope.dataShopPointConfig);
}
});
};
$scope.getShopCurrent();
$scope.getShopPointConfigRewardState = function(product_price, quantity) {
var state = 'RewardShop';
var sup_price = product_price * quantity;
if ($scope.dataShopPointConfig.length != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) != 0 && parseInt($scope.dataShopPointConfig.er_earn) != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) <= sup_price) {
state = 'RewardShop';
return state;
} else {
state = 'High';
return state;
}
} else {
return 'RewardProduct';
return state;
}
} else {
return 'RewardProduct';
}
};
$scope.getShopPointConfigReward = function(product_price, quantity) {
var sup_price = 0;
var er_rate = 0;
var er_earn = 0;
var mathFloor = 0;
var point = 0;
// console.log("getShopPointConfigReward : shop_point_config.er_rate : ",$scope.dataShopPointConfig.er_rate);
if ($scope.dataShopPointConfig.length != 0) {
sup_price = product_price * quantity;
er_rate = parseInt($scope.dataShopPointConfig.er_rate);
er_earn = parseInt($scope.dataShopPointConfig.er_earn);
mathFloor = Math.floor(sup_price / er_rate);
point = mathFloor * er_earn;
return point;
} else {
return point;
}
}
$scope._getReward = function(datain, product_price, qty) {
if (datain.length == 0) {
return 'Data Reward Error';
}
console.log("_getReward : product_price : ", product_price, " qty : ", qty);
var reward = "NULL";
if (datain.reward_type_id == "101") {} else if (datain.reward_type_id == "102") {} else if (datain.reward_type_id == "103") {
var reward_every_price = parseInt(datain.reward_every_price);
var sum_product_price = Math.round(product_price) * qty;
var reward_amount = parseInt(datain.reward_amount);
console.log("_getReward : reward_every_price : ", reward_every_price, " sum_product_price : ", sum_product_price, " reward_amount : ", reward_amount);
if (reward_every_price <= sum_product_price) {
var divided = Math.floor(sum_product_price / reward_every_price);
var multiplied = divided * reward_amount;
console.log("_getReward : divided : ", divided, " multiplied : ", multiplied);
reward = multiplied;
} else {
reward = "ZERO";
}
} else {
return 'Data Reward Type Id Error';
}
return reward;
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
// if ($scope._dataArray.product_is_promotion != 0) {
// $scope.promotion_list = $scope._dataArray.product_promotion[0].promotion_id;
// }
console.log("promotion_list : ", $scope.promotion_list);
console.log("_getDataArray _dataArray : ", $scope._dataArray);
$scope.product_id = $scope._dataArray.product_id;
$scope.dataPreserve = res.data;
if (res.data.product_sku != undefined) {
$scope.product_sku = res.data.product_sku;
}
if (res.data.product_code != undefined) {
$scope.product_code = res.data.product_code;
}
$scope.product_price = $scope.calculate(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.dataTag = res.data.product_tags.split(",");
$scope.qtyCurrentSize(res.data.product_total_variant, res.data.product_total_stock);
$scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope._stateReward = function(datain) {
var state = false;
/* console.log("_stateReward : reward_lifetime : ", datain.reward_lifetime); */
if (datain.length != 0) {
state = true;
}
return state;
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
if (product_total_stock >= 20) {
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
if (dataVariants[i].sku != "") {
$scope.product_sku = dataVariants[i].sku;
} else {
$scope.product_sku = $scope._dataArray.product_sku;
}
if (dataVariants[i].sku != "") {
$scope.product_code = dataVariants[i].barcode;
} else {
$scope.product_code = $scope._dataArray.product_code;
}
$scope.product_price = $scope.calculate(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
$scope.product_price = $scope._dataArray.product_price;
$scope.product_compare_price = $scope._dataArray.product_compare_price;
$scope.product_sku = $scope._dataArray.product_sku;
$scope.product_code = $scope._dataArray.product_code;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope._getDataArray($scope._getIdUrl());
// setTimeout(function() {
// alert($('input[name=radiogroup]:checked').val());
// }, 700);
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});_ui_share_app.directive('productDetailPageEe', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageEe';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
$scope.product_id = "";
$scope.product_sku = "";
$scope.product_code = "";
$scope.product_price = 0;
$scope.product_compare_price = 0;
$scope.promotion_list = 0;
$scope._dataArrayState = {
load: true,
done: false
};
console.log("promotion_list : ", $scope.promotion_list);
$scope.dataShopCurrent = [];
$scope.dataShopPointConfig = [];
$scope.getShopCurrent = function() {
var dataSend = {};
GAEAPI.get('shop/current', dataSend).then(function(output) {
console.log("getShopCurrent : output : ", output);
if (output.ok == 1) {
$scope.dataShopCurrent = output.data;
console.log("getShopCurrent : dataShopCurrent : ", $scope.dataShopCurrent);
$scope.dataShopPointConfig = output.data.shop_point_config;
console.log("getShopCurrent : dataShopPointConfig : ", $scope.dataShopPointConfig);
}
});
};
$scope.getShopCurrent();
$scope.getShopPointConfigRewardState = function(product_price, quantity) {
var state = 'RewardShop';
var sup_price = product_price * quantity;
if ($scope.dataShopPointConfig.length != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) != 0 && parseInt($scope.dataShopPointConfig.er_earn) != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) <= sup_price) {
state = 'RewardShop';
return state;
} else {
state = 'High';
return state;
}
} else {
return 'RewardProduct';
return state;
}
} else {
return 'RewardProduct';
}
};
$scope.getShopPointConfigReward = function(product_price, quantity) {
var sup_price = 0;
var er_rate = 0;
var er_earn = 0;
var mathFloor = 0;
var point = 0;
// console.log("getShopPointConfigReward : shop_point_config.er_rate : ",$scope.dataShopPointConfig.er_rate);
if ($scope.dataShopPointConfig.length != 0) {
sup_price = product_price * quantity;
er_rate = parseInt($scope.dataShopPointConfig.er_rate);
er_earn = parseInt($scope.dataShopPointConfig.er_earn);
mathFloor = Math.floor(sup_price / er_rate);
point = mathFloor * er_earn;
return point;
} else {
return point;
}
}
$scope._getReward = function(datain, product_price, qty) {
if (datain.length == 0) {
return 'Data Reward Error';
}
console.log("_getReward : product_price : ", product_price, " qty : ", qty);
var reward = "NULL";
if (datain.reward_type_id == "101") {} else if (datain.reward_type_id == "102") {} else if (datain.reward_type_id == "103") {
var reward_every_price = parseInt(datain.reward_every_price);
var sum_product_price = Math.round(product_price) * qty;
var reward_amount = parseInt(datain.reward_amount);
console.log("_getReward : reward_every_price : ", reward_every_price, " sum_product_price : ", sum_product_price, " reward_amount : ", reward_amount);
if (reward_every_price <= sum_product_price) {
var divided = Math.floor(sum_product_price / reward_every_price);
var multiplied = divided * reward_amount;
console.log("_getReward : divided : ", divided, " multiplied : ", multiplied);
reward = multiplied;
} else {
reward = "ZERO";
}
} else {
return 'Data Reward Type Id Error';
}
return reward;
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
// if ($scope._dataArray.product_is_promotion != 0) {
// $scope.promotion_list = $scope._dataArray.product_promotion[0].promotion_id;
// }
console.log("promotion_list : ", $scope.promotion_list);
console.log("_getDataArray _dataArray : ", $scope._dataArray);
$scope.product_id = $scope._dataArray.product_id;
$scope.dataPreserve = res.data;
if (res.data.product_sku != undefined) {
$scope.product_sku = res.data.product_sku;
}
if (res.data.product_code != undefined) {
$scope.product_code = res.data.product_code;
}
$scope.product_price = $scope.calculate(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.dataTag = res.data.product_tags.split(",");
$scope.qtyCurrentSize(res.data.product_total_variant, res.data.product_total_stock);
$scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope._stateReward = function(datain) {
var state = false;
/* console.log("_stateReward : reward_lifetime : ", datain.reward_lifetime); */
if (datain.length != 0) {
state = true;
}
return state;
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
if (product_total_stock >= 20) {
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
if (dataVariants[i].sku != "") {
$scope.product_sku = dataVariants[i].sku;
} else {
$scope.product_sku = $scope._dataArray.product_sku;
}
if (dataVariants[i].sku != "") {
$scope.product_code = dataVariants[i].barcode;
} else {
$scope.product_code = $scope._dataArray.product_code;
}
$scope.product_price = $scope.calculate(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
$scope.product_price = $scope._dataArray.product_price;
$scope.product_compare_price = $scope._dataArray.product_compare_price;
$scope.product_sku = $scope._dataArray.product_sku;
$scope.product_code = $scope._dataArray.product_code;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope._getDataArray($scope._getIdUrl());
// setTimeout(function() {
// alert($('input[name=radiogroup]:checked').val());
// }, 700);
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});
_ui_share_app.directive('productDetailPageF', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageF';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* JQ: Scroll event */
angular.element($window).bind('scroll',function(){
if(!$scope.data){
return;
}
var curPos = ($(document).scrollTop());
var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));
console.debug("Cur pos", curPos, properHeight);
if(curPos > properHeight){
angular.element('.block-background .bottom-info').addClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
$scope.data = false;
$scope.dataPreserve = false;
/* Get product id from url or from component */
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* Get data by product id */
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
}
});
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 6,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
$scope.makeVariantsClick = function(){
var s = $timeout(function(){
$timeout.cancel(s);
$('select.variantSelector').each(function(idx,obj){
var optionElementFirst = $(this).find('option[data-index="'+idx+'"]').eq(0);
optionElementFirst.prop("selected",true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope.checkColorConfig = function(){
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function () {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if($('[data-key="'+$scope._uniqueKey+'"]').not('.slick-initialized')){
$timeout(function(){
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.qty_original=1;
$scope.qty_current=1;
/* Click SLick Item */
$scope.slickGoto = function (idx) {
setTimeout(function () {
$('[data-key="'+$scope._uniqueKey+'"]').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.maxHeight = 0;
$scope.navArrowsCalculate=function(){
var size = ($('img.img_gallery').eq(0).height() / 2);
$scope.maxHeight = (size + 18);
$('img.img_gallery').each(function() {
if ($(this).height() > $scope.maxHeight) {
$scope.maxHeight = $(this).height();
}
});
return '-' + $scope.maxHeight + 'px';
};
$scope.navArrowWidth = function(){
return $('#gallery_display').width() + 'px';
};
};
return promise;
});
_ui_share_app.directive('productDetailPageG', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageG';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
headerheight: '@headerheight',
controlbutton : '@controlbutton',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
/* Get product id from url or from component */
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
$scope.data = false;
$scope.dataPreserve = false;
/* Get data by product id */
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
console.log("testtest",$scope.data);
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
/*$scope.buildDataProductRelate($scope._getPostIdFromURL());*/
}
});
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
/*$scope.makeVariantsClick();*/
$scope.makeVaraintsClick_Normal();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.onClickVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
/* Select FIrst Varaint (SELECT) */
$scope.makeVariantsClick = function(){
var s = $timeout(function(){
$timeout.cancel(s);
$('select.variantSelector').each(function(idx,obj){
var optionElementFirst = $(this).find('option[data-index="'+idx+'"]').eq(0);
optionElementFirst.prop("selected",true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
/* Select FIrst Varaint (Normal click) */
$scope.makeVaraintsClick_Normal = function(){
$timeout(function(){
$('div.variantSelector').each(function(idx,obj){
$(this).find('[data-index="'+idx+'"]').eq(0).click();
});
},2000);
};
$scope.checkColorConfig = function(){
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function () {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
adaptiveHeight: true,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if($('[data-key="'+$scope._uniqueKey+'"]').not('.slick-initialized')){
$timeout(function(){
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.qty_original=1;
$scope.qty_current=1;
$scope.getShopName = function(){
return (typeof tttt !== 'undefined') ? tttt.shop_name : '';
};
/* Click SLick Item */
$scope.slickGoto = function (idx) {
setTimeout(function () {
$('#gallery_slider').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.navArrowsCalculate=function(){
var size = ($('img.img_gallery').eq(0).height() / 2);
var n = (size + 18) + 20;
return '-' + n + 'px';
};
$scope.navArrowWidth = function(){
return $('#gallery_slider').width() + 'px';
};
};
return promise;
});
_ui_share_app.directive('productDetailPageGrip', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageGrip';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0
};
$scope.login = function() {
var login = {
showLogin: function() {
return UiCustomerBox.delegate.get.isLogin();
},
isLogin: function(callback) {
callback(UiCustomerBox.delegate.get.isLogin());
},
totalAmount: function() {
return UiCart.delegate.get.totalAmount() || 0;
},
pageLogin: function() {
var _self = this;
_self.isLogin(function(isLogin) {
if (!isLogin) {
$inloginPopupTypeGrip.open();
}
});
}
}
return login;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
}
}
}
return quantity;
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getDataArrayOk: function(output, callback) {
var state = false;
if (output.ok == 1) {
state = true;
callback(output, state);
}
callback(output, state);
},
quantity: function(product_stock_track_type_id, product_total_stock, callback) {
var total_stock = 0;
/* if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
} */
if (product_stock_track_type_id == "0") {
total_stock = 20;
} else if (product_stock_track_type_id == "1") {
if (product_total_stock > 0) {
total_stock = product_total_stock;
} else {
total_stock = 0;
}
}
callback(total_stock);
},
main: function() {
var _self = this;
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
_self.consoleLog("getDataProductArray : output : ", output.data);
_self.getDataArrayOk(output, function(output, state) {
if (state) {
_self.quantity(output.data.product_stock_track_type_id, output.data.product_total_stock, function(total_stock) {
$scope.dataProductBuy.quantity_max = (total_stock >= 5) ? 5 : total_stock;
_self.consoleLog("getDataProductArray : output : ", output.data);
$scope.dataArray = output.data;
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
$scope.dataArrayState = _self.stateData(false, true);
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
});
});
} else {
$scope.dataArrayState = _self.stateData(false, true);
}
});
});
}
}
return data;
};
$scope.getDataArray().main();
};
return promise;
});
_ui_share_app.directive('productDetailPageH', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageH';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
headerheight: '@headerheight',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
/*angular.element($window).bind('load',function(){
$('.video_container .video_display').click();
});*/
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* JQ: Scroll event */
angular.element($window).bind('scroll',function(){
if(!$scope.data){
return;
}
var curPos = ($(document).scrollTop());
var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));
console.debug("Cur pos", curPos, properHeight);
if(curPos > properHeight){
angular.element('.block-background .bottom-info').addClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
$scope.data = false;
$scope.dataPreserve = false;
/* Get product id from url or from component */
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* Get data by product id */
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
/*$scope.buildDataProductRelate($scope._getPostIdFromURL());*/
}
});
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
/*$scope.makeVariantsClick();*/
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
$scope.makeVariantsClick = function(){
var s = $timeout(function(){
$timeout.cancel(s);
$('select.variantSelector').each(function(idx,obj){
var optionElementFirst = $(this).find('option[data-index="'+idx+'"]').eq(0);
optionElementFirst.prop("selected",true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope.checkColorConfig = function(){
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function () {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if($('[data-key="'+$scope._uniqueKey+'"]').not('.slick-initialized')){
$timeout(function(){
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.qty_original=1;
$scope.qty_current=1;
$scope.qty_change = function(i){
$scope.qty_current = i;
console.log("qty_current", i);
};
};
return promise;
});
_ui_share_app.directive('productDetailPageHub', function($rootScope, $routeParams, $location, sliderProvider) {
var templateName = 'productDetailPageHub';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon: '@icon',
stylebutton: '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
state: true,
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
state: true,
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log("productDetailPageHub : ", name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
checkAttributeOption: function(attributeOption, attributeOptionLength, callback) {
var _self = this;
var attribute = (attributeOption.length == attributeOptionLength) ? true : false;
for (var i = 0; i < attributeOption.length; i++) {
_self.consoleLog("checkAttributeOption : attributeOption[i] : ", attributeOption[i]);
if (attributeOption[i] == undefined) {
attribute = false;
}
}
callback(attribute);
},
findVariantsData: function(attributeOption, dataVariants, attributeOptionLength, callback) {
var _self = this;
_self.consoleLog("findVariantsData : attributeOption : ", attributeOption);
_self.consoleLog("findVariantsData : dataVariants : ", dataVariants);
_self.consoleLog("findVariantsData : attributeOptionLength : ", attributeOptionLength);
_self.checkAttributeOption(attributeOption, attributeOptionLength, function(res_attribute_option) {
_self.consoleLog("checkAttributeOption : callback : res_attribute_option ", res_attribute_option);
var variantsOut = [];
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : dataVariants[i] : ", dataVariants[i]);
variantsOut = dataVariants[i];
break;
}
}
callback(variantsOut, res_attribute_option);
});
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var _self = this;
var state = true;
_self.consoleLog("checkTotalStock : index : ", stateIn);
_self.consoleLog("checkTotalStock : quantity_max : ", quantity_max);
if (stateIn == false && quantity_max > 0) {
state = false;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, $scope.attribute.attributeOption.length, function(variantsOut, res_attribute_option) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
_self.consoleLog("onClickOption : if : findVariantsData : res_attribute_option : ", res_attribute_option);
if (variantsOut.length != 0 && res_attribute_option) {
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataProductBuy.price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
if (variantsOut.variant_image != 0) {
if ($scope.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataArray.product_image.length; i++) {
$scope.dataArray.product_image[i].image_id
if ($scope.dataArray.product_image[i].image_id == variantsOut.variant_image[0].image_id) {
$scope.slickImageGoto(i);
}
}
}
}
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
} else if (variantsOut.length == 0 && res_attribute_option) {
$scope.dataArray.product_id = 0;
$scope.dataArray.product_sku = '';
$scope.dataProductBuy.price = 0;
$scope.dataArray.product_compare_price = 0;
$scope.dataProductBuy.quantity_max = 1;
$scope.buy.state = true;
$scope.buy.attribute = true;
}
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 100);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log('productDetailPageHub : ', name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
var state_info = (input.product_is_more_info == 1) ? true : false;
callback(description, info, state_info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = true;
if (stateIn == true && quantity_max > 0) {
state = false;
}
callback(state);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
checkPriceMin: function(variant, callback) {
var _self = this;
var priceMin = parseFloat(variant[0].price);
var comparePriceMin = parseFloat(variant[0].compare_price);
for (var i = 0; i < variant.length; i++) {
_self.consoleLog('checkPriceMin : priceMin : ', priceMin);
_self.consoleLog('checkPriceMin : variant[i].price : ', variant[i].price);
if (priceMin >= parseFloat(variant[i].price)) {
priceMin = parseFloat(variant[i].price);
comparePriceMin = parseFloat(variant[i].compare_price);
}
}
callback(priceMin, comparePriceMin);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
if (output.data.length != 0) {
_self.consoleLog(" : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info, state_info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
$scope.showTab.dataTab[1].state = state_info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
if (variants_total > 0) {
_self.checkPriceMin(variants, function(res_price, res_compare_price) {
$scope.dataProductBuy.price = res_price;
$scope.dataProductBuy.sumprice = res_price;
$scope.dataArray.product_compare_price = res_compare_price;
});
} else {
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
}
});
});
});
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
} else {
window.history.back();
}
});
}
}
return data;
};
$scope.getDataArray().main();
$scope.tab_id = 0;
$scope.tabId = function(id) {
$scope.tab_id = id;
};
$scope.routeParams = function() {
return $routeParams || false;
};
$scope.categoriesData = $scope.routeParams().referral_id || '';
$scope.setDataCategories = function(input) {
$scope.categoriesData = input;
var page = "category-lists";
if (typeof $scope.categoriesData != 'undefined' && $scope.categoriesData !== "") {
page += '?root_id=' + '0';
page += '&referral_id=' + $scope.categoriesData;
} else {
delete $scope.categoriesDat;
}
$location.url(page).replace();
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
};
return promise;
});_ui_share_app.directive('productDetailPageI', function ($rootScope, $routeParams, sliderProvider, $http) {
var templateName = 'productDetailPageI';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
background:'@background',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.data = false;
$scope.dataPreserve = false;
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
if(CUR_THEME.data.shop_id == "395"){
var req = {
url:"https://gaedemo101.getappeasy.com/store/api/v1/product/id?txt_product_id="+$scope._getPostIdFromURL(),
method: "GET",
};
$http(req).then(function(res){
if(res.data.ok == 1){
var e = res.data;
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope.id);
}
});
} else {
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
}
});
}
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 6,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
/*$scope.makeVariantsClick();*/
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
if($index == 0 && option_id == ''){
return GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
console.log("onSelectVariantItems: Yes", $scope.dataPreserve);
};
$rootScope.$on('repeatend',function(){
/* Slider Send */
var optionsParmas = {
autoplay:true,
slidesToShow:1,
slidesToScroll:1,
dots:false,
arrows:false,
infinite:true
};
var extraOptions = {
animate: false
};
$timeout(function(){
sliderProvider("#gallery_slider", optionsParmas, "", "", extraOptions);
},500);
});
/* Slick Events */
$scope._slickGoLeft = function () {
setTimeout(function () {
$('#gallery_slider').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
setTimeout(function () {
$('#gallery_slider').slick('slickNext');
}, 100);
};
/* Click SLick Item */
$scope.slickGoto = function (idx) {
setTimeout(function () {
$('#gallery_slider').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.navArrowsCalculate=function(){
var size = (500 / 2);
var n = (size + 18) + 20;
return '-' + n + 'px';
};
$scope.navArrowWidth = function(){
return $('#gallery_slider').width() + 'px';
};
};
return promise;
});
_ui_share_app.directive('productDetailPageInfo', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageInfo';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon: '@icon',
stylebutton: '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log("productDetailPageMaeju : ", name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
checkAttributeOption: function(attributeOption, attributeOptionLength, callback) {
var _self = this;
var attribute = (attributeOption.length == attributeOptionLength) ? true : false;
for (var i = 0; i < attributeOption.length; i++) {
_self.consoleLog("checkAttributeOption : attributeOption[i] : ", attributeOption[i]);
if (attributeOption[i] == undefined) {
attribute = false;
}
}
callback(attribute);
},
findVariantsData: function(attributeOption, dataVariants, attributeOptionLength, callback) {
var _self = this;
_self.consoleLog("findVariantsData : attributeOption : ", attributeOption);
_self.consoleLog("findVariantsData : dataVariants : ", dataVariants);
_self.consoleLog("findVariantsData : attributeOptionLength : ", attributeOptionLength);
_self.checkAttributeOption(attributeOption, attributeOptionLength, function(res_attribute_option) {
_self.consoleLog("checkAttributeOption : callback : res_attribute_option ", res_attribute_option);
var variantsOut = [];
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : dataVariants[i] : ", dataVariants[i]);
variantsOut = dataVariants[i];
break;
}
}
callback(variantsOut, res_attribute_option);
});
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var _self = this;
var state = true;
_self.consoleLog("checkTotalStock : index : ", stateIn);
_self.consoleLog("checkTotalStock : quantity_max : ", quantity_max);
if (stateIn == false && quantity_max > 0) {
state = false;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, $scope.attribute.attributeOption.length, function(variantsOut, res_attribute_option) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
_self.consoleLog("onClickOption : if : findVariantsData : res_attribute_option : ", res_attribute_option);
if (variantsOut.length != 0 && res_attribute_option) {
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataProductBuy.price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
if (variantsOut.variant_image != 0) {
if ($scope.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataArray.product_image.length; i++) {
$scope.dataArray.product_image[i].image_id
if ($scope.dataArray.product_image[i].image_id == variantsOut.variant_image[0].image_id) {
$scope.slickImageGoto(i);
}
}
}
}
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
} else if (variantsOut.length == 0 && res_attribute_option) {
$scope.dataArray.product_id = 0;
$scope.dataArray.product_sku = '';
$scope.dataProductBuy.price = 0;
$scope.dataArray.product_compare_price = 0;
$scope.dataProductBuy.quantity_max = 1;
$scope.buy.state = true;
$scope.buy.attribute = true;
}
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 100);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log('productDetailPageMaeju : ', name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = true;
if (stateIn == true && quantity_max > 0) {
state = false;
}
callback(state);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
checkPriceMin: function(variant, callback) {
var _self = this;
var priceMin = parseFloat(variant[0].price);
var comparePriceMin = parseFloat(variant[0].compare_price);
for (var i = 0; i < variant.length; i++) {
_self.consoleLog('checkPriceMin : priceMin : ', priceMin);
_self.consoleLog('checkPriceMin : variant[i].price : ', variant[i].price);
if (priceMin >= parseFloat(variant[i].price)) {
priceMin = parseFloat(variant[i].price);
comparePriceMin = parseFloat(variant[i].compare_price);
}
}
callback(priceMin, comparePriceMin);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
if (output.data.length != 0) {
_self.consoleLog(" : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
if (variants_total > 0) {
_self.checkPriceMin(variants, function(res_price, res_compare_price) {
$scope.dataProductBuy.price = res_price;
$scope.dataProductBuy.sumprice = res_price;
$scope.dataArray.product_compare_price = res_compare_price;
});
} else {
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
}
});
});
});
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
} else {
window.history.back();
}
});
}
}
return data;
};
$scope.getDataArray().main();
$scope.tab_id = 0;
$scope.tabId = function(id) {
$scope.tab_id = id;
};
$scope.routeParams = function() {
return $routeParams || false;
};
$scope.categoriesData = $scope.routeParams().referral_id || '';
$scope.setDataCategories = function(input) {
$scope.categoriesData = input;
var page = "category-lists";
if (typeof $scope.categoriesData != 'undefined' && $scope.categoriesData !== "") {
page += '?root_id=' + '0';
page += '&referral_id=' + $scope.categoriesData;
} else {
delete $scope.categoriesDat;
}
$location.url(page).replace();
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
};
return promise;
});
_ui_share_app.directive('productDetailPageK', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageK';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name:'@name',
imgpath: '@imgpath',
id:'@id',
headerheight:'@headerheight',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.getWindowsFit = function(){
var h = (typeof $scope.headerheight !== 'udnefined' && $scope.headerheight != '') ? $scope.headerheight : 80;
var a = $(window).height() - 80;
return a;
};
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
angular.element($window).bind('scroll',function(){
var curPos = ($(document).scrollTop());
/*var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));*/
var properHeight = $scope.getWindowsFit() * Math.abs(($('div.img_cover').length - 1));
console.log("Cur pos",curPos, properHeight);
if(curPos > properHeight){
angular.element('.block-background .bottom-info').addClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
var optionsParmas = {
autoplay:true,
slidesToShow:1,
slidesToScroll:1,
dots:true,
arrows:false,
infinite:true
};
var extraOptions = {
animate: false
};
$timeout(function(){
sliderProvider("#gallery-slider-1", optionsParmas, "", $scope._uniqueKey, extraOptions);
},1000);
$scope.status_done = true;
if(CUR_THEME.data.shop_id == "395"){
var req = {
url:"https://gaedemo101.getappeasy.com/store/api/v1/product/id?txt_product_id="+$scope._getPostIdFromURL(),
method: "GET",
};
$http(req).then(function(res){
if(res.data.ok == 1){
var e = res.data;
$scope._data_product_id = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope.id);
}
});
} else {
$('.load-effect').addClass('is-active');
$scope.status_done = true;
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
setTimeout(function () {
$scope.status_done = false;
}, 300);
$scope._data_product_id = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
setTimeout(function () {
$('.load-effect').addClass('de-active');
}, 300);
setTimeout(function () {
$('.load-effect').addClass('loaded');
$('.load-effect').removeClass('is-active de-active');
$('.load-effect').removeClass('loaded');
$('html').removeClass('noscroll noscroll-long');
}, 1300);
}
});
}
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 6,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
/*$scope.makeVariantsClick();*/
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
if($index == 0 && option_id == ''){
return GAEAPI.get('product/id',{'txt_product_id':$scope.id}).then(function(e){
if(e.ok == 1){
$scope._data_product_id = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
$scope._data_product_id.product_sku = dataVariants[i].sku;
$scope._data_product_id.product_price = dataVariants[i].price;
$scope._data_product_id.product_id = dataVariants[i].product_id;
$scope._data_product_id.product_compare_price = dataVariants[i].compare_price;
break;
}
}
console.log("onSelectVariantItems: Yes", $scope.dataPreserve);
};
};
return promise;
});
_ui_share_app.directive('productDetailPageKrthai', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageKrthai';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
buyicon: '@buyicon',
buytext: '@buytext',
viewcarttext: '@viewcarttext',
buylogin: '@buylogin',
currency: '@currency',
checkstaff: '@checkstaff',
language: '@language',
btnstyle: '@btnstyle',
maxstock: '@maxstock',
videotext: '@videotext',
description: '@description',
info: '@info',
specification: '@specification',
textbrand:'@textbrand',
navigationhover: '@navigationhover',
imageappcoverchecked: '@imageappcoverchecked',
categorylists:'@categorylists',
categorylistsurl: '@categorylistsurl',
backpage: '@backpage',
backpageurl: '@backpageurl',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $location) {
$scope._console = (window.location.hostname == "localhost") ? true : false;
$scope._component = "productDetailPageKrthai";
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
/* scope */
$scope._name = ($scope.name != undefined && $scope.name != "") ? $scope.name : "default";
$scope._buycol = ($scope.buycol != undefined && $scope.buycol != "") ? parseInt($scope.buycol) : 15;
$scope._maxstock = ($scope.maxstock != undefined && $scope.maxstock != "") ? parseInt($scope.maxstock) : 20;
$scope._categorylistsurl = ($scope.categorylistsurl != undefined && $scope.categorylistsurl != "") ? $scope.categorylistsurl : "category-lists";
$scope._btnstyle = ($scope.btnstyle != undefined && $scope.btnstyle != "") ? $scope.btnstyle : "filled_button_large";
$scope._buylogin = ($scope.buylogin == "true" || $scope.buylogin == "t") ? true : false;
$scope._checkstaff = ($scope.checkstaff == "true" || $scope.checkstaff == "t") ? true : false;
$scope._categorylists = ($scope.categorylists != undefined && $scope.categorylists != "") ? $scope.categorylists : "สินค้า";
$scope._currency = ($scope.currency != undefined && $scope.currency != "") ? $scope.currency : "THB";
$scope._buyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope.buyicon : "icnt_outline_cart01_dark.png";
$scope._buytext = ($scope.buytext != undefined && $scope.buytext != "") ? $scope.buytext : "เพิ่มในรถเข็น";
$scope._viewcarttext = ($scope.viewcarttext != undefined && $scope.viewcarttext != "") ? $scope.viewcarttext : "ดูรถเข็น";
$scope._videotext = ($scope.videotext != undefined && $scope.videotext != "") ? $scope.videotext : "Video";
$scope._icebuyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope._icnPath + $scope.buyicon : $scope._icnPath + "icnt_outline_cart01_dark.png";
$scope._language = ($scope.language != undefined && $scope.language != "") ? (($scope.language == "en") ? "en" : "th") : "th";
$scope._textbrand = ($scope.textbrand != undefined && $scope.textbrand != "") ? $scope.textbrand : "Brand";
$scope._navigationhover = ($scope.navigationhover != undefined && $scope.navigationhover != "") ? $scope.navigationhover : "primary";
$scope._imageappcoverchecked = ($scope.imageappcoverchecked == "true" || $scope.imageappcoverchecked == "t") ? true : false;
$scope._backpage = ($scope.backpage != undefined && $scope.backpage != "") ? $scope.backpage : "";
$scope._backpageurl = ($scope.backpageurl != undefined && $scope.backpageurl != "") ? $scope.backpageurl : "";
/* scope */
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getNamePage: function(arr) {
var str = [];
for (var i = 0; i < arr.length; i++) {
if (i != 0) {
str.push(arr[i]);
}
}
return str.join(" ");
},
getProductId: function(params, callback) {
var _self = this;
var product_id = (params.product_id != undefined) ? params.product_id.split("-", 1).join("") : false;
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
getReferralId: function(productReferralDisplay, callback) {
var _self = this;
var referral_id = 0;
if (productReferralDisplay.length != 0) {
if (productReferralDisplay.category != undefined) {
if (productReferralDisplay.category.length != 0) {
referral_id = productReferralDisplay.category[0].referral_id
}
}
}
callback(referral_id);
},
getStaffId: function(staffId, callback) {
var _self = this;
var res_staff = {
staff_id: (staffId != 0 && staffId != '' && staffId != undefined) ? staffId : '0',
status: (staffId != 0 && staffId != '' && staffId != undefined) ? true : false
}
callback(res_staff);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getCarousel = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carouselA: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
fade: true,
dots: false,
arrows: false,
infinite: true,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselB: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: true,
arrows: true,
infinite: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselD: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: true,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselBar: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: false,
infinite: false,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 6,
slidesToScroll: 6,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 5,
slidesToScroll: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 4,
slidesToScroll: 4,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
}
}]
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
slickCarousel: function(carousel, index) {
var _self = this;
$scope.setCarousel.index = index;
setTimeout(function() {
$('[data-key="' + carousel + '"]').slick('slickGoTo', index);
}, 100);
},
prevIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != 0) ? image_index - 1 : image - 1;
_self.consoleLog("prevIndex index", $scope.setCarousel.index);
},
nextIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != (image - 1)) ? image_index + 1 : 0;
_self.consoleLog("nextIndex index", $scope.setCarousel.index);
}
}
return getFunction;
};
$scope.getAttribute = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
productAttribute: function(productAttribute, callback) {
var _self = this;
var attribute = {
option_name: "",
option_attribute: []
};
if (productAttribute.option_data != undefined) {
if (productAttribute.option_data.variant_array != undefined && productAttribute.option_data.variant_array.length != 0) {
for (var a = 0; a < productAttribute.option_data.pclass_array.length; a++) {
attribute.option_name = attribute.option_name.concat(productAttribute.option_data.pclass_array[a].pclass_name, " ");
}
for (var b = 0; b < productAttribute.option_data.variant_array.length; b++) {
var product_attribute = {
product_id: productAttribute.option_data.variant_array[b].product_id,
product_sku: productAttribute.option_data.variant_array[b].sku,
product_title: "",
product_price: parseFloat(productAttribute.option_data.variant_array[b].price),
product_compare_price: parseFloat(productAttribute.option_data.variant_array[b].compare_price),
product_total_stock: parseFloat(productAttribute.option_data.variant_array[b].total_stock),
product_image: productAttribute.option_data.variant_array[b].variant_image
}
for (var c = 0; c < productAttribute.option_data.variant_array[b].option_name_array.length; c++) {
product_attribute.product_title = product_attribute.product_title.concat(productAttribute.option_data.variant_array[b].option_name_array[c], " ");
}
attribute.option_attribute.push(product_attribute);
}
}
}
_self.consoleLog("productAttribute attribute ", attribute);
callback(attribute);
},
checkDiscountPrice: function(productDiscount, resPrice, resComparePrice, callback) {
var _self = this;
var price = 0;
var compare_price = 0;
if (productDiscount.length == 0) {
price = parseFloat(resPrice);
compare_price = parseFloat(resComparePrice);
} else {
if (productDiscount.discount_type_id == '101') {
price = parseFloat(resPrice) - parseFloat(productDiscount.discount_price);
compare_price = parseFloat(resPrice);
} else if (productDiscount.discount_type_id == '102') {
price = (parseFloat(resPrice) * ((100 - parseFloat(productDiscount.discount_percent)) / 100));
compare_price = parseFloat(resPrice);
}
}
callback(price, compare_price);
},
checkMinPrice: function(option, callback) {
var _self = this;
var price_min = parseFloat(option.option_attribute[0].product_price);
var compare_price_min = parseFloat(option.option_attribute[0].product_compare_price);
var total_stock = parseFloat(option.option_attribute[0].product_total_stock);
for (var a = 0; a < option.option_attribute.length; a++) {
if (price_min >= parseFloat(option.option_attribute[a].product_price)) {
price_min = parseFloat(option.option_attribute[a].product_price);
compare_price_min = parseFloat(option.option_attribute[a].product_compare_price);
total_stock = parseFloat(option.option_attribute[a].product_total_stock);
}
}
_self.consoleLog("checkPriceMin price_min ", price_min);
_self.consoleLog("checkPriceMin compare_price_min ", compare_price_min);
_self.consoleLog("checkPriceMin total_stock ", total_stock);
callback(price_min, compare_price_min, total_stock);
},
getTotalStock: function(totalStock, mixStock, callback) {
var _self = this;
var total_stock = (totalStock > 0) ? ((totalStock <= mixStock) ? totalStock : mixStock) : ((totalStock == -1) ? mixStock : totalStock);
callback(total_stock);
},
checkMinPrices: function(api, attribute, callback) {
var _self = this;
var dataPrice = {
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
}
}
if (attribute.option_attribute.length == 0) {
_self.checkDiscountPrice(api.data.product_discount, api.data.product_price, api.data.product_compare_price, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(api.data.product_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, false);
});
});
});
});
});
} else {
_self.checkMinPrice(attribute, function(res_price_min, res_compare_price_min, res_total_stock) {
_self.checkDiscountPrice(api.data.product_discount, res_price_min, res_compare_price_min, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(res_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, true);
});
});
});
});
});
});
}
},
priceIncludes: function(price, includes, callback) {
var _self = this;
var priceToString = (price == null) ? 0 : price;
_self.consoleLog('priceIncludes priceToString : ', priceToString);
callback(priceToString.toString().includes(includes));
},
checkPrice: function(price, callback) {
var _self = this;
_self.priceIncludes(price, '.', function(res) {
_self.consoleLog("checkPrice res ", res);
callback((!res) ? 0 : 2);
});
},
onSelectOption: function(productId) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = productId;
_self.consoleLog("onSelectOption productId ", productId);
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
for (var a = 0; a < $scope.data.attribute.dataArray.option_attribute.length; a++) {
_self.consoleLog("onSelectOption option_attribute ", $scope.data.attribute.dataArray.option_attribute[a]);
if ($scope.data.attribute.dataArray.option_attribute[a].product_id == productId) {
if ($scope.data.attribute.dataArray.option_attribute[a].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var b = 0; b < $scope.dataApi.product.dataArray.product_image.length; b++) {
if ($scope.dataApi.product.dataArray.product_image[b].image_id == $scope.data.attribute.dataArray.option_attribute[a].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, b);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[a].product_price, $scope.data.attribute.dataArray.option_attribute[a].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[a].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
break;
}
}
},
onClickOption: function(index) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.data.attribute.productId = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
if ($scope.data.attribute.dataArray.option_attribute[index].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataApi.product.dataArray.product_image.length; i++) {
if ($scope.dataApi.product.dataArray.product_image[i].image_id == $scope.data.attribute.dataArray.option_attribute[index].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, i);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[index].product_price, $scope.data.attribute.dataArray.option_attribute[index].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[index].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
}
}
return getFunction;
};
$scope.getAttributeCustom = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
createArray: function(productCustomTemplates, callback) {
var _self = this;
var custom_attributes = [];
if (productCustomTemplates.templates.length != 0) {
angular.forEach(productCustomTemplates.templates, function(item, index) {
if (item.option_sets.length != 0) {
_self.getAttributes(item.option_sets, function(res_attributes) {
custom_attributes = custom_attributes.concat(res_attributes);
});
}
});
/* if (productCustomTemplates.templates[0].option_sets.length != 0) {
_self.getAttributes(productCustomTemplates.templates[0].option_sets, function(res_attributes) {
custom_attributes = res_attributes;
});
} */
}
_self.consoleLog("createArray : productCustomTemplates", productCustomTemplates);
_self.consoleLog("createArray : custom_attributes", custom_attributes);
callback(custom_attributes, true);
},
formatAttribute: function(index, optionSubsetIndex, setType, optionSetArray, callback) {
var _self = this;
var set_id = (setType == 'attribute') ? optionSetArray.set_id : optionSetArray.subset_id;
var attribute = {
attribute_index: index,
attribute_option_subset_index: optionSubsetIndex,
active_option_id: (optionSetArray.option_data.select_id != 0) ? optionSetArray.option_data.select_id : "-1",
active_option_index: -1,
active_option_index_str: "-1",
active_textarea: "",
active_array: [],
set_id: set_id,
name: optionSetArray.name,
set_type: optionSetArray.ss_type,
option: []
}
callback(attribute);
},
getOption: function(index, optionDataArray, callback) {
var _self = this;
var options = {
index: index,
ss_data_id: optionDataArray.ss_data_id,
name: optionDataArray.name,
image: optionDataArray.image,
price: optionDataArray.price,
compare_price: 0,
total_stock: 0
}
callback(options);
},
getActive: function(index, activeOptionId, activeOptionIdIn, optionDataArray, callback) {
var _self = this;
var actives_index = (optionDataArray.ss_data_id == activeOptionId) ? index : activeOptionIdIn;
var actives = (optionDataArray.ss_data_id != activeOptionId) ? "0" : "1";
callback(actives_index, actives);
},
getAttributes: function(optionSetArray, callback) {
var _self = this;
var attributes = [];
for (var index = 0; index < optionSetArray.length; index++) {
_self.formatAttribute(index, 0, 'attribute', optionSetArray[index], function(res_attribute) {
if (optionSetArray[index].option_subsets.length != 0) {
for (var option_subset_index = 0; option_subset_index < optionSetArray[index].option_subsets.length; option_subset_index++) {
_self.formatAttribute(index, option_subset_index, res_attribute.set_type, optionSetArray[index].option_subsets[option_subset_index], function(res_attribute_sub) {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_subsets[option_subset_index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute_sub.active_option_id, active_option_id, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute_sub.option = options;
res_attribute_sub.active_option_index = active_option_id;
res_attribute_sub.active_option_index_str = String(active_option_id);
res_attribute_sub.active_array = active_option_array;
attributes.push(res_attribute_sub);
});
}
} else {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute.active_option_id, active_option_id, optionSetArray[index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute.option = options;
res_attribute.active_option_index = active_option_id;
res_attribute.active_option_index_str = String(active_option_id);
res_attribute.active_array = active_option_array;
attributes.push(res_attribute);
}
});
}
callback(attributes)
},
getformatQuantity: function(index, attributeCustom, callback) {
var _self = this;
var quantity = {
name: String(index + 1),
dataArray: attributeCustom
}
callback(quantity);
},
onClickRadio: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickRadio : index", index);
_self.consoleLog("onClickRadio : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickRadio : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickDropdown: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickDropdown : index", index);
_self.consoleLog("onClickDropdown : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickDropdown : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickCheckbox: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickCheckbox : index", index);
_self.consoleLog("onClickCheckbox : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i == parseInt(index_option)) ? (($scope.data.attribute_custom.dataArray[index].active_array[i] != "0") ? "0" : "1") : $scope.data.attribute_custom.dataArray[index].active_array[i];
}
_self.consoleLog("onClickCheckbox : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
}
}
return getFunction;
};
$scope.getReward = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
momentUnix: function(callback) {
var _self = this;
var now = moment().unix();
callback(now);
},
getCalculator: function(sumProductPrice, reward, callback) {
var _self = this;
_self.consoleLog("getCalculator : sumProductPrice", sumProductPrice);
_self.consoleLog("getCalculator : reward", reward);
var point_reward = 0;
if (reward.type_id == "100") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
} else if (reward.type_id == "101") {
point_reward = reward.reward_amount;
} else if (reward.type_id == "102") {
point_reward = (reward.reward_percent * sumProductPrice.price) / 100;
} else if (reward.type_id == "103") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
}
_self.consoleLog("getCalculator : point_reward", point_reward);
callback(point_reward);
},
getProductReward: function(now, productReward, callback) {
var _self = this;
var reward = {
reward_length: (productReward.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(productReward.reward_lifetime.lifetime_start_time);
reward.lifetime_end_time = parseInt(productReward.reward_lifetime.lifetime_end_time);
reward.type_id = productReward.reward_type_id;
reward.amount = parseInt(productReward.reward_amount);
reward.percent = parseInt(productReward.reward_percent);
reward.every_price = parseInt(productReward.reward_every_price);
}
_self.consoleLog("getProductReward : reward", reward);
callback(reward);
},
getPointConfig: function(now, shopPointConfig, callback) {
var _self = this;
var reward = {
reward_length: (shopPointConfig.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(shopPointConfig.er_from);
reward.lifetime_end_time = parseInt(shopPointConfig.er_to);
reward.type_id = "100";
reward.amount = parseInt(shopPointConfig.er_earn);
reward.every_price = parseInt(shopPointConfig.er_rate);
}
_self.consoleLog("getPointConfig : reward", reward);
callback(reward);
},
checkPointReward: function(reward, callback) {
var _self = this;
var state = false;
if (reward.reward_length) {
var start = reward.lifetime_start_time < reward.lifetime_time && reward.lifetime_start_time != 0;
var end = (reward.lifetime_end_time != -1) ? reward.lifetime_time <= reward.lifetime_end_time && reward.lifetime_end_time != 0 : true;
if (start && end) {
if (reward.type_id == "100") {
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
} else if (reward.type_id == "101") {
var amount = reward.amount != 0;
if (amount) {
state = true;
}
} else if (reward.type_id == "102") {
var percent = reward.percent != 0;
if (percent) {
state = true;
}
} else if (reward.type_id == "103") {
var percent = reward.percent != 0;
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
}
}
}
callback(state);
},
checkReward: function(rewardProduct, rewardPointConfig, callback) {
var _self = this;
_self.consoleLog("checkReward : rewardProduct", rewardProduct);
_self.consoleLog("checkReward : rewardPointConfig", rewardPointConfig);
var reward = {
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
_self.checkPointReward(rewardProduct, function(res_state_product) {
_self.checkPointReward(rewardPointConfig, function(res_state_point_config) {
if (res_state_point_config) {
reward.type_id = rewardPointConfig.type_id;
reward.type_id = rewardPointConfig.type_id;
reward.amount = rewardPointConfig.amount;
reward.percent = rewardPointConfig.percent;
reward.every_price = rewardPointConfig.every_price;
} else if (res_state_product) {
reward.type_id = rewardProduct.type_id;
reward.amount = rewardProduct.amount;
reward.percent = rewardProduct.percent;
reward.every_price = rewardProduct.every_price;
}
_self.consoleLog("checkReward : reward", reward);
callback(reward);
});
});
},
checkRewardType: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.momentUnix(function(now) {
_self.getProductReward(now, productReward, function(res_reward_product) {
_self.getPointConfig(now, shopPointConfig, function(res_reward_point_config) {
_self.checkReward(res_reward_product, res_reward_point_config, function(res_reward) {
callback(res_reward);
});
});
});
});
},
createReward: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.consoleLog("createReward : productReward", productReward);
_self.consoleLog("createReward : shopPointConfig", shopPointConfig);
_self.checkRewardType(productReward, shopPointConfig, function(res_reward) {
_self.consoleLog("createReward : res_reward", res_reward);
callback(res_reward);
});
}
}
return getFunction;
};
$scope.getQuantity = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
upDateReward: function() {
var _self = this;
},
upDateReward: function() {
var _self = this;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
},
upDatePrice: function() {
var _self = this;
var product_price = $scope.data.product_price.price * $scope.data.quantity.quantity_input;
var product_compare_price = $scope.data.product_compare_price.price * $scope.data.quantity.quantity_input;
$scope.getAttribute().checkPrice(product_price, function(res_price_ecimals) {
$scope.data.sum_product_price.price = product_price;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals;
$scope.getAttribute().checkPrice(product_compare_price, function(res_compare_price_ecimals) {
$scope.data.sum_product_compare_price.price = product_compare_price;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((product_compare_price - product_price) > 0) ? product_compare_price - product_price : 0;
$scope.getAttribute().checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.upDateReward();
});
});
});
},
input: function(quantityInput) {
var _self = this;
quantityInput = (quantityInput == null) ? 1 : parseInt(quantityInput);
_self.consoleLog("input : quantityInput", quantityInput);
if (quantityInput != null) {
if (quantityInput >= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_max;
}
if (quantityInput <= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
} else {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
_self.upDatePrice();
},
minus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input - 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_min", $scope.data.quantity.quantity_min);
if (quantity >= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
},
plus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input + 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_max", $scope.data.quantity.quantity_max);
if (quantity <= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
}
}
return getFunction;
};
$scope.getBuy = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = params.product_id.split("-", 1).join("");
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
postApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.post(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
UiCartProductAdd: function(productId, quantityInput, promotionId, customOptions, callback) {
quantityInput = (quantityInput > $scope.data.quantity.quantity_max) ? $scope.data.quantity.quantity_max : quantityInput;
UiCart.delegate.product.add(productId, quantityInput, promotionId, function(res_data) {
callback(res_data);
});
},
isLogin: function(callback) {
var buy_login = $scope._buylogin;
var is_login = UiCustomerBox.delegate.get.isLogin();
var is_state = (buy_login) ? (!is_login) ? true : false : false;
callback(is_state);
},
formLogin: function(is_state, callback) {
if (is_state) {
$inloginPopup.open();
}
callback(is_state);
},
getProductStaffId(staff_id_check, callback) {
var res_staff_id_check = staff_id_check;
var res_staff_id = $scope.dataApi.product.dataArray.product_staff_id;
var res_is_state = (res_staff_id != 0 && res_staff_id != '0' && res_staff_id != undefined) ? true : false;
callback(res_staff_id_check, res_staff_id, res_is_state);
},
isStaffId: function(staff_id_check, callback) { /* todo */
var _self = this;
_self.getProductStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
callback(res_staff_id_check, res_staff_id, res_is_state);
});
},
checkCartDuplicateStaff: function(res_staff_id_check, txt_staff_id, res_is_state, callback) {
var _self = this
var res_is_state = true;
if (res_staff_id_check) {
var dataSend = {
'txt_staff_id': txt_staff_id,
};
_self.dataSend("cart/duplicate_staff", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
res_is_state = res_api.data.duplicate;
callback(res_is_state);
});
});
} else {
callback(res_is_state);
}
},
showAlert: function(res_staff_id_check, res_staff_id, res_is_state, res_api, callback) {
var res_state = (res_staff_id_check) ? ((res_api) ? ((res_is_state) ? false : true) : true) : false;
if (res_state) {
if (!res_api) {
if (res_staff_id != '0' && res_staff_id != 0) {
$scope.controlAlert().alert('002');
} else {
$scope.controlAlert().alert('003');
}
} else {
if (!res_is_state) {
$scope.controlAlert().alert('003');
}
}
}
callback(res_state);
},
checkStaff: function(callback) {
var _self = this
var staff_id_check = $scope._checkstaff;
var res_check = false;
_self.isStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
_self.checkCartDuplicateStaff(res_staff_id_check, res_staff_id, res_is_state, function(res_api) {
_self.showAlert(res_staff_id_check, res_staff_id, res_is_state, res_api, function(res_state) {
res_check = res_state;
callback(res_check);
});
});
});
},
isProgress: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isProgress(productId)) ? true : false;
_self.consoleLog("isProgress : productId", productId);
_self.consoleLog("isProgress : state", state);
callback(state);
},
isSelected: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
_self.consoleLog("isSelected : productId", productId);
_self.consoleLog("isSelected : state", state);
callback(state);
},
isSelectedReturn: function(productId) {
var _self = this;
var ui_cart_state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
if (!$scope.setBuy.state_active) {
$scope.setBuy.state_active = true;
var state_process = $scope.setBuy.state_process;
var state_step = $scope.setBuy.state_step;
if (ui_cart_state && !state_process && state_step != 4) /* cart */ {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else if (!ui_cart_state && !state_process && state_step != 0) /* unset */ {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
} else {
$scope.setBuy.state_active = false;
}
}
return ui_cart_state;
},
updateState: function(productId) {
_self = this;
_self.isSelected(productId, function(res_state) {
if (res_state) {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
}
return res_state;
});
},
uiCart: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
_self.UiCartProductAdd(productId, quantityInput, promotionId, customOptions, function(res_data) {
if (res_data) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
}
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
},
postApiA: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
var custom_options = {};
var dataSend = {
'txt_product_id': productId,
'txt_amount': quantityInput,
'txt_is_clear_cart_before': "0",
'txt_custom_options_json': JSON.stringify(custom_options)
};
_self.dataSend("cart/product_add", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
if (res_ok) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
});
},
onProcess: function(data, productId, quantityInput, promotionId, customOptions) {
var _self = this;
_self.isLogin(function(res_is_login) {
_self.formLogin(res_is_login, function(res_form) {
_self.checkStaff(function(res_is_state) {
if (!$scope.setBuy.state_process && !res_form && !res_is_state) {
$scope.setBuy.state_process = true;
_self.isSelected(productId, function(res_state) {
if (!res_state) {
_self.onLoad($scope.setBuy.state_step, function(res_step) {
if (data.sum_product_price.price != 0 && data.quantity.quantity_max != 0 && (data.attribute.state == (data.attribute.productId != ''))) {
/* UiCart */
_self.uiCart(productId, quantityInput, promotionId, customOptions, res_step);
/* api post offline */
/*_self.postApiA(productId, quantityInput, promotionId, customOptions, res_step); */
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
} else {
$scope.setBuy.state_process = false;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
} else if ($scope._cart == "viewcart") {
_self.viewCart($scope._cart);
}
}
});
}
});
});
});
},
onTimeout: function(time, callback) {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
callback(true)
}, time);
},
onUnset: function(step, callback) {
var _self = this;
step = (step == 0) ? 0 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onLoad: function(step, callback) {
var _self = this;
step = (step == 0 || step == 1) ? 1 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onPass: function(step, callback) {
var _self = this;
step = (step == 1 || step == 2) ? 2 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onError: function(step, callback) {
var _self = this;
step = (step == 1 || step == 3) ? 3 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onCart: function(step, callback) {
var _self = this;
step = (step == 2 || step == 4) ? 4 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
trumpComponentCarts: function() {
var controlCart = share.getTrumpComponentCarts();
var component_carts = $('.cover-cards').hasClass('active');
if (!component_carts) {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.cart();
}
} else {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.load();
}
}
},
viewCart: function(viewcart) {
var _self = this;
_self.pageUrl(viewcart);
},
locationUrlReplace: function(page) {
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
main: function(callback) {
var _self = this;
}
}
return getFunction;
};
$scope.getDetail = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getDetail: function(api, callback) {
var _self = this;
var description = api.product_description;
var info = api.product_more_info;
var specificatio = api.product_custom_title;/* [] */
/* if (api.product_attribute.specification_data != undefined) {
specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? api.product_attribute.specification_data.pclass_array : [];
} */
var state_specificatio = true;/* false */
/* if (api.product_attribute.specification_data != undefined) {
state_specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? true : false;
}*/
var state_info = true;/* (api.product_is_more_info == 1) ? true : false; */
_self.consoleLog("getDetail : api", api);
_self.consoleLog("getDetail : description", description);
_self.consoleLog("getDetail : info", info);
_self.consoleLog("getDetail : state_info", state_info);
_self.consoleLog("getDetail : specificatio", specificatio);
_self.consoleLog("getDetail : state_specificatio", state_specificatio);
callback(description, info, state_info, specificatio, state_specificatio);
},
onClickDetail: function(index) {
var _self = this;
$scope.data.detail.active = index;
_self.consoleLog("onClickDetail : data.detail.active", $scope.data.detail.active);
}
}
return getFunction;
};
$scope.pages = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageName: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page_name);
},
pageUrl: function(page_name, id, name_url) {
var _self = this;
var page = page_name + "/" + id + "-" + name_url;
_self.locationUrlReplace(page);
}
}
return getFunction;
};
$scope.countDown = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getLocation: function(callback) {
var _self = this;
var res_location = $location;
_self.consoleLog("getLocation", "res_location", res_location);
callback(res_location);
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
_self.consoleLog("getRouteParams", "params", params);
callback(params);
},
getLocationUrlNameProductDetail: function(callback) {
var _self = this;
_self.getRouteParams(function(res_params) {
_self.getLocation(function(res_location) {
var url_page_name = "/product-detail/" + res_params.product_id;
var res_url_name_product_detail = (res_location.url() == url_page_name) ? true : false;
_self.consoleLog("getLocationUrlNameProductDeal", "res_url_name_product_detail", res_url_name_product_detail);
callback(res_url_name_product_detail);
});
});
},
getUnix: function(callback) {
var _self = this;
var now = moment().unix();
_self.consoleLog("getUnix", "now", now);
callback(now);
},
getCountDown: function(now, product_lifetime, callback) {
var _self = this;
var countdown_unix = parseInt(product_lifetime.lifetime_end_time) - now;
var milliseconds = moment.duration(countdown_unix * 1000, "milliseconds");
var res_countdown = ((milliseconds.days() <= 9) ? '0' + milliseconds.days() : milliseconds.days());
res_countdown = res_countdown + ' : ' + ((milliseconds.hours() <= 9) ? '0' + milliseconds.hours() : milliseconds.hours());
res_countdown = res_countdown + ' : ' + ((milliseconds.minutes() <= 9) ? '0' + milliseconds.minutes() : milliseconds.minutes());
res_countdown = res_countdown + ' : ' + ((milliseconds.seconds() <= 9) ? '0' + milliseconds.seconds() : milliseconds.seconds());
_self.consoleLog("getCountDown", "res_countdown", res_countdown);
callback(res_countdown, countdown_unix);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
countDownByProduct: function(now, data_array, callback) {
var _self = this;
if (data_array.length != 0) {
if (data_array.product_lifetime.length != 0) {
_self.getCountDown(now, data_array.product_lifetime, function(res_count_down, res_countdown_unix) {
data_array.product_lifetime.lifetime_countdown = (res_countdown_unix > 0) ? res_count_down : "";
if (data_array.product_lifetime.lifetime_countdown == "") {
_self.getNameUrl(data_array.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", data_array.product_set_array[0].product_id, res_name);
});
}
});
}
}
_self.consoleLog("countDownByProduct", "data_array", data_array);
callback(data_array);
},
loop: function() {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
_self.getUnix(function(res_now) {
_self.countDownByProduct(res_now, $scope.dataApi.product.dataArray, function(data_array) {
$scope.dataApi.product.dataArray = data_array;
_self.getLocationUrlNameProductDetail(function(res_url_name_product_detail) {
if (res_url_name_product_detail) {
_self.loop();
}
});
});
});
}, 1000);
}
}
return getFunction;
};
$scope.getPromotion = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
setPromotionId: function(promotion_id) {
var _self = this;
_self.consoleLog("setPromotionId", "promotion_id", promotion_id);
$scope.data.promotion.promotion_id = promotion_id;
_self.consoleLog("setPromotionId", "data.promotion.promotion_id", $scope.data.promotion.promotion_id);
},
}
return getFunction;
};
$scope.control = function() {
var getFunction = {
popupVideo: function(state, video_link, video_embed_code) {
var _self = this;
if (video_embed_code != '') {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
} else if (video_link != '') {
window.open(video_link, '_blank');
} else {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
}
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.data_control = {
page_video: {
popup: false,
shop_video_embed_code: ""
}
}
$scope.control_alert = {
alert: {
error_id: '',
index: null,
state: true,
error: [{
id: '001',
title: 'การสั่งซื้อ',
messages: 'สามารถสั่งซื้อได้เพียงทีละออเดอร์เท่านั้น'
}, {
id: '002',
title: 'การเพิ่มสินค้า',
messages: 'ไม่สามารถเพิ่มสินค้าของร้านมากกว่า 1 ร้านค้าได้'
}, {
id: '003',
title: 'การสั่งซื้อ',
messages: 'ไม่สามารถเพิ่มสินค้า(ไม่มีร้านค้า)'
}]
}
};
$scope.controlAlert = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getErrorMessages: function(error_id, callback) {
var _self = this;
var messages = {
res_error_id: '',
res_index: null
}
angular.forEach($scope.control_alert.alert.error, function(item, index) {
if (item.id == error_id) {
messages.res_error_id = item.id;
messages.res_index = index;
}
});
callback(messages.res_error_id, messages.res_index);
},
alert: function(error_id) {
var _self = this;
_self.getErrorMessages(error_id, function(res_error_id, res_index) {
$scope.control_alert.alert.error_id = res_error_id;
$scope.control_alert.alert.index = res_index;
$scope.control_alert.alert.state = (!$scope.control.alert && res_error_id != '') ? true : false;
});
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.countDown().loop();
/* set carousel */
$scope.setCarousel = {
carousel: 0,
index: 0
};
$scope.getCarousel().getCarousel($scope.setCarousel.carousel, function(res_carousel_id) {
$scope.setCarousel.carousel = res_carousel_id;
});
/* set carousel */
/* get product api */
$scope.dataApi = {
reward: {
dataSend: {},
api: "shop/current",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
staff: {
dataSend: {
txt_staff_id: 0
},
api: "staff/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
product: {
dataSend: {
txt_product_id: 0
},
api: "product/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
relation: {
dataSend: {
txt_referral_id: 0
},
api: "referral/relation",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.data = {
attribute: {
state: false,
productId: "",
dataArray: []
},
attribute_custom: {
state: false,
dataArray: []
},
reward: {
quantity_name: 'reward',
type_id: "0",
reward_amount: 0,
reward_percent: 0,
reward_every_price: 0,
point_reward: 0
},
quantity: {
quantity_name: 'quantity',
quantity_min: 1,
quantity_max: 1,
quantity_input: 1,
quantity_select: []
},
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
detail: {
active: '0',
dataArray: [{
index: '0',
state: true,
en: ($scope.description != undefined && $scope.description != "") ? $scope.description : 'Description',
th: '',
data: '',
dataArray: []
}, {
index: '1',
state: true,
en: ($scope.info != undefined && $scope.info != "") ? $scope.info : 'Info',
th: '',
data: '',
dataArray: []
}, {
index: '2',
state: true,
en: ($scope.specification != undefined && $scope.specification != "") ? $scope.specification : 'Specification',
th: '',
data: '',
dataArray: []
}]
},
promotion : {
promotion_id : '0'
}
};
$scope.setBuy = {
state_active: false,
state_process: false,
state_step: 0,
state_data_font_color: "",
state_data_background_color: "",
stepArray: [{
step: 0,
name: "unset",
icon: $scope._icebuyicon,
state: $scope._buytext,
data_font_color: "",
data_background_color: ""
}, {
step: 1,
name: "load",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 2,
name: "pass",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 3,
name: "error",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 4,
name: "cart",
icon: "",
state: $scope._viewcarttext,
data_font_color: "",
data_background_color: "primary_darkest"
}]
};
/* - get api product/id start - */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.product.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
$scope.dataApi.product.dataSend.txt_product_id = (res_product_id != false) ? res_product_id : 0;
$scope.getData().dataSend($scope.dataApi.product.api, $scope.dataApi.product.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_product, res_state) {
$scope.dataApi.product.ok = res_ok;
if ($scope._imageappcoverchecked) {
var images = [];
angular.forEach(get_res_api_product.data.product_image,function(image,index_image){
if (!image.image_app_cover_checked) {
images.push(image)
}
});
get_res_api_product.data.product_image = images;
}
angular.element('.load-effect').removeClass('is-active');
$scope.dataApi.product.dataArray = get_res_api_product.data;
$scope.getData().consoleLog("get_res_api_product", get_res_api_product);
$scope.dataApi.product.dataArrayState = res_state;
/* -- get api shop/current to reward -- */
if (res_ok) {
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getData().dataSend($scope.dataApi.reward.api, $scope.dataApi.reward.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_shop, res_state) {
$scope.dataApi.reward.ok = res_ok;
$scope.dataApi.reward.dataArray = get_res_api_shop.data;
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getReward().createReward($scope.dataApi.product.dataArray.product_reward, get_res_api_shop.data.shop_point_config, function(res_reward) {
$scope.data.reward.type_id = res_reward.type_id;
$scope.data.reward.reward_amount = res_reward.amount;
$scope.data.reward.reward_percent = res_reward.percent;
$scope.data.reward.reward_every_price = res_reward.every_price;
/* --- Wait product/id ,shop/current --- */
/* ---- get attribute ---- */
$scope.getAttribute().productAttribute(get_res_api_product.data.product_attribute, function(res_attribute) {
$scope.data.attribute.dataArray = res_attribute;
$scope.getAttribute().checkMinPrices(get_res_api_product, res_attribute, function(res_data_price, res_state) {
$scope.data.attribute.state = res_state;
$scope.data.product_price = res_data_price.product_price;
$scope.data.product_compare_price = res_data_price.product_compare_price;
$scope.data.sum_product_price = res_data_price.sum_product_price;
$scope.data.sum_product_compare_price = res_data_price.sum_product_compare_price;
$scope.data.sum_product_compare_minus_sum_product_price = res_data_price.sum_product_compare_minus_sum_product_price;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
/* ----- stock ----- */
$scope.data.quantity.quantity_max = res_data_price.product_price.total_stock;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_data_price.product_price.total_stock; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* ----- stock ----- */
});
});
/* ---- get attribute ---- */
/* ---- get attribute custom ---- */
$scope.getAttributeCustom().createArray(get_res_api_product.data.product_custom_templates, function(res_custom_attribute, res_state) {
$scope.data.attribute_custom.state = res_state;
$scope.data.attribute_custom.dataArray = res_custom_attribute;
});
/* ---- get attribute custom ---- */
/* ---- get detail ---- */
$scope.getDetail().getDetail(get_res_api_product.data, function(res_description, res_info, res_state_info, res_specificatio, res_state_specificatio) {
$scope.data.detail.dataArray[0].data = res_description;
$scope.data.detail.dataArray[1].data = res_info;
$scope.data.detail.dataArray[1].state = res_state_info;
$scope.data.detail.dataArray[2].data = res_specificatio;
$scope.data.detail.dataArray[2].state = res_state_specificatio;
});
/* ---- get detail ---- */
/* ---- update state ---- */
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
/* ---- update state ---- */
/* --- Wait product/id ,shop/current --- */
});
});
});
});
/* -- get api shop/current to reward -- */
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.relation.dataArrayState = res_state;
$scope.getData().getReferralId(get_res_api_product.data.product_referral_display, function(res_referral_id) {
$scope.dataApi.relation.dataSend.txt_referral_id = res_referral_id;
$scope.getData().dataSend($scope.dataApi.relation.api, $scope.dataApi.relation.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_referral, res_state) {
$scope.dataApi.relation.ok = res_ok;
$scope.dataApi.relation.dataArray = (res_referral_id != 0) ? get_res_api_referral.data : [];
$scope.dataApi.relation.dataArrayState = res_state;
});
});
});
});
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.getData().getStaffId(get_res_api_product.data.product_staff_id, function(res_staff) {
if (res_staff.status) {
$scope.dataApi.staff.dataArrayState = res_state;
$scope.dataApi.staff.dataSend.txt_staff_id = res_staff.staff_id;
$scope.getData().dataSend($scope.dataApi.staff.api, $scope.dataApi.staff.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, res, res_state) {
$scope.dataApi.staff.ok = res_ok;
$scope.dataApi.staff.dataArray = res.data;
$scope.getData().getNameUrl(res.data.staff_first_name, function(res_staff_first_name_url) {
$scope.dataApi.staff.dataArray.staff_first_name_url = res_staff_first_name_url;
$scope.dataApi.staff.dataArrayState = res_state;
});
});
});
}
});
});
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
} else {
/* ok = false */
if ($scope.dataApi.product.dataArray.length != 0) {
/* product deal to product original */
if ($scope.dataApi.product.dataArray.product_set_array.length != 0) {
$scope.countDown().getNameUrl($scope.dataApi.product.dataArray.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", $scope.dataApi.product.dataArray.product_set_array[0].product_id, res_name);
});
} else {
$scope.pages().pageName("home");
}
} else {
/* product null */
$scope.pages().pageName("home");
}
}
});
});
});
});
/* - get api product/id end - */
/* get product api */
};
return promise;
});
var $xZoomTimer = null;
var $xZoomInstance = false;
_ui_share_app.directive('productDetailPageL', function ($rootScope, $routeParams, sliderProvider, $http) {
var templateName = 'productDetailPageL';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
background:'@background',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.data = false;
$scope.dataPreserve = false;
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
if(CUR_THEME.data.shop_id == "395"){
var req = {
url:"https://gaedemo101.getappeasy.com/store/api/v1/product/id?txt_product_id="+$scope._getPostIdFromURL(),
method: "GET",
};
$http(req).then(function(res){
if(res.data.ok == 1){
var e = res.data;
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope.id);
}
});
} else {
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
}
});
}
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 6,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
/*$scope.makeVariantsClick();*/
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
if($index == 0 && option_id == ''){
return GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
console.log("findVariantsData", dataVariants[i]);
$scope.data.product_id = dataVariants[i].product_id; /* Warning */
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
console.log("onSelectVariantItems: Yes", $scope.dataPreserve);
};
$rootScope.$on('repeatend',function(){
/* Slider Send */
/*var optionsParmas = {
autoplay:true,
slidesToShow:1,
slidesToScroll:1,
dots:false,
arrows:false,
infinite:true
};
var extraOptions = {
animate: false
};
$timeout(function(){
sliderProvider("#gallery_slider", optionsParmas, "", "", extraOptions);
},500);
$timeout(function(){
$('.gallery_show_single img').xzoom({
Xoffset: 30,
tint: '#b9b5b3',
});
},500);*/
});
/* Slick Events */
$scope._slickGoLeft = function () {
setTimeout(function () {
$('#gallery_slider').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
setTimeout(function () {
$('#gallery_slider').slick('slickNext');
}, 100);
};
/* Click SLick Item */
$scope.slickGoto = function (idx) {
setTimeout(function () {
$('#gallery_slider').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.navArrowsCalculate=function(){
var size = (500 / 2);
var n = (size + 18) + 20;
return '-' + n + 'px';
};
$scope.navArrowWidth = function(){
return $('#gallery_slider').width() + 'px';
};
/* Optimize image size by device pixel
* @params {size} (integer) prefer size
* @params {image_url} (string) original image source link
* @params {image_width} (string) original image width
* @return string
*/
$scope.viewOptimizeImage = function(size, image_url, image_width){
if(window.devicePixelRatio >= 2 || parseInt(image_width) <= size){
return image_url;
}
var a = image_url.split("/"), b = a[a.length - 1];
a[a.length - 1] = 't'+size+'_' + b;
return a.join("/");
};
$scope.gallerySingleViewIndex = 0;
$scope.switchSingleView = function(idx){
console.log("$xZoomInstance",$xZoomInstance);
$('.gallery_show_single').css({'transition':'all 0.3s','opacity':'0'});
$timeout(function(){
$scope.gallerySingleViewIndex = idx;
$('.gallery_show_single').css({'opacity':'1'});
},300);
setTimeout(function(){
if($(window).width() >= 992){
if($("img.zoom").attr('data-api-width') > 400 && $("img.zoom").attr('data-api-height') > 400){
/*$("img.zoom").ezPlus({
'scrollZoom':true,
'responsive':true,
'zoomWindowWidth':400,
'zoomWindowHeight':400,
'zoomWindowOffetx':30,
});*/
$xZoomInstance = $('.zoom').xzoom({
Xoffset: 30,
tint: '#b9b5b3',
});
}
}
},300);
};
$scope.viewImg = function(i){
window.location.href=i;
};
};
return promise;
});
_ui_share_app.directive('productDetailPageM', function ($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageM';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.qtyProduct = 1;
$scope.data = false;
$scope.dataPreserve = false;
$scope.data_min = [];
$scope.tags_product = [];
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
var dataSend = {
'txt_product_id': $scope._getPostIdFromURL(),
};
$scope.data_video_id = false;
if(CUR_THEME.shop_id()=="541"){
$http.get("https://zoomcamera.getappeasy.com/store/api/v1/product/id", { params: dataSend }).then(function(res){
var e = res.data;
if(e.ok == 1){
console.log("product_set_array : data",e.data);
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope._getSupportDataCategory('category', e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
console.log("product_set_array : data",e.data);
$scope.data_video_id = $scope.data.product_id;
if(e.data.product_tags.length > 0){
$scope.tags_product = e.data.product_tags.split(",");
$scope.buildDataProductRelate(e.data.product_tags);
}
if(e.data.product_attribute.option_data != 0 && e.data.product_total_variant > 0){
if (e.data.product_attribute.option_data.variant_array.length != 0 && e.data.product_total_variant > 0) {
var set_varia0 = e.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < e.data.product_attribute.option_data.variant_array.length; i++) {
if(parseInt(set_varia0) >= parseInt(e.data.product_attribute.option_data.variant_array[i].price)){
set_varia0 = e.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = e.data.product_attribute.option_data.variant_array[i];
}
}
if($scope.data_min.length == 0){
$scope.data_min = e.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ",$scope.data_min);
$scope.buildVariantOption(e.data);
$scope.buildMultipleQuantity(e.data);
}
}
if(e.data.product_total_variant == 0 && e.data.product_total_stock > 0){
$scope.names = [];
for (var i = 0; i < parseInt(e.data.product_total_stock); i++) {
$scope.names.push(i+1);
}
console.log("nnames stock :",$scope.names);
}
if(e.data.product_total_variant == 0 && e.data.product_total_stock < 0){
$scope.names = [];
for (var i = 0; i < 20; i++) {
$scope.names.push(i+1);
}
console.log("nnames stock :",$scope.names);
}
if(e.data.product_total_variant > 0){
$scope.names = [];
for (var i = 0; i < 20; i++) {
$scope.names.push(i+1);
}
}
if (typeof $scope.data.product_attribute.option_data !== 'undefined' && $scope.data.product_total_variant > 0) {
if (typeof $scope.data.product_attribute.option_data.pclass_array !== 'undefined' && $scope.data.product_attribute.option_data.pclass_array.length) {
// $scope.buildMultipleQuantity(e.data);
}
}
}
});
}else{
$componentProductDetail.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()}, function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.data_video_id = $scope.data.product_id;
$scope._getSupportDataCategory('category', e.data);
// $scope.buildDataProductRelate($scope._getPostIdFromURL());
if(e.data.product_tags.length > 0){
$scope.buildDataProductRelate(e.data.product_tags);
}
if (typeof $scope.data.product_attribute.option_data !== 'undefined' && $scope.data.product_total_variant > 0) {
if (typeof $scope.data.product_attribute.option_data.pclass_array !== 'undefined' && $scope.data.product_attribute.option_data.pclass_array.length) {
$scope.buildVariantOption(e.data);
}
}
}
});
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.ifOptionUnSelect = function() {
return ($('.d_qty_price.active.inin').length > 0) ? true : false;
};
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {"tags":product_id,'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 8,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d).then(function(e){
if(e.ok == 1){
/*$scope.dataRelate = e.data.dataList;*/
var d = [];
angular.forEach(e.data.dataList, function(item){
if(item.product_id !== $scope.data.product_id){
d.push(item);
}
});
$scope.dataRelate = d;
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.onSelectVariantItems(0, '');
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.testyuyu = 0;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.dsetting').addClass("active");
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._idUrl($routeParams.product_id)
}).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
$scope.testyuyu = 0;
$('.d_qty_not_result').removeClass("active");
$('.dsetting').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
} else {
$scope.testyuyu = 0;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric);
}
};
$scope.findVariantsData = function(variantsPick) {
var count = 0;
$scope._data_qty_model = 1;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var _self = dataVariants[i];
var _self_option = angular.fromJson(_self.option_id_json);
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope.name_qty = [];
$scope.data.product_id = dataVariants[i].product_id;
// $scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
$scope.data.product_total_stock = dataVariants[i].total_stock;
console.log("selectedOptionTextJson: option",$scope.data.product_price);
for (var i = 0; i < parseInt($scope.data.product_total_stock); i++) {
$scope.name_qty.push(i+1);
}
console.log("auysuwgdhsdgsh :",$scope.name_qty , $scope._data_qty_model);
$scope.switchQuantityByKey('-' + variantsPick.join('-') + '-');
// name_qty
console.log("selectedOptionTextJson: option", _self);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope.data.product_image.length; im++) {
if ($scope.data.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
$scope._slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.gallery-thumbnail .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
}
if(!compareArray(variantsPick, optionJson)){
count++;
}
if(count >= dataVariants.length){
// alert(count);
// $scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = 0;
$scope.data.product_compare_price = 0;
}
}
// alert(count);
};
$rootScope.$on('repeatend',function(){
/* Slider Send */
var optionsParmas = {
autoplay:true,
slidesToShow:1,
slidesToScroll:1,
dots:false,
arrows:false,
infinite:true
};
var extraOptions = {
animate: false
};
$timeout(function(){
sliderProvider("#gallery_slider", optionsParmas, "", "", extraOptions);
},500);
});
/* Slick Events */
$scope._slickGoLeft = function () {
$timeout(function () {
$('#gallery_slider').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('#gallery_slider').slick('slickNext');
}, 100);
};
/* Click SLick Item */
$scope.slickGoto = function (idx) {
$timeout(function () {
$('#gallery_slider').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.navArrowsCalculate=function(){
var size = (500 / 2);
var n = (size + 18) + 20;
return '-' + n + 'px';
};
$scope.navArrowWidth = function(){
return $('#gallery_slider').width() + 'px';
};
/* Build title for Address link*/
$scope.buildTitleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
/* Calculate discount (simple mode)
* @params {expensivePrice}
* @params {salePrice}
* @return int
*/
$scope.calculateDiscount = function(expensivePrice, salePrice){
var dif = expensivePrice - salePrice;
return parseInt(dif * 100 / expensivePrice);
};
$scope.support_data = {
category: [],
};
$scope._getSupportDataCategory = function(type,data){
var dataSend = {
'txt_referral_id': data.product_referral_display.category[0].referral_id
};
GAEAPI.get('referral/relation',dataSend).then(function(e){
if(e.ok == 1){
$scope.support_data.category = e.data;
}
});
};
/* Optimize image size by device pixel
* @params {size} (integer) prefer size
* @params {image_url} (string) original image source link
* @params {image_width} (string) original image width
* @return string
*/
$scope.viewOptimizeImage = function(size, image_url, image_width){
if(window.devicePixelRatio >= 2 || parseInt(image_width) <= size){
return image_url;
}
var a = image_url.split("/"), b = a[a.length - 1];
a[a.length - 1] = 't'+size+'_' + b;
return a.join("/");
};
/* Hide when visible badge */
$scope.exceptVisibleBadge = function(objectItem){
var r = parseInt(objectItem.badge_id);
var s = false;
switch (r) {
case 16:
case 72:
case 74:
case 75:
s = true;
break;
default:
s = false;
break;
}
return s;
};
$scope.newLoginregister = function(name){
window.location.href=GURL.base_url()+name;
};
$scope.invited = [];
$scope.insertinvited = function(user) {
if(user) {
if(user.product_attribute.length != 0){
if($scope.invited[0] == user.product_id){
return;
}
$scope.invited.push(user.product_id);
}else{
alert("item can't compare");
}
} else {
console.log("test_array :",$scope.invited);
}
};
/* Display Badge Name */
$scope.renderBadgeType = function(objectItem){
var r = parseInt(objectItem.badge_id);
var str = 'No Badge';
switch(r){
case 16: str = "FEATURED"; break;
case 72: str = "NEW"; break;
case 74: str = "RECOMMEND"; break;
case 75: str = "BEST SELLER"; break;
case 82: str = "NEW (App)"; break;
case 83: str = "RECOMMEND (App)"; break;
case 84: str = "BEST SELLER (App)"; break;
}
return str;
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index){
$scope.data_viewTab = index;
};
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope.currentOptionQtyPick = function(variant_key) {
var e=1;
// var e = angular.element('input[name="detail_qty"]');
// if (typeof variant_key !== 'undefined') {
// e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
// }
if ($('#detail_qty[variant-key="' + variant_key + '"]').val() != undefined && $('#detail_qty[variant-key="' + variant_key + '"]').val() != '' && isNaN($('#detail_qty[variant-key="' + variant_key + '"]').val())) {
e = parseInt($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
console.log("sudyusdysudysyususu :",e);
}
// if(isNaN(e)){
// e = 1;
// }
// alert(e);
return e;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('select[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('select[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
console.log("data_set array test : ",i);
$scope._data_qty_selected = i;
// parseInt(e.val());
// alert(i);
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [],
p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
console.log("iufthsgsdkhfgsdkfjhd :", $scope.productQuantityMultiArray);
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
// $('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$scope.viewQuantity = function() {
var check_num = 1;
if($(".d_qty.inin").find('select').val() != undefined && $(".d_qty.inin").find('select').val() != ''){
check_num = $(".d_qty.inin").find('select').val().substr(7);
}else{
$(".d_qty.inin").find('select').val("number:1");
$(".d_qty.inin").find('select').selectedIndex = "2";
}
console.log("shdgshdgsh :",check_num);
return parseInt(check_num);
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.outofstock = 0;
$scope.getOutofstock = function() {
$scope.outofstock = 1;
};
};
return promise;
});
_ui_share_app.directive('productDetailPageMa', function($rootScope, $routeParams, sliderProvider ) {
var templateName = 'productDetailPageMa';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
fontcolor: '@fontcolor',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window , $location) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
// $scope.product_sku = "";
// $scope.product_code = "";
// $scope.product_price = 0;
// $scope.product_compare_price = 0;
$scope._dataArrayState = {
load: true,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.dataPreserve = res.data;
// $scope.product_sku = res.data.product_sku;
// $scope.product_code = res.data.product_code;
$scope.product_price = $scope.calculate(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
if(res.data.product_tags != "" && res.data.product_tags != undefined){
$scope.dataTag = res.data.product_tags.split(",");
}
if (res.data.product_attribute.length != 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// alert("x๊อบไข่สด");
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ", $scope.data_min);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
$scope.qtyCurrentSize(res.data.product_total_variant, res.data.product_total_stock);
// $scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.redirectCheckout = function(p,q){
window.location.href = GURL.base_url() + "checkout?pdata="+p+'-'+q;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.onClickVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
var count = 0;
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope._getDataArray($scope._getIdUrl());
};
return promise;
});_ui_share_app.directive('productDetailPageMaeju', function($rootScope, $routeParams, $location, sliderProvider) {
var templateName = 'productDetailPageMaeju';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon: '@icon',
stylebutton: '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log("productDetailPageMaeju : ", name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
checkAttributeOption: function(attributeOption, attributeOptionLength, callback) {
var _self = this;
var attribute = (attributeOption.length == attributeOptionLength) ? true : false;
for (var i = 0; i < attributeOption.length; i++) {
_self.consoleLog("checkAttributeOption : attributeOption[i] : ", attributeOption[i]);
if (attributeOption[i] == undefined) {
attribute = false;
}
}
callback(attribute);
},
findVariantsData: function(attributeOption, dataVariants, attributeOptionLength, callback) {
var _self = this;
_self.consoleLog("findVariantsData : attributeOption : ", attributeOption);
_self.consoleLog("findVariantsData : dataVariants : ", dataVariants);
_self.consoleLog("findVariantsData : attributeOptionLength : ", attributeOptionLength);
_self.checkAttributeOption(attributeOption, attributeOptionLength, function(res_attribute_option) {
_self.consoleLog("checkAttributeOption : callback : res_attribute_option ", res_attribute_option);
var variantsOut = [];
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : dataVariants[i] : ", dataVariants[i]);
variantsOut = dataVariants[i];
break;
}
}
callback(variantsOut, res_attribute_option);
});
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var _self = this;
var state = true;
_self.consoleLog("checkTotalStock : index : ", stateIn);
_self.consoleLog("checkTotalStock : quantity_max : ", quantity_max);
if (stateIn == false && quantity_max > 0) {
state = false;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, $scope.attribute.attributeOption.length, function(variantsOut, res_attribute_option) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
_self.consoleLog("onClickOption : if : findVariantsData : res_attribute_option : ", res_attribute_option);
if (variantsOut.length != 0 && res_attribute_option) {
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataProductBuy.price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
if (variantsOut.variant_image != 0) {
if ($scope.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataArray.product_image.length; i++) {
$scope.dataArray.product_image[i].image_id
if ($scope.dataArray.product_image[i].image_id == variantsOut.variant_image[0].image_id) {
$scope.slickImageGoto(i);
}
}
}
}
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
} else if (variantsOut.length == 0 && res_attribute_option) {
$scope.dataArray.product_id = 0;
$scope.dataArray.product_sku = '';
$scope.dataProductBuy.price = 0;
$scope.dataArray.product_compare_price = 0;
$scope.dataProductBuy.quantity_max = 1;
$scope.buy.state = true;
$scope.buy.attribute = true;
}
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 100);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log('productDetailPageMaeju : ', name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
product_referral_display.category = (product_referral_display.category != '' && product_referral_display.category != undefined) ? product_referral_display.category : [];
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = true;
if (stateIn == true && quantity_max > 0) {
state = false;
}
callback(state);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
checkPriceMin: function(variant, callback) {
var _self = this;
var priceMin = parseFloat(variant[0].price);
var comparePriceMin = parseFloat(variant[0].compare_price);
for (var i = 0; i < variant.length; i++) {
_self.consoleLog('checkPriceMin : priceMin : ', priceMin);
_self.consoleLog('checkPriceMin : variant[i].price : ', variant[i].price);
if (priceMin >= parseFloat(variant[i].price)) {
priceMin = parseFloat(variant[i].price);
comparePriceMin = parseFloat(variant[i].compare_price);
}
}
callback(priceMin, comparePriceMin);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.referralMapState = _self.stateData(true, false);
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_sort_index_asc_name_asc'
};
_self.dataSend('referral/map', dataSend, function(api, dataSend) {
_self.getApi(api, dataSend, function(output) {
$scope.referralMap = output.data;
$scope.referralMapState = _self.stateData(false, true);
});
});
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
if (output.data.length != 0) {
_self.consoleLog(" : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
if (variants_total > 0) {
_self.checkPriceMin(variants, function(res_price, res_compare_price) {
$scope.dataProductBuy.price = res_price;
$scope.dataProductBuy.sumprice = res_price;
$scope.dataArray.product_compare_price = res_compare_price;
});
} else {
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
}
});
});
});
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
} else {
window.history.back();
}
});
}
}
return data;
};
$scope.getDataArray().main();
$scope.tab_id = 0;
$scope.tabId = function(id) {
$scope.tab_id = id;
};
$scope.routeParams = function() {
return $routeParams || false;
};
$scope.categoriesData = $scope.routeParams().referral_id || '';
$scope.setDataCategories = function(input) {
$scope.categoriesData = input;
var page = "category-lists";
if (typeof $scope.categoriesData != 'undefined' && $scope.categoriesData !== "") {
page += '?root_id=' + '0';
page += '&referral_id=' + $scope.categoriesData;
} else {
delete $scope.categoriesDat;
}
$location.url(page).replace();
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
};
return promise;
});_ui_share_app.directive('productDetailPageMb', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageMb';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
datafont: '@datafont',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $location) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
$scope.data_min = "";
$scope.data_video_id = false;
// $scope.product_sku = "";
// $scope.product_code = "";
// $scope.product_price = 0;
// $scope.product_compare_price = 0;
$scope._dataArrayState = {
load: true,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/id', dataSend, $scope).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.dataPreserve = res.data;
$scope.data_video_id = res.data.product_id;
// $scope.product_sku = res.data.product_sku;
// $scope.product_code = res.data.product_code;
$scope.product_price = $scope.calculate(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.dataTag = res.data.product_tags.split(",");
if (res.data.product_attribute.length != 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// alert("x๊อบไข่สด");
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ", $scope.data_min);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
/*$scope.sale($scope._dataArray.product_price,
$scope._dataArray.product_compare_price,
$scope._dataArray.product_discount.discount_id,
$scope._dataArray.product_discount.discount_price,
$scope._dataArray.product_discount.discount_percent);
*/
$scope.qtyCurrentSize(res.data.product_total_variant, res.data.product_total_stock);
// $scope.buildVariantOption(res.data);
}
var t = $interval(function() {
if ($scope._uniqueKey !== "") {
$interval.cancel(t);
var tt = $timeout(function() {
$timeout.cancel(tt);
$scope.mkCarousel();
}, 300);
}
}, 500);
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$rootScope.$on('repeatend', function() {
/* Check Lightbox Enable/Disable */
$('a[data-photo-index]').each(function(idx, obj) {
$(this).attr('data-lightbox', 'view-gallery');
});
});
$scope.mkCarousel = function() {
var elementName = '.component_carousel_map[data-id="' + $scope._key() + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: true,
infinite: true,
/*prevArrow: '
',
nextArrow: '
',*/
responsive: [{
breakpoint: 768,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 1
}
}, {
breakpoint: 480,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 1
}
}]
};
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.redirectCheckout = function(p, q) {
window.location.href = GURL.base_url() + "checkout?pdata=" + p + '-' + q;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
/* alert(price); */
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
console.log("buildVariantOption objectData : ", objectData);
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
if ($scope.dataOption.length == 1) {
console.log("buildVariantOption objectData.length : ", $scope.dataOption.length);
setTimeout(function() {
$scope.totalStock($scope.dataOption.length, $scope.dataVariants, 0, 0);
}, 1000);
}
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.displayView = function(id, statusClass, status) {
var option;
if (id != "0") {
option = $('.text_4.variantSelector .t_2 .items' + '[data-option=' + id + ']');
} else {
option = $('.text_4.variantSelector .t_2 .items');
}
if (statusClass == 'add') {
if (!option.hasClass(status)) {
option.addClass(status);
}
} else if (statusClass == 'remove') {
if (option.hasClass(status)) {
option.removeClass(status);
}
} else if (statusClass == 'reset') {
if (option.hasClass(status)) {
option.removeClass(status);
}
}
};
$scope.totalStock = function(dataVariantsPickLength, dataVariants, $index, option_id) {
console.log("totalStock : dataVariantsPickLength : ", dataVariantsPickLength);
console.log("totalStock : dataVariants : ", dataVariants);
console.log("totalStock : $index : ", $index, " option_id : ", option_id);
var dataVariants = $scope.dataVariants;
$scope.displayView('0', 'reset', 'zero');
for (var i = 0; i < dataVariants.length; i++) {
var array_option_id = angular.fromJson(dataVariants[i].option_id_json);
console.log("totalStock : for : array_option_id : ", array_option_id);
console.log("totalStock : for : dataVariantsPickLength : ", dataVariantsPickLength);
if (dataVariantsPickLength > 1) {
if (array_option_id[$index] == option_id) {
/* console.log("totalStock : for : if : array_option_id[", $index, "]", array_option_id[$index]); */
console.log("totalStock : for : if : if : array_option_id : ", array_option_id);
console.log("totalStock : for : if : if : dataVariants : [", i, "] :", dataVariants[i]);
for (var j = 0; j < array_option_id.length; j++) {
if (j != $index && dataVariants[i].total_stock == 0) {
$scope.displayView(array_option_id[j], 'add', 'zero');
} else {
$scope.displayView(array_option_id[j], 'remove', 'zero');
}
}
}
} else {
/* console.log("totalStock : for : if : array_option_id[", $index, "]", array_option_id[$index]); */
console.log("totalStock : for : else : if : array_option_id : ", array_option_id);
console.log("totalStock : for : else : if : dataVariants : [", i, "] :", dataVariants[i]);
for (var j = 0; j < array_option_id.length; j++) {
console.log("totalStock : for : else : if : dataVariants : [", i, "] :", dataVariants[i].total_stock);
if (dataVariants[i].total_stock == 0) {
$scope.displayView(array_option_id[j], 'add', 'zero');
} else {
$scope.displayView(array_option_id[j], 'remove', 'zero');
}
}
}
}
};
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems : ", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems : dataVariantsPick.length : ", $scope.dataVariantsPick.length);
console.log("onSelectVariantItems : dataOption.length : ", $scope.dataOption.length);
console.log("onSelectVariantItems : dataVariantsPick : ", $scope.dataVariantsPick);
console.log("onSelectVariantItems : dataOption : ", $scope.dataOption);
$scope.totalStock($scope.dataVariantsPick.length, $scope.dataVariants, $index, option_id);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
console.log("findVariantsData : variantsPick : ", variantsPick);
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
console.log("findVariantsData : dataVariants : ", dataVariants);
for (var i = 0; i < dataVariants.length; i++) {
console.log("findVariantsData : for : dataVariants[", i, "] :", dataVariants[i]);
var _self = dataVariants[i];
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("findVariantsData : for : optionJson[", i, "].option_id_json :", angular.fromJson(dataVariants[i].option_id_json));
var count = 0;
if (compareArray(variantsPick, optionJson)) {
console.log("findVariantsData : compareArray : ", compareArray(variantsPick, optionJson));
console.log("findVariantsData : for : if : dataVariants[", i, "] :", dataVariants[i]);
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope._dataArray.product_image.length; im++) {
if ($scope._dataArray.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
// $scope._slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.block-gallery .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope.switchSingleView = function(idx) {
console.log("$xZoomInstance", $xZoomInstance);
$('.gallery_show_single').css({
'transition': 'all 0.3s',
'opacity': '0'
});
$timeout(function() {
$scope.gallerySingleViewIndex = idx;
$('.gallery_show_single').css({
'opacity': '1'
});
}, 300);
setTimeout(function() {
if ($(window).width() >= 992) {
if ($("img.zoom").attr('data-api-width') > 400 && $("img.zoom").attr('data-api-height') > 400) {
/*$("img.zoom").ezPlus({
'scrollZoom':true,
'responsive':true,
'zoomWindowWidth':400,
'zoomWindowHeight':400,
'zoomWindowOffetx':30,
});*/
$xZoomInstance = $('.zoom').xzoom({
Xoffset: 30,
tint: '#b9b5b3',
});
}
}
}, 300);
};
$scope.gallerySingleViewIndex = 0;
$scope.switchSingleView = function(idx) {
console.log("$xZoomInstance", $xZoomInstance);
$('.gallery_show_single').css({
'transition': 'all 0.3s',
'opacity': '0'
});
$timeout(function() {
$scope.gallerySingleViewIndex = idx;
$('.gallery_show_single').css({
'opacity': '1'
});
}, 300);
setTimeout(function() {
if ($(window).width() >= 992) {
if ($("img.zoom").attr('data-api-width') > 400 && $("img.zoom").attr('data-api-height') > 400) {
/*$("img.zoom").ezPlus({
'scrollZoom':true,
'responsive':true,
'zoomWindowWidth':400,
'zoomWindowHeight':400,
'zoomWindowOffetx':30,
});*/
$xZoomInstance = $('.zoom').xzoom({
Xoffset: 30,
tint: '#b9b5b3',
});
}
}
}, 300);
};
$scope.viewOptimizeImage = function(size, image_url, image_width) {
if (window.devicePixelRatio >= 2 || parseInt(image_width) <= size) {
return image_url;
}
var a = image_url.split("/"),
b = a[a.length - 1];
a[a.length - 1] = 't' + size + '_' + b;
return a.join("/");
};
$scope._getDataArray($scope._getIdUrl());
};
return promise;
});_ui_share_app.directive('productDetailPageMc', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageMc';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon: '@icon',
stylebutton: '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log("productDetailPageMaeju : ", name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
checkAttributeOption: function(attributeOption, attributeOptionLength, callback) {
var _self = this;
var attribute = (attributeOption.length == attributeOptionLength) ? true : false;
for (var i = 0; i < attributeOption.length; i++) {
_self.consoleLog("checkAttributeOption : attributeOption[i] : ", attributeOption[i]);
if (attributeOption[i] == undefined) {
attribute = false;
}
}
callback(attribute);
},
findVariantsData: function(attributeOption, dataVariants, attributeOptionLength, callback) {
var _self = this;
_self.consoleLog("findVariantsData : attributeOption : ", attributeOption);
_self.consoleLog("findVariantsData : dataVariants : ", dataVariants);
_self.consoleLog("findVariantsData : attributeOptionLength : ", attributeOptionLength);
_self.checkAttributeOption(attributeOption, attributeOptionLength, function(res_attribute_option) {
_self.consoleLog("checkAttributeOption : callback : res_attribute_option ", res_attribute_option);
var variantsOut = [];
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : dataVariants[i] : ", dataVariants[i]);
variantsOut = dataVariants[i];
break;
}
}
callback(variantsOut, res_attribute_option);
});
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var _self = this;
var state = true;
_self.consoleLog("checkTotalStock : index : ", stateIn);
_self.consoleLog("checkTotalStock : quantity_max : ", quantity_max);
if (stateIn == false && quantity_max > 0) {
state = false;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, $scope.attribute.attributeOption.length, function(variantsOut, res_attribute_option) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
_self.consoleLog("onClickOption : if : findVariantsData : res_attribute_option : ", res_attribute_option);
if (variantsOut.length != 0 && res_attribute_option) {
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataProductBuy.price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
if (variantsOut.variant_image != 0) {
if ($scope.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataArray.product_image.length; i++) {
$scope.dataArray.product_image[i].image_id
if ($scope.dataArray.product_image[i].image_id == variantsOut.variant_image[0].image_id) {
$scope.slickImageGoto(i);
}
}
}
}
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
} else if (variantsOut.length == 0 && res_attribute_option) {
$scope.dataArray.product_id = 0;
$scope.dataArray.product_sku = '';
$scope.dataProductBuy.price = 0;
$scope.dataArray.product_compare_price = 0;
$scope.dataProductBuy.quantity_max = 1;
$scope.buy.state = true;
$scope.buy.attribute = true;
}
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 100);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log('productDetailPageMaeju : ', name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = true;
if (stateIn == true && quantity_max > 0) {
state = false;
}
callback(state);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
checkPriceMin: function(variant, callback) {
var _self = this;
var priceMin = parseFloat(variant[0].price);
var comparePriceMin = parseFloat(variant[0].compare_price);
for (var i = 0; i < variant.length; i++) {
_self.consoleLog('checkPriceMin : priceMin : ', priceMin);
_self.consoleLog('checkPriceMin : variant[i].price : ', variant[i].price);
if (priceMin >= parseFloat(variant[i].price)) {
priceMin = parseFloat(variant[i].price);
comparePriceMin = parseFloat(variant[i].compare_price);
}
}
callback(priceMin, comparePriceMin);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
if (output.data.length != 0) {
_self.consoleLog(" : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
if (variants_total > 0) {
_self.checkPriceMin(variants, function(res_price, res_compare_price) {
$scope.dataProductBuy.price = res_price;
$scope.dataProductBuy.sumprice = res_price;
$scope.dataArray.product_compare_price = res_compare_price;
});
} else {
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
}
});
});
});
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
} else {
window.history.back();
}
});
}
}
return data;
};
$scope.getDataArray().main();
$scope.tab_id = 0;
$scope.tabId = function(id) {
$scope.tab_id = id;
};
$scope.routeParams = function() {
return $routeParams || false;
};
$scope.categoriesData = $scope.routeParams().referral_id || '';
$scope.setDataCategories = function(input) {
$scope.categoriesData = input;
var page = "category-lists";
if (typeof $scope.categoriesData != 'undefined' && $scope.categoriesData !== "") {
page += '?root_id=' + '0';
page += '&referral_id=' + $scope.categoriesData;
} else {
delete $scope.categoriesDat;
}
$location.url(page).replace();
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
};
return promise;
});_ui_share_app.directive('productDetailPageMhp', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageMhp';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
findVariantsData: function(attributeOption, dataVariants, callback) {
var _self = this;
var variants = dataVariants;
_self.consoleLog("findVariantsData : variants : ", variants);
var variantsOut = [];
for (var i = 0; i < variants.length; i++) {
var optionJson = angular.fromJson(variants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : variants[i] : ", variants[i]);
variantsOut = variants[i];
break;
}
}
callback(variantsOut);
},
checkOption: function(variants_total, callback) {
var state = false;
if (variants_total == 0) {
state = true;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = false;
if (stateIn == false && quantity_max > 0) {
state = true;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, function(variantsOut) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataArray.product_price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 999;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = false;
if (variants_total == 0) {
state = true;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = false;
if (stateIn == true && quantity_max > 0) {
state = true;
}
callback(state);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
_self.consoleLog("getDataProductArray : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
});
});
});
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
});
}
}
return data;
};
$scope.getDataArray().main();
};
return promise;
});_ui_share_app.directive('productDetailPageN', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageN';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
id: '@id',
imgcart: '@imgcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.qtyProduct = 1;
$scope.result_price = 0;
$scope.checkQty = function() {
var productQuantityBreak = GAEAPI.getValueForKey($scope.data, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
console.log("quantityBreak : ", $scope.data);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.qtyProduct >= amount_end) {
$scope.result_price = unit_price;
}
}
};
$scope.checkSeo = function() {
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* JQ: Scroll event */
angular.element($window).bind('scroll', function() {
if (!$scope.data) {
return;
}
var curPos = ($(document).scrollTop());
var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));
console.debug("Cur pos", curPos, properHeight);
if (curPos > properHeight) {
angular.element('.block-background .bottom-info').addClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
$scope.data_tag = [];
$scope.data = false;
$scope.dataPreserve = false;
/* Get product id from url or from component */
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
$scope._dataArrayTags = [];
/* getProductId */
$scope.getQuantityBreak = function(dataSend, api, callback) {
console.log("getQuantityBreak : dataSend : ", dataSend, " api : ", api);
var quantity_break = [];
GAEAPI.get(api, dataSend).then(function(output) {
console.log("getQuantityBreak : output : ", output);
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
callback(quantity_break);
};
$scope.getProductId = function(statusLogin, customerId, dataSend, api) {
console.log("getProductId : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
GAEAPI.get(api, dataSend).then(function(output) {
console.log("getProductId : output : ", output);
if (output.ok == 1) {
if (output.data != undefined) {
console.log("getProductId : output.data : ", output.data);
$scope.data = output.data;
$scope.dataPreserve = output.data;
/* product_tags */
if (output.data.product_tags != undefined) {
if (output.data.product_tags != "") {
$scope._dataArrayTags = output.data.product_tags.split(",");
/* split(","); */
if ($scope._dataArrayTags == 1 && $scope._dataArrayTags[0] != "") {
$scope.data_tag = (output.data.product_tags).split(",");
}
}
}
/* product_referral_display */
if (output.data.product_referral_display != undefined) {
if (output.data.product_referral_display.length) {
$scope._getSupportDataCategory(output.data);
}
}
/* Option */
$scope.buildVariantOption(output.data);
/* ProductRelate */
$scope.buildDataProductRelate(dataSend.txt_product_id);
/* product_quantity_break */
$scope.checkLogin('product/quantity_break', dataSend.txt_product_id, statusLogin, function(statusLogin, customerId, dataSend, api) {
console.log("getProductId checkLogin callback : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
if (statusLogin) {
console.log("getProductId checkLogin : IF");
$scope.getQuantityBreak(dataSend, api, function(quantity_break) {
console.log("getProductId checkLogin callback getQuantityBreak : quantity_break : ", quantity_break);
$scope.data.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.result_price = quantity_break[0].unit_price;
}
});
} else {
console.log("getProductId checkLogin : ELSE")
}
});
}
}
});
};
$scope.checkLogin = function(urlApi, product_id, status_login, callback) {
var dataSend = {};
var productId = parseInt(product_id);
var statusLogin = status_login;
var api = urlApi;
var customerId = 0;
if (api == 'product/id') {
dataSend = {
'txt_product_id': productId,
}
console.log("checkLogin : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
callback(statusLogin, customerId, dataSend, api);
} else if (api == 'product/quantity_break') {
if (statusLogin) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
dataSend = {
'txt_product_id': productId,
'txt_customer_id': customerId,
}
console.log("checkLogin : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
callback(statusLogin, customerId, dataSend, api);
} else {
console.log("checkLogin : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
callback(statusLogin, customerId, dataSend, api);
}
}
};
$scope.checkLogin('product/id', $scope._getPostIdFromURL(), UiCustomerBox.delegate.get.isLogin(), function(statusLogin, customerId, dataSend, api) {
console.log("checkLogin callback : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
$scope.getProductId(statusLogin, customerId, dataSend, api);
});
/* getProductId */
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id) {
var j = {
'relate_product_id_array': [product_id],
'badge_id_array': [18]
};
var d = {
'cur_page': 1,
'per_page': 6,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelate = e.data.dataList;
console.log("dataRelate", $scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope.checkColorConfig = function() {
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.qty_original = 1;
$scope.qty_current = 1;
/* Click SLick Item */
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.maxHeight = 0;
$scope.navArrowsCalculate = function() {
var size = ($('img.img_gallery').eq(0).height() / 2);
$scope.maxHeight = (size + 18);
$('img.img_gallery').each(function() {
if ($(this).height() > $scope.maxHeight) {
$scope.maxHeight = $(this).height();
}
});
return '-' + $scope.maxHeight + 'px';
};
$scope.navArrowWidth = function() {
return $('#gallery_display').width() + 'px';
};
$scope.viewType = 'description';
var selector = '.nav li';
$(selector).on('click', function() {
$(selector).removeClass('active');
$(this).addClass('active');
});
$scope.toTop = function() {
return window.scrollTo(0, 0);
};
$scope._page_lists = false;
$scope._page_lists_load = false;
$scope._get_page_lists = function() {
$scope._clear_page_lists();
var dataSend = {
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'page_lastest_create'
};
GAEAPI.get('page/lists', dataSend).then(function(res) {
$scope._page_lists_load = true;
if (res.ok === 1) {
$scope._page_lists = res.data.dataList;
angular.forEach($scope._page_lists, function(item, key) {
if (item.page_search_url == "") {
item.page_search_url = item.page_id;
}
});
}
});
};
$scope.support_data = {
category: [],
};
$scope._getSupportDataCategory = function(data) {
console.log("_getSupportDataCategory : data : ", data);
console.log("_getSupportDataCategory : data : ", data.product_referral_display);
var dataSend = {
'txt_referral_id': data.product_referral_display.category[0].referral_id
};
console.log("_getSupportDataCategory : dataSend : ", dataSend);
GAEAPI.get('referral/relation', dataSend).then(function(e) {
if (e.ok == 1) {
$scope.support_data.category = e.data;
console.log("dyfsyhfgdhfd :", $scope.support_data.category);
}
});
};
$scope._clear_page_lists = function() {
$scope._page_lists = false;
$scope._page_lists_load = false;
};
$scope._get_page_lists();
$scope._page_category = false;
$scope._page_category_load = false;
$scope._get_page_category = function() {
$scope._clear_page_lists();
var dataSend = {
'txt_referral_type_id': 11,
'txt_sortby': 'referral_name_a-z'
};
GAEAPI.get('referral/map', dataSend).then(function(res) {
$scope._page_category_load = true;
if (res.ok === 1) {
$scope._page_category = res.data;
}
});
};
$scope._clear_page_category = function() {
$scope._page_category = false;
$scope._page_category_load = false;
};
$scope._get_page_category();
$scope._testdata = [{
id: '1',
Buy: '1',
Price: '699',
Discount: '0%'
}, {
id: '2',
Buy: '3',
Price: '550',
Discount: '10%'
}, {
id: '3',
Buy: '6',
Price: '530',
Discount: '15%'
}, {
id: '4',
Buy: '12',
Price: '520',
Discount: '16%'
}, {
id: '5',
Buy: '50',
Price: '510',
Discount: '17%'
}];
$scope._get_page_category();
$scope.mkCarouselData = function(elem) {
console.debug('mkCarouselData: trigger');
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 5,
slidesToScroll: 1,
infinite: true,
speed: 600,
prevArrow: '',
nextArrow: '',
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 5,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 5,
}
}, {
breakpoint: 692,
settings: {
slidesToShow: 6,
}
}, {
breakpoint: 540,
settings: {
slidesToShow: 3,
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope._indata = $scope._testdata[0].id;
$scope._indataPrice = $scope._testdata[0].Price;
$scope._inputdata = function(data, Price) {
$scope._indata = data;
$scope._indataPrice = Price;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.invited = [];
$scope.insertinvited = function(user) {
if (user.isChecked[user.product_id]) {
if (user.product_attribute.length != 0) {
$scope.invited.push(user.product_id);
if ($scope.invited.length > 4) {
alert("no more 4 compare");
user.isChecked[user.product_id] = false;
var toDel = $scope.invited.indexOf(user);
$scope.invited.splice(toDel);
console.log("test_array :", $scope.invited);
} else {
console.log("test_array :", $scope.invited);
}
} else {
alert("item can't compare");
user.isChecked[user.product_id] = false;
}
} else {
var toDel = $scope.invited.indexOf(user);
$scope.invited.splice(toDel);
console.log("test_array :", $scope.invited);
}
};
};
return promise;
});_ui_share_app.directive('productDetailPageP', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageP';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
promotelink: '@promotelink',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope.checkSeo = function() {
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* JQ: Scroll event */
angular.element($window).bind('scroll', function() {
if (!$scope.data) {
return;
}
var curPos = ($(document).scrollTop());
var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));
console.debug("Cur pos", curPos, properHeight);
if (curPos > properHeight) {
angular.element('.block-background .bottom-info').addClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
$scope.data = false;
$scope.dataPreserve = false;
$scope._getDataArray = function(id) {
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope.data = res.data;
$scope.dataPreserve = res.data;
$scope.buildVariantOption(res.data);
$scope._getSupportDataCategory('category', res.data);
}
});
};
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id) {
var j = {
'relate_product_id_array': [product_id],
'badge_id_array': [18]
};
var d = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelate = e.data.dataList;
console.log("dataRelate", $scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope.checkColorConfig = function() {
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.qty_original = 1;
$scope.qty_current = 1;
$scope.viewImg = 0;
$scope.values = [1, 2, 3, 4, 5];
$scope.myOptions = {
1: "1",
2: "2",
3: "3",
4: "4",
5: "5",
6: "6",
7: "7",
8: "8",
9: "9",
10: "10",
};
$scope.$watchCollection('myOptions', function() {
$scope.myFixedOptions = [];
angular.forEach($scope.myOptions, function(value, key) {
$scope.myFixedOptions.push({
key: parseInt(key, 10),
value: value
});
});
});
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope.support_data = {
category: [],
};
$scope._getSupportDataCategory = function(type, data) {
var dataSend = {
'txt_referral_id': data.product_referral_display.category[0].referral_id
};
GAEAPI.get('referral/relation', dataSend).then(function(e) {
if (e.ok == 1) {
$scope.support_data.category = e.data;
}
});
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [],
p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
};
$scope.invited = [];
$scope.insertinvited = function(user) {
if (user.isChecked[user.product_id]) {
if (user.product_attribute.length != 0) {
$scope.invited.push(user.product_id);
} else {
alert("item can't compare");
}
} else {
var toDel = $scope.invited.indexOf(user.product_id);
$scope.invited.splice(toDel, '1');
}
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope._data_qty_selected = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.currentOptionQtyPick = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
return e.val();
};
};
return promise;
});_ui_share_app.directive('productDetailPagePi', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPagePi';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataSet = [{
api: "product/id",
dataSend: {},
dataArray: [],
dataSendState: {
load: false,
done: false
}
}, {
api: "referral/relation",
dataSend: {},
dataArray: [],
dataSendState: {
load: false,
done: false
}
}];
$scope.dataTab = {
active: 0,
tabArray: [{
type: 1,
name: 'ภาพรวม',
state: true,
compileDetail: '',
compileArray: []
}, {
type: 2,
name: 'คุณสมบัติเฉพาะทางเทคนิค',
state: true,
compileDetail: '',
compileArray: []
}, {
type: 1,
name: 'ข้อมูลเพิ่มเติม',
state: true,
compileDetail: '',
compileArray: []
}]
};
$scope.getTab = function() {
var getFunction = {
active: function(active, callback) {
callback(active);
},
setTab: function(active) {
var _self = this;
_self.active(parseInt(active), function(active) {
$scope.dataTab.active = active;
});
},
pullData: function(index, data, callback) {
var res_data = (data != '' && data != undefined) ? data : '';
var res_state = (index == 0) ? true : (data != '' && data != undefined) ? true : false;
$scope.getFunction().consoleLog(" : ", res_state);
callback(index, res_data, res_state);
},
pullDataArray: function(index, dataArray, callback) {
var res_data_array = [];
if (dataArray.length != 0 && dataArray.length != undefined) {
if (dataArray.specification_data.length != 0 && dataArray.specification_data.length != undefined) {
if (dataArray.specification_data.pclass_array.length != 0 && dataArray.specification_data.pclass_array.length != undefined) {
res_data_array = dataArray.specification_data.pclass_array;
}
}
}
var res_state = (index == 0) ? true : (dataArray.length != 0 && dataArray != undefined) ? true : false;
callback(index, res_data_array, res_state);
}
}
return getFunction;
};
$scope.getFunction = function() {
var getFunction = {
component: function(callback) {
var component = "productDetailPagePi : ";
callback(component);
},
consoleLog: function(name, data) {
var _self = this;
_self.component(function(component) {
console.log(component, name, data);
});
},
titleUrl: function(str) {
var url = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return url;
},
locationUrl: function(template, data) {
$location.url(template + data).replace();
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
getRouteParamsProductId: function(callback) {
var _self = this;
_self.getRouteParams(function(params) {
var product_id = params.product_id.split("-", 1).join("");
callback(product_id);
});
},
stateData: function(load, done) {
var _self = this;
_self.consoleLog("stateData : load : ", load);
_self.consoleLog("stateData : done : ", done);
var state = {
load: load,
done: done
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend : api : ", api);
_self.consoleLog("dataSend : dataSend : ", dataSend);
callback(api, dataSend);
},
getApiOk: function(res_api, callback) {
var _self = this;
var res_ok = [];
if (res_api.ok == 1) {
res_ok = res_api;
}
_self.consoleLog("getApiOk : res_ok : ", res_ok);
callback(res_ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.consoleLog("getApi : api : ", api);
_self.consoleLog("getApi : dataSend : ", dataSend);
_self.consoleLog("getApi : res_api : ", res_api);
_self.getApiOk(res_api, function(res_api_ok) {
callback(res_api_ok);
});
});
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getNavigationBar = function() {
var getFunction = {
chackCategory: function(categoryArray, callback) {
var res_chack_category = (categoryArray != 0 && categoryArray != undefined) ? true : false;
callback(res_chack_category);
},
getReferralId: function(chackCategory, categoryArray, index, callback) {
var res_referral_id = (chackCategory == true) ? categoryArray[index].referral_id : false;
callback(res_referral_id);
},
getData: function(api, referralId, callback) {
if (referralId != false) {
$scope.dataSet[1].dataSend = {
'txt_referral_id': referralId
}
$scope.getFunction().dataSend(api, $scope.dataSet[1].dataSend, function(api, dataSend) {
$scope.getFunction().getApi(api, dataSend, function(res_api) {
callback(res_api);
});
});
} else {
callback([]);
}
},
main: function(api, productReferralDisplay, callback) {
var _self = this;
_self.chackCategory(productReferralDisplay.category, function(res_chack_category) {
_self.getReferralId(res_chack_category, productReferralDisplay.category, 0, function(res_referral_id) {
_self.getData(api, res_referral_id, function(res_api) {
callback(res_api);
});
});
});
}
}
return getFunction;
};
$scope.getFunction().getRouteParamsProductId(function(res_product_id) {
$scope.dataSet[0].dataSendState = $scope.getFunction().stateData(true, false);
$scope.dataSet[0].dataSend = {
'txt_product_id': res_product_id
}
$scope.getFunction().dataSend($scope.dataSet[0].api, $scope.dataSet[0].dataSend, function(api, dataSend) {
$scope.getFunction().getApi(api, dataSend, function(res_api) {
$scope.getFunction().consoleLog("getRouteParamsProductId : dataSend : getApi : ", res_api);
$scope.dataSet[0].dataArray = res_api.data;
$scope.dataSet[0].dataSendState = $scope.getFunction().stateData(false, true);
$scope.getTab().pullData(0, res_api.data.product_description, function(index, res_data, res_state) {
$scope.dataTab.tabArray[index].compileDetail = res_data;
$scope.dataTab.tabArray[index].state = res_state;
});
$scope.getTab().pullDataArray(1, res_api.data.product_attribute, function(index, res_data_array, res_state) {
$scope.dataTab.tabArray[index].compileArray = res_data_array;
$scope.dataTab.tabArray[index].state = res_state;
});
$scope.getTab().pullData(2, res_api.data.product_more_info, function(index, res_data, res_state) {
$scope.dataTab.tabArray[index].compileDetail = res_data;
$scope.dataTab.tabArray[index].state = res_state;
});
$scope.dataSet[1].dataSendState = $scope.getFunction().stateData(true, false);
$scope.getNavigationBar().main($scope.dataSet[1].api, res_api.data.product_referral_display, function(red_navigation_bar) {
$scope.getFunction().consoleLog("getNavigationBar : red_navigation_bar : ", red_navigation_bar);
$scope.dataSet[1].dataArray = red_navigation_bar.data;
$scope.dataSet[1].dataSendState = $scope.getFunction().stateData(false, true);
});
});
});
});
};
return promise;
});
_ui_share_app.directive('productDetailPageQ', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageQ';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id:'@id',
headerheight:'@headerheight',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function (scope, element, attr) {
};
promise.controller = function ($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
angular.element($window).bind('scroll',function(){
var curPos = ($(document).scrollTop());
var rightPos = $('product-detail-page-q .block-background .block-left .bottom-info').height();
var properHeight = ($('.img_cover').height());
console.debug("Cur pos",curPos, properHeight);
if(curPos+rightPos-50 > properHeight){
angular.element('.block-background .bottom-info').addClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if($(window).width() > 991){
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
/* Get product id from url or from component */
$scope._getPostIdFromURL = function(){
var test = $scope.id;
var a = $scope.id;
if(typeof $routeParams.product_id !== 'undefined'){
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if(typeof test === 'number' && test > 0){
return test;
} else {
var b = a.split("-");
return b[0];
}
};
$scope.data = false;
$scope.dataPreserve = false;
/* Get data by product id */
GAEAPI.get('product/id',{'txt_product_id':$scope._getPostIdFromURL()} , $scope).then(function(e){
if(e.ok == 1){
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
/*$scope.buildDataProductRelate($scope._getPostIdFromURL());*/
}
});
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id){
var j = {'relate_product_id_array':[product_id],'badge_id_array':[18]};
var d = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists',d , $scope).then(function(e){
if(e.ok == 1){
$scope.dataRelate = e.data.dataList;
console.log("dataRelate",$scope.dataRelate);
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData){
if(objectData.product_total_variant <= 0){
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
/*$scope.makeVariantsClick();*/
$scope.makeVaraintsClick_Normal();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.onClickVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick){
function compareArray(array_a, array) {
if (!array)
return false;
if (array_a.length != array.length)
return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i]))
return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for(var i = 0; i < dataVariants.length; i++){
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if(compareArray(variantsPick,optionJson)){
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
/* Select FIrst Varaint (SELECT) */
$scope.makeVariantsClick = function(){
var s = $timeout(function(){
$timeout.cancel(s);
$('select.variantSelector').each(function(idx,obj){
var optionElementFirst = $(this).find('option[data-index="'+idx+'"]').eq(0);
optionElementFirst.prop("selected",true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
/* Select FIrst Varaint (Normal click) */
$scope.makeVaraintsClick_Normal = function(){
$timeout(function(){
$('div.variantSelector').each(function(idx,obj){
$(this).find('span[data-index="'+idx+'"]').eq(0).click();
});
},2000);
};
$scope.checkColorConfig = function(){
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function () {
var elementName = '.img_mobile[data-key="' + $scope._key() + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
};
$scope._makeProductToCarouseltwo = function () {
var elementName = '.img_desktop[data-id="' + $scope._key() + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-key="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-key="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if($('.img_mobile[data-key="'+$scope._key()+'"]').not('.slick-initialized')){
$timeout(function(){
$scope._makeProductToCarousel();
}, 500);
}
if($('.img_desktop[data-id="'+$scope._key()+'"]').not('.slick-initialized')){
$timeout(function(){
$scope._makeProductToCarouseltwo();
}, 500);
}
});
$scope.buildIframeMapByLoc = function(name, lat, lng) {
var newName = name;
var YOUR_API_KEY = 'AIzaSyDU_QXXovpoO2nlyXBWbrCZdFeaApx-luU';
if (/\s/.test(name)) {
var newNameOld = name.split(" ");
var DataName = newNameOld.join("+");
}
if (name != '') {
var srcByName = 'https://www.google.co.th/maps?q=' + DataName + '&output=embed&hl=th-TH';
return srcByName;
} else {
var srcByLoc = 'https://www.google.co.th/maps?q=' + lat + ',' + lng + '&output=embed&hl=th-TH';
return srcByLoc;
}
/*return (parseInt(lat) != 0 && parseInt(lng) != 0) ? srcByLoc : srcByName;*/
};
$scope.qty_original=1;
$scope.qty_current=1;
$scope.getShopName = function(){
return (typeof tttt !== 'undefined') ? tttt.shop_name : '';
};
};
return promise;
});
_ui_share_app.directive('productDetailPageSk', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageSk';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon: '@icon',
stylebutton: '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log("productDetailPageSk : ", name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
checkAttributeOption: function(attributeOption, attributeOptionLength, callback) {
var _self = this;
var attribute = (attributeOption.length == attributeOptionLength) ? true : false;
for (var i = 0; i < attributeOption.length; i++) {
_self.consoleLog("checkAttributeOption : attributeOption[i] : ", attributeOption[i]);
if (attributeOption[i] == undefined) {
attribute = false;
}
}
callback(attribute);
},
findVariantsData: function(attributeOption, dataVariants, attributeOptionLength, callback) {
var _self = this;
_self.consoleLog("findVariantsData : attributeOption : ", attributeOption);
_self.consoleLog("findVariantsData : dataVariants : ", dataVariants);
_self.consoleLog("findVariantsData : attributeOptionLength : ", attributeOptionLength);
_self.checkAttributeOption(attributeOption, attributeOptionLength, function(res_attribute_option) {
_self.consoleLog("checkAttributeOption : callback : res_attribute_option ", res_attribute_option);
var variantsOut = [];
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : dataVariants[i] : ", dataVariants[i]);
variantsOut = dataVariants[i];
break;
}
}
callback(variantsOut, res_attribute_option);
});
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var _self = this;
var state = true;
_self.consoleLog("checkTotalStock : index : ", stateIn);
_self.consoleLog("checkTotalStock : quantity_max : ", quantity_max);
if (stateIn == false && quantity_max > 0) {
state = false;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, $scope.attribute.attributeOption.length, function(variantsOut, res_attribute_option) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
_self.consoleLog("onClickOption : if : findVariantsData : res_attribute_option : ", res_attribute_option);
if (variantsOut.length != 0 && res_attribute_option) {
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataProductBuy.price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
if (variantsOut.variant_image != 0) {
if ($scope.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataArray.product_image.length; i++) {
$scope.dataArray.product_image[i].image_id
if ($scope.dataArray.product_image[i].image_id == variantsOut.variant_image[0].image_id) {
$scope.slickImageGoto(i);
}
}
}
}
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
} else if (variantsOut.length == 0 && res_attribute_option) {
$scope.dataArray.product_id = 0;
$scope.dataArray.product_sku = '';
$scope.dataProductBuy.price = 0;
$scope.dataArray.product_compare_price = 0;
$scope.dataProductBuy.quantity_max = 1;
$scope.buy.state = true;
$scope.buy.attribute = true;
}
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 100);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log('productDetailPageMaeju : ', name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = true;
if (stateIn == true && quantity_max > 0) {
state = false;
}
callback(state);
},
getRouteParams: function(callback) {
var params = $routeParams;
callback(params);
},
stateData: function(loadIn, doneIn) {
var _self = this;
_self.consoleLog("getData : ", "------- stateData -------");
_self.consoleLog("getData : loadIn : ", loadIn);
_self.consoleLog("getData : doneIn : ", doneIn);
_self.consoleLog("getData : ", "------- stateData -------");
var state = {
load: loadIn,
done: doneIn
};
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("getData : ", "------- dataSend -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : ", "------- dataSend -------");
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(output) {
_self.consoleLog("getData : ", "------- getApi -------");
_self.consoleLog("getData : api : ", api);
_self.consoleLog("getData : dataSend : ", dataSend);
_self.consoleLog("getData : output : ", output);
_self.consoleLog("getData : ", "------- getApi -------");
callback(output);
});
},
checkPriceMin: function(variant, callback) {
var _self = this;
var priceMin = parseFloat(variant[0].price);
var comparePriceMin = parseFloat(variant[0].compare_price);
for (var i = 0; i < variant.length; i++) {
_self.consoleLog('checkPriceMin : priceMin : ', priceMin);
_self.consoleLog('checkPriceMin : variant[i].price : ', variant[i].price);
if (priceMin >= parseFloat(variant[i].price)) {
priceMin = parseFloat(variant[i].price);
comparePriceMin = parseFloat(variant[i].compare_price);
}
}
callback(priceMin, comparePriceMin);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
if (output.data.length != 0) {
_self.consoleLog(" : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
if (variants_total > 0) {
_self.checkPriceMin(variants, function(res_price, res_compare_price) {
$scope.dataProductBuy.price = res_price;
$scope.dataProductBuy.sumprice = res_price;
$scope.dataArray.product_compare_price = res_compare_price;
});
} else {
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
}
});
});
});
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
} else {
window.history.back();
}
});
}
}
return data;
};
$scope.getDataArray().main();
$scope.tab_id = 0;
$scope.tabId = function(id) {
$scope.tab_id = id;
};
$scope.routeParams = function() {
return $routeParams || false;
};
$scope.categoriesData = $scope.routeParams().referral_id || '';
$scope.setDataCategories = function(input) {
$scope.categoriesData = input;
var page = "category-lists";
if (typeof $scope.categoriesData != 'undefined' && $scope.categoriesData !== "") {
page += '?root_id=' + '0';
page += '&referral_id=' + $scope.categoriesData;
} else {
delete $scope.categoriesDat;
}
$location.url(page).replace();
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
$scope.dataShopCurrent = [];
$scope.dataShopPointConfig = [];
$scope.getShopCurrent = function() {
var dataSend = {};
GAEAPI.get('shop/current', dataSend).then(function(output) {
console.log("getShopCurrent : output : ", output);
if (output.ok == 1) {
$scope.dataShopCurrent = output.data;
console.log("getShopCurrent : dataShopCurrent : ", $scope.dataShopCurrent);
$scope.dataShopPointConfig = output.data.shop_point_config;
console.log("getShopCurrent : dataShopPointConfig : ", $scope.dataShopPointConfig);
}
});
};
$scope.getShopCurrent();
$scope.getShopPointConfigReward = function(product_price, quantity) {
var sup_price = 0;
var er_rate = 0;
var er_earn = 0;
var mathFloor = 0;
var point = 0;
// console.log("getShopPointConfigReward : shop_point_config.er_rate : ",$scope.dataShopPointConfig.er_rate);
if ($scope.dataShopPointConfig.length != 0) {
sup_price = product_price * quantity;
er_rate = parseInt($scope.dataShopPointConfig.er_rate);
er_earn = parseInt($scope.dataShopPointConfig.er_earn);
mathFloor = Math.floor(sup_price / er_rate);
point = mathFloor * er_earn;
return point;
} else {
return point;
}
}
$scope.getShopPointConfigRewardState = function(product_price, quantity) {
var state = 'RewardShop';
var sup_price = product_price * quantity;
if ($scope.dataShopPointConfig.length != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) != 0 && parseInt($scope.dataShopPointConfig.er_earn) != 0) {
if (parseInt($scope.dataShopPointConfig.er_rate) <= sup_price) {
state = 'RewardShop';
return state;
} else {
state = 'High';
return state;
}
} else {
return 'RewardProduct';
return state;
}
} else {
return 'RewardProduct';
}
};
};
return promise;
});_ui_share_app.directive('productDetailPageSupercheap', function($rootScope, $routeParams, sliderProvider, $location) {
var templateName = 'productDetailPageSupercheap';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
navigationhover: '@navigationhover',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope._console = (window.location.hostname == "localhost") ? true : false;
$scope._component = "productDetailPageSupercheap";
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
/* scope */
$scope._name = ($scope.name != undefined && $scope.name != "") ? $scope.name : "default";
$scope._cart = ($scope.cart != undefined && $scope.cart != "") ? $scope.cart : "trumpComponentCarts";
$scope._buycol = ($scope.buycol != undefined && $scope.buycol != "") ? parseInt($scope.buycol) : 15;
$scope._maxstock = ($scope.maxstock != undefined && $scope.maxstock != "") ? parseInt($scope.maxstock) : 20;
$scope._btnstyle = ($scope.btnstyle != undefined && $scope.btnstyle != "") ? $scope.btnstyle : "filled_button_large";
$scope._buylogin = ($scope.buylogin == "true" || $scope.buylogin == "t") ? true : false;
$scope._checkstaff = ($scope.checkstaff == "true" || $scope.checkstaff == "t") ? true : false;
$scope._buyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope.buyicon : "icnt_outline_cart01_dark.png";
$scope._buytext = ($scope.buytext != undefined && $scope.buytext != "") ? $scope.buytext : "เพิ่มในรถเข็น";
$scope._videotext = ($scope.videotext != undefined && $scope.videotext != "") ? $scope.videotext : "Video";
$scope._icebuyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope._icnPath + $scope.buyicon : $scope._icnPath + "icnt_outline_cart01_dark.png";
$scope._language = ($scope.language != undefined && $scope.language != "") ? (($scope.language == "en") ? "en" : "th") : "th";
$scope._navigationhover = ($scope.navigationhover != undefined && $scope.navigationhover != "") ? $scope.navigationhover : "primary";
/* scope */
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getNamePage: function(arr) {
var str = [];
for (var i = 0; i < arr.length; i++) {
if (i != 0) {
str.push(arr[i]);
}
}
return str.join(" ");
},
getProductId: function(params, callback) {
var _self = this;
var product_id = (params.product_id != undefined) ? params.product_id.split("-", 1).join("") : false;
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
getReferralId: function(productReferralDisplay, callback) {
var _self = this;
var referral_id = 0;
if (productReferralDisplay.length != 0) {
if (productReferralDisplay.category != undefined) {
if (productReferralDisplay.category.length != 0) {
referral_id = productReferralDisplay.category[0].referral_id
}
}
}
callback(referral_id);
},
getFreeGiftPromotionId: function(product_promotion, callback) {
var _self = this;
var promotion_id = '0';
_self.consoleLog("product_promotion", product_promotion);
angular.forEach(product_promotion, function(item, index) {
_self.consoleLog("product_promotion : item", item.promotion_type_id);
if (promotion_id == '0' && (item.promotion_type_number == '1' || item.promotion_type_number == '2' || item.promotion_type_number == '3')) {
promotion_id = item.promotion_id;
}
});
callback(promotion_id);
},
getStaffId: function(staffId, callback) {
var _self = this;
var res_staff = {
staff_id: (staffId != 0 && staffId != '' && staffId != undefined) ? staffId : '0',
status: (staffId != 0 && staffId != '' && staffId != undefined) ? true : false
}
callback(res_staff);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getCarousel = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carouselA: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
fade: true,
dots: false,
arrows: false,
infinite: true,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselB: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: true,
arrows: true,
infinite: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselD: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: true,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselBar: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: false,
infinite: false,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 6,
slidesToScroll: 6,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 5,
slidesToScroll: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 4,
slidesToScroll: 4,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
}
}]
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
slickCarousel: function(carousel, index) {
var _self = this;
$scope.setCarousel.index = index;
setTimeout(function() {
$('[data-key="' + carousel + '"]').slick('slickGoTo', index);
}, 100);
},
prevIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != 0) ? image_index - 1 : image - 1;
_self.consoleLog("prevIndex index", $scope.setCarousel.index);
},
nextIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != (image - 1)) ? image_index + 1 : 0;
_self.consoleLog("nextIndex index", $scope.setCarousel.index);
}
}
return getFunction;
};
$scope.getAttribute = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
productAttribute: function(productAttribute, callback) {
var _self = this;
var attribute = {
option_name: "",
option_attribute: []
};
if (productAttribute.option_data != undefined) {
if (productAttribute.option_data.variant_array != undefined && productAttribute.option_data.variant_array.length != 0) {
for (var a = 0; a < productAttribute.option_data.pclass_array.length; a++) {
attribute.option_name = attribute.option_name.concat(productAttribute.option_data.pclass_array[a].pclass_name, " ");
}
for (var b = 0; b < productAttribute.option_data.variant_array.length; b++) {
var product_attribute = {
product_id: productAttribute.option_data.variant_array[b].product_id,
product_sku: productAttribute.option_data.variant_array[b].sku,
product_title: "",
product_price: parseFloat(productAttribute.option_data.variant_array[b].price),
product_compare_price: parseFloat(productAttribute.option_data.variant_array[b].compare_price),
product_total_stock: parseFloat(productAttribute.option_data.variant_array[b].total_stock),
product_image: productAttribute.option_data.variant_array[b].variant_image
}
for (var c = 0; c < productAttribute.option_data.variant_array[b].option_name_array.length; c++) {
product_attribute.product_title = product_attribute.product_title.concat(productAttribute.option_data.variant_array[b].option_name_array[c], " ");
}
attribute.option_attribute.push(product_attribute);
}
}
}
_self.consoleLog("productAttribute attribute ", attribute);
callback(attribute);
},
checkDiscountPrice: function(productDiscount, resPrice, resComparePrice, callback) {
var _self = this;
var price = 0;
var compare_price = 0;
if (productDiscount.length == 0) {
price = parseFloat(resPrice);
compare_price = parseFloat(resComparePrice);
} else {
if (productDiscount.discount_type_id == '101') {
price = parseFloat(resPrice) - parseFloat(productDiscount.discount_price);
compare_price = parseFloat(resPrice);
} else if (productDiscount.discount_type_id == '102') {
price = (parseFloat(resPrice) * ((100 - parseFloat(productDiscount.discount_percent)) / 100));
compare_price = parseFloat(resPrice);
}
}
callback(price, compare_price);
},
checkMinPrice: function(option, callback) {
var _self = this;
var price_min = parseFloat(option.option_attribute[0].product_price);
var compare_price_min = parseFloat(option.option_attribute[0].product_compare_price);
var total_stock = parseFloat(option.option_attribute[0].product_total_stock);
for (var a = 0; a < option.option_attribute.length; a++) {
if (price_min >= parseFloat(option.option_attribute[a].product_price)) {
price_min = parseFloat(option.option_attribute[a].product_price);
compare_price_min = parseFloat(option.option_attribute[a].product_compare_price);
total_stock = parseFloat(option.option_attribute[a].product_total_stock);
}
}
_self.consoleLog("checkPriceMin price_min ", price_min);
_self.consoleLog("checkPriceMin compare_price_min ", compare_price_min);
_self.consoleLog("checkPriceMin total_stock ", total_stock);
callback(price_min, compare_price_min, total_stock);
},
getTotalStock: function(totalStock, mixStock, callback) {
var _self = this;
var total_stock = (totalStock > 0) ? ((totalStock <= mixStock) ? totalStock : mixStock) : ((totalStock == -1) ? mixStock : totalStock);
callback(total_stock);
},
checkMinPrices: function(api, attribute, callback) {
var _self = this;
var dataPrice = {
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
}
}
if (attribute.option_attribute.length == 0) {
_self.checkDiscountPrice(api.data.product_discount, api.data.product_price, api.data.product_compare_price, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(api.data.product_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, false);
});
});
});
});
});
} else {
_self.checkMinPrice(attribute, function(res_price_min, res_compare_price_min, res_total_stock) {
_self.checkDiscountPrice(api.data.product_discount, res_price_min, res_compare_price_min, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(res_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, true);
});
});
});
});
});
});
}
},
priceIncludes: function(price, includes, callback) {
var _self = this;
var priceToString = (price == null) ? 0 : price;
_self.consoleLog('priceIncludes priceToString : ', priceToString);
callback(priceToString.toString().includes(includes));
},
checkPrice: function(price, callback) {
var _self = this;
_self.priceIncludes(price, '.', function(res) {
_self.consoleLog("checkPrice res ", res);
callback((!res) ? 0 : 2);
});
},
onSelectOption: function(productId) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = productId;
_self.consoleLog("onSelectOption productId ", productId);
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
for (var a = 0; a < $scope.data.attribute.dataArray.option_attribute.length; a++) {
_self.consoleLog("onSelectOption option_attribute ", $scope.data.attribute.dataArray.option_attribute[a]);
if ($scope.data.attribute.dataArray.option_attribute[a].product_id == productId) {
if ($scope.data.attribute.dataArray.option_attribute[a].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var b = 0; b < $scope.dataApi.product.dataArray.product_image.length; b++) {
if ($scope.dataApi.product.dataArray.product_image[b].image_id == $scope.data.attribute.dataArray.option_attribute[a].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, b);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[a].product_price, $scope.data.attribute.dataArray.option_attribute[a].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[a].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
break;
}
}
},
onClickOption: function(index) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.data.attribute.productId = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
if ($scope.data.attribute.dataArray.option_attribute[index].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataApi.product.dataArray.product_image.length; i++) {
if ($scope.dataApi.product.dataArray.product_image[i].image_id == $scope.data.attribute.dataArray.option_attribute[index].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, i);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[index].product_price, $scope.data.attribute.dataArray.option_attribute[index].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[index].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
}
}
return getFunction;
};
$scope.getAttributeCustom = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
createArray: function(productCustomTemplates, callback) {
var _self = this;
var custom_attributes = [];
if (productCustomTemplates.templates.length != 0) {
angular.forEach(productCustomTemplates.templates, function(item, index) {
if (item.option_sets.length != 0) {
_self.getAttributes(item.option_sets, function(res_attributes) {
custom_attributes = custom_attributes.concat(res_attributes);
});
}
});
/* if (productCustomTemplates.templates[0].option_sets.length != 0) {
_self.getAttributes(productCustomTemplates.templates[0].option_sets, function(res_attributes) {
custom_attributes = res_attributes;
});
} */
}
_self.consoleLog("createArray : productCustomTemplates", productCustomTemplates);
_self.consoleLog("createArray : custom_attributes", custom_attributes);
callback(custom_attributes, true);
},
formatAttribute: function(index, optionSubsetIndex, setType, optionSetArray, callback) {
var _self = this;
var set_id = (setType == 'attribute') ? optionSetArray.set_id : optionSetArray.subset_id;
var attribute = {
attribute_index: index,
attribute_option_subset_index: optionSubsetIndex,
active_option_id: (optionSetArray.option_data.select_id != 0) ? optionSetArray.option_data.select_id : "-1",
active_option_index: -1,
active_option_index_str: "-1",
active_textarea: "",
active_array: [],
set_id: set_id,
name: optionSetArray.name,
set_type: optionSetArray.ss_type,
option: []
}
callback(attribute);
},
getOption: function(index, optionDataArray, callback) {
var _self = this;
var options = {
index: index,
ss_data_id: optionDataArray.ss_data_id,
name: optionDataArray.name,
image: optionDataArray.image,
price: optionDataArray.price,
compare_price: 0,
total_stock: 0
}
callback(options);
},
getActive: function(index, activeOptionId, activeOptionIdIn, optionDataArray, callback) {
var _self = this;
var actives_index = (optionDataArray.ss_data_id == activeOptionId) ? index : activeOptionIdIn;
var actives = (optionDataArray.ss_data_id != activeOptionId) ? "0" : "1";
callback(actives_index, actives);
},
getAttributes: function(optionSetArray, callback) {
var _self = this;
var attributes = [];
for (var index = 0; index < optionSetArray.length; index++) {
_self.formatAttribute(index, 0, 'attribute', optionSetArray[index], function(res_attribute) {
if (optionSetArray[index].option_subsets.length != 0) {
for (var option_subset_index = 0; option_subset_index < optionSetArray[index].option_subsets.length; option_subset_index++) {
_self.formatAttribute(index, option_subset_index, res_attribute.set_type, optionSetArray[index].option_subsets[option_subset_index], function(res_attribute_sub) {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_subsets[option_subset_index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute_sub.active_option_id, active_option_id, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute_sub.option = options;
res_attribute_sub.active_option_index = active_option_id;
res_attribute_sub.active_option_index_str = String(active_option_id);
res_attribute_sub.active_array = active_option_array;
attributes.push(res_attribute_sub);
});
}
} else {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute.active_option_id, active_option_id, optionSetArray[index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute.option = options;
res_attribute.active_option_index = active_option_id;
res_attribute.active_option_index_str = String(active_option_id);
res_attribute.active_array = active_option_array;
attributes.push(res_attribute);
}
});
}
callback(attributes)
},
getformatQuantity: function(index, attributeCustom, callback) {
var _self = this;
var quantity = {
name: String(index + 1),
dataArray: attributeCustom
}
callback(quantity);
},
onClickRadio: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickRadio : index", index);
_self.consoleLog("onClickRadio : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickRadio : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickDropdown: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickDropdown : index", index);
_self.consoleLog("onClickDropdown : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickDropdown : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickCheckbox: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickCheckbox : index", index);
_self.consoleLog("onClickCheckbox : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i == parseInt(index_option)) ? (($scope.data.attribute_custom.dataArray[index].active_array[i] != "0") ? "0" : "1") : $scope.data.attribute_custom.dataArray[index].active_array[i];
}
_self.consoleLog("onClickCheckbox : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
}
}
return getFunction;
};
$scope.getReward = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
momentUnix: function(callback) {
var _self = this;
var now = moment().unix();
callback(now);
},
getCalculator: function(sumProductPrice, reward, callback) {
var _self = this;
_self.consoleLog("getCalculator : sumProductPrice", sumProductPrice);
_self.consoleLog("getCalculator : reward", reward);
var point_reward = 0;
if (reward.type_id == "100") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
} else if (reward.type_id == "101") {
point_reward = reward.reward_amount;
} else if (reward.type_id == "102") {
point_reward = (reward.reward_percent * sumProductPrice.price) / 100;
} else if (reward.type_id == "103") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
}
_self.consoleLog("getCalculator : point_reward", point_reward);
callback(point_reward);
},
getProductReward: function(now, productReward, callback) {
var _self = this;
var reward = {
reward_length: (productReward.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(productReward.reward_lifetime.lifetime_start_time);
reward.lifetime_end_time = parseInt(productReward.reward_lifetime.lifetime_end_time);
reward.type_id = productReward.reward_type_id;
reward.amount = parseInt(productReward.reward_amount);
reward.percent = parseInt(productReward.reward_percent);
reward.every_price = parseInt(productReward.reward_every_price);
}
_self.consoleLog("getProductReward : reward", reward);
callback(reward);
},
getPointConfig: function(now, shopPointConfig, callback) {
var _self = this;
var reward = {
reward_length: (shopPointConfig.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(shopPointConfig.er_from);
reward.lifetime_end_time = parseInt(shopPointConfig.er_to);
reward.type_id = "100";
reward.amount = parseInt(shopPointConfig.er_earn);
reward.every_price = parseInt(shopPointConfig.er_rate);
}
_self.consoleLog("getPointConfig : reward", reward);
callback(reward);
},
checkPointReward: function(reward, callback) {
var _self = this;
var state = false;
if (reward.reward_length) {
var start = reward.lifetime_start_time < reward.lifetime_time && reward.lifetime_start_time != 0;
var end = (reward.lifetime_end_time != -1) ? reward.lifetime_time <= reward.lifetime_end_time && reward.lifetime_end_time != 0 : true;
if (start && end) {
if (reward.type_id == "100") {
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
} else if (reward.type_id == "101") {
var amount = reward.amount != 0;
if (amount) {
state = true;
}
} else if (reward.type_id == "102") {
var percent = reward.percent != 0;
if (percent) {
state = true;
}
} else if (reward.type_id == "103") {
var percent = reward.percent != 0;
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
}
}
}
callback(state);
},
checkReward: function(rewardProduct, rewardPointConfig, callback) {
var _self = this;
_self.consoleLog("checkReward : rewardProduct", rewardProduct);
_self.consoleLog("checkReward : rewardPointConfig", rewardPointConfig);
var reward = {
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
_self.checkPointReward(rewardProduct, function(res_state_product) {
_self.checkPointReward(rewardPointConfig, function(res_state_point_config) {
if (res_state_point_config) {
reward.type_id = rewardPointConfig.type_id;
reward.type_id = rewardPointConfig.type_id;
reward.amount = rewardPointConfig.amount;
reward.percent = rewardPointConfig.percent;
reward.every_price = rewardPointConfig.every_price;
} else if (res_state_product) {
reward.type_id = rewardProduct.type_id;
reward.amount = rewardProduct.amount;
reward.percent = rewardProduct.percent;
reward.every_price = rewardProduct.every_price;
}
_self.consoleLog("checkReward : reward", reward);
callback(reward);
});
});
},
checkRewardType: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.momentUnix(function(now) {
_self.getProductReward(now, productReward, function(res_reward_product) {
_self.getPointConfig(now, shopPointConfig, function(res_reward_point_config) {
_self.checkReward(res_reward_product, res_reward_point_config, function(res_reward) {
callback(res_reward);
});
});
});
});
},
createReward: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.consoleLog("createReward : productReward", productReward);
_self.consoleLog("createReward : shopPointConfig", shopPointConfig);
_self.checkRewardType(productReward, shopPointConfig, function(res_reward) {
_self.consoleLog("createReward : res_reward", res_reward);
callback(res_reward);
});
}
}
return getFunction;
};
$scope.getQuantity = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
upDateReward: function() {
var _self = this;
},
upDateReward: function() {
var _self = this;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
},
upDatePrice: function() {
var _self = this;
var product_price = $scope.data.product_price.price * $scope.data.quantity.quantity_input;
var product_compare_price = $scope.data.product_compare_price.price * $scope.data.quantity.quantity_input;
$scope.getAttribute().checkPrice(product_price, function(res_price_ecimals) {
$scope.data.sum_product_price.price = product_price;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals;
$scope.getAttribute().checkPrice(product_compare_price, function(res_compare_price_ecimals) {
$scope.data.sum_product_compare_price.price = product_compare_price;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((product_compare_price - product_price) > 0) ? product_compare_price - product_price : 0;
$scope.getAttribute().checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.upDateReward();
});
});
});
},
input: function(quantityInput) {
var _self = this;
quantityInput = (quantityInput == null) ? 1 : parseInt(quantityInput);
_self.consoleLog("input : quantityInput", quantityInput);
if (quantityInput != null) {
if (quantityInput >= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_max;
}
if (quantityInput <= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
} else {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
_self.upDatePrice();
},
minus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input - 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_min", $scope.data.quantity.quantity_min);
if (quantity >= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
},
plus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input + 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_max", $scope.data.quantity.quantity_max);
if (quantity <= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
}
}
return getFunction;
};
$scope.getBuy = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = params.product_id.split("-", 1).join("");
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
postApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.post(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
UiCartProductAdd: function(productId, quantityInput, promotionId, customOptions, callback) {
UiCart.delegate.product.add(productId, quantityInput, promotionId, function(res_data) {
callback(res_data);
});
},
isLogin: function(callback) {
var buy_login = $scope._buylogin;
var is_login = UiCustomerBox.delegate.get.isLogin();
var is_state = (buy_login) ? (!is_login) ? true : false : false;
callback(is_state);
},
formLogin: function(is_state, callback) {
if (is_state) {
$inloginPopup.open();
}
callback(is_state);
},
getProductStaffId(staff_id_check, callback) {
var res_staff_id_check = staff_id_check;
var res_staff_id = $scope.dataApi.product.dataArray.product_staff_id;
var res_is_state = (res_staff_id != 0 && res_staff_id != '0' && res_staff_id != undefined) ? true : false;
callback(res_staff_id_check, res_staff_id, res_is_state);
},
isStaffId: function(staff_id_check, callback) { /* todo */
var _self = this;
_self.getProductStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
callback(res_staff_id_check, res_staff_id, res_is_state);
});
},
checkCartDuplicateStaff: function(res_staff_id_check, txt_staff_id, res_is_state, callback) {
var _self = this
var res_is_state = true;
if (res_staff_id_check) {
var dataSend = {
'txt_staff_id': txt_staff_id,
};
_self.dataSend("cart/duplicate_staff", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
res_is_state = res_api.data.duplicate;
callback(res_is_state);
});
});
} else {
callback(res_is_state);
}
},
showAlert: function(res_staff_id_check, res_staff_id, res_is_state, res_api, callback) {
var res_state = (res_staff_id_check) ? ((res_api) ? ((res_is_state) ? false : true) : true) : false;
if (res_state) {
if (!res_api) {
if (res_staff_id != '0' && res_staff_id != 0) {
$scope.controlAlert().alert('002');
} else {
$scope.controlAlert().alert('003');
}
} else {
if (!res_is_state) {
$scope.controlAlert().alert('003');
}
}
}
callback(res_state);
},
checkStaff: function(callback) {
var _self = this
var staff_id_check = $scope._checkstaff;
var res_check = false;
_self.isStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
_self.checkCartDuplicateStaff(res_staff_id_check, res_staff_id, res_is_state, function(res_api) {
_self.showAlert(res_staff_id_check, res_staff_id, res_is_state, res_api, function(res_state) {
res_check = res_state;
callback(res_check);
});
});
});
},
isProgress: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isProgress(productId)) ? true : false;
_self.consoleLog("isProgress : productId", productId);
_self.consoleLog("isProgress : state", state);
callback(state);
},
isSelected: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
_self.consoleLog("isSelected : productId", productId);
_self.consoleLog("isSelected : state", state);
callback(state);
},
isSelectedReturn: function(productId) {
var _self = this;
var ui_cart_state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
if (!$scope.setBuy.state_active) {
$scope.setBuy.state_active = true;
var state_process = $scope.setBuy.state_process;
var state_step = $scope.setBuy.state_step;
if (ui_cart_state && !state_process && state_step != 4) /* cart */ {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else if (!ui_cart_state && !state_process && state_step != 0) /* unset */ {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
} else {
$scope.setBuy.state_active = false;
}
}
return ui_cart_state;
},
updateState: function(productId) {
_self = this;
_self.isSelected(productId, function(res_state) {
if (res_state) {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
}
return res_state;
});
},
uiCart: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
_self.UiCartProductAdd(productId, quantityInput, promotionId, customOptions, function(res_data) {
if (res_data) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
}
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
},
postApiA: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
var custom_options = {};
var dataSend = {
'txt_product_id': productId,
'txt_amount': quantityInput,
'txt_is_clear_cart_before': "0",
'txt_custom_options_json': JSON.stringify(custom_options)
};
_self.dataSend("cart/product_add", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
if (res_ok) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
});
},
onProcess: function(data, productId, quantityInput, promotionId, customOptions) {
var _self = this;
_self.isLogin(function(res_is_login) {
_self.formLogin(res_is_login, function(res_form) {
_self.checkStaff(function(res_is_state) {
if (!$scope.setBuy.state_process && !res_form && !res_is_state) {
$scope.setBuy.state_process = true;
_self.isSelected(productId, function(res_state) {
if (!res_state) {
_self.onLoad($scope.setBuy.state_step, function(res_step) {
if (data.sum_product_price.price != 0 && data.quantity.quantity_max != 0 && (data.attribute.state == (data.attribute.productId != ''))) {
/* UiCart */
_self.uiCart(productId, quantityInput, promotionId, customOptions, res_step);
/* api post offline */
/*_self.postApiA(productId, quantityInput, promotionId, customOptions, res_step); */
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
} else {
$scope.setBuy.state_process = false;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
} else if ($scope._cart == "viewcart") {
_self.viewCart($scope._cart);
}
}
});
}
});
});
});
},
onTimeout: function(time, callback) {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
callback(true)
}, time);
},
onUnset: function(step, callback) {
var _self = this;
step = (step == 0) ? 0 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onLoad: function(step, callback) {
var _self = this;
step = (step == 0 || step == 1) ? 1 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onPass: function(step, callback) {
var _self = this;
step = (step == 1 || step == 2) ? 2 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onError: function(step, callback) {
var _self = this;
step = (step == 1 || step == 3) ? 3 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onCart: function(step, callback) {
var _self = this;
step = (step == 2 || step == 4) ? 4 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
trumpComponentCarts: function() {
var controlCart = share.getTrumpComponentCarts();
var component_carts = $('.cover-cards').hasClass('active');
if (!component_carts) {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.cart();
}
} else {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.load();
}
}
},
viewCart: function(viewcart) {
var _self = this;
_self.pageUrl(viewcart);
},
locationUrlReplace: function(page) {
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
main: function(callback) {
var _self = this;
}
}
return getFunction;
};
$scope.getDetail = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getDetail: function(api, callback) {
var _self = this;
var description = api.product_description;
var info = api.product_more_info;
var specificatio = [];
if (api.product_attribute.specification_data != undefined) {
specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? api.product_attribute.specification_data.pclass_array : [];
}
var state_specificatio = false;
if (api.product_attribute.specification_data != undefined) {
state_specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? true : false;
}
var state_info = (api.product_is_more_info == 1) ? true : false;
_self.consoleLog("getDetail : description", description);
_self.consoleLog("getDetail : info", info);
_self.consoleLog("getDetail : state_info", state_info);
_self.consoleLog("getDetail : specificatio", specificatio);
_self.consoleLog("getDetail : state_specificatio", state_specificatio);
callback(description, info, state_info, specificatio, state_specificatio);
},
onClickDetail: function(index) {
var _self = this;
$scope.data.detail.active = index;
_self.consoleLog("onClickDetail : data.detail.active", $scope.data.detail.active);
}
}
return getFunction;
};
$scope.pages = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageName: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page_name);
},
pageUrl: function(page_name, id, name_url) {
var _self = this;
var page = page_name + "/" + id + "-" + name_url;
_self.locationUrlReplace(page);
}
}
return getFunction;
};
$scope.countDown = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getLocation: function(callback) {
var _self = this;
var res_location = $location;
_self.consoleLog("getLocation", "res_location", res_location);
callback(res_location);
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
_self.consoleLog("getRouteParams", "params", params);
callback(params);
},
getLocationUrlNameProductDetail: function(callback) {
var _self = this;
_self.getRouteParams(function(res_params) {
_self.getLocation(function(res_location) {
var url_page_name = "/product-detail/" + res_params.product_id;
var res_url_name_product_detail = (res_location.url() == url_page_name) ? true : false;
_self.consoleLog("getLocationUrlNameProductDeal", "res_url_name_product_detail", res_url_name_product_detail);
callback(res_url_name_product_detail);
});
});
},
getUnix: function(callback) {
var _self = this;
var now = moment().unix();
_self.consoleLog("getUnix", "now", now);
callback(now);
},
getCountDown: function(now, product_lifetime, callback) {
var _self = this;
var countdown_unix = parseInt(product_lifetime.lifetime_end_time) - now;
var milliseconds = moment.duration(countdown_unix * 1000, "milliseconds");
var res_countdown = ((milliseconds.days() <= 9) ? '0' + milliseconds.days() : milliseconds.days());
res_countdown = res_countdown + ' : ' + ((milliseconds.hours() <= 9) ? '0' + milliseconds.hours() : milliseconds.hours());
res_countdown = res_countdown + ' : ' + ((milliseconds.minutes() <= 9) ? '0' + milliseconds.minutes() : milliseconds.minutes());
res_countdown = res_countdown + ' : ' + ((milliseconds.seconds() <= 9) ? '0' + milliseconds.seconds() : milliseconds.seconds());
_self.consoleLog("getCountDown", "res_countdown", res_countdown);
callback(res_countdown, countdown_unix);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
countDownByProduct: function(now, data_array, callback) {
var _self = this;
if (data_array.length != 0) {
if (data_array.product_lifetime.length != 0) {
_self.getCountDown(now, data_array.product_lifetime, function(res_count_down, res_countdown_unix) {
data_array.product_lifetime.lifetime_countdown = (res_countdown_unix > 0) ? res_count_down : "";
if (data_array.product_lifetime.lifetime_countdown == "") {
_self.getNameUrl(data_array.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", data_array.product_set_array[0].product_id, res_name);
});
}
});
}
}
_self.consoleLog("countDownByProduct", "data_array", data_array);
callback(data_array);
},
loop: function() {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
_self.getUnix(function(res_now) {
_self.countDownByProduct(res_now, $scope.dataApi.product.dataArray, function(data_array) {
$scope.dataApi.product.dataArray = data_array;
_self.getLocationUrlNameProductDetail(function(res_url_name_product_detail) {
if (res_url_name_product_detail) {
_self.loop();
}
});
});
});
}, 1000);
}
}
return getFunction;
};
$scope.control = function() {
var getFunction = {
popupVideo: function(state, video_link, video_embed_code) {
var _self = this;
if (video_embed_code != '') {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
} else if (video_link != '') {
window.open(video_link, '_blank');
} else {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
}
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.data_control = {
page_video: {
popup: false,
shop_video_embed_code: ""
}
}
$scope.control_alert = {
alert: {
error_id: '',
index: null,
state: true,
error: [{
id: '001',
title: 'การสั่งซื้อ',
messages: 'สามารถสั่งซื้อได้เพียงทีละออเดอร์เท่านั้น'
}, {
id: '002',
title: 'การเพิ่มสินค้า',
messages: 'ไม่สามารถเพิ่มสินค้าของร้านมากกว่า 1 ร้านค้าได้'
}, {
id: '003',
title: 'การสั่งซื้อ',
messages: 'ไม่สามารถเพิ่มสินค้า(ไม่มีร้านค้า)'
}]
}
};
$scope.controlAlert = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getErrorMessages: function(error_id, callback) {
var _self = this;
var messages = {
res_error_id: '',
res_index: null
}
angular.forEach($scope.control_alert.alert.error, function(item, index) {
if (item.id == error_id) {
messages.res_error_id = item.id;
messages.res_index = index;
}
});
callback(messages.res_error_id, messages.res_index);
},
alert: function(error_id) {
var _self = this;
_self.getErrorMessages(error_id, function(res_error_id, res_index) {
$scope.control_alert.alert.error_id = res_error_id;
$scope.control_alert.alert.index = res_index;
$scope.control_alert.alert.state = (!$scope.control.alert && res_error_id != '') ? true : false;
});
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.countDown().loop();
/* set carousel */
$scope.setCarousel = {
carousel: 0,
index: 0
};
$scope.getCarousel().getCarousel($scope.setCarousel.carousel, function(res_carousel_id) {
$scope.setCarousel.carousel = res_carousel_id;
});
/* set carousel */
/* get product api */
$scope.dataApi = {
reward: {
dataSend: {},
api: "shop/current",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
staff: {
dataSend: {
txt_staff_id: 0
},
api: "staff/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
product: {
dataSend: {
txt_product_id: 0
},
api: "product/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
relation: {
dataSend: {
txt_referral_id: 0
},
api: "referral/relation",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.data = {
attribute: {
state: false,
productId: "",
dataArray: []
},
attribute_custom: {
state: false,
dataArray: []
},
reward: {
quantity_name: 'reward',
type_id: "0",
reward_amount: 0,
reward_percent: 0,
reward_every_price: 0,
point_reward: 0
},
quantity: {
quantity_name: 'quantity',
quantity_min: 1,
quantity_max: 1,
quantity_input: 1,
quantity_select: []
},
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
detail: {
active: '0',
dataArray: [{
index: '0',
state: true,
en: ($scope.description != undefined && $scope.description != "") ? $scope.description : 'Description',
th: '',
data: '',
dataArray: []
}, {
index: '1',
state: true,
en: ($scope.info != undefined && $scope.info != "") ? $scope.info : 'Info',
th: '',
data: '',
dataArray: []
}, {
index: '2',
state: true,
en: ($scope.specification != undefined && $scope.specification != "") ? $scope.specification : 'Specification',
th: '',
data: '',
dataArray: []
}]
}
};
$scope.setBuy = {
promotion_id: '0',
state_active: false,
state_process: false,
state_step: 0,
state_data_font_color: "",
state_data_background_color: "",
stepArray: [{
step: 0,
name: "unset",
icon: $scope._icebuyicon,
state: "เพิ่มในรถเข็น",
data_font_color: "",
data_background_color: ""
}, {
step: 1,
name: "load",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 2,
name: "pass",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 3,
name: "error",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 4,
name: "cart",
icon: "",
state: "ดูรถเข็น",
data_font_color: "",
data_background_color: "primary_darkest"
}]
};
/* - get api product/id start - */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.product.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
$scope.dataApi.product.dataSend.txt_product_id = (res_product_id != false) ? res_product_id : 0;
$scope.getData().dataSend($scope.dataApi.product.api, $scope.dataApi.product.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_product, res_state) {
$scope.dataApi.product.ok = res_ok;
$scope.dataApi.product.dataArray = get_res_api_product.data;
$scope.getData().consoleLog("get_res_api_product", get_res_api_product);
$scope.dataApi.product.dataArrayState = res_state;
/* -- get api shop/current to reward -- */
if (res_ok) {
/* -- get free gift promotion id -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.getData().getFreeGiftPromotionId(get_res_api_product.data.product_promotion, function(res_promotion_id) {
$scope.setBuy.promotion_id = res_promotion_id;
});
});
/* -- get free gift promotion id -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getData().dataSend($scope.dataApi.reward.api, $scope.dataApi.reward.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_shop, res_state) {
$scope.dataApi.reward.ok = res_ok;
$scope.dataApi.reward.dataArray = get_res_api_shop.data;
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getReward().createReward($scope.dataApi.product.dataArray.product_reward, get_res_api_shop.data.shop_point_config, function(res_reward) {
$scope.data.reward.type_id = res_reward.type_id;
$scope.data.reward.reward_amount = res_reward.amount;
$scope.data.reward.reward_percent = res_reward.percent;
$scope.data.reward.reward_every_price = res_reward.every_price;
/* --- Wait product/id ,shop/current ---
/* ---- get attribute ---- */
$scope.getAttribute().productAttribute(get_res_api_product.data.product_attribute, function(res_attribute) {
$scope.data.attribute.dataArray = res_attribute;
$scope.getAttribute().checkMinPrices(get_res_api_product, res_attribute, function(res_data_price, res_state) {
$scope.data.attribute.state = res_state;
$scope.data.product_price = res_data_price.product_price;
$scope.data.product_compare_price = res_data_price.product_compare_price;
$scope.data.sum_product_price = res_data_price.sum_product_price;
$scope.data.sum_product_compare_price = res_data_price.sum_product_compare_price;
$scope.data.sum_product_compare_minus_sum_product_price = res_data_price.sum_product_compare_minus_sum_product_price;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
/* ----- stock ----- */
$scope.data.quantity.quantity_max = res_data_price.product_price.total_stock;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_data_price.product_price.total_stock; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* ----- stock ----- */
});
});
/* ---- get attribute ---- */
/* ---- get attribute custom ---- */
$scope.getAttributeCustom().createArray(get_res_api_product.data.product_custom_templates, function(res_custom_attribute, res_state) {
$scope.data.attribute_custom.state = res_state;
$scope.data.attribute_custom.dataArray = res_custom_attribute;
});
/* ---- get attribute custom ---- */
/* ---- get detail ---- */
$scope.getDetail().getDetail(get_res_api_product.data, function(res_description, res_info, res_state_info, res_specificatio, res_state_specificatio) {
$scope.data.detail.dataArray[0].data = res_description;
$scope.data.detail.dataArray[1].data = res_info;
$scope.data.detail.dataArray[1].state = res_state_info;
$scope.data.detail.dataArray[2].dataArray = res_specificatio;
$scope.data.detail.dataArray[2].state = res_state_specificatio;
});
/* ---- get detail ---- */
/* ---- update state ---- */
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
/* ---- update state ---- */
/* --- Wait product/id ,shop/current --- */
});
});
});
});
/* -- get api shop/current to reward -- */
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.relation.dataArrayState = res_state;
$scope.getData().getReferralId(get_res_api_product.data.product_referral_display, function(res_referral_id) {
$scope.dataApi.relation.dataSend.txt_referral_id = res_referral_id;
$scope.getData().dataSend($scope.dataApi.relation.api, $scope.dataApi.relation.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_referral, res_state) {
$scope.dataApi.relation.ok = res_ok;
$scope.dataApi.relation.dataArray = (res_referral_id != 0) ? get_res_api_referral.data : [];
$scope.dataApi.relation.dataArrayState = res_state;
});
});
});
});
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.getData().getStaffId(get_res_api_product.data.product_staff_id, function(res_staff) {
if (res_staff.status) {
$scope.dataApi.staff.dataArrayState = res_state;
$scope.dataApi.staff.dataSend.txt_staff_id = res_staff.staff_id;
$scope.getData().dataSend($scope.dataApi.staff.api, $scope.dataApi.staff.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, res, res_state) {
$scope.dataApi.staff.ok = res_ok;
$scope.dataApi.staff.dataArray = res.data;
$scope.getData().getNameUrl(res.data.staff_first_name, function(res_staff_first_name_url) {
$scope.dataApi.staff.dataArray.staff_first_name_url = res_staff_first_name_url;
$scope.dataApi.staff.dataArrayState = res_state;
});
});
});
}
});
});
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
} else {
/* ok = false */
if ($scope.dataApi.product.dataArray.length != 0) {
/* product deal to product original */
if ($scope.dataApi.product.dataArray.product_set_array.length != 0) {
$scope.countDown().getNameUrl($scope.dataApi.product.dataArray.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", $scope.dataApi.product.dataArray.product_set_array[0].product_id, res_name);
});
} else {
$scope.pages().pageName("home");
}
} else {
/* product null */
$scope.pages().pageName("home");
}
}
});
});
});
});
/* - get api product/id end - */
/* get product api */
};
return promise;
});_ui_share_app.directive('productDetailPageT', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageT';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
id: '@id',
stilebutton: '@stilebutton',
textbutton: '@textbutton',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope._getPostIdFromURL = function() {
var dataget = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
dataget = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof dataget === 'number' && dataget > 0) {
return dataget;
} else {
var b = a.split("-");
return b[0];
}
};
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id) {
var d = {
'txt_product_id': product_id
};
GAEAPI.get('product/id', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelate = e.data;
console.log("dataRelate", $scope.dataRelate);
}
});
};
$scope.buildDataProductRelate($scope._getPostIdFromURL());
};
return promise;
});_ui_share_app.directive('productDetailPageTsr', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageTsr';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0
};
$scope.login = function() {
var login = {
showLogin: function() {
return UiCustomerBox.delegate.get.isLogin();
},
isLogin: function(callback) {
callback(UiCustomerBox.delegate.get.isLogin());
},
pageLogin: function() {
var _self = this;
_self.isLogin(function(isLogin) {
if (!isLogin) {
$inloginPopupTypeGrip.open();
}
});
}
}
return login;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
}
}
}
return quantity;
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getDataArrayOk: function(output, callback) {
var state = false;
if (output.ok == 1) {
state = true;
callback(output, state);
}
callback(output, state);
},
quantity: function(product_stock_track_type_id, product_total_stock, callback) {
var total_stock = 0;
/* if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
} */
if (product_stock_track_type_id == "0") {
total_stock = 20;
} else if (product_stock_track_type_id == "1") {
if (product_total_stock > 0) {
total_stock = product_total_stock;
} else {
total_stock = 0;
}
}
callback(total_stock);
},
main: function() {
var _self = this;
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
_self.consoleLog("getDataProductArray : output : ", output.data);
_self.getDataArrayOk(output, function(output, state) {
if (state) {
_self.quantity(output.data.product_stock_track_type_id, output.data.product_total_stock, function(total_stock) {
$scope.dataProductBuy.quantity_max = total_stock;
_self.consoleLog("getDataProductArray : output : ", output.data);
$scope.dataArray = output.data;
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
$scope.dataArrayState = _self.stateData(false, true);
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
});
});
} else {
$scope.dataArrayState = _self.stateData(false, true);
}
});
});
}
}
return data;
};
$scope.getDataArray().main();
};
return promise;
});_ui_share_app.directive('productDetailPageTypeA', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageTypeA';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
/* getUrlProductId */
$scope.getUrlProductId = function() {
$scope.consoleLog("getUrlProductId : $routeParams.product_id : ", $routeParams.product_id);
if (typeof $routeParams.product_id !== 'undefined') {
var url_product_id = $routeParams.product_id.split("-");
var product_id = url_product_id[0];
return product_id;
}
};
/* getUrlProductId */
/* consoleLog */
$scope.consoleLog = function(showlog, data) {
console.log(showlog, data);
};
/* consoleLog */
/* getProductId */
$scope.checkProduct = function() {
var cart = {
checkOutputOk: function(output, callback) {
$scope.consoleLog("cartProduct : cartcCtegory : output : ", output);
var output_ok_status = false;
if (output.ok == 1) {
output_ok_status = true;
}
callback(output_ok_status);
},
saveProduct: function(product, callback) {
$scope.consoleLog("cartProduct : cartcCtegory : product : ", product);
var save_product = product;
callback(save_product);
},
checkCtegory: function(category, callback) {
$scope.consoleLog("cartProduct : checkCtegory : category : ", category);
var ctegory_status = false;
if (category.length) {
ctegory_status = true;
}
callback(ctegory_status);
},
getCtegoryId: function(category, callback) {
$scope.consoleLog("cartProduct : checkCtegory : category : ", category);
var referral_id = category[0].referral_id;
callback(referral_id);
},
getReferralRelationId: function(referral_id, callback) {
$scope.consoleLog("cartProduct : getReferralRelationId : referral_id : ", referral_id);
var dataSend = {
'txt_referral_id': referral_id
};
$scope.consoleLog("cartProduct : getReferralRelationId : dataSend : ", dataSend);
GAEAPI.get('referral/relation', dataSend, $scope).then(function(output) {
$scope.consoleLog("cartProduct : getReferralRelationId : output : ", output);
$scope.checkProduct().checkOutputOk(output, function(output_ok_status) {
$scope.consoleLog("cartProduct : getReferralRelationId : checkOutputOk : output_ok_status : ", output_ok_status);
var data_relation = false;
if (output_ok_status) {
$scope.consoleLog("cartProduct : getReferralRelationId : checkOutputOk : ", "PASS");
data_relation = output.data;
callback(data_relation);
} else {
$scope.consoleLog("cartProduct : getReferralRelationId : checkOutputOk : ", "ERROR");
callback(data_relation);
}
});
});
},
checkStock: function(stock, variant, callback) {
$scope.consoleLog("cartProduct : checkStock : stock : ", stock);
$scope.consoleLog("cartProduct : checkStock : variant : ", variant);
var output_stock = "ERROR";
if (variant == 0) {
if (stock == -1) {
output_stock = "Do Not Track Inventory";
} else {
output_stock = "Track Inventory";
}
} else {
output_stock = "Attribute Class";
}
callback(output_stock);
},
calculateStock: function(output_stock, stock, callback) {
$scope.consoleLog("cartProduct : calculateStock : output_stock : ", output_stock);
$scope.consoleLog("cartProduct : calculateStock : stock : ", stock);
var array_stock = [];
var number_stock = 0;
if (output_stock == "Track Inventory") {
if (stock > 20) {
stock = 20;
}
number_stock = stock;
for (var i = 0; i < stock; i++) {
array_stock.push(i + 1);
}
} else if (output_stock == "Do Not Track Inventory") {
number_stock = 20;
for (var i = 0; i < 20; i++) {
array_stock.push(i + 1);
}
}
callback(array_stock, number_stock);
},
checkAttribute: function(attribute, variant, callback) {
$scope.consoleLog("cartProduct : checkAttribute : attribute : ", attribute);
$scope.consoleLog("cartProduct : checkAttribute : variant : ", variant);
var output_attribute = false;
if (attribute.option_data.variant_array.length > 0 && variant > 0) {
output_attribute = true;
}
callback(output_attribute);
},
saveAttribute: function(attribute, callback) {
$scope.consoleLog("cartProduct : saveAttribute : attribute : ", attribute);
var save_attribute = attribute;
callback(save_attribute);
},
checkPrice: function(product_price, variant, callback) {
$scope.consoleLog("cartProduct : checkPrice : attribute : ", attribute);
$scope.consoleLog("cartProduct : checkPrice : variant : ", variant);
var output_attribute = false;
if (attribute.option_data.variant_array.length > 0 && variant > 0) {
output_attribute = true;
}
callback(output_attribute);
},
}
return cart;
};
$scope.dataRelation = false;
$scope.dataProduct = false;
$scope.dataAttribute = false;
$scope.getProductStock = {
array: [],
number: 0
};
$scope.getProductIdState = {
load: true,
done: false
};
$scope.getProductId = function(product_id) {
$scope.consoleLog("getProductId : product_id : ", product_id);
$scope.getProductIdState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': product_id
};
$scope.consoleLog("getProductId : dataSend : ", dataSend);
GAEAPI.get('product/id', dataSend).then(function(output) {
$scope.consoleLog("getProductId : get : output : ", output);
/* checkOutputOk */
$scope.checkProduct().checkOutputOk(output, function(output_ok_status) {
$scope.consoleLog("getProductId : checkOutputOk : output_ok_status : ", output_ok_status);
if (output_ok_status) {
$scope.consoleLog("getProductId : checkOutputOk : ", "PASS");
/* saveProduct */
$scope.checkProduct().saveProduct(output.data, function(save_product) {
$scope.consoleLog("getProductId : saveProduct : save_product : ", save_product);
$scope.dataArray = save_product;
/* checkCtegory */
$scope.checkProduct().checkCtegory(save_product.product_referral_display.category, function(ctegory_status) {
$scope.consoleLog("getProductId : checkCtegory : ctegory_status : ", ctegory_status);
if (ctegory_status) {
$scope.consoleLog("getProductId : checkCtegory : status : ", "PASS");
$scope.checkProduct().getCtegoryId(save_product.product_referral_display.category, function(referral_id) {
$scope.consoleLog("getProductId : checkCtegory : getCtegoryId : referral_id : ", referral_id);
$scope.checkProduct().getReferralRelationId(referral_id, function(data_relation) {
$scope.consoleLog("getProductId : checkCtegory : getReferralRelationId : data_relation : ", data_relation);
$scope.dataRelation = data_relation;
});
});
} else {
$scope.consoleLog("getProductId : checkCtegory : status : ", "ERROR");
}
});
/* checkCtegory */
/* checkStock */
$scope.checkProduct().checkStock(save_product.product_total_stock, save_product.product_total_variant, function(output_stock) {
$scope.consoleLog("getProductId : checkStock : output_stock : ", output_stock);
$scope.checkProduct().calculateStock(output_stock, save_product.product_total_stock, function(array_stock, number_stock) {
$scope.consoleLog("getProductId : calculateStock : array_stock : ", array_stock);
$scope.consoleLog("getProductId : calculateStock : number_stock : ", number_stock);
$scope.getProductStock.array = array_stock;
$scope.getProductStock.number = number_stock;
$scope.consoleLog("getProductId : calculateStock : getProductStock : ", $scope.getProductStock);
});
});
/* checkStock */
/* checkAttribute */
$scope.checkProduct().checkAttribute(save_product.product_attribute, save_product.product_total_variant, function(output_attribute) {
$scope.consoleLog("getProductId : checkAttribute : output_attribute : ", output_attribute);
if (output_attribute) {
$scope.consoleLog("getProductId : checkAttribute : status : ", "PASS");
$scope.checkProduct().saveAttribute(save_product.product_attribute.option_data.pclass_array, function(save_attribute) {
$scope.consoleLog("getProductId : saveAttribute : save_attribute : ", save_attribute);
$scope.dataAttribute = save_attribute;
$scope.consoleLog("getProductId : saveAttribute : dataAttribute : ", $scope.dataAttribute);
});
} else {
$scope.consoleLog("getProductId : checkAttribute : status : ", "ERROR");
}
});
/* checkAttribute */
});
/* saveProduct */
} else {
$scope.consoleLog("getProductId : checkOutputOk : ", "ERROR");
}
$scope.getProductIdState = $scope.StateData(false, true);
});
/* checkOutputOk */
});
};
/* getProductId */
/* StateData */
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
/* StateData */
$scope.getProductId($scope.getUrlProductId());
};
return promise;
});// _data_qty_modelvar $xZoomTimer = null;
// var $xZoomInstance = false;
_ui_share_app.directive('productDetailPageU', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageU';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
stylebutton: '@stylebutton',
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.referral_id = '0';
$scope._shop_id = CUR_THEME.shop_id();
$scope._currency = ($scope._shop_id == "635") ? 0 : 2;
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope.checkSeo = function() {
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
$scope.calculateDiscount = function(expensivePrice, salePrice) {
var dif = expensivePrice - salePrice;
return parseInt(dif * 100 / expensivePrice);
};
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* JQ: Scroll event */
angular.element($window).bind('scroll', function() {
if (!$scope.data) {
return;
}
var curPos = ($(document).scrollTop());
var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));
console.debug("Cur pos", curPos, properHeight);
if (curPos > properHeight) {
angular.element('.block-background .bottom-info').addClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
$scope.data_min = [];
$scope.dataPreserve = false;
/* Get product id from url or from component */
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* Get data by product id */
$scope.data = false;
$scope._dataArrayState = {
load: false,
done: false
};
$scope.quantity_in = function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend, $scope).then(function(e) {
if (e.ok === 1) {
$scope.quantity_in(e.data.product_total_stock, function(total_stock) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
console.log("product/id : ", $scope.data.product_referral_display);
if ($scope.data.product_referral_display.category != undefined) {
if ($scope.data.product_referral_display.category.length != 0) {
$scope.referral_id = $scope.data.product_referral_display.category[0].referral_id;
$scope._getdatamap($scope.data.product_referral_display.category[0].referral_id);
}
}
$scope.show_badge(e.data);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataProductBuy.price = e.data.product_price;
$scope.dataProductBuy.sumprice = e.data.product_price;
});
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d, $scope).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.makeVariantsClick();
$scope.onSelectVariantItems(0, '');
};
$scope.buy_button = false;
$scope.dataVariantsPick = [];
$scope.max_length = 20;
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.testyuyu = 0;
$scope.buy_button = false;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.dsetting').addClass("active");
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._getPostIdFromURL()
}, $scope).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
if (e.data.product_attribute.option_data != 0 && e.data.product_total_variant > 0) {
if (e.data.product_attribute.option_data.variant_array.length != 0 && e.data.product_total_variant > 0) {
var set_varia0 = e.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < e.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseFloat(e.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = e.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = e.data.product_attribute.option_data.variant_array[i];
// $scope.data = $scope.data_min[0];
$scope.data.product_price = $scope.data_min.price;
$scope.data.product_compare_price = $scope.data_min.compare_price;
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = e.data.product_attribute.option_data.variant_array[0];
$scope.data.product_price = $scope.data_min.price;
}
console.log("iujdishjdskd : ", $scope.data_min.price);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
}
}
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
$scope.testyuyu = 0;
$('.d_qty_not_result').removeClass("active");
$('.dsetting').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
$scope.buy_button = true;
} else {
$scope.testyuyu = 0;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric);
}
};
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
$scope.data.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count);
// $scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = 0;
$scope.data.product_compare_price = 0;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope.checkColorConfig = function() {
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.qty_original = 1;
$scope.qty_current = 1;
$scope.viewOptimizeImage = function(size, image_url, image_width) {
if (window.devicePixelRatio >= 2 || parseInt(image_width) <= size) {
return image_url;
}
var a = image_url.split("/"),
b = a[a.length - 1];
a[a.length - 1] = 't' + size + '_' + b;
return a.join("/");
};
$scope.gallerySingleViewIndex = 0;
$scope.switchSingleView = function(idx) {
console.log("$xZoomInstance", $xZoomInstance);
$('.gallery_show_single').css({
'transition': 'all 0.3s',
'opacity': '0'
});
$timeout(function() {
$scope.gallerySingleViewIndex = idx;
$('.gallery_show_single').css({
'opacity': '1'
});
}, 300);
setTimeout(function() {
if ($(window).width() >= 992) {
if ($("img.zoom").attr('data-api-width') > 400 && $("img.zoom").attr('data-api-height') > 400) {
/*$("img.zoom").ezPlus({
'scrollZoom':true,
'responsive':true,
'zoomWindowWidth':400,
'zoomWindowHeight':400,
'zoomWindowOffetx':30,
});*/
$xZoomInstance = $('.zoom').xzoom({
Xoffset: 30,
tint: '#b9b5b3',
});
}
}
}, 300);
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.datamap = [];
$scope._getdatamap = function(dataIn) {
var dataSend = {
'txt_referral_id': dataIn
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
$scope.datamap = output.data;
}
});
}
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
_self.quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
_self.quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity;
_self.upDatePrice();
_self.quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity;
_self.upDatePrice();
_self.quantityBreaks();
}
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.data, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
}
}
return quantity;
};
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".qty_display").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.warning_qty = 0;
$scope.getWarn_qty = function() {
$scope.warning_qty = 1;
};
$scope.ShowWithBadge = false;
$scope.show_badge = function(data) {
if (data.product_badge.length > 0) {
for (var i = 0; i < data.product_badge.length; i++) {
if (data.product_badge[i].badge_id == 18) {
$scope.ShowWithBadge = true;
break;
}
}
} else {
$scope.ShowWithBadge = false;
}
}
};
return promise;
});var $xZoomTimer = null;
var $xZoomInstance = false;
_ui_share_app.directive('productDetailPageUa', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageUa';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
stylebutton: '@stylebutton',
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope.checkSeo = function() {
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.titleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* JQ: Scroll event */
angular.element($window).bind('scroll', function() {
if (!$scope.data) {
return;
}
var curPos = ($(document).scrollTop());
var properHeight = ($('.img_cover').height() * ($('.img_cover').length - 1));
console.debug("Cur pos", curPos, properHeight);
if (curPos > properHeight) {
angular.element('.block-background .bottom-info').addClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').addClass('unactive');
}
} else {
angular.element('.block-background .bottom-info').removeClass('unactive');
if ($(window).width() > 991) {
angular.element('.bottom-buy-overlay').removeClass('unactive');
}
}
});
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/* Slider Send */
$scope.data_min = [];
$scope.dataPreserve = false;
$scope.names = [];
/* Get product id from url or from component */
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
/* Get data by product id */
$scope.data = false;
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend, $scope).then(function(e) {
if (e.ok === 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope.buildVariantOption(e.data);
$scope.getRelation($scope.data.product_referral[0].referral_id);
$scope._getdatamap($scope.data.product_referral_display.category[0].referral_id);
$scope.show_badge(e.data);
$scope.timeCountStart2(e.data);
if(e.data.product_total_variant == 0 && e.data.product_total_stock > 0){
$scope.names = [];
for (var i = 0; i < parseInt(e.data.product_total_stock); i++) {
$scope.names.push(i+1);
}
console.log("nnames stock :",$scope.names);
}
if(e.data.product_total_variant == 0 && e.data.product_total_stock < 0){
$scope.names = [];
for (var i = 0; i < 10; i++) {
$scope.names.push(i+1);
}
console.log("nnames stock :",$scope.names);
}
if(e.data.product_total_variant > 0){
$scope.names = [];
for (var i = 0; i < 10; i++) {
$scope.names.push(i+1);
}
}
}
console.log("detail_id_npd : ",$scope.data);
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope.showPart = "";
$scope.showPart_wan = "";
$scope.showPart_h = "";
$scope.showPart_m = "";
$scope.showPart_s = "";
$scope.countDown = function(settime) {
var time_year = "";
var time_mount = "";
var time_date = "";
var time_hr = "";
var time_mi = "";
var time_se = "";
var timeA = "";
var timeB = "";
var timeC = "";
var timeDifference = "";
var timeDifference_temp = "";
var wan = "";
var l_wan = "";
var hour = "";
var l_hour = "";
var minute = "";
var second = "";
time_year = GAEAPI.time.dateFormat("YYYY", settime.product_lifetime.lifetime_end_time);
time_mount = GAEAPI.time.dateFormat("M", settime.product_lifetime.lifetime_end_time);
time_date = GAEAPI.time.dateFormat("D", settime.product_lifetime.lifetime_end_time);
time_hr = GAEAPI.time.dateFormat("H", settime.product_lifetime.lifetime_end_time);
time_mi = GAEAPI.time.dateFormat("m", settime.product_lifetime.lifetime_end_time);
time_se = GAEAPI.time.dateFormat("s", settime.product_lifetime.lifetime_end_time);
timeA = new Date(); /* วันเวลาปัจจุบัน */
timeB = new Date(time_year, (time_mount - 1), time_date, time_hr, time_mi, time_se, '0');
timeDifference = timeB.getTime() - timeA.getTime();
console.log("timeDifference", timeDifference);
if (timeDifference >= 0) {
timeDifference = timeDifference / 1000;
timeDifference = Math.floor(timeDifference);
wan = Math.floor(timeDifference / 86400);
l_wan = timeDifference % 86400;
hour = Math.floor(l_wan / 3600);
l_hour = l_wan % 3600;
minute = Math.floor(l_hour / 60);
second = l_hour % 60;
$scope.showPart = wan + " วัน " + pad(hour, 2) + " ชั่วโมง " + pad(minute, 2) + " นาที " + pad(second, 2) + " วินาที";
$scope.showPart_wan = wan;
$scope.showPart_h = pad(hour, 2);
$scope.showPart_m = pad(minute, 2);
$scope.showPart_s = pad(second, 2);
if (wan == 0 && hour == 0 && minute == 0 && second == 0) {}
console.log("check_array", $scope.showPart);
}
};
function pad(str, max) {
str = str.toString();
return str.length < max ? pad("0" + str, max) : str;
};
$scope.timeout_promise2 = null;
$scope.timeCountStart2 = function(settime) {
$scope.timeout_promise2 = $timeout(function() {
$scope.countDown(settime);
$scope.timeCountStart2(settime);
}, 1000);
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d, $scope).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.makeVariantsClick();
$scope.onSelectVariantItems(0, '');
};
$scope.buy_button = false;
$scope.dataVariantsPick = [];
$scope.max_length = 20;
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.testyuyu = 0;
$scope.buy_button = false;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.dsetting').addClass("active");
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._getPostIdFromURL()
}, $scope).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
if (e.data.product_attribute.option_data != 0 && e.data.product_total_variant > 0) {
if (e.data.product_attribute.option_data.variant_array.length != 0 && e.data.product_total_variant > 0) {
var set_varia0 = e.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < e.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(e.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = e.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = e.data.product_attribute.option_data.variant_array[i];
// $scope.data = $scope.data_min[0];
$scope.data.product_price = $scope.data_min.price;
$scope.data.product_compare_price = $scope.data_min.compare_price;
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = e.data.product_attribute.option_data.variant_array[0];
$scope.data.product_price = $scope.data_min.price;
}
console.log("iujdishjdskd : ", $scope.data_min.price);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
}
}
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
$scope.testyuyu = 0;
$('.d_qty_not_result').removeClass("active");
$('.dsetting').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
$scope.buy_button = true;
} else {
$scope.testyuyu = 0;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric);
}
};
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
$scope.data.product_total_stock = dataVariants[i].total_stock;
$scope.names = [];
for (var j = 0; j < 10; j++) {
$scope.names.push(j+1);
}
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count);
// $scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = 0;
$scope.data.product_compare_price = 0;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope.checkColorConfig = function() {
return ($('config-color').length) ? true : false;
};
$scope._makeProductToCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.qty_original = 1;
$scope.qty_current = 1;
$scope.viewOptimizeImage = function(size, image_url, image_width) {
if (window.devicePixelRatio >= 2 || parseInt(image_width) <= size) {
return image_url;
}
var a = image_url.split("/"),
b = a[a.length - 1];
a[a.length - 1] = 't' + size + '_' + b;
return a.join("/");
};
$scope.gallerySingleViewIndex = 0;
$scope.switchSingleView = function(idx) {
console.log("$xZoomInstance", $xZoomInstance);
$('.gallery_show_single').css({
'transition': 'all 0.3s',
'opacity': '0'
});
$timeout(function() {
$scope.gallerySingleViewIndex = idx;
$('.gallery_show_single').css({
'opacity': '1'
});
}, 300);
setTimeout(function() {
if ($(window).width() >= 992) {
if ($("img.zoom").attr('data-api-width') > 400 && $("img.zoom").attr('data-api-height') > 400) {
/*$("img.zoom").ezPlus({
'scrollZoom':true,
'responsive':true,
'zoomWindowWidth':400,
'zoomWindowHeight':400,
'zoomWindowOffetx':30,
});*/
$xZoomInstance = $('.zoom').xzoom({
Xoffset: 30,
tint: '#b9b5b3',
});
}
}
}, 300);
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.redirectCheckout = function(p,q){
window.location.href = GURL.base_url() + "checkout?pdata="+p+'-'+q;
};
$scope.datamap = [];
$scope._getdatamap = function(dataIn) {
var dataSend = {
'txt_referral_id': dataIn
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
$scope.datamap = output.data;
}
});
}
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
var check_num = 1;
if($(".d_qty_i").find('select').val() != undefined && $(".d_qty_i").find('select').val() != ''){
check_num = $(".d_qty_i").find('select').val().substr(7);
}else{
$(".d_qty_i").find('select').val("number:1");
$(".d_qty_i").find('select').selectedIndex = "2";
}
console.log("shdgshdgsh :",check_num);
return parseInt(check_num);
// return $(".qty_display").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 9) {
i = 9;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('select[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('select[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
// alert(i);
console.log("data_set array test : ",i);
$scope._data_qty_selected = i;
// parseInt(e.val());
// alert(i);
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
alert("กรุณาเลือกตัวเลือกให้ครบถ้วน");
};
$scope.warning_qty = 0;
$scope.getWarn_qty = function() {
$scope.warning_qty = 1;
};
$scope.ShowWithBadge = false;
$scope.show_badge = function(data) {
if (data.product_badge.length > 0) {
for (var i = 0; i < data.product_badge.length; i++) {
if (data.product_badge[i].badge_id == 18) {
$scope.ShowWithBadge = true;
break;
}
}
} else {
$scope.ShowWithBadge = false;
}
}
};
return promise;
});var $xZoomTimer = null;
var $xZoomInstance = false;
_ui_share_app.directive('productDetailPageUb', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageUb';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
findVariantsData: function(attributeOption, dataVariants, callback) {
var _self = this;
var variants = dataVariants;
_self.consoleLog("findVariantsData : variants : ", variants);
var variantsOut = [];
for (var i = 0; i < variants.length; i++) {
var optionJson = angular.fromJson(variants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : variants[i] : ", variants[i]);
variantsOut = variants[i];
break;
}
}
callback(variantsOut);
},
checkOption: function(variants_total, callback) {
var state = false;
if (variants_total == 0) {
state = true;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = false;
if (stateIn == false && quantity_max > 0) {
state = true;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, function(variantsOut) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataArray.product_price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = false;
if (variants_total == 0) {
state = true;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = false;
if (stateIn == true && quantity_max > 0) {
state = true;
}
callback(state);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
_self.consoleLog("getDataProductArray : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
});
});
});
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
});
}
}
return data;
};
$scope.getDataArray().main();
};
return promise;
});var $xZoomTimer = null;
var $xZoomInstance = false;
_ui_share_app.directive('productDetailPageUc', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageUc';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon : '@icon',
stylebutton : '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
findVariantsData: function(attributeOption, dataVariants, callback) {
var _self = this;
var variants = dataVariants;
_self.consoleLog("findVariantsData : variants : ", variants);
var variantsOut = [];
for (var i = 0; i < variants.length; i++) {
var optionJson = angular.fromJson(variants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : variants[i] : ", variants[i]);
variantsOut = variants[i];
break;
}
}
callback(variantsOut);
},
checkOption: function(variants_total, callback) {
var state = false;
if (variants_total == 0) {
state = true;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = false;
if (stateIn == false && quantity_max > 0) {
state = true;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, function(variantsOut) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataArray.product_price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = $scope.dataProductBuy.quantity_max;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 20;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = false;
if (variants_total == 0) {
state = true;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = false;
if (stateIn == true && quantity_max > 0) {
state = true;
}
callback(state);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
_self.getDataProductArray('product/id', function(output) {
_self.consoleLog("getDataProductArray : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
});
});
});
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
});
}
}
return data;
};
$scope.getDataArray().main();
};
return promise;
});var $xZoomTimer = null;
var $xZoomInstance = false;
_ui_share_app.directive('productDetailPageUd', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'productDetailPageUd';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
icon: '@icon',
stylebutton: '@stylebutton'
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.shopPointConfig = [];
$scope.navigationBar = [];
$scope.dataArray = [];
$scope.dataArrayTags = [];
$scope.dataArrayState = {
load: false,
done: false
};
$scope.dataProductBuy = {
inputQuantity: 1,
quantity: 1,
price: 0,
sumprice: 0,
quantity_min: 0,
quantity_max: 0,
result_price: 0
};
$scope.showTab = {
activeTab: 'description',
dataTab: [{
en: 'description',
th: 'รายละเอียดสินค้า',
data: ''
}, {
en: 'info',
th: 'วิธีการชำระเงินและวิธีการจัดส่ง',
data: ''
}]
};
$scope.attribute = {
state: false,
attributeOption: [],
variants: 'description',
variantsPick: [],
dataVariants: [],
variantsTotal: 0
};
$scope.buy = {
state: false,
attribute: false
};
$scope.processBuy = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
onClickFalse: function() {
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
}
}
return functionIn;
};
$scope.attributeOption = function() {
var functionIn = {
consoleLog: function(name, data) {
console.log(name, data);
},
checkVariantsPick: function(variantsPick) {
if (variantsPick.length != 0) {
var state = 0;
for (var i = 0; i < variantsPick.length; i++) {
if (variantsPick[i] == "") {
state = state + 1;
}
}
if (state == 0) {
return true
} else {
return false
}
} else {
return false
}
},
compareArray: function(attributeOption, optionJson) {
if (!optionJson) return false;
if (attributeOption.length != optionJson.length) return false;
for (var i = 0, l = attributeOption.length; i < l; i++) {
if (attributeOption[i] instanceof Array && optionJson[i] instanceof Array) {
if (!compareArray(attributeOption[i], optionJson[i])) return false;
} else if (attributeOption[i] != optionJson[i]) {
return false;
}
}
return true;
},
checkAttributeOption: function(attributeOption, attributeOptionLength, callback) {
var _self = this;
var attribute = (attributeOption.length == attributeOptionLength) ? true : false;
for (var i = 0; i < attributeOption.length; i++) {
_self.consoleLog("checkAttributeOption : attributeOption[i] : ", attributeOption[i]);
if (attributeOption[i] == undefined) {
attribute = false;
}
}
callback(attribute);
},
findVariantsData: function(attributeOption, dataVariants, attributeOptionLength, callback) {
var _self = this;
_self.consoleLog("findVariantsData : attributeOption : ", attributeOption);
_self.consoleLog("findVariantsData : dataVariants : ", dataVariants);
_self.consoleLog("findVariantsData : attributeOptionLength : ", attributeOptionLength);
_self.checkAttributeOption(attributeOption, attributeOptionLength, function(res_attribute_option) {
_self.consoleLog("checkAttributeOption : callback : res_attribute_option ", res_attribute_option);
var variantsOut = [];
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (_self.compareArray(attributeOption, optionJson)) {
_self.consoleLog("findVariantsData : dataVariants[i] : ", dataVariants[i]);
variantsOut = dataVariants[i];
break;
}
}
callback(variantsOut, res_attribute_option);
});
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var _self = this;
var state = true;
_self.consoleLog("checkTotalStock : index : ", stateIn);
_self.consoleLog("checkTotalStock : quantity_max : ", quantity_max);
if (stateIn == false && quantity_max > 0) {
state = false;
}
callback(state);
},
onClickOption: function($index, option_id) {
var _self = this;
_self.consoleLog("onClickOption : index : ", $index);
_self.consoleLog("onClickOption : option_id : ", option_id);
$scope.attribute.variantsPick[$index] = option_id;
_self.consoleLog("onClickOption : $scope.attribute.variantsPick[$index] : ", $scope.attribute.variantsPick[$index]);
if ($scope.attribute.attributeOption.length >= $scope.attribute.variantsPick.length) {
if (_self.checkVariantsPick($scope.attribute.variantsPick)) {
_self.consoleLog("onClickOption : if : $scope.attribute.attributeOption.length : ", $scope.attribute.attributeOption.length);
_self.consoleLog("onClickOption : if : $scope.attribute.variantsPick.length : ", $scope.attribute.variantsPick.length);
_self.findVariantsData($scope.attribute.variantsPick, $scope.attribute.dataVariants, $scope.attribute.attributeOption.length, function(variantsOut, res_attribute_option) {
_self.consoleLog("onClickOption : if : findVariantsData : variantsOut : ", variantsOut);
_self.consoleLog("onClickOption : if : findVariantsData : res_attribute_option : ", res_attribute_option);
if (variantsOut.length != 0 && res_attribute_option) {
$scope.dataArray.product_id = variantsOut.product_id;
$scope.dataArray.product_sku = variantsOut.sku;
$scope.dataProductBuy.price = variantsOut.price;
$scope.dataArray.product_compare_price = variantsOut.compare_price;
$scope.dataProductBuy.quantity_max = variantsOut.total_stock;
_self.consoleLog("zzzz onClickOption : variantsOut : ", variantsOut);
_self.consoleLog("zzzz onClickOption : variantsOut : ", $scope.dataArray.product_image);
if (variantsOut.variant_image != 0) {
if ($scope.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataArray.product_image.length; i++) {
if ($scope.dataArray.product_image[i].image_id == variantsOut.variant_image[0].image_id) {
$scope.slickImageGoto(variantsOut.variant_image[0].image_id);
}
}
}
}
_self.checkOption($scope.attribute.variantsTotal, function(state) {
_self.checkTotalStock(state, variantsOut.total_stock, function(state) {
$scope.buy.state = state;
if ($scope.attribute.variantsTotal != 0) {
$scope.buy.attribute = true;
}
});
});
} else if (variantsOut.length == 0 && res_attribute_option) {
$scope.dataArray.product_id = 0;
$scope.dataArray.product_sku = '';
$scope.dataProductBuy.price = 0;
$scope.dataArray.product_compare_price = 0;
$scope.dataProductBuy.quantity_max = 1;
$scope.buy.state = true;
$scope.buy.attribute = true;
}
$scope.quantity().input();
});
}
}
}
}
return functionIn;
};
$scope.quantity = function() {
var quantity = {
upDatePrice: function() {
$scope.dataProductBuy.sumprice = $scope.dataProductBuy.price * $scope.dataProductBuy.quantity;
},
input: function() {
var _self = this;
if ($scope.dataProductBuy.inputQuantity > 0) {
console.log("quantity : input : inputQuantity : ", $scope.dataProductBuy.inputQuantity);
console.log("quantity : input : quantity_max : ", $scope.dataProductBuy.quantity_max);
if ($scope.dataProductBuy.inputQuantity <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.inputQuantity;
} else {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity_max;
$scope.dataProductBuy.inputQuantity = ($scope.dataProductBuy.quantity_max != 0) ? $scope.dataProductBuy.quantity_max : 1;
}
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
} else {
console.log("quantity : input : ", $scope.dataProductBuy.inputQuantity);
if ($scope.dataProductBuy.inputQuantity <= 0) {
$scope.dataProductBuy.quantity = 1;
} else {
$scope.dataProductBuy.inputQuantity = 1;
$scope.dataProductBuy.quantity = 1;
}
/* $scope.dataProductBuy.quantity = 1;
$scope.dataProductBuy.inputQuantity = 1; */
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
minus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity - 1) != $scope.dataProductBuy.quantity_min) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity - 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
},
plus: function() {
var _self = this;
if (($scope.dataProductBuy.quantity + 1) <= $scope.dataProductBuy.quantity_max) {
$scope.dataProductBuy.quantity = $scope.dataProductBuy.quantity + 1;
_self.upDatePrice();
$scope.getDataArray().quantityBreaks();
}
}
}
return quantity;
};
$scope.carouselId = '';
$scope.slickCarouselId = function() {
if ($scope.carouselId == '') {
$scope.carouselId = Math.floor((Math.random() * 9999) + 1000);
return $scope.carouselId;
} else {
return $scope.carouselId;
}
};
$scope.slickImageGoto = function(idx) {
$scope.cover_lists_index = idx;
setTimeout(function() {
$scope.cover_lists_index = idx;
// $('[data-key="' + $scope.carouselId + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope.cover_lists_index = 0;
$scope.imageCarousel = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.imageCarouselBar = function(cover_in, carousel_in) {
$(cover_in).css('height', '0');
$(cover_in).css('opacity', '0');
setTimeout(function() {
var carousel = $(carousel_in);
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
infinite: true,
slidesToShow: 6,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 4,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 3,
}
}]
}).closest('section').addClass('active');
$(cover_in).css('height', 'auto');
$(cover_in).css('opacity', '1');
}, 1000);
};
$scope.getDataArray = function() {
var data = {
consoleLog: function(name, data) {
console.log(name, data);
},
stateData: function(loadIn, doneIn) {
var state = {
load: loadIn,
done: doneIn
};
return state;
},
getProductId: function(callback) {
var params = $routeParams;
var product_id = params.product_id.split("-", 1).join("");
callback(product_id)
},
getApi: function(api, dataSend, callback) {
var _self = this;
GAEAPI.get(api, dataSend, $scope).then(function(res) {
_self.consoleLog("getData : res : ", res);
callback(res);
});
},
getDataProductArray: function(api, callback) {
var _self = this;
var output = [];
_self.getProductId(function(product_id) {
var dataSendProductId = {
'txt_product_id': product_id
};
_self.getDataArray(api, dataSendProductId, function(output) {
callback(output);
});
});
},
getNavigationBar: function(product_referral_display, api, callback) {
var _self = this;
var output = [];
_self.consoleLog("product_referral_display : ", product_referral_display);
if (product_referral_display.category.length != 0) {
var dataSendReferralId = {
'txt_referral_id': product_referral_display.category[0].referral_id
};
_self.getDataArray(api, dataSendReferralId, function(output) {
callback(output);
});
} else {
callback(output);
}
},
getDataArray: function(api, dataSend, callback) {
GAEAPI.get(api, dataSend, $scope).then(function(output) {
callback(output);
});
},
getQuantityBreak: function(api, callback) {
var _self = this;
_self.getProductId(function(product_id) {
var customerId = 0;
if (UiCustomerBox.delegate.get.isLogin()) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
}
var dataSendQuantityBreak = {
'txt_product_id': product_id,
'txt_customer_id': customerId
};
var quantity_break = [];
_self.getDataArray(api, dataSendQuantityBreak, function(output) {
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
});
},
quantity: function(product_total_stock, callback) {
var total_stock = 0;
if (product_total_stock == -1) {
total_stock = 9999;
} else if (product_total_stock != -1 && product_total_stock != 0) {
total_stock = product_total_stock;
}
callback(total_stock);
},
quantityBreaks: function() {
var _self = this;
var productQuantityBreak = GAEAPI.getValueForKey($scope.dataArray, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope.data, "product_price", 0);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if ($scope.dataProductBuy.quantity >= amount_end) {
$scope.dataProductBuy.result_price = unit_price;
}
}
},
showTab: function(input, callback) {
var description = input.product_description;
var info = input.product_more_info;
callback(description, info);
},
productTab: function(product_tags, callback) {
var _self = this;
_self.consoleLog("productTab : product_tags : ", product_tags);
var productTab = [];
if (product_tags != undefined) {
if (product_tags != "") {
productTab = product_tags.split(",");
callback(productTab);
} else {
callback(productTab);
}
} else {
callback(productTab);
}
},
getAttribute: function(input, callback) {
var _self = this;
var attribute = [];
var variants = [];
var variants_total = 0;
_self.consoleLog("getAttribute : input : ", input);
if (input.product_attribute.option_data !== 'undefined' && input.product_total_variant > 0) {
_self.consoleLog("getAttribute : input.product_attribute.option_data : ", input.product_attribute.option_data);
_self.consoleLog("getAttribute : input.product_total_variant : ", input.product_total_variant);
if (input.product_attribute.option_data.pclass_array !== 'undefined' && input.product_attribute.option_data.pclass_array.length) {
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array : ", input.product_attribute.option_data.pclass_array);
_self.consoleLog("getAttribute : input.product_attribute.option_data.pclass_array.length : ", input.product_attribute.option_data.pclass_array.length);
attribute = input.product_attribute.option_data.pclass_array;
variants = input.product_attribute.option_data.variant_array;
variants_total = input.product_total_variant;
}
}
callback(variants_total, attribute, variants);
},
checkOption: function(variants_total, callback) {
var state = true;
if (variants_total == 0) {
state = false;
}
callback(state);
},
checkTotalStock: function(stateIn, quantity_max, callback) {
var state = true;
if (stateIn == true && quantity_max > 0) {
state = false;
}
callback(state);
},
checkPriceMin: function(variant, callback) {
var _self = this;
var priceMin = parseFloat(variant[0].price);
var comparePriceMin = parseFloat(variant[0].compare_price);
for (var i = 0; i < variant.length; i++) {
_self.consoleLog('checkPriceMin : priceMin : ', priceMin);
_self.consoleLog('checkPriceMin : variant[i].price : ', variant[i].price);
if (priceMin >= parseFloat(variant[i].price)) {
priceMin = parseFloat(variant[i].price);
comparePriceMin = parseFloat(variant[i].compare_price);
}
}
callback(priceMin, comparePriceMin);
},
main: function() {
var _self = this;
$scope.slickCarouselId();
$scope.dataArrayState = _self.stateData(true, false);
var dataSend = {};
_self.getApi("shop/current", dataSend, function(res_api) {
$scope.shopPointConfig = res_api.data.shop_point_config;
_self.getDataProductArray('product/id', function(output) {
if (output.data.length != 0) {
_self.consoleLog("getDataProductArray : output : ", output.data);
_self.quantity(output.data.product_total_stock, function(total_stock) {
_self.consoleLog("quantity : total_stock : ", total_stock);
$scope.dataProductBuy.quantity_max = total_stock;
$scope.dataArray = output.data;
if (output.data.product_image.length != 0) {
$scope.slickImageGoto(output.data.product_image[0].image_id);
}
_self.productTab(output.data.product_tags, function(productTab) {
$scope.dataArrayTags = productTab;
_self.showTab(output.data, function(description, info) {
$scope.showTab.dataTab[0].data = description;
$scope.showTab.dataTab[1].data = info;
});
_self.getAttribute(output.data, function(variants_total, attribute, variants) {
_self.consoleLog("getAttribute : variants_total : ", variants_total);
_self.consoleLog("getAttribute : attribute : ", attribute);
_self.consoleLog("getAttribute : variants : ", variants);
_self.checkOption(variants_total, function(state) {
_self.checkTotalStock(state, total_stock, function(state) {
$scope.buy.state = state;
$scope.attribute.attributeOption = attribute;
$scope.attribute.dataVariants = variants;
$scope.attribute.variantsTotal = variants_total;
if (variants_total > 0) {
_self.checkPriceMin(variants, function(res_price, res_compare_price) {
$scope.dataProductBuy.price = res_price;
$scope.dataProductBuy.sumprice = res_price;
$scope.dataArray.product_compare_price = res_compare_price;
});
} else {
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
}
});
});
});
$scope.dataProductBuy.price = output.data.product_price;
$scope.dataProductBuy.sumprice = output.data.product_price;
_self.getQuantityBreak('product/quantity_break', function(quantity_break) {
_self.consoleLog("getQuantityBreak : output : ", quantity_break);
$scope.dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.dataProductBuy.result_price = quantity_break[0].unit_price;
}
});
_self.getNavigationBar(output.data.product_referral_display, 'referral/relation', function(output) {
_self.consoleLog("getNavigationBar : output : ", output.data);
$scope.navigationBar = output.data;
$scope.dataArrayState = _self.stateData(false, true);
});
});
});
} else {
window.history.back();
}
});
});
}
}
return data;
};
$scope.getDataArray().main();
$scope.getShopPointConfigRewardState = function(productPrice) {
var state = 'RewardShop';
var sup_price = parseInt(productPrice);
if ($scope.shopPointConfig.length != 0) {
if (parseInt($scope.shopPointConfig.er_rate) != 0 && parseInt($scope.shopPointConfig.er_earn) != 0) {
if (sup_price > 0) {
if (parseInt($scope.shopPointConfig.er_rate) <= sup_price) {
return 'RewardShop';
} else {
return 'High';
}
} else {
return 'High';
}
} else {
return 'RewardProduct';
}
} else {
return 'RewardProduct';
}
};
$scope.getShopPointConfigReward = function(productPrice) {
var sup_price = 0;
var er_rate = 0;
var er_earn = 0;
var mathFloor = 0;
var point = 0;
if ($scope.shopPointConfig.length != 0) {
sup_price = productPrice;
er_rate = parseInt($scope.shopPointConfig.er_rate);
er_earn = parseInt($scope.shopPointConfig.er_earn);
mathFloor = Math.floor(sup_price / er_rate);
point = mathFloor * er_earn;
return point;
} else {
return point;
}
}
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});_ui_share_app.directive('productDetailPageV', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageV';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
if (product_tag != '') {
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
} else {
$scope.dataRelatetagState = $scope.StateData(false, true);
$scope.dataRelatetag = [];
return;
}
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
// for (var i = 0; i < output.data.dataList.length; i++) {
// if(output.data.dataList){
// $scope.dataRelatetag = output.data.dataList;
// }
// }
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.data_min = [];
$scope._dataArrayTags = [];
$scope.data_video_id = false;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
// if ($scope._dataArray.product_hightlight_video_embed != "") {
// $scope._dataArray.product_image.unshift({
// image_url: $scope.imgPath + 'img-play.png',
// product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
// });
// }
$scope._dataArrayRelateProductId = res.data.product_id;
if (res.data.product_tags != "") {
$scope._dataArrayTags = res.data.product_tags.split(",");
}
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags, $scope._dataArray.product_referral_display.category[0].referral_id);
if (res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// alert("x๊อบไข่สด");
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ", $scope.data_min);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 98) {
i = 98;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
if (i > 98) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 99;
e.val(99);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.onClickVariantItems();
};
$scope.dataVariantsPick = [];
$scope.buy_button = false;
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
$scope.buy_button = false;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.buy_button = true;
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
//window.location.href='login';
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
/* $("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width")); */
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('productDetailPageVa', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageVa';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d ,$scope).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
if (product_tag != '') {
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
} else {
$scope.dataRelatetagState = $scope.StateData(false, true);
$scope.dataRelatetag = [];
return;
}
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend ,$scope).then(function(output) {
if (output.ok == 1) {
// for (var i = 0; i < output.data.dataList.length; i++) {
// if(output.data.dataList){
// $scope.dataRelatetag = output.data.dataList;
// }
// }
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope.data_relate_pro = [];
$scope._getDataRelate = function(id, limit) {
var dataSend = {
'txt_product_id': id,
'txt_limit': limit,
};
GAEAPI.get('product/related', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
// $scope.$apply(function() {
$scope.data_relate_pro = output.data.lists;
// });
}
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.data_min = [];
$scope._dataArrayTags = [];
$scope.data_video_id = false;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend ,$scope).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
// if ($scope._dataArray.product_hightlight_video_embed != "") {
// $scope._dataArray.product_image.unshift({
// image_url: $scope.imgPath + 'img-play.png',
// product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
// });
// }
$scope._dataArrayRelateProductId = res.data.product_id;
if (res.data.product_tags != "") {
$scope._dataArrayTags = res.data.product_tags.split(",");
}
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags, $scope._dataArray.product_referral_display.category[0].referral_id);
$scope._getDataRelate($scope.data_video_id,8);
// if (res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0) {
// if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// // alert("x๊อบไข่สด");
// var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
// for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
// if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
// set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
// $scope.data_min = res.data.product_attribute.option_data.variant_array[i];
// }
// }
// if ($scope.data_min.length == 0) {
// $scope.data_min = res.data.product_attribute.option_data.variant_array[0];
// }
// console.log("iujdishjdskd : ", $scope.data_min);
// $scope.buildVariantOption(res.data);
// }
// $scope._dataArray.product_price = $scope.data_min.price;
// $scope._dataArray.product_compare_price = $scope.data_min.compare_price;
// }
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 98) {
i = 98;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
if (i > 98) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 99;
e.val(99);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.onClickVariantItems();
};
$scope.dataVariantsPick = [];
$scope.buy_button = false;
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
$scope.buy_button = false;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.buy_button = true;
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
//window.location.href='login';
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
/* $("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width")); */
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('productDetailPageVb', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageVb';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
imgcart: '@imgcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
if (product_tag != '') {
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
} else {
$scope.dataRelatetagState = $scope.StateData(false, true);
$scope.dataRelatetag = [];
return;
}
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
// for (var i = 0; i < output.data.dataList.length; i++) {
// if(output.data.dataList){
// $scope.dataRelatetag = output.data.dataList;
// }
// }
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope.qtyProduct = 1;
$scope.result_price = 0;
$scope.checkQty = function(qtyProduct) {
var productQuantityBreak = GAEAPI.getValueForKey($scope._data_product_id, "product_quantity_break", []);
var quantityBreak = GAEAPI.getValueForKey(productQuantityBreak, "quantity_break", []);
var product_price = GAEAPI.getValueForKey($scope._data_product_id, "product_price", 0);
console.log("quantityBreak : ", quantityBreak);
console.log("quantityBreak : qtyProduct : ", qtyProduct);
for (var index in quantityBreak) {
var rowData = quantityBreak[index];
var amount_end = parseInt(GAEAPI.getValueForKey(rowData, "amount_end", 0));
var unit_price = parseInt(GAEAPI.getValueForKey(rowData, "unit_price", 0));
if (qtyProduct >= amount_end) {
$scope.result_price = unit_price;
}
}
};
$scope.getQuantityBreak = function(dataSend, api, callback) {
console.log("getQuantityBreak : dataSend : ", dataSend, " api : ", api);
var quantity_break = [];
GAEAPI.get(api, dataSend).then(function(output) {
console.log("getQuantityBreak : output : ", output);
if (output.ok == 1) {
quantity_break = output.data.quantity_break;
callback(quantity_break);
}
callback(quantity_break);
});
callback(quantity_break);
};
$scope.checkLogin = function(urlApi, product_id, status_login, callback) {
var dataSend = {};
var productId = parseInt(product_id);
var statusLogin = status_login;
var api = urlApi;
var customerId = 0;
if (api == 'product/id') {
dataSend = {
'txt_product_id': productId,
}
console.log("checkLogin : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
callback(statusLogin, customerId, dataSend, api);
} else if (api == 'product/quantity_break') {
if (statusLogin) {
customerId = parseInt(UiCustomerBox.delegate.get.me().customer_id);
dataSend = {
'txt_product_id': productId,
'txt_customer_id': customerId,
}
console.log("checkLogin : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
callback(statusLogin, customerId, dataSend, api);
} else {
console.log("checkLogin : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
callback(statusLogin, customerId, dataSend, api);
}
}
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.data_min = [];
$scope._dataArrayTags = [];
$scope.data_video_id = false;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
// if ($scope._dataArray.product_hightlight_video_embed != "") {
// $scope._dataArray.product_image.unshift({
// image_url: $scope.imgPath + 'img-play.png',
// product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
// });
// }
$scope._dataArrayRelateProductId = res.data.product_id;
if (res.data.product_tags != "") {
$scope._dataArrayTags = res.data.product_tags.split(",");
}
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.checkLogin('product/quantity_break', dataSend.txt_product_id, UiCustomerBox.delegate.get.isLogin() , function(statusLogin, customerId, dataSend, api) {
console.log("getProductId checkLogin callback : statusLogin : ", statusLogin, " customerId : ", customerId, " dataSend : ", dataSend, " api : ", api);
if (statusLogin) {
console.log("getProductId checkLogin : IF");
$scope.getQuantityBreak(dataSend, api, function(quantity_break) {
console.log("getProductId checkLogin callback getQuantityBreak : quantity_break : ", quantity_break);
$scope._dataArray.product_quantity_break.quantity_break = quantity_break;
if (quantity_break.length) {
$scope.result_price = quantity_break[0].unit_price;
}
});
} else {
console.log("getProductId checkLogin : ELSE")
}
});
$scope.productRelateTag($scope._dataArray.product_tags, $scope._dataArray.product_referral_display.category[0].referral_id);
if (res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// alert("x๊อบไข่สด");
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ", $scope.data_min);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 98) {
i = 98;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
if (i > 98) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 99;
e.val(99);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.onClickVariantItems();
};
$scope.dataVariantsPick = [];
$scope.buy_button = false;
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
$scope.buy_button = false;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.buy_button = true;
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
//window.location.href='login';
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
/* $("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width")); */
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
$scope.Relate_dataArray = [];
$scope._getRelateDataArray = function(id) {
var dataSend = {
'txt_product_id': id,
'txt_limit': 10,
};
// $scope.consoleLog('_getDataArray dataSend', dataSend);
GAEAPI.get('product/related', dataSend, $scope).then(function(output) {
// $scope.consoleLog('_getDataArray output', output);
if (output.ok == 1) {
// $scope.$apply(function() {
$scope.Relate_dataArray = output.data.lists;
// $scope.consoleLog('_getDataArray _dataArray', $scope._dataArray);
console.log("slofkdsfdfds;lfsdk;f : ", $scope.Relate_dataArray);
// });
}
// $scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope._getRelateDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope.buildTitleUrl = function (str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
};
return promise;
});_ui_share_app.directive('productDetailPageVc', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageVc';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
if (product_tag != '') {
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
} else {
$scope.dataRelatetagState = $scope.StateData(false, true);
$scope.dataRelatetag = [];
return;
}
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
// for (var i = 0; i < output.data.dataList.length; i++) {
// if(output.data.dataList){
// $scope.dataRelatetag = output.data.dataList;
// }
// }
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.getNameBadgeId = function(id) {
if (id == '72') {
return 'New Arrival'
} else if (id == '74') {
return 'Recommend'
} else if (id == '75') {
return 'Best Seller'
} else {
return 'null';
}
};
$scope.data_min = [];
$scope._dataArrayTags = [];
$scope.data_video_id = false;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
console.log("product/id : dataSend : ", dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
console.log("product/id : output : ", res);
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
// if ($scope._dataArray.product_hightlight_video_embed != "") {
// $scope._dataArray.product_image.unshift({
// image_url: $scope.imgPath + 'img-play.png',
// product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
// });
// }
$scope._dataArrayRelateProductId = res.data.product_id;
if (res.data.product_tags != "") {
$scope._dataArrayTags = res.data.product_tags.split(",");
}
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags, $scope._dataArray.product_referral_display.category[0].referral_id);
if (res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// alert("x๊อบไข่สด");
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ", $scope.data_min);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 98) {
i = 98;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
if (i > 98) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 99;
e.val(99);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.onClickVariantItems();
};
$scope.dataVariantsPick = [];
$scope.buy_button = false;
$scope.showComment = false;
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
$scope.buy_button = false;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.buy_button = true;
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.getShowComment = function(show) {
$scope.showComment = true;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
//window.location.href='login';
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
/* $("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width")); */
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});_ui_share_app.directive('productDetailPageVca', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageVca';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
promotelink: '@promotelink',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
if (product_tag != '') {
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
} else {
$scope.dataRelatetagState = $scope.StateData(false, true);
$scope.dataRelatetag = [];
return;
}
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
// for (var i = 0; i < output.data.dataList.length; i++) {
// if(output.data.dataList){
// $scope.dataRelatetag = output.data.dataList;
// }
// }
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.getNameBadgeId = function(id) {
if (id == '72') {
return 'New Arrival'
} else if (id == '74') {
return 'Recommend'
} else if (id == '75') {
return 'Best Seller'
} else {
return 'null';
}
};
$scope.data_min = [];
$scope._dataArrayTags = [];
$scope.data_video_id = false;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
console.log("product/id : dataSend : ", dataSend);
GAEAPI.get('product/id', dataSend).then(function(res) {
console.log("product/id : output : ", res);
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
// if ($scope._dataArray.product_hightlight_video_embed != "") {
// $scope._dataArray.product_image.unshift({
// image_url: $scope.imgPath + 'img-play.png',
// product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
// });
// }
$scope._dataArrayRelateProductId = res.data.product_id;
if (res.data.product_tags != "") {
$scope._dataArrayTags = res.data.product_tags.split(",");
}
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags, $scope._dataArray.product_referral_display.category[0].referral_id);
if (res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
// alert("x๊อบไข่สด");
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia0) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
console.log("iujdishjdskd : ", $scope.data_min);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 98) {
i = 98;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
if (i > 98) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 99;
e.val(99);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.onClickVariantItems();
};
$scope.dataVariantsPick = [];
$scope.buy_button = false;
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
$scope.buy_button = false;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.buy_button = true;
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
//window.location.href='login';
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
/* $("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width")); */
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});_ui_share_app.directive('productDetailPageVx', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageVx';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.backgroundImageId = '';
$scope.toBackgroundImageId = function(id) {
console.log('toBackgroundImageId : id : ', id);
$scope.backgroundImageId = id;
};
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
if (product_tag != '') {
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
} else {
$scope.dataRelatetagState = $scope.StateData(false, true);
$scope.dataRelatetag = [];
return;
}
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
// for (var i = 0; i < output.data.dataList.length; i++) {
// if(output.data.dataList){
// $scope.dataRelatetag = output.data.dataList;
// }
// }
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.data_min = [];
$scope._dataArrayTags = [];
$scope.data_video_id = false;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
// if ($scope._dataArray.product_hightlight_video_embed != "") {
// $scope._dataArray.product_image.unshift({
// image_url: $scope.imgPath + 'img-play.png',
// product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
// });
// }
$scope._dataArrayRelateProductId = res.data.product_id;
if (res.data.product_tags != "") {
$scope._dataArrayTags = res.data.product_tags.split(",");
}
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags, $scope._dataArray.product_referral_display.category[0].referral_id);
if (res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0) {
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
console.log("res.data.product_attribute.option_data.variant_array : ", res.data.product_attribute.option_data.variant_array);
var set_varia0 = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseFloat(set_varia0) >= parseFloat(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia0 = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
if ($scope.data_min.length != 0) {
if ($scope.data_min.variant_image.length != 0) {
$scope.toBackgroundImageId($scope.data_min.variant_image[0].image_id);
}
}
console.log("iujdishjdskd : ", $scope.data_min);
// $scope.buildVariantOption(e.data);
// $scope.buildMultipleQuantity(e.data);
$scope.buildVariantOption(res.data);
}
$scope._dataArray.product_price = $scope.data_min.price;
$scope._dataArray.product_compare_price = $scope.data_min.compare_price;
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseFloat(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseFloat(e.val());
if (i > 19) {
i = 19;
}
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseFloat(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
if (i > 19) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 20;
e.val(20);
}, 600);
}
};
$scope.slickGoto = function(idx) {
console.log('slickGoto : idx : ', idx);
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
// $scope.onClickVariantItems();
};
$scope.dataVariantsPick = [];
$scope.buy_button = false;
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
$scope.buy_button = false;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.buy_button = true;
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
var count = 0;
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
console.log("findVariantsData : dataVariants : ", dataVariants);
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope._dataArray.product_total_stock = dataVariants[i].total_stock;
// if (dataVariants[i].variant_image.length != 0) {
// $scope._dataArray.product_image = dataVariants[i].variant_image;
// $scope.mkCarousel();
// }
if (dataVariants[i].variant_image.length != 0) {
$scope.toBackgroundImageId(dataVariants[i].variant_image[0].image_id);
}
$scope.max_length = dataVariants[i].total_stock;
break;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
// alert(count + " and " + dataVariants.length);
// $scope.data.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = 0;
$scope._dataArray.product_compare_price = 0;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.mkCarousel = function() {
var key = $('[data-key="' + $scope._key() + '"]');
var gall = $('[data-gall="' + $scope._key() + '"]');
key.css('height', '0');
key.css('opacity', '0');
gall.css('height', '0');
gall.css('opacity', '0');
setTimeout(function() {
key.css('height', 'auto');
key.css('opacity', '1');
gall.css('height', 'auto');
gall.css('opacity', '1');
}, 1500);
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
//window.location.href='login';
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
/* $("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width")); */
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('productDetailPageW', function($rootScope, $routeParams, sliderProvider, $componentProductDetail, $location) {
var templateName = 'productDetailPageW';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
imgcart: '@imgcart',
view: '@viewcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
if ($scope.imgcart != undefined) {
$scope.setimg_cart = $scope.icnPath + $scope.imgcart;
}
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope.names = 20;
$scope._dataArray_tag = [];
$scope._dataArray = [];
$scope.data_video_id = false;
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
$scope.data_video_id = $scope._dataArray.product_id;
/*if ($scope._dataArray.product_hightlight_video_embed != "") {
$scope._dataArray.product_image.unshift({
image_url: $scope.imgPath + 'img-play.png',
product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
});
}*/
$scope._dataArray_tag = res.data.product_tags.split(",");
$scope._dataArrayRelateProductId = res.data.product_id;
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags);
$scope.buildVariantOption(res.data);
if (res.data.product_attribute.length != 0) {
$scope.buildMultipleQuantity(res.data);
}
if (res.data.product_total_variant == 0 && res.data.product_total_stock > 0) {
$scope.names = parseInt(res.data.product_total_stock);
console.log("nnames stock :", $scope.names);
}
if (res.data.product_total_variant == 0 && res.data.product_total_stock < 0) {
$scope.names = 20;
console.log("nnames stock :", $scope.names);
}
if (res.data.product_total_variant > 0) {
$scope.names = 20;
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '#gallery_slider[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (isNaN(i)) {
i = 0;
}
if (i < $scope.names) {
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
}
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.onSelectVariantItems(0, '');
};
$scope.dataVariantsPick = [];
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var _self = dataVariants[i];
var _self_option = angular.fromJson(_self.option_id_json);
console.log("selectedOptionTextJson: option", dataVariants);
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
if (dataVariants[i].total_stock != 0) {
$scope.names = dataVariants[i].total_stock;
} else {
$scope.names = 20;
}
$scope.switchQuantityByKey('-' + variantsPick.join('-') + '-');
console.log("selectedOptionTextJson: option", _self);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope._dataArray.product_image.length; im++) {
if ($scope._dataArray.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
$scope._slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.gallery-thumbnail .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.currentOptionQtyPick = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
return e.val();
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [],
p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
};
$scope.dataVariantsPick = [];
$scope.electric = [];
$scope.testyuyu = 0;
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.testyuyu = 0;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._idUrl($scope._viewRouteParams().product_id)
}).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
$scope.testyuyu = 0;
$('.d_qty_not_result').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
} else {
$scope.testyuyu = 0;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric);
}
};
$scope.ifOptionUnSelect = function() {
return ($('.d_qty_price.active.inin').length > 0) ? true : false;
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
$("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width"));
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('productDetailPageWa', function($rootScope, $routeParams, sliderProvider, $componentProductDetail, $location) {
var templateName = 'productDetailPageWa';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
imgcart: '@imgcart',
view: '@viewcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
if ($scope.imgcart != undefined) {
$scope.setimg_cart = $scope.icnPath + $scope.imgcart;
}
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
/*if ($scope._dataArray.product_hightlight_video_embed != "") {
$scope._dataArray.product_image.unshift({
image_url: $scope.imgPath + 'img-play.png',
product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
});
}*/
$scope._dataArrayRelateProductId = res.data.product_id;
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
if(res.data.product_attribute.option_data != 0 && res.data.product_total_variant > 0){
if (res.data.product_attribute.option_data.variant_array.length != 0 && res.data.product_total_variant > 0) {
}
}
$scope.productRelateTag($scope._dataArray.product_tags);
$scope.buildVariantOption(res.data);
if (res.data.product_attribute.length != 0) {
$scope.buildMultipleQuantity(res.data);
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '#gallery_slider[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.onSelectVariantItems(0, '');
};
$scope.dataVariantsPick = [];
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var _self = dataVariants[i];
var _self_option = angular.fromJson(_self.option_id_json);
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope.switchQuantityByKey('-' + variantsPick.join('-') + '-');
console.log("selectedOptionTextJson: option", _self);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope._dataArray.product_image.length; im++) {
if ($scope._dataArray.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
$scope._slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.gallery-thumbnail .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.currentOptionQtyPick = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
return e.val();
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [],
p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
};
$scope.dataVariantsPick = [];
$scope.electric = [];
$scope.testyuyu = 0;
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.testyuyu = 0;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._idUrl($scope._viewRouteParams().product_id)
}).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
$scope.testyuyu = 0;
$('.d_qty_not_result').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
} else {
$scope.testyuyu = 0;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric);
}
};
$scope.ifOptionUnSelect = function() {
return ($('.d_qty_price.active.inin').length > 0) ? true : false;
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
$("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width"));
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('productDetailPageWorldcamera', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageWorldcamera';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
type: '@type',
cart: '@cart',
buycol: '@buycol',
buyicon: '@buyicon',
buytext: '@buytext',
viewcarttext: '@viewcarttext',
buylogin: '@buylogin',
currency: '@currency',
checkstaff: '@checkstaff',
language: '@language',
btnstyle: '@btnstyle',
maxstock: '@maxstock',
videotext: '@videotext',
description: '@description',
info: '@info',
specification: '@specification',
textbrand:'@textbrand',
navigationhover: '@navigationhover',
imageappcoverchecked: '@imageappcoverchecked',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http, $location ,share) {
$scope._console = (window.location.hostname == "localhost") ? true : false;
$scope._component = "productDetailPageWorldcamera";
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
/* scope */
$scope._name = ($scope.name != undefined && $scope.name != "") ? $scope.name : "default";
$scope._type = $scope._componentType + $scope._class + ".html";
$scope._cart = ($scope.cart != undefined && $scope.cart != "") ? $scope.cart : "trumpComponentCarts";
$scope._buycol = ($scope.buycol != undefined && $scope.buycol != "") ? parseInt($scope.buycol) : 15;
$scope._maxstock = ($scope.maxstock != undefined && $scope.maxstock != "") ? parseInt($scope.maxstock) : 20;
$scope._btnstyle = ($scope.btnstyle != undefined && $scope.btnstyle != "") ? $scope.btnstyle : "filled_button_large";
$scope._buylogin = ($scope.buylogin == "true" || $scope.buylogin == "t") ? true : false;
$scope._checkstaff = ($scope.checkstaff == "true" || $scope.checkstaff == "t") ? true : false;
$scope._currency = ($scope.currency != undefined && $scope.currency != "") ? $scope.currency : "THB";
$scope._buyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope.buyicon : "icnt_outline_cart01_dark.png";
$scope._buytext = ($scope.buytext != undefined && $scope.buytext != "") ? $scope.buytext : "เพิ่มในรถเข็น";
$scope._viewcarttext = ($scope.viewcarttext != undefined && $scope.viewcarttext != "") ? $scope.viewcarttext : "ดูรถเข็น";
$scope._videotext = ($scope.videotext != undefined && $scope.videotext != "") ? $scope.videotext : "Video";
$scope._icebuyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope._icnPath + $scope.buyicon : $scope._icnPath + "icnt_outline_cart01_dark.png";
$scope._language = ($scope.language != undefined && $scope.language != "") ? (($scope.language == "en") ? "en" : "th") : "th";
$scope._textbrand = ($scope.textbrand != undefined && $scope.textbrand != "") ? $scope.textbrand : "Brand";
$scope._navigationhover = ($scope.navigationhover != undefined && $scope.navigationhover != "") ? $scope.navigationhover : "primary";
$scope._imageappcoverchecked = ($scope.imageappcoverchecked == "true" || $scope.imageappcoverchecked == "t") ? true : false;
/* scope */
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getNamePage: function(arr) {
var str = [];
for (var i = 0; i < arr.length; i++) {
if (i != 0) {
str.push(arr[i]);
}
}
return str.join(" ");
},
getProductId: function(params, callback) {
var _self = this;
var product_id = (params.product_id != undefined) ? params.product_id.split("-", 1).join("") : false;
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
getReferralId: function(productReferralDisplay, callback) {
var _self = this;
var referral_id = 0;
if (productReferralDisplay.length != 0) {
if (productReferralDisplay.category != undefined) {
if (productReferralDisplay.category.length != 0) {
referral_id = productReferralDisplay.category[0].referral_id
}
}
}
callback(referral_id);
},
getStaffId: function(staffId, callback) {
var _self = this;
var res_staff = {
staff_id: (staffId != 0 && staffId != '' && staffId != undefined) ? staffId : '0',
status: (staffId != 0 && staffId != '' && staffId != undefined) ? true : false
}
callback(res_staff);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getCarousel = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carouselA: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
fade: true,
dots: false,
arrows: false,
infinite: true,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselB: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: true,
arrows: true,
infinite: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselD: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: true,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselBar: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: false,
infinite: false,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 6,
slidesToScroll: 6,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 5,
slidesToScroll: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 4,
slidesToScroll: 4,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
}
}]
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
slickCarousel: function(carousel, index) {
var _self = this;
$scope.setCarousel.index = index;
setTimeout(function() {
$('[data-key="' + carousel + '"]').slick('slickGoTo', index);
}, 100);
},
prevIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != 0) ? image_index - 1 : image - 1;
_self.consoleLog("prevIndex index", $scope.setCarousel.index);
},
nextIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != (image - 1)) ? image_index + 1 : 0;
_self.consoleLog("nextIndex index", $scope.setCarousel.index);
}
}
return getFunction;
};
$scope.getAttribute = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
productAttribute: function(productAttribute, callback) {
var _self = this;
var attribute = {
option_name: "",
option_attribute: []
};
if (productAttribute.option_data != undefined) {
if (productAttribute.option_data.variant_array != undefined && productAttribute.option_data.variant_array.length != 0) {
for (var a = 0; a < productAttribute.option_data.pclass_array.length; a++) {
attribute.option_name = attribute.option_name.concat(productAttribute.option_data.pclass_array[a].pclass_name, " ");
}
for (var b = 0; b < productAttribute.option_data.variant_array.length; b++) {
var product_attribute = {
product_id: productAttribute.option_data.variant_array[b].product_id,
product_sku: productAttribute.option_data.variant_array[b].sku,
product_title: "",
product_price: parseFloat(productAttribute.option_data.variant_array[b].price),
product_compare_price: parseFloat(productAttribute.option_data.variant_array[b].compare_price),
product_total_stock: parseFloat(productAttribute.option_data.variant_array[b].total_stock),
product_image: productAttribute.option_data.variant_array[b].variant_image
}
for (var c = 0; c < productAttribute.option_data.variant_array[b].option_name_array.length; c++) {
product_attribute.product_title = product_attribute.product_title.concat(productAttribute.option_data.variant_array[b].option_name_array[c], " ");
}
attribute.option_attribute.push(product_attribute);
}
}
}
_self.consoleLog("productAttribute attribute ", attribute);
callback(attribute);
},
checkDiscountPrice: function(productDiscount, resPrice, resComparePrice, callback) {
var _self = this;
var price = 0;
var compare_price = 0;
if (productDiscount.length == 0) {
price = parseFloat(resPrice);
compare_price = parseFloat(resComparePrice);
} else {
if (productDiscount.discount_type_id == '101') {
price = parseFloat(resPrice) - parseFloat(productDiscount.discount_price);
compare_price = parseFloat(resPrice);
} else if (productDiscount.discount_type_id == '102') {
price = (parseFloat(resPrice) * ((100 - parseFloat(productDiscount.discount_percent)) / 100));
compare_price = parseFloat(resPrice);
}
}
callback(price, compare_price);
},
checkMinPrice: function(option, callback) {
var _self = this;
var price_min = parseFloat(option.option_attribute[0].product_price);
var compare_price_min = parseFloat(option.option_attribute[0].product_compare_price);
var total_stock = parseFloat(option.option_attribute[0].product_total_stock);
for (var a = 0; a < option.option_attribute.length; a++) {
if (price_min >= parseFloat(option.option_attribute[a].product_price)) {
price_min = parseFloat(option.option_attribute[a].product_price);
compare_price_min = parseFloat(option.option_attribute[a].product_compare_price);
total_stock = parseFloat(option.option_attribute[a].product_total_stock);
}
}
_self.consoleLog("checkPriceMin price_min ", price_min);
_self.consoleLog("checkPriceMin compare_price_min ", compare_price_min);
_self.consoleLog("checkPriceMin total_stock ", total_stock);
callback(price_min, compare_price_min, total_stock);
},
getTotalStock: function(totalStock, mixStock, callback) {
var _self = this;
var total_stock = (totalStock > 0) ? ((totalStock <= mixStock) ? totalStock : mixStock) : ((totalStock == -1) ? mixStock : totalStock);
callback(total_stock);
},
checkMinPrices: function(api, attribute, callback) {
var _self = this;
var dataPrice = {
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
}
}
if (attribute.option_attribute.length == 0) {
_self.checkDiscountPrice(api.data.product_discount, api.data.product_price, api.data.product_compare_price, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(api.data.product_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, false);
});
});
});
});
});
} else {
_self.checkMinPrice(attribute, function(res_price_min, res_compare_price_min, res_total_stock) {
_self.checkDiscountPrice(api.data.product_discount, res_price_min, res_compare_price_min, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(res_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, true);
});
});
});
});
});
});
}
},
priceIncludes: function(price, includes, callback) {
var _self = this;
var priceToString = (price == null) ? 0 : price;
_self.consoleLog('priceIncludes priceToString : ', priceToString);
callback(priceToString.toString().includes(includes));
},
checkPrice: function(price, callback) {
var _self = this;
_self.priceIncludes(price, '.', function(res) {
_self.consoleLog("checkPrice res ", res);
callback((!res) ? 0 : 2);
});
},
onSelectOption: function(productId) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = productId;
_self.consoleLog("onSelectOption productId ", productId);
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
for (var a = 0; a < $scope.data.attribute.dataArray.option_attribute.length; a++) {
_self.consoleLog("onSelectOption option_attribute ", $scope.data.attribute.dataArray.option_attribute[a]);
if ($scope.data.attribute.dataArray.option_attribute[a].product_id == productId) {
if ($scope.data.attribute.dataArray.option_attribute[a].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var b = 0; b < $scope.dataApi.product.dataArray.product_image.length; b++) {
if ($scope.dataApi.product.dataArray.product_image[b].image_id == $scope.data.attribute.dataArray.option_attribute[a].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, b);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[a].product_price, $scope.data.attribute.dataArray.option_attribute[a].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[a].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
break;
}
}
},
onClickOption: function(index) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.data.attribute.productId = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
if ($scope.data.attribute.dataArray.option_attribute[index].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataApi.product.dataArray.product_image.length; i++) {
if ($scope.dataApi.product.dataArray.product_image[i].image_id == $scope.data.attribute.dataArray.option_attribute[index].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, i);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[index].product_price, $scope.data.attribute.dataArray.option_attribute[index].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[index].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
}
}
return getFunction;
};
$scope.getAttributeCustom = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
createArray: function(productCustomTemplates, callback) {
var _self = this;
var custom_attributes = [];
if (productCustomTemplates.templates.length != 0) {
angular.forEach(productCustomTemplates.templates, function(item, index) {
if (item.option_sets.length != 0) {
_self.getAttributes(item.option_sets, function(res_attributes) {
custom_attributes = custom_attributes.concat(res_attributes);
});
}
});
/* if (productCustomTemplates.templates[0].option_sets.length != 0) {
_self.getAttributes(productCustomTemplates.templates[0].option_sets, function(res_attributes) {
custom_attributes = res_attributes;
});
} */
}
_self.consoleLog("createArray : productCustomTemplates", productCustomTemplates);
_self.consoleLog("createArray : custom_attributes", custom_attributes);
callback(custom_attributes, true);
},
formatAttribute: function(index, optionSubsetIndex, setType, optionSetArray, callback) {
var _self = this;
var set_id = (setType == 'attribute') ? optionSetArray.set_id : optionSetArray.subset_id;
var attribute = {
attribute_index: index,
attribute_option_subset_index: optionSubsetIndex,
active_option_id: (optionSetArray.option_data.select_id != 0) ? optionSetArray.option_data.select_id : "-1",
active_option_index: -1,
active_option_index_str: "-1",
active_textarea: "",
active_array: [],
set_id: set_id,
name: optionSetArray.name,
set_type: optionSetArray.ss_type,
option: []
}
callback(attribute);
},
getOption: function(index, optionDataArray, callback) {
var _self = this;
var options = {
index: index,
ss_data_id: optionDataArray.ss_data_id,
name: optionDataArray.name,
image: optionDataArray.image,
price: optionDataArray.price,
compare_price: 0,
total_stock: 0
}
callback(options);
},
getActive: function(index, activeOptionId, activeOptionIdIn, optionDataArray, callback) {
var _self = this;
var actives_index = (optionDataArray.ss_data_id == activeOptionId) ? index : activeOptionIdIn;
var actives = (optionDataArray.ss_data_id != activeOptionId) ? "0" : "1";
callback(actives_index, actives);
},
getAttributes: function(optionSetArray, callback) {
var _self = this;
var attributes = [];
for (var index = 0; index < optionSetArray.length; index++) {
_self.formatAttribute(index, 0, 'attribute', optionSetArray[index], function(res_attribute) {
if (optionSetArray[index].option_subsets.length != 0) {
for (var option_subset_index = 0; option_subset_index < optionSetArray[index].option_subsets.length; option_subset_index++) {
_self.formatAttribute(index, option_subset_index, res_attribute.set_type, optionSetArray[index].option_subsets[option_subset_index], function(res_attribute_sub) {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_subsets[option_subset_index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute_sub.active_option_id, active_option_id, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute_sub.option = options;
res_attribute_sub.active_option_index = active_option_id;
res_attribute_sub.active_option_index_str = String(active_option_id);
res_attribute_sub.active_array = active_option_array;
attributes.push(res_attribute_sub);
});
}
} else {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute.active_option_id, active_option_id, optionSetArray[index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute.option = options;
res_attribute.active_option_index = active_option_id;
res_attribute.active_option_index_str = String(active_option_id);
res_attribute.active_array = active_option_array;
attributes.push(res_attribute);
}
});
}
callback(attributes)
},
getformatQuantity: function(index, attributeCustom, callback) {
var _self = this;
var quantity = {
name: String(index + 1),
dataArray: attributeCustom
}
callback(quantity);
},
onClickRadio: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickRadio : index", index);
_self.consoleLog("onClickRadio : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickRadio : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickDropdown: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickDropdown : index", index);
_self.consoleLog("onClickDropdown : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickDropdown : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickCheckbox: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickCheckbox : index", index);
_self.consoleLog("onClickCheckbox : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i == parseInt(index_option)) ? (($scope.data.attribute_custom.dataArray[index].active_array[i] != "0") ? "0" : "1") : $scope.data.attribute_custom.dataArray[index].active_array[i];
}
_self.consoleLog("onClickCheckbox : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
}
}
return getFunction;
};
$scope.getReward = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
momentUnix: function(callback) {
var _self = this;
var now = moment().unix();
callback(now);
},
getCalculator: function(sumProductPrice, reward, callback) {
var _self = this;
_self.consoleLog("getCalculator : sumProductPrice", sumProductPrice);
_self.consoleLog("getCalculator : reward", reward);
var point_reward = 0;
if (reward.type_id == "100") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
} else if (reward.type_id == "101") {
point_reward = reward.reward_amount;
} else if (reward.type_id == "102") {
point_reward = (reward.reward_percent * sumProductPrice.price) / 100;
} else if (reward.type_id == "103") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
}
_self.consoleLog("getCalculator : point_reward", point_reward);
callback(point_reward);
},
getProductReward: function(now, productReward, callback) {
var _self = this;
var reward = {
reward_length: (productReward.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(productReward.reward_lifetime.lifetime_start_time);
reward.lifetime_end_time = parseInt(productReward.reward_lifetime.lifetime_end_time);
reward.type_id = productReward.reward_type_id;
reward.amount = parseInt(productReward.reward_amount);
reward.percent = parseInt(productReward.reward_percent);
reward.every_price = parseInt(productReward.reward_every_price);
}
_self.consoleLog("getProductReward : reward", reward);
callback(reward);
},
getPointConfig: function(now, shopPointConfig, callback) {
var _self = this;
var reward = {
reward_length: (shopPointConfig.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(shopPointConfig.er_from);
reward.lifetime_end_time = parseInt(shopPointConfig.er_to);
reward.type_id = "100";
reward.amount = parseInt(shopPointConfig.er_earn);
reward.every_price = parseInt(shopPointConfig.er_rate);
}
_self.consoleLog("getPointConfig : reward", reward);
callback(reward);
},
checkPointReward: function(reward, callback) {
var _self = this;
var state = false;
if (reward.reward_length) {
var start = reward.lifetime_start_time < reward.lifetime_time && reward.lifetime_start_time != 0;
var end = (reward.lifetime_end_time != -1) ? reward.lifetime_time <= reward.lifetime_end_time && reward.lifetime_end_time != 0 : true;
if (start && end) {
if (reward.type_id == "100") {
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
} else if (reward.type_id == "101") {
var amount = reward.amount != 0;
if (amount) {
state = true;
}
} else if (reward.type_id == "102") {
var percent = reward.percent != 0;
if (percent) {
state = true;
}
} else if (reward.type_id == "103") {
var percent = reward.percent != 0;
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
}
}
}
callback(state);
},
checkReward: function(rewardProduct, rewardPointConfig, callback) {
var _self = this;
_self.consoleLog("checkReward : rewardProduct", rewardProduct);
_self.consoleLog("checkReward : rewardPointConfig", rewardPointConfig);
var reward = {
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
_self.checkPointReward(rewardProduct, function(res_state_product) {
_self.checkPointReward(rewardPointConfig, function(res_state_point_config) {
if (res_state_point_config) {
reward.type_id = rewardPointConfig.type_id;
reward.type_id = rewardPointConfig.type_id;
reward.amount = rewardPointConfig.amount;
reward.percent = rewardPointConfig.percent;
reward.every_price = rewardPointConfig.every_price;
} else if (res_state_product) {
reward.type_id = rewardProduct.type_id;
reward.amount = rewardProduct.amount;
reward.percent = rewardProduct.percent;
reward.every_price = rewardProduct.every_price;
}
_self.consoleLog("checkReward : reward", reward);
callback(reward);
});
});
},
checkRewardType: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.momentUnix(function(now) {
_self.getProductReward(now, productReward, function(res_reward_product) {
_self.getPointConfig(now, shopPointConfig, function(res_reward_point_config) {
_self.checkReward(res_reward_product, res_reward_point_config, function(res_reward) {
callback(res_reward);
});
});
});
});
},
createReward: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.consoleLog("createReward : productReward", productReward);
_self.consoleLog("createReward : shopPointConfig", shopPointConfig);
_self.checkRewardType(productReward, shopPointConfig, function(res_reward) {
_self.consoleLog("createReward : res_reward", res_reward);
callback(res_reward);
});
}
}
return getFunction;
};
$scope.getQuantity = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
upDateReward: function() {
var _self = this;
},
upDateReward: function() {
var _self = this;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
},
upDatePrice: function() {
var _self = this;
var product_price = $scope.data.product_price.price * $scope.data.quantity.quantity_input;
var product_compare_price = $scope.data.product_compare_price.price * $scope.data.quantity.quantity_input;
$scope.getAttribute().checkPrice(product_price, function(res_price_ecimals) {
$scope.data.sum_product_price.price = product_price;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals;
$scope.getAttribute().checkPrice(product_compare_price, function(res_compare_price_ecimals) {
$scope.data.sum_product_compare_price.price = product_compare_price;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((product_compare_price - product_price) > 0) ? product_compare_price - product_price : 0;
$scope.getAttribute().checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.upDateReward();
});
});
});
},
input: function(quantityInput) {
var _self = this;
quantityInput = (quantityInput == null) ? 1 : parseInt(quantityInput);
_self.consoleLog("input : quantityInput", quantityInput);
if (quantityInput != null) {
if (quantityInput >= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_max;
}
if (quantityInput <= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
} else {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
_self.upDatePrice();
},
minus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input - 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_min", $scope.data.quantity.quantity_min);
if (quantity >= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
},
plus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input + 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_max", $scope.data.quantity.quantity_max);
if (quantity <= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
}
}
return getFunction;
};
$scope.getBuy = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = params.product_id.split("-", 1).join("");
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
postApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.post(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
UiCartProductAdd: function(productId, quantityInput, promotionId, customOptions, callback) {
quantityInput = (quantityInput > $scope.data.quantity.quantity_max) ? $scope.data.quantity.quantity_max : quantityInput;
UiCart.delegate.product.add(productId, quantityInput, promotionId, function(res_data) {
callback(res_data);
});
},
isLogin: function(callback) {
var buy_login = $scope._buylogin;
var is_login = UiCustomerBox.delegate.get.isLogin();
var is_state = (buy_login) ? (!is_login) ? true : false : false;
callback(is_state);
},
formLogin: function(is_state, callback) {
if (is_state) {
$inloginPopup.open();
}
callback(is_state);
},
getProductStaffId(staff_id_check, callback) {
var res_staff_id_check = staff_id_check;
var res_staff_id = $scope.dataApi.product.dataArray.product_staff_id;
var res_is_state = (res_staff_id != 0 && res_staff_id != '0' && res_staff_id != undefined) ? true : false;
callback(res_staff_id_check, res_staff_id, res_is_state);
},
isStaffId: function(staff_id_check, callback) { /* todo */
var _self = this;
_self.getProductStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
callback(res_staff_id_check, res_staff_id, res_is_state);
});
},
checkCartDuplicateStaff: function(res_staff_id_check, txt_staff_id, res_is_state, callback) {
var _self = this
var res_is_state = true;
if (res_staff_id_check) {
var dataSend = {
'txt_staff_id': txt_staff_id,
};
_self.dataSend("cart/duplicate_staff", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
res_is_state = res_api.data.duplicate;
callback(res_is_state);
});
});
} else {
callback(res_is_state);
}
},
showAlert: function(res_staff_id_check, res_staff_id, res_is_state, res_api, callback) {
var res_state = (res_staff_id_check) ? ((res_api) ? ((res_is_state) ? false : true) : true) : false;
if (res_state) {
if (!res_api) {
if (res_staff_id != '0' && res_staff_id != 0) {
$scope.controlAlert().alert('002');
} else {
$scope.controlAlert().alert('003');
}
} else {
if (!res_is_state) {
$scope.controlAlert().alert('003');
}
}
}
callback(res_state);
},
checkStaff: function(callback) {
var _self = this
var staff_id_check = $scope._checkstaff;
var res_check = false;
_self.isStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
_self.checkCartDuplicateStaff(res_staff_id_check, res_staff_id, res_is_state, function(res_api) {
_self.showAlert(res_staff_id_check, res_staff_id, res_is_state, res_api, function(res_state) {
res_check = res_state;
callback(res_check);
});
});
});
},
isProgress: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isProgress(productId)) ? true : false;
_self.consoleLog("isProgress : productId", productId);
_self.consoleLog("isProgress : state", state);
callback(state);
},
isSelected: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
_self.consoleLog("isSelected : productId", productId);
_self.consoleLog("isSelected : state", state);
callback(state);
},
isSelectedReturn: function(productId) {
var _self = this;
var ui_cart_state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
if (!$scope.setBuy.state_active) {
$scope.setBuy.state_active = true;
var state_process = $scope.setBuy.state_process;
var state_step = $scope.setBuy.state_step;
if (ui_cart_state && !state_process && state_step != 4) /* cart */ {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else if (!ui_cart_state && !state_process && state_step != 0) /* unset */ {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
} else {
$scope.setBuy.state_active = false;
}
}
return ui_cart_state;
},
updateState: function(productId) {
_self = this;
_self.isSelected(productId, function(res_state) {
if (res_state) {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
}
return res_state;
});
},
uiCart: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
_self.UiCartProductAdd(productId, quantityInput, promotionId, customOptions, function(res_data) {
if (res_data) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
}
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
},
postApiA: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
var custom_options = {};
var dataSend = {
'txt_product_id': productId,
'txt_amount': quantityInput,
'txt_is_clear_cart_before': "0",
'txt_custom_options_json': JSON.stringify(custom_options)
};
_self.dataSend("cart/product_add", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
if (res_ok) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
});
},
onProcess: function(data, productId, quantityInput, promotionId, customOptions) {
var _self = this;
_self.isLogin(function(res_is_login) {
_self.formLogin(res_is_login, function(res_form) {
_self.checkStaff(function(res_is_state) {
if (!$scope.setBuy.state_process && !res_form && !res_is_state) {
$scope.setBuy.state_process = true;
_self.isSelected(productId, function(res_state) {
if (!res_state) {
_self.onLoad($scope.setBuy.state_step, function(res_step) {
if (data.sum_product_price.price != 0 && data.quantity.quantity_max != 0 && (data.attribute.state == (data.attribute.productId != ''))) {
/* UiCart */
_self.uiCart(productId, quantityInput, promotionId, customOptions, res_step);
/* api post offline */
/*_self.postApiA(productId, quantityInput, promotionId, customOptions, res_step); */
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
} else {
$scope.setBuy.state_process = false;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
} else if ($scope._cart == "viewcart") {
_self.viewCart($scope._cart);
}
}
});
}
});
});
});
},
onTimeout: function(time, callback) {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
callback(true)
}, time);
},
onUnset: function(step, callback) {
var _self = this;
step = (step == 0) ? 0 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onLoad: function(step, callback) {
var _self = this;
step = (step == 0 || step == 1) ? 1 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onPass: function(step, callback) {
var _self = this;
step = (step == 1 || step == 2) ? 2 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onError: function(step, callback) {
var _self = this;
step = (step == 1 || step == 3) ? 3 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onCart: function(step, callback) {
var _self = this;
step = (step == 2 || step == 4) ? 4 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
trumpComponentCarts: function() {
var controlCart = share.getTrumpComponentCarts();
var component_carts = $('.cover-cards').hasClass('active');
if (!component_carts) {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.cart();
}
} else {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.load();
}
}
},
viewCart: function(viewcart) {
var _self = this;
_self.pageUrl(viewcart);
},
locationUrlReplace: function(page) {
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
main: function(callback) {
var _self = this;
}
}
return getFunction;
};
$scope.getDetail = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getDetail: function(api, callback) {
var _self = this;
var description = api.product_description;
var info = api.product_more_info;
var specificatio = [];
if (api.product_attribute.specification_data != undefined) {
specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? api.product_attribute.specification_data.pclass_array : [];
}
var state_specificatio = false;
if (api.product_attribute.specification_data != undefined) {
state_specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? true : false;
}
var state_info = (api.product_is_more_info == 1) ? true : false;
_self.consoleLog("getDetail : description", description);
_self.consoleLog("getDetail : info", info);
_self.consoleLog("getDetail : state_info", state_info);
_self.consoleLog("getDetail : specificatio", specificatio);
_self.consoleLog("getDetail : state_specificatio", state_specificatio);
callback(description, info, state_info, specificatio, state_specificatio);
},
onClickDetail: function(index) {
var _self = this;
$scope.data.detail.active = index;
_self.consoleLog("onClickDetail : data.detail.active", $scope.data.detail.active);
}
}
return getFunction;
};
$scope.pages = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageName: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page_name);
},
pageUrl: function(page_name, id, name_url) {
var _self = this;
var page = page_name + "/" + id + "-" + name_url;
_self.locationUrlReplace(page);
}
}
return getFunction;
};
$scope.countDown = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getLocation: function(callback) {
var _self = this;
var res_location = $location;
_self.consoleLog("getLocation", "res_location", res_location);
callback(res_location);
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
_self.consoleLog("getRouteParams", "params", params);
callback(params);
},
getLocationUrlNameProductDetail: function(callback) {
var _self = this;
_self.getRouteParams(function(res_params) {
_self.getLocation(function(res_location) {
var url_page_name = "/product-detail/" + res_params.product_id;
var res_url_name_product_detail = (res_location.url() == url_page_name) ? true : false;
_self.consoleLog("getLocationUrlNameProductDeal", "res_url_name_product_detail", res_url_name_product_detail);
callback(res_url_name_product_detail);
});
});
},
getUnix: function(callback) {
var _self = this;
var now = moment().unix();
_self.consoleLog("getUnix", "now", now);
callback(now);
},
getCountDown: function(now, product_lifetime, callback) {
var _self = this;
var countdown_unix = parseInt(product_lifetime.lifetime_end_time) - now;
var milliseconds = moment.duration(countdown_unix * 1000, "milliseconds");
var res_countdown = ((milliseconds.days() <= 9) ? '0' + milliseconds.days() : milliseconds.days());
res_countdown = res_countdown + ' : ' + ((milliseconds.hours() <= 9) ? '0' + milliseconds.hours() : milliseconds.hours());
res_countdown = res_countdown + ' : ' + ((milliseconds.minutes() <= 9) ? '0' + milliseconds.minutes() : milliseconds.minutes());
res_countdown = res_countdown + ' : ' + ((milliseconds.seconds() <= 9) ? '0' + milliseconds.seconds() : milliseconds.seconds());
_self.consoleLog("getCountDown", "res_countdown", res_countdown);
callback(res_countdown, countdown_unix);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
countDownByProduct: function(now, data_array, callback) {
var _self = this;
if (data_array.length != 0) {
if (data_array.product_lifetime.length != 0) {
_self.getCountDown(now, data_array.product_lifetime, function(res_count_down, res_countdown_unix) {
data_array.product_lifetime.lifetime_countdown = (res_countdown_unix > 0) ? res_count_down : "";
if (data_array.product_lifetime.lifetime_countdown == "") {
_self.getNameUrl(data_array.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", data_array.product_set_array[0].product_id, res_name);
});
}
});
}
}
_self.consoleLog("countDownByProduct", "data_array", data_array);
callback(data_array);
},
loop: function() {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
_self.getUnix(function(res_now) {
_self.countDownByProduct(res_now, $scope.dataApi.product.dataArray, function(data_array) {
$scope.dataApi.product.dataArray = data_array;
_self.getLocationUrlNameProductDetail(function(res_url_name_product_detail) {
if (res_url_name_product_detail) {
_self.loop();
}
});
});
});
}, 1000);
}
}
return getFunction;
};
$scope.getPromotion = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
setPromotionId: function(promotion_id) {
var _self = this;
_self.consoleLog("setPromotionId", "promotion_id", promotion_id);
$scope.data.promotion.promotion_id = promotion_id;
_self.consoleLog("setPromotionId", "data.promotion.promotion_id", $scope.data.promotion.promotion_id);
},
}
return getFunction;
};
$scope.control = function() {
var getFunction = {
popupVideo: function(state, video_link, video_embed_code) {
var _self = this;
if (video_embed_code != '') {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
} else if (video_link != '') {
window.open(video_link, '_blank');
} else {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
}
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.data_control = {
page_video: {
popup: false,
shop_video_embed_code: ""
}
}
$scope.control_alert = {
alert: {
error_id: '',
index: null,
state: true,
error: [{
id: '001',
title: 'การสั่งซื้อ',
messages: 'สามารถสั่งซื้อได้เพียงทีละออเดอร์เท่านั้น'
}, {
id: '002',
title: 'การเพิ่มสินค้า',
messages: 'ไม่สามารถเพิ่มสินค้าของร้านมากกว่า 1 ร้านค้าได้'
}, {
id: '003',
title: 'การสั่งซื้อ',
messages: 'ไม่สามารถเพิ่มสินค้า(ไม่มีร้านค้า)'
}]
}
};
$scope.controlAlert = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getErrorMessages: function(error_id, callback) {
var _self = this;
var messages = {
res_error_id: '',
res_index: null
}
angular.forEach($scope.control_alert.alert.error, function(item, index) {
if (item.id == error_id) {
messages.res_error_id = item.id;
messages.res_index = index;
}
});
callback(messages.res_error_id, messages.res_index);
},
alert: function(error_id) {
var _self = this;
_self.getErrorMessages(error_id, function(res_error_id, res_index) {
$scope.control_alert.alert.error_id = res_error_id;
$scope.control_alert.alert.index = res_index;
$scope.control_alert.alert.state = (!$scope.control.alert && res_error_id != '') ? true : false;
});
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.countDown().loop();
/* set carousel */
$scope.setCarousel = {
carousel: 0,
index: 0
};
$scope.getCarousel().getCarousel($scope.setCarousel.carousel, function(res_carousel_id) {
$scope.setCarousel.carousel = res_carousel_id;
});
/* set carousel */
/* get product api */
$scope.dataApi = {
reward: {
dataSend: {},
api: "shop/current",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
staff: {
dataSend: {
txt_staff_id: 0
},
api: "staff/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
product: {
dataSend: {
txt_product_id: 0
},
api: "product/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
relation: {
dataSend: {
txt_referral_id: 0
},
api: "referral/relation",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.data = {
attribute: {
state: false,
productId: "",
dataArray: []
},
attribute_custom: {
state: false,
dataArray: []
},
reward: {
quantity_name: 'reward',
type_id: "0",
reward_amount: 0,
reward_percent: 0,
reward_every_price: 0,
point_reward: 0
},
quantity: {
quantity_name: 'quantity',
quantity_min: 1,
quantity_max: 1,
quantity_input: 1,
quantity_select: []
},
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
detail: {
active: '0',
dataArray: [{
index: '0',
state: true,
en: ($scope.description != undefined && $scope.description != "") ? $scope.description : 'Description',
th: 'ภาพรวม',
data: '',
dataArray: []
}, {
index: '1',
state: true,
en: ($scope.info != undefined && $scope.info != "") ? $scope.info : 'Info',
th: 'ข้อมูล',
data: '',
dataArray: []
}, {
index: '2',
state: true,
en: ($scope.specification != undefined && $scope.specification != "") ? $scope.specification : 'Specification',
th: 'สเปค',
data: '',
dataArray: []
}, {
index: '3',
state: true,
en: '',
th: 'คลังรูปภาพ/วิดีโอ',
data: '',
dataArray: []
}, {
index: '4',
state: true,
en: '',
th: 'พูดคุยผู้ใช้',
data: '',
dataArray: []
}]
},
promotion : {
promotion_id : '0'
}
};
$scope.setBuy = {
state_active: false,
state_process: false,
state_step: 0,
state_data_font_color: "",
state_data_background_color: "",
stepArray: [{
step: 0,
name: "unset",
icon: $scope._icebuyicon,
state: $scope._buytext,
data_font_color: "",
data_background_color: ""
}, {
step: 1,
name: "load",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 2,
name: "pass",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 3,
name: "error",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 4,
name: "cart",
icon: "",
state: $scope._viewcarttext,
data_font_color: "",
data_background_color: "primary_darkest"
}]
};
/* - get api product/id start - */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.product.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
$scope.dataApi.product.dataSend.txt_product_id = (res_product_id != false) ? res_product_id : 0;
$scope.getData().dataSend($scope.dataApi.product.api, $scope.dataApi.product.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_product, res_state) {
$scope.dataApi.product.ok = res_ok;
if ($scope._imageappcoverchecked) {
var images = [];
angular.forEach(get_res_api_product.data.product_image,function(image,index_image){
if (!image.image_app_cover_checked) {
images.push(image)
}
});
get_res_api_product.data.product_image = images;
}
$scope.dataApi.product.dataArray = get_res_api_product.data;
$scope.getData().consoleLog("get_res_api_product", get_res_api_product);
$scope.dataApi.product.dataArrayState = res_state;
/* -- get api shop/current to reward -- */
if (res_ok) {
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getData().dataSend($scope.dataApi.reward.api, $scope.dataApi.reward.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_shop, res_state) {
$scope.dataApi.reward.ok = res_ok;
$scope.dataApi.reward.dataArray = get_res_api_shop.data;
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getReward().createReward($scope.dataApi.product.dataArray.product_reward, get_res_api_shop.data.shop_point_config, function(res_reward) {
$scope.data.reward.type_id = res_reward.type_id;
$scope.data.reward.reward_amount = res_reward.amount;
$scope.data.reward.reward_percent = res_reward.percent;
$scope.data.reward.reward_every_price = res_reward.every_price;
/* --- Wait product/id ,shop/current --- */
/* ---- get attribute ---- */
$scope.getAttribute().productAttribute(get_res_api_product.data.product_attribute, function(res_attribute) {
$scope.data.attribute.dataArray = res_attribute;
$scope.getAttribute().checkMinPrices(get_res_api_product, res_attribute, function(res_data_price, res_state) {
$scope.data.attribute.state = res_state;
$scope.data.product_price = res_data_price.product_price;
$scope.data.product_compare_price = res_data_price.product_compare_price;
$scope.data.sum_product_price = res_data_price.sum_product_price;
$scope.data.sum_product_compare_price = res_data_price.sum_product_compare_price;
$scope.data.sum_product_compare_minus_sum_product_price = res_data_price.sum_product_compare_minus_sum_product_price;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
/* ----- stock ----- */
$scope.data.quantity.quantity_max = res_data_price.product_price.total_stock;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_data_price.product_price.total_stock; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* ----- stock ----- */
});
});
/* ---- get attribute ---- */
/* ---- get attribute custom ---- */
$scope.getAttributeCustom().createArray(get_res_api_product.data.product_custom_templates, function(res_custom_attribute, res_state) {
$scope.data.attribute_custom.state = res_state;
$scope.data.attribute_custom.dataArray = res_custom_attribute;
});
/* ---- get attribute custom ---- */
/* ---- get detail ---- */
$scope.getDetail().getDetail(get_res_api_product.data, function(res_description, res_info, res_state_info, res_specificatio, res_state_specificatio) {
$scope.data.detail.dataArray[0].data = res_description;
$scope.data.detail.dataArray[1].data = res_info;
$scope.data.detail.dataArray[1].state = res_state_info;
$scope.data.detail.dataArray[2].dataArray = res_specificatio;
$scope.data.detail.dataArray[2].state = res_state_specificatio;
});
/* ---- get detail ---- */
/* ---- update state ---- */
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
/* ---- update state ---- */
/* --- Wait product/id ,shop/current --- */
});
});
});
});
/* -- get api shop/current to reward -- */
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.relation.dataArrayState = res_state;
$scope.getData().getReferralId(get_res_api_product.data.product_referral_display, function(res_referral_id) {
$scope.dataApi.relation.dataSend.txt_referral_id = res_referral_id;
$scope.getData().dataSend($scope.dataApi.relation.api, $scope.dataApi.relation.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_referral, res_state) {
$scope.dataApi.relation.ok = res_ok;
$scope.dataApi.relation.dataArray = (res_referral_id != 0) ? get_res_api_referral.data : [];
$scope.dataApi.relation.dataArrayState = res_state;
});
});
});
});
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.getData().getStaffId(get_res_api_product.data.product_staff_id, function(res_staff) {
if (res_staff.status) {
$scope.dataApi.staff.dataArrayState = res_state;
$scope.dataApi.staff.dataSend.txt_staff_id = res_staff.staff_id;
$scope.getData().dataSend($scope.dataApi.staff.api, $scope.dataApi.staff.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, res, res_state) {
$scope.dataApi.staff.ok = res_ok;
$scope.dataApi.staff.dataArray = res.data;
$scope.getData().getNameUrl(res.data.staff_first_name, function(res_staff_first_name_url) {
$scope.dataApi.staff.dataArray.staff_first_name_url = res_staff_first_name_url;
$scope.dataApi.staff.dataArrayState = res_state;
});
});
});
}
});
});
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
} else {
/* ok = false */
if ($scope.dataApi.product.dataArray.length != 0) {
/* product deal to product original */
if ($scope.dataApi.product.dataArray.product_set_array.length != 0) {
$scope.countDown().getNameUrl($scope.dataApi.product.dataArray.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", $scope.dataApi.product.dataArray.product_set_array[0].product_id, res_name);
});
} else {
$scope.pages().pageName("home");
}
} else {
/* product null */
$scope.pages().pageName("home");
}
}
});
});
});
});
/* - get api product/id end - */
/* get product api */
};
return promise;
});_ui_share_app.directive('productDetailPageX', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageX';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_host + templateName + '/';
$scope.qtyProduct = 1;
$scope.data = false;
$scope.dataPreserve = false;
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
var dataSend = {
'txt_product_id': $scope._getPostIdFromURL(),
};
if (CUR_THEME.shop_id() == "541") {
$http.get("https://zoomcamera.getappeasy.com/store/api/v1/product/id", {
params: dataSend
}).then(function(res) {
var e = res.data;
if (e.ok == 1) {
console.log("product_set_array : data", e.data);
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope._getSupportDataCategory('category', e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
console.log("product_set_array : data", e.data);
if (typeof $scope.data.product_attribute.option_data !== 'undefined' && $scope.data.product_total_variant > 0) {
if (typeof $scope.data.product_attribute.option_data.pclass_array !== 'undefined' && $scope.data.product_attribute.option_data.pclass_array.length) {
$scope.buildVariantOption(e.data);
}
}
if (res.data.product_attribute.length != 0) {
$scope.buildMultipleQuantity(res.data);
}
}
});
} else {
$componentProductDetail.get('product/id', {
'txt_product_id': $scope._getPostIdFromURL()
}, function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
$scope._getSupportDataCategory('category', e.data);
$scope.buildDataProductRelate($scope._getPostIdFromURL());
if (typeof $scope.data.product_attribute.option_data !== 'undefined' && $scope.data.product_total_variant > 0) {
if (typeof $scope.data.product_attribute.option_data.pclass_array !== 'undefined' && $scope.data.product_attribute.option_data.pclass_array.length) {
$scope.buildVariantOption(e.data);
}
}
if (e.data.product_attribute.length != 0) {
$scope.buildMultipleQuantity(e.data);
}
}
});
}
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [],
p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
};
$scope.currentOptionQtyPick = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
return e.val();
};
$scope.dataRelate = [];
$scope.buildDataProductRelate = function(product_id) {
var j = {
'relate_product_id_array': [product_id],
'badge_id_array': [18]
};
var d = {
'cur_page': 1,
'per_page': 8,
'txt_filter_json': JSON.stringify(j)
};
GAEAPI.get('product/lists', d).then(function(e) {
if (e.ok == 1) {
var d = [];
angular.forEach(e.data.dataList, function(item) {
if (item.product_id !== $scope.data.product_id) {
d.push(item);
}
});
$scope.dataRelate = d;
}
});
};
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
$scope.buildDataProductRelate($scope._getPostIdFromURL());
if (objectData.product_total_variant <= 0) {
/*return;*/
}
if (typeof $scope.data.product_attribute.option_data !== 'undefined' && $scope.data.product_total_variant > 0) {
if (typeof $scope.data.product_attribute.option_data.pclass_array !== 'undefined' && $scope.data.product_attribute.option_data.pclass_array.length) {
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
}
}
};
$scope.ifOptionUnSelect = function() {
return ($('.d_qty_price.active.inin').length > 0) ? true : false;
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$('.d_qty_not_result').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
if ($index == 0 && option_id == '') {
return $componentProductDetail.get('product/id', {
'txt_product_id': $scope._getPostIdFromURL()
}, function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope.data.product_id = dataVariants[i].product_id;
$scope.data.product_sku = dataVariants[i].sku;
$scope.data.product_price = dataVariants[i].price;
$scope.data.product_compare_price = dataVariants[i].compare_price;
$scope.switchQuantityByKey('-' + variantsPick.join('-') + '-');
break;
}
}
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$rootScope.$on('repeatend', function() {
/* Slider Send */
var optionsParmas = {
autoplay: true,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
infinite: true
};
var extraOptions = {
animate: false
};
$timeout(function() {
sliderProvider("#gallery_slider", optionsParmas, "", "", extraOptions);
}, 500);
});
/* Slick Events */
$scope._slickGoLeft = function() {
$timeout(function() {
$('#gallery_slider').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('#gallery_slider').slick('slickNext');
}, 100);
};
/* Click SLick Item */
$scope.slickGoto = function(idx) {
$timeout(function() {
$('#gallery_slider').slick('slickGoTo', idx);
}, 100);
};
/* Calcu Nav Arrows */
$scope.navArrowsCalculate = function() {
var size = (500 / 2);
var n = (size + 18) + 20;
return '-' + n + 'px';
};
$scope.navArrowWidth = function() {
return $('#gallery_slider').width() + 'px';
};
/* Build title for Address link*/
$scope.buildTitleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
/* Calculate discount (simple mode)
* @params {expensivePrice}
* @params {salePrice}
* @return int
*/
$scope.calculateDiscount = function(expensivePrice, salePrice) {
var dif = expensivePrice - salePrice;
return parseInt(dif * 100 / expensivePrice);
};
$scope.support_data = {
category: [],
};
$scope._getSupportDataCategory = function(type, data) {
var dataSend = {
'txt_referral_id': data.product_referral_display.category[0].referral_id
};
GAEAPI.get('referral/relation', dataSend).then(function(e) {
if (e.ok == 1) {
$scope.support_data.category = e.data;
}
});
};
/* Optimize image size by device pixel
* @params {size} (integer) prefer size
* @params {image_url} (string) original image source link
* @params {image_width} (string) original image width
* @return string
*/
$scope.viewOptimizeImage = function(size, image_url, image_width) {
if (window.devicePixelRatio >= 2 || parseInt(image_width) <= size) {
return image_url;
}
var a = image_url.split("/"),
b = a[a.length - 1];
a[a.length - 1] = 't' + size + '_' + b;
return a.join("/");
};
/* Hide when visible badge */
$scope.exceptVisibleBadge = function(objectItem) {
var r = parseInt(objectItem.badge_id);
var s = false;
switch (r) {
case 16:
case 72:
case 74:
case 75:
s = true;
break;
default:
s = false;
break;
}
return s;
};
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.invited = [];
$scope.insertinvited = function(user) {
if (user) {
if (user.product_attribute.length != 0) {
if ($scope.invited[0] == user.product_id) {
return;
}
$scope.invited.push(user.product_id);
} else {
alert("item can't compare");
}
} else {
console.log("test_array :", $scope.invited);
}
};
/* Display Badge Name */
$scope.renderBadgeType = function(objectItem) {
var r = parseInt(objectItem.badge_id);
var str = 'No Badge';
switch (r) {
case 16:
str = "FEATURED";
break;
case 72:
str = "NEW";
break;
case 74:
str = "RECOMMEND";
break;
case 75:
str = "BEST SELLER";
break;
case 82:
str = "NEW (App)";
break;
case 83:
str = "RECOMMEND (App)";
break;
case 84:
str = "BEST SELLER (App)";
break;
}
return str;
};
$scope.renderBadgeTypeImg = function() {
var returnData = false;
if (CUR_THEME.shop_id() == "717") {
returnData = true;
} else {
returnData = false;
}
return returnData;
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
};
return promise;
});_ui_share_app.directive('productDetailPageXa', function($rootScope, $routeParams, sliderProvider, $componentProductDetail, $location) {
var templateName = 'productDetailPageXa';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
imgcart: '@imgcart',
view: '@viewcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
if ($scope.imgcart != undefined) {
$scope.setimg_cart = $scope.icnPath + $scope.imgcart;
}
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
/*if ($scope._dataArray.product_hightlight_video_embed != "") {
$scope._dataArray.product_image.unshift({
image_url: $scope.imgPath + 'img-play.png',
product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
});
}*/
$scope._dataArrayRelateProductId = res.data.product_id;
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags);
$scope.buildVariantOption(res.data);
if (res.data.product_attribute.length != 0) {
$scope.buildMultipleQuantity(res.data);
}
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '#gallery_slider[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope.viewQuantity = function() {
return $(".d_qty.active.inin").find('input').val() || 1;
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.onSelectVariantItems(0, '');
};
$scope.dataVariantsPick = [];
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$timeout.cancel(s);
$('select.variantSelector').each(function(idx, obj) {
var optionElementFirst = $(this).find('option[data-index="' + idx + '"]').eq(0);
optionElementFirst.prop("selected", true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var _self = dataVariants[i];
var _self_option = angular.fromJson(_self.option_id_json);
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope.switchQuantityByKey('-' + variantsPick.join('-') + '-');
console.log("selectedOptionTextJson: option", _self);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope._dataArray.product_image.length; im++) {
if ($scope._dataArray.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
$scope._slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.gallery-thumbnail .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
}
}
};
$scope.data_viewTab = 1;
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope.currentOptionQtyPick = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
return e.val();
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [],
p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
};
$scope.dataVariantsPick = [];
$scope.electric = [];
$scope.testyuyu = 0;
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.testyuyu = 0;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._idUrl($scope._viewRouteParams().product_id)
}).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
$scope.testyuyu = 0;
$('.d_qty_not_result').removeClass("active");
$scope.findVariantsData($scope.dataVariantsPick);
} else {
$scope.testyuyu = 0;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric);
}
};
$scope.ifOptionUnSelect = function() {
return ($('.d_qty_price.active.inin').length > 0) ? true : false;
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
$("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width"));
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.newLoginregister = function(name) {
window.location.href = GURL.base_url() + name;
};
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('productDetailPageZ', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageZ';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
iconbuy: '@iconbuy',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.login = function() {
var login = {
showLogin: function() {
return UiCustomerBox.delegate.get.isLogin();
},
isLogin: function(callback) {
callback(UiCustomerBox.delegate.get.isLogin());
},
totalAmount: function() {
return UiCart.delegate.get.totalAmount() || 0;
},
pageLogin: function() {
var _self = this;
_self.isLogin(function(isLogin) {
if (!isLogin) {
$inloginPopupTypeGrip.open();
}
});
}
}
return login;
};
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d, $scope).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope._dataArray_tag = [];
$scope._dataArray = [];
$scope.data_min = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.names = [];
$scope.currentStock = 0;
$scope.buildTitleUrl = function(str) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
return s;
};
$scope.encodeURIComponentOut = function(str) {
var output = encodeURIComponent(str);
return output;
};
$scope.checkPrice = function(price) {
var check_price = 0;
var _price = (price != undefined && price != "" && price != null) ? price.toString() : "0";
if (_price.includes(".")) {
check_price = 2;
}
return check_price;
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend, $scope).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
/*if ($scope._dataArray.product_hightlight_video_embed != "") {
$scope._dataArray.product_image.unshift({
image_url: $scope.imgPath + 'img-play.png',
product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
});
}*/
$('.gallery_container').css('height', '0');
$('.gallery_container').css('opacity', '0');
setTimeout(function() {
$('.gallery_container').css('height', 'auto');
$('.gallery_container').css('opacity', '1');
}, 2000);
$scope._dataArrayRelateProductId = res.data.product_id;
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
/*if ($scope._dataArray.product_description == '') {
$scope._viewTab(2);
}*/
$scope.names = [];
if (res.data.product_total_variant == 0 && res.data.product_total_stock > 0) {
for (var i = 0; i < parseFloat(res.data.product_total_stock); i++) {
$scope.names.push(i + 1);
}
}
if (res.data.product_total_variant == 0 && res.data.product_total_stock < 0) {
for (var i = 0; i < 20; i++) {
$scope.names.push(i + 1);
}
}
if (res.data.product_total_variant > 0) {
for (var i = 0; i < 20; i++) {
$scope.names.push(i + 1);
}
}
if (res.data.product_attribute != undefined) {
if (res.data.product_attribute.option_data != undefined) {
if (res.data.product_attribute.option_data.variant_array != undefined) {
if (res.data.product_attribute.option_data.variant_array.length != 0) {
var set_varia = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseFloat(set_varia) >= parseFloat(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
}
}
}
}
$scope._dataArray_tag = res.data.product_tags.split(",");
$scope.buildMultipleQuantity(res.data);
$scope.buildVariantOption(res.data);
// $scope.builldRelateProduct(res.data);
$scope.currentStock = $scope._dataArray.product_total_stock;
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.dataRelateProductArray = [];
$scope.builldRelateProduct = function(dataObj) {
console.log("_getDataArray", dataObj);
var dataSend = {
'cur_page': 1,
'per_page': 5,
'txt_filter_json': JSON.stringify({
"badge_id_array": [18],
"tags": dataObj.product_tags
})
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok === 1) {
$scope.dataRelateProductArray = e.data.dataList;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVaraintsClick_Normal();
};
$scope.dataVariantsPick = [];
$scope.onClickVariantItems = function($index, option_id) {
console.log("onClickVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.nowMoment = moment().unix();
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope.saleprice = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
}
return (calculate > 0) ? calculate : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.stateShow = false;
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var count = 0;
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
var _self = dataVariants[i];
var _self_option = angular.fromJson(_self.option_id_json);
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope.data.product_total_stock = dataVariants[i].total_stock;
console.log("tasdasdasdasest if", $scope.data.product_total_stock);
$scope.names = [];
if (parseFloat($scope.data.product_total_stock) == 0) {
$scope.stateShow = false;
$scope.names = [1];
} else {
$scope.stateShow = true;
for (var i = 0; i < parseFloat($scope.data.product_total_stock); i++) {
$scope.names.push(i + 1);
}
}
console.log("selectedOptionTextJson: option", _self);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope.data.product_image.length; im++) {
if ($scope.data.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
$scope.slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.gallery-thumbnail .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
} else {
console.log("tasdasdasdasest else", $scope.data.product_total_stock);
$scope.stateShow = false;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
$scope._dataArray.product_id = dataVariants[i].product_id;
console.log("optionJson : 0000 ", count, dataVariants[i].total_stock);
$scope.names = [1];
$scope.stateShow = false;
}
}
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
$("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width"));
/*$(".cover_image_item_md_lg").css("height", $(".cover_image_item_md_lg").css("width"));
$(".gallery_display_md_lg").css("height", $(".cover_image_item_md_lg").css("width"));*/
$("iframe").css("height", $(".cover_image_item_md_lg").css("width"));
$("iframe").css("width", $(".cover_image_item_md_lg").css("width"));
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
/*$scope.returnheight();
$scope.timeCountStart();*/
}, 1000);
}
$scope.timeCountStart();
$scope.data_viewTab = '1';
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope.currentOptionQtyPick = function(variant_key) {
if ($('#detail_qty[variant-key="' + variant_key + '"]').val() != undefined) {
var e = parseFloat($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
}
return e;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('select[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('select[name="detail_qty"][variant-key="' + variant_key + '"]');
}
if ($('#detail_qty[variant-key="' + variant_key + '"]').val() != undefined) {
$scope._data_qty_selected = parseFloat($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
}
console.log("_data_qty_selected", $scope._data_qty_selected);
/* parseFloat(e.val());
alert(i);onSelectVariantItems*/
if ($scope._data_qty_selected <= 0 || typeof $scope._data_qty_selected == 'undefined' || isNaN($scope._data_qty_selected)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [];
if (productObj.product_attribute.option_data != undefined && productObj.product_attribute.option_data.length > 0) {
var p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
}
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").find('select').val() != undefined) {
check_int = parseFloat($(".d_qty").find('select').val().substr(7));
}
return check_int;
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.outofstock = 0;
$scope.getOutofstock = function() {
$scope.outofstock = 1;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.onSelectVariantItems(0, '');
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.names = [];
for (var i = 0; i < 20; i++) {
$scope.names.push(i + 1);
}
$scope._dataArray.product_id = $scope._idUrl($scope._viewRouteParams().product_id);
$scope._dataArray.product_price = $scope.data_min.price;
$scope.testyuyu = 0;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.dsetting').addClass("active");
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._idUrl($routeParams.product_id)
}, $scope).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
console.log("check_vareian 103", $scope.testyuyu);
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
console.log("check_vareian 104", $scope.testyuyu);
$scope.testyuyu = 0;
$scope.findVariantsData($scope.dataVariantsPick);
$(".d_qty").find('select').val("number:1");
} else {
console.log("check_vareian 105", $scope.testyuyu);
$scope.testyuyu = 0;
$(".d_qty").find('select').val("number:1");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric, $scope.testyuyu);
}
/*alert($scope.dataVariantsPick);*/
};
$scope.video_code = "";
$scope.videoShow = function() {
$scope.video_code = $scope._dataArray.product_hightlight_video_embed;
$(".videoHighlightOverlay").addClass("active");
console.log("videoShow");
}
$scope.videoHide = function() {
$scope.video_code = '';
$(".videoHighlightOverlay").removeClass("active");
console.log("videoHide");
}
$scope.viewHide = function(arrayData, optionData) {
var reTest = false;
if (optionData == arrayData.length) {
for (var i = 0; arrayData.length > i; i++) {
console.log("arrayData[i]", arrayData[i]);
if (!arrayData[i]) {
reTest = false;
break;
} else {
reTest = true;
}
}
}
return reTest;
}
$scope.viewHideOp = function(arrayData, optionData) {
var e = false;
if (optionData == 0 && arrayData.length == 0) {
e = true;
}
return e;
}
$scope.qtuC = function() {
var e = 1;
if ($(".d_qty").find('select').val() == "") {
$(".d_qty").find('select').val("number:1");
var e = 1;
} else {
var e = $(".d_qty").find('select').val();
}
return e;
}
$scope.buyC = function() {
var e = false;
if ($scope.dataOption.length == 0 && $scope.viewHide($scope.dataVariantsPick, $scope.dataOption.length) == false) {
if ($scope.names.length == 0) {
e = false
} else {
e = true;
}
} else if ($scope.dataOption.length > 0) {
if ($scope.viewHide($scope.dataVariantsPick, $scope.dataOption.length) == true) {
if ($scope.stateShow == true) {
e = true;
}
} else {
e = false;
}
}
return e;
}
$scope.outOfStockShow = function() {
var e = false;
if ($scope.buyC() == true) {
e = true;
} else {
if ($scope.names.length == 20) {
e = true;
} else {
e = false;
}
}
return e;
}
};
return promise;
});_ui_share_app.directive('productDetailPageZa', function($rootScope, $routeParams, sliderProvider, $componentProductDetail) {
var templateName = 'productDetailPageZa';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
buttonicon: '@buttonicon',
buttontext: '@buttontext',
stylebutton: '@stylebutton',
promotelink: '@promotelink',
id: '@id',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._stylebutton = ($scope.stylebutton == undefined || $scope.stylebutton == "") ? 'filled_button_round_small' : $scope.stylebutton;
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope.dataRelatetag = [];
$scope.dataRelatetagState = {
load: true,
done: false
};
$scope.productRelateTag = function(product_tag) {
$scope.dataRelatetagState = $scope.StateData(true, false);
var tag = {
'tags': product_tag
};
var dataSend = {
'cur_page': 1,
'per_page': 4,
'txt_filter_json': JSON.stringify(tag)
};
console.log("dataSend :", dataSend);
GAEAPI.get('product/lists', dataSend).then(function(output) {
if (output.ok == 1) {
$scope.dataRelatetag = output.data.dataList;
console.log("dataSend :", output.data);
}
$scope.dataRelatetagState = $scope.StateData(false, true);
});
};
$scope._dataArray = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
/* add data video */
/*if ($scope._dataArray.product_hightlight_video_embed != "") {
$scope._dataArray.product_image.unshift({
image_url: $scope.imgPath + 'img-play.png',
product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
});
}*/
/* add data video */
$scope._dataArrayRelateProductId = res.data.product_id;
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
$scope.productRelateTag($scope._dataArray.product_tags);
$scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope._data_qty_model = '1';
$scope.viewQuantity = function() {
/*return $(".d_qty.active.inin").find('input').val() || 1;*/
return $( "#d_qty option:selected" ).text();
};
$scope.decreseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i > 1) {
e.val(i - 1);
$scope._data_qty_selected = (i - 1);
}
return $scope._data_qty_selected;
};
$scope.increseQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (isNaN(i)) {
i = 0;
}
e.val(i + 1);
$scope._data_qty_selected = (i + 1);
return $scope._data_qty_selected;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('input[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('input[name="detail_qty"][variant-key="' + variant_key + '"]');
}
var i = parseInt(e.val());
if (i <= 0 || typeof i == 'undefined' || isNaN(i)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVaraintsClick_Normal();
};
$scope.dataVariantsPick = [""];
$scope.onClickVariantItems = function($index, option_id) {
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.dataVariantsPick = [""];
$scope.onSelectVariantItems = function($index, option_id){
console.log("onSelectVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if($scope.dataVariantsPick.length >= $scope.dataOption.length){
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.makeVariantsClick = function(){
var s = $timeout(function(){
$timeout.cancel(s);
$('select.variantSelector').each(function(idx,obj){
var optionElementFirst = $(this).find('option[data-index="'+idx+'"]').eq(0);
optionElementFirst.prop("selected",true);
$scope.onSelectVariantItems(optionElementFirst.attr('data-index'), optionElementFirst.attr('data-option'));
});
}, 2000);
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
pricefull = price;
} else {
if (compare_price != 0) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
break;
}
}
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
$("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width"));
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
$scope.returnheight();
$scope.timeCountStart();
}, 1000);
}
$scope.timeCountStart();
$scope.displayImage = function(image_url, prefix) {
return (typeof image_url !== 'undefined') ? GAEAPI.getGaeImageUrl(image_url, prefix) : '';
}
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
/* Change Big Image when click thumbnail */
$scope.dataChangeBigImage = 0;
$scope.changeBigImage = function(dataObject,index) {
$scope.dataChangeBigImage = index;
$timeout(function() {
var e = $('.gallery-display');
var el = $('.gallery-display').find('img').eq(0);
e.css('opacity', '0');
$timeout(function() {
el.attr('original-src', el.attr('src'));
el.attr('src', dataObject.image_url);
el.addClass('has-changed');
e.css('opacity', '1');
}, 600);
}, 300);
};
};
return promise;
});_ui_share_app.directive('productDetailPageZb', function($rootScope, $routeParams, sliderProvider, $componentProductDetail, $location) {
var templateName = 'productDetailPageZb';
var componentMain = 'componentProductDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
imgpath: '@imgpath',
promotelink: '@promotelink',
id: '@id',
iconbuy: '@iconbuy',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope.login = function() {
var login = {
showLogin: function() {
return UiCustomerBox.delegate.get.isLogin();
},
isLogin: function(callback) {
callback(UiCustomerBox.delegate.get.isLogin());
},
pageLogin: function() {
var _self = this;
_self.isLogin(function(isLogin) {
if (!isLogin) {
/* $location.url('member').replace(); */
window.location.href = "member";
}
});
}
}
return login;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.titleUrl = function(str) {
var res_str = '';
if (str != undefined) {
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
res_str = s.toLowerCase();
}
return res_str;
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var d = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', d).then(function(e) {
if (e.ok == 1) {
$scope.dataRelation = e.data;
}
});
};
$scope._dataArray_tag = {};
$scope._dataArray = [];
$scope.data_min = [];
$scope._dataArrayState = {
load: false,
done: false
};
$scope.names = [];
$scope.currentStock = 0;
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend).then(function(res) {
if (res.ok === 1) {
console.log("productDetailPageZb : res : ", res);
$scope._dataArray = res.data;
/*if ($scope._dataArray.product_hightlight_video_embed != "") {
$scope._dataArray.product_image.unshift({
image_url: $scope.imgPath + 'img-play.png',
product_hightlight_video_embed: $scope._dataArray.product_hightlight_video_embed
});
}*/
$scope._dataArrayRelateProductId = res.data.product_id;
if ($scope._dataArray.product_referral_display.category != undefined) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
/*if ($scope._dataArray.product_description == '') {
$scope._viewTab(2);
}*/
$scope.names = [];
if (res.data.product_total_variant == 0 && res.data.product_total_stock > 0) {
for (var i = 0; i < parseInt(res.data.product_total_stock); i++) {
$scope.names.push(i + 1);
}
}
if (res.data.product_total_variant == 0 && res.data.product_total_stock < 0) {
for (var i = 0; i < 20; i++) {
$scope.names.push(i + 1);
}
}
if (res.data.product_total_variant > 0) {
for (var i = 0; i < 20; i++) {
$scope.names.push(i + 1);
}
}
if (res.data.product_attribute != undefined) {
if (res.data.product_attribute.option_data != undefined) {
if (res.data.product_attribute.option_data.variant_array != undefined) {
if (res.data.product_attribute.option_data.variant_array.length != 0) {
var set_varia = res.data.product_attribute.option_data.variant_array[0].price;
for (var i = 0; i < res.data.product_attribute.option_data.variant_array.length; i++) {
if (parseInt(set_varia) >= parseInt(res.data.product_attribute.option_data.variant_array[i].price)) {
set_varia = res.data.product_attribute.option_data.variant_array[i].price;
$scope.data_min = res.data.product_attribute.option_data.variant_array[i];
}
}
if ($scope.data_min.length == 0) {
$scope.data_min = res.data.product_attribute.option_data.variant_array[0];
}
}
}
}
}
$scope._dataArray_tag = res.data.product_tags.split(",");
$scope.buildMultipleQuantity(res.data);
$scope.buildVariantOption(res.data);
$scope.builldRelateProduct(res.data);
$scope.currentStock = $scope._dataArray.product_total_stock;
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.dataRelateProductArray = [];
$scope.builldRelateProduct = function(dataObj) {
console.log("_getDataArray", dataObj);
var dataSend = {
'cur_page': 1,
'per_page': 5,
'txt_filter_json': JSON.stringify({
"badge_id_array": [18],
"tags": dataObj.product_tags
})
};
GAEAPI.get('product/lists', dataSend).then(function(e) {
if (e.ok === 1) {
$scope.dataRelateProductArray = e.data.dataList;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._getDataArray($scope._idUrl($scope._viewRouteParams().product_id));
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoto = function(idx) {
setTimeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickGoTo', idx);
}, 100);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-key="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
$scope._itemCarousel = function() {
var elementName = '[data-key="' + $scope._uniqueKey + '"]';
var optionsParmas = {
/*autoplay: (window.location.host !== 'localhost') ? true : false,*/
autoplay: false,
slidesToShow: 1,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$rootScope.$on('repeatend', function() {
if ($('[data-key="' + $scope._uniqueKey + '"]').not('.slick-initialized')) {
$timeout(function() {
$scope._itemCarousel();
}, 500);
}
});
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVaraintsClick_Normal();
};
$scope.dataVariantsPick = [];
$scope.onClickVariantItems = function($index, option_id) {
console.log("onClickVariantItems:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.nowMoment = moment().unix();
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleState.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleState.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope.saleprice = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
}
return (calculate > 0) ? calculate : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope.calculate = function(price, compare_price, discount_id, lifetime_start_time, lifetime_end_time, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined && lifetime_start_time <= $scope.nowMoment && (lifetime_end_time == -1 || lifetime_end_time >= $scope.nowMoment)) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
return (calculate > 0) ? calculate : 0;
}
$scope.stateShow = false;
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var count = 0;
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
var _self = dataVariants[i];
var _self_option = angular.fromJson(_self.option_id_json);
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
if (compareArray(variantsPick, optionJson)) {
console.log("dataVariants : ", dataVariants);
$scope._dataArray.product_id = dataVariants[i].product_id;
$scope._dataArray.product_sku = dataVariants[i].sku;
$scope._dataArray.product_price = dataVariants[i].price;
$scope._dataArray.product_compare_price = dataVariants[i].compare_price;
$scope.data.product_total_stock = dataVariants[i].total_stock;
console.log("tasdasdasdasest if", $scope.data.product_total_stock);
$scope.names = [];
if (parseInt($scope.data.product_total_stock) == 0) {
$scope.stateShow = false;
$scope.names = [1];
} else {
$scope.stateShow = true;
for (var i = 0; i < parseInt($scope.data.product_total_stock); i++) {
$scope.names.push(i + 1);
}
}
console.log("selectedOptionTextJson: option", _self);
if (_self.variant_image.length) {
var rightImagePosition = 0;
for (var im = 0; im < $scope.data.product_image.length; im++) {
if ($scope.data.product_image[im].image_id == _self.variant_image[0].image_id) {
rightImagePosition = im;
break;
}
}
$timeout(function() {
console.log("Found Varaint Image", _self.variant_image[0].image_id);
if ($(window).width <= 991) {
$scope.slickGoto('gallery_show', rightImagePosition);
} else {
angular.element('.gallery-thumbnail .thumb-img[data-image-id="' + _self.variant_image[0].image_id + '"]').click();
}
}, 300);
}
break;
} else {
console.log("tasdasdasdasest else", $scope.data.product_total_stock);
$scope.stateShow = false;
}
if (!compareArray(variantsPick, optionJson)) {
count++;
}
if (count >= dataVariants.length) {
$scope._dataArray.product_id = dataVariants[i].product_id;
console.log("optionJson : 0000 ", count, dataVariants[i].total_stock);
$scope.names = [1];
$scope.stateShow = false;
}
}
};
$scope.makeVaraintsClick_Normal = function() {
$timeout(function() {
$('div.variantSelector').each(function(idx, obj) {
$(this).find('span[data-index="' + idx + '"]').eq(0).click();
});
}, 2000);
};
$scope.returnheight = function() {
$(".cover_image_item").css("height", $(".cover_image_item").css("width"));
$(".gallery_display").css("height", $(".cover_image_item").css("width"));
$("iframe").css("height", $(".cover_image_item").css("width"));
$("iframe").css("width", $(".cover_image_item").css("width"));
/*$(".cover_image_item_md_lg").css("height", $(".cover_image_item_md_lg").css("width"));
$(".gallery_display_md_lg").css("height", $(".cover_image_item_md_lg").css("width"));*/
$("iframe").css("height", $(".cover_image_item_md_lg").css("width"));
$("iframe").css("width", $(".cover_image_item_md_lg").css("width"));
}
$scope.timeCountStart = function() {
$scope.timeout_promise = $timeout(function() {
/*$scope.returnheight();
$scope.timeCountStart();*/
}, 1000);
}
$scope.timeCountStart();
$scope.data_viewTab = '1';
$scope._viewTab = function(index) {
$scope.data_viewTab = index;
};
$scope._data_qty_model = 1;
$scope._data_qty_selected = 1;
$scope.currentOptionQtyPick = function(variant_key) {
if ($('#detail_qty[variant-key="' + variant_key + '"]').val() != undefined) {
var e = parseInt($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
}
return e;
};
$scope.watchQty = function(variant_key) {
var e = angular.element('select[name="detail_qty"]');
if (typeof variant_key !== 'undefined') {
e = angular.element('select[name="detail_qty"][variant-key="' + variant_key + '"]');
}
if ($('#detail_qty[variant-key="' + variant_key + '"]').val() != undefined) {
$scope._data_qty_selected = parseInt($('#detail_qty[variant-key="' + variant_key + '"]').val().substr(7));
}
console.log("_data_qty_selected", $scope._data_qty_selected);
/* parseInt(e.val());
alert(i);onSelectVariantItems*/
if ($scope._data_qty_selected <= 0 || typeof $scope._data_qty_selected == 'undefined' || isNaN($scope._data_qty_selected)) {
var t = $timeout(function() {
$timeout.cancel(t);
$scope._data_qty_selected = 1;
e.val(1);
}, 600);
}
};
$scope.productQuantityMultiArray = [];
$scope.lastCheckedVariantKey = '';
$scope.buildMultipleQuantity = function(productObj) {
$scope.productQuantityMultiArray = [];
var r = [];
if (productObj.product_attribute.option_data != undefined && productObj.product_attribute.option_data.length > 0) {
var p = productObj.product_attribute.option_data.variant_array;
for (var i = 0; i < p.length; i++) {
if (p[i].status == 1 && p[i].status == 1) {
$scope.productQuantityMultiArray.push({
v_key: p[i].variant_key,
v_name: p[i].option_name_array[0],
v_qty: 1,
v_active: 0
});
}
}
}
};
$scope.switchQuantityByKey = function(variant_key) {
$scope.lastCheckedVariantKey = variant_key;
$('.d_qty').removeClass('active').removeClass('inin');
$('.d_qty_price[variant-key!="' + variant_key + '"]').removeClass('active').removeClass('inin');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('active');
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('active');
$timeout(function() {
$('.d_qty[variant-key="' + variant_key + '"]').addClass('inin');
$('.d_qty_price[variant-key="' + variant_key + '"]').addClass('inin');
}, 300);
};
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").find('select').val() != undefined) {
check_int = parseInt($(".d_qty").find('select').val().substr(7));
}
return check_int;
};
$scope.warning = 0;
$scope.getWarn = function() {
$scope.warning = 1;
};
$scope.outofstock = 0;
$scope.getOutofstock = function() {
$scope.outofstock = 1;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.onSelectVariantItems(0, '');
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
$scope.testyuyu = 0;
if (option_id == '') {
$scope.names = [];
for (var i = 0; i < 20; i++) {
$scope.names.push(i + 1);
}
$scope._dataArray.product_id = $scope._idUrl($scope._viewRouteParams().product_id);
$scope._dataArray.product_price = $scope.data_min.price;
$scope.testyuyu = 0;
$('.d_qty_price').removeClass("active");
$('.d_qty_price').removeClass("inin");
$('.d_qty').removeClass('active').removeClass('inin');
$('.dsetting').addClass("active");
$('.d_qty_not_result').addClass("active");
$scope.dataVariantsPick[$index] = option_id;
console.log("check_vareian 1000:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length);
return GAEAPI.get('product/id', {
'txt_product_id': $scope._idUrl($routeParams.product_id)
}).then(function(e) {
if (e.ok == 1) {
$scope.data = e.data;
$scope.dataPreserve = e.data;
}
});
} else {
$scope.dataVariantsPick[$index] = option_id;
for (var i = 0; i < $scope.dataVariantsPick.length; i++) {
if ($scope.dataVariantsPick[i] != undefined && $scope.dataVariantsPick[i] != "") {
$scope.testyuyu++;
console.log("check_vareian 103", $scope.testyuyu);
}
}
if ($scope.testyuyu >= $scope.dataOption.length) {
console.log("check_vareian 104", $scope.testyuyu);
$scope.testyuyu = 0;
$scope.findVariantsData($scope.dataVariantsPick);
$(".d_qty").find('select').val("number:1");
} else {
console.log("check_vareian 105", $scope.testyuyu);
$scope.testyuyu = 0;
$(".d_qty").find('select').val("number:1");
}
console.log("check_vareian 1001:", $scope.dataVariantsPick.length, $index, $scope.dataVariantsPick, $scope.dataOption.length, $scope.electric, $scope.testyuyu);
}
/*alert($scope.dataVariantsPick);*/
};
$scope.video_code = "";
$scope.videoShow = function() {
$scope.video_code = $scope._dataArray.product_hightlight_video_embed;
$(".videoHighlightOverlay").addClass("active");
console.log("videoShow");
}
$scope.videoHide = function() {
$scope.video_code = '';
$(".videoHighlightOverlay").removeClass("active");
console.log("videoHide");
}
$scope.viewHide = function(arrayData, optionData) {
var reTest = false;
if (optionData == arrayData.length) {
for (var i = 0; arrayData.length > i; i++) {
console.log("arrayData[i]", arrayData[i]);
if (!arrayData[i]) {
reTest = false;
break;
} else {
reTest = true;
}
}
}
return reTest;
}
$scope.viewHideOp = function(arrayData, optionData) {
var e = false;
if (optionData == 0 && arrayData.length == 0) {
e = true;
}
return e;
}
$scope.qtuC = function() {
var e = 1;
if ($(".d_qty").find('select').val() == "") {
$(".d_qty").find('select').val("number:1");
var e = 1;
} else {
var e = $(".d_qty").find('select').val();
}
return e;
}
$scope.buyC = function() {
var e = false;
if ($scope.dataOption.length == 0 && $scope.viewHide($scope.dataVariantsPick, $scope.dataOption.length) == false) {
if ($scope.names.length == 0) {
e = false
} else {
e = true;
}
} else if ($scope.dataOption.length > 0) {
if ($scope.viewHide($scope.dataVariantsPick, $scope.dataOption.length) == true) {
if ($scope.stateShow == true) {
e = true;
}
} else {
e = false;
}
}
return e;
}
$scope.outOfStockShow = function() {
var e = false;
if ($scope.buyC() == true) {
e = true;
} else {
if ($scope.names.length == 20) {
e = true;
} else {
e = false;
}
}
return e;
}
};
return promise;
});_ui_share_app.directive('componentProductDetails', function($rootScope, $routeParams, $location) {
var templateComponent = 'componentProductDetails';
var templateUrl = _ui_share_host + templateComponent + '/' + templateComponent + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
type: '@type',
cart: '@cart',
buycol: '@buycol',
buyicon: '@buyicon',
buytext: '@buytext',
viewcarttext: '@viewcarttext',
buylogin: '@buylogin',
currency: '@currency',
checkstaff: '@checkstaff',
language: '@language',
btnstyle: '@btnstyle',
maxstock: '@maxstock',
videotext: '@videotext',
description: '@description',
info: '@info',
sandwiched : '@sandwiched',
specification: '@specification',
textbrand:'@textbrand',
navigationhover: '@navigationhover',
imageappcoverchecked: '@imageappcoverchecked',
categorylists:'@categorylists',
categorylistsurl: '@categorylistsurl',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templateUrl;
promise.transclude = {
'one': '?one',
'two': '?two',
'three': '?three',
};
promise.controller = function($scope, $timeout, $interval, $window, $http, share) {
$scope._console = (window.location.hostname == "localhost") ? true : false;
$scope._component = "componentProductDetails";
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
$scope._componentType = _ui_share_host + $scope._component + "/type/";
$scope._module = _ui_share_host + $scope._component + "/module/";
$scope._class = ($scope.type != undefined && $scope.type != "") ? $scope.type : "default";
/* scope */
$scope._name = ($scope.name != undefined && $scope.name != "") ? $scope.name : "default";
$scope._type = $scope._componentType + $scope._class + ".html";
$scope._cart = ($scope.cart != undefined && $scope.cart != "") ? $scope.cart : "trumpComponentCarts";
$scope._buycol = ($scope.buycol != undefined && $scope.buycol != "") ? parseInt($scope.buycol) : 15;
$scope._maxstock = ($scope.maxstock != undefined && $scope.maxstock != "") ? parseInt($scope.maxstock) : 20;
$scope._categorylistsurl = ($scope.categorylistsurl != undefined && $scope.categorylistsurl != "") ? $scope.categorylistsurl : "category-lists";
$scope._btnstyle = ($scope.btnstyle != undefined && $scope.btnstyle != "") ? $scope.btnstyle : "filled_button_large";
$scope._buylogin = ($scope.buylogin == "true" || $scope.buylogin == "t") ? true : false;
$scope._checkstaff = ($scope.checkstaff == "true" || $scope.checkstaff == "t") ? true : false;
$scope._categorylists = ($scope.categorylists != undefined && $scope.categorylists != "") ? $scope.categorylists : "สินค้า";
$scope._sandwiched = ($scope.sandwiched != undefined && $scope.sandwiched != "") ? $scope.sandwiched : ">";
$scope._currency = ($scope.currency != undefined && $scope.currency != "") ? $scope.currency : "THB";
$scope._buyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope.buyicon : "icnt_outline_cart01_dark.png";
$scope._buytext = ($scope.buytext != undefined && $scope.buytext != "") ? $scope.buytext : "เพิ่มในรถเข็น";
$scope._viewcarttext = ($scope.viewcarttext != undefined && $scope.viewcarttext != "") ? $scope.viewcarttext : "ดูรถเข็น";
$scope._videotext = ($scope.videotext != undefined && $scope.videotext != "") ? $scope.videotext : "Video";
$scope._icebuyicon = ($scope.buyicon != undefined && $scope.buyicon != "") ? $scope._icnPath + $scope.buyicon : $scope._icnPath + "icnt_outline_cart01_dark.png";
$scope._language = ($scope.language != undefined && $scope.language != "") ? (($scope.language == "en") ? "en" : "th") : "th";
$scope._textbrand = ($scope.textbrand != undefined && $scope.textbrand != "") ? $scope.textbrand : "Brand";
$scope._navigationhover = ($scope.navigationhover != undefined && $scope.navigationhover != "") ? $scope.navigationhover : "primary";
$scope._imageappcoverchecked = ($scope.imageappcoverchecked == "true" || $scope.imageappcoverchecked == "t") ? true : false;
/* scope */
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getNamePage: function(arr) {
var str = [];
for (var i = 0; i < arr.length; i++) {
if (i != 0) {
str.push(arr[i]);
}
}
return str.join(" ");
},
getProductId: function(params, callback) {
var _self = this;
var product_id = (params.product_id != undefined) ? params.product_id.split("-", 1).join("") : false;
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
getReferralId: function(productReferralDisplay, callback) {
var _self = this;
var referral_id = 0;
if (productReferralDisplay.length != 0) {
if (productReferralDisplay.category != undefined) {
if (productReferralDisplay.category.length != 0) {
referral_id = productReferralDisplay.category[0].referral_id
}
}
}
callback(referral_id);
},
getStaffId: function(staffId, callback) {
var _self = this;
var res_staff = {
staff_id: (staffId != 0 && staffId != '' && staffId != undefined) ? staffId : '0',
status: (staffId != 0 && staffId != '' && staffId != undefined) ? true : false
}
callback(res_staff);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getCarousel = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carouselA: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
fade: true,
dots: false,
arrows: false,
infinite: true,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '',
nextArrow: '',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselB: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: true,
arrows: true,
infinite: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselD: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: true,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
',
speed: 600,
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselBar: function(cover, carousel) {
var _self = this;
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
setTimeout(function() {
var carousels = $(carousel);
carousels.not('.slick-initialized').slick({
dots: false,
arrows: false,
infinite: false,
autoplay: false,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToShow: 6,
slidesToScroll: 6,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 5,
slidesToScroll: 5,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 4,
slidesToScroll: 4,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 3,
slidesToScroll: 3,
}
}]
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
slickCarousel: function(carousel, index) {
var _self = this;
$scope.setCarousel.index = index;
setTimeout(function() {
$('[data-key="' + carousel + '"]').slick('slickGoTo', index);
}, 100);
},
prevIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != 0) ? image_index - 1 : image - 1;
_self.consoleLog("prevIndex index", $scope.setCarousel.index);
},
nextIndex: function(product_image) {
var _self = this;
var image = product_image.length;
var image_index = $scope.setCarousel.index;
$scope.setCarousel.index = (image_index != (image - 1)) ? image_index + 1 : 0;
_self.consoleLog("nextIndex index", $scope.setCarousel.index);
}
}
return getFunction;
};
$scope.getAttribute = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
productAttribute: function(productAttribute, callback) {
var _self = this;
var attribute = {
option_name: "",
option_attribute: []
};
if (productAttribute.option_data != undefined) {
if (productAttribute.option_data.variant_array != undefined && productAttribute.option_data.variant_array.length != 0) {
for (var a = 0; a < productAttribute.option_data.pclass_array.length; a++) {
attribute.option_name = attribute.option_name.concat(productAttribute.option_data.pclass_array[a].pclass_name, " ");
}
for (var b = 0; b < productAttribute.option_data.variant_array.length; b++) {
var product_attribute = {
product_id: productAttribute.option_data.variant_array[b].product_id,
product_sku: productAttribute.option_data.variant_array[b].sku,
product_title: "",
product_price: parseFloat(productAttribute.option_data.variant_array[b].price),
product_compare_price: parseFloat(productAttribute.option_data.variant_array[b].compare_price),
product_total_stock: parseFloat(productAttribute.option_data.variant_array[b].total_stock),
product_image: productAttribute.option_data.variant_array[b].variant_image
}
for (var c = 0; c < productAttribute.option_data.variant_array[b].option_name_array.length; c++) {
product_attribute.product_title = product_attribute.product_title.concat(productAttribute.option_data.variant_array[b].option_name_array[c], " ");
}
attribute.option_attribute.push(product_attribute);
}
}
}
_self.consoleLog("productAttribute attribute ", attribute);
callback(attribute);
},
checkDiscountPrice: function(productDiscount, resPrice, resComparePrice, callback) {
var _self = this;
var price = 0;
var compare_price = 0;
if (productDiscount.length == 0) {
price = parseFloat(resPrice);
compare_price = parseFloat(resComparePrice);
} else {
if (productDiscount.discount_type_id == '101') {
price = parseFloat(resPrice) - parseFloat(productDiscount.discount_price);
compare_price = parseFloat(resPrice);
} else if (productDiscount.discount_type_id == '102') {
price = (parseFloat(resPrice) * ((100 - parseFloat(productDiscount.discount_percent)) / 100));
compare_price = parseFloat(resPrice);
}
}
callback(price, compare_price);
},
checkMinPrice: function(option, callback) {
var _self = this;
var price_min = parseFloat(option.option_attribute[0].product_price);
var compare_price_min = parseFloat(option.option_attribute[0].product_compare_price);
var total_stock = parseFloat(option.option_attribute[0].product_total_stock);
for (var a = 0; a < option.option_attribute.length; a++) {
if (price_min >= parseFloat(option.option_attribute[a].product_price)) {
price_min = parseFloat(option.option_attribute[a].product_price);
compare_price_min = parseFloat(option.option_attribute[a].product_compare_price);
total_stock = parseFloat(option.option_attribute[a].product_total_stock);
}
}
_self.consoleLog("checkPriceMin price_min ", price_min);
_self.consoleLog("checkPriceMin compare_price_min ", compare_price_min);
_self.consoleLog("checkPriceMin total_stock ", total_stock);
callback(price_min, compare_price_min, total_stock);
},
getTotalStock: function(totalStock, mixStock, callback) {
var _self = this;
var total_stock = (totalStock > 0) ? ((totalStock <= mixStock) ? totalStock : mixStock) : ((totalStock == -1) ? mixStock : totalStock);
callback(total_stock);
},
checkMinPrices: function(api, attribute, callback) {
var _self = this;
var dataPrice = {
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
}
}
if (attribute.option_attribute.length == 0) {
_self.checkDiscountPrice(api.data.product_discount, api.data.product_price, api.data.product_compare_price, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(api.data.product_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, false);
});
});
});
});
});
} else {
_self.checkMinPrice(attribute, function(res_price_min, res_compare_price_min, res_total_stock) {
_self.checkDiscountPrice(api.data.product_discount, res_price_min, res_compare_price_min, function(res_price, res_compare_price) {
_self.checkPrice(res_price, function(res_price_ecimals) {
dataPrice.product_price.price = res_price;
dataPrice.product_price.price_ecimals = res_price_ecimals;
dataPrice.sum_product_price.price = res_price;
dataPrice.sum_product_price.price_ecimals = res_price_ecimals;
_self.checkPrice(res_compare_price, function(res_compare_price_ecimals) {
dataPrice.product_compare_price.price = res_compare_price;
dataPrice.product_compare_price.price_ecimals = res_compare_price_ecimals;
dataPrice.sum_product_compare_price.price = res_compare_price;
dataPrice.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((res_compare_price - res_price) > 0) ? res_compare_price - res_price : 0;
_self.checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
dataPrice.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
dataPrice.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.getTotalStock(res_total_stock, $scope._maxstock, function(res_total_stock_s) {
dataPrice.product_price.total_stock = res_total_stock_s;
dataPrice.product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_price.total_stock = res_total_stock_s;
dataPrice.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
callback(dataPrice, true);
});
});
});
});
});
});
}
},
priceIncludes: function(price, includes, callback) {
var _self = this;
var priceToString = (price == null) ? 0 : price;
_self.consoleLog('priceIncludes priceToString : ', priceToString);
callback(priceToString.toString().includes(includes));
},
checkPrice: function(price, callback) {
var _self = this;
_self.priceIncludes(price, '.', function(res) {
_self.consoleLog("checkPrice res ", res);
callback((!res) ? 0 : 2);
});
},
onSelectOption: function(productId) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = productId;
_self.consoleLog("onSelectOption productId ", productId);
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
for (var a = 0; a < $scope.data.attribute.dataArray.option_attribute.length; a++) {
_self.consoleLog("onSelectOption option_attribute ", $scope.data.attribute.dataArray.option_attribute[a]);
if ($scope.data.attribute.dataArray.option_attribute[a].product_id == productId) {
if ($scope.data.attribute.dataArray.option_attribute[a].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var b = 0; b < $scope.dataApi.product.dataArray.product_image.length; b++) {
if ($scope.dataApi.product.dataArray.product_image[b].image_id == $scope.data.attribute.dataArray.option_attribute[a].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, b);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[a].product_price, $scope.data.attribute.dataArray.option_attribute[a].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[a].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
break;
}
}
},
onClickOption: function(index) {
var _self = this;
$scope.data.quantity.quantity_input = 1;
$scope.dataApi.product.dataArray.product_id = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.data.attribute.productId = $scope.data.attribute.dataArray.option_attribute[index].product_id;
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
if ($scope.data.attribute.dataArray.option_attribute[index].product_image.length != 0) {
if ($scope.dataApi.product.dataArray.product_image.length != 0) {
for (var i = 0; i < $scope.dataApi.product.dataArray.product_image.length; i++) {
if ($scope.dataApi.product.dataArray.product_image[i].image_id == $scope.data.attribute.dataArray.option_attribute[index].product_image[0].image_id) {
$scope.getCarousel().slickCarousel($scope.setCarousel.carousel, i);
}
}
}
}
_self.checkDiscountPrice($scope.dataApi.product.dataArray.product_discount, $scope.data.attribute.dataArray.option_attribute[index].product_price, $scope.data.attribute.dataArray.option_attribute[index].product_compare_price, function(res_price_p, res_compare_price_p) {
_self.checkPrice(res_price_p, function(res_price_ecimals_p) {
$scope.data.product_price.price = res_price_p;
$scope.data.product_price.price_ecimals = res_price_ecimals_p;
$scope.data.sum_product_price.price = res_price_p;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals_p;
_self.checkPrice(res_compare_price_p, function(res_compare_price_ecimals_p) {
$scope.data.product_compare_price.price = res_compare_price_p;
$scope.data.product_compare_price.price_ecimals = res_compare_price_ecimals_p;
$scope.data.sum_product_compare_price.price = res_compare_price_p;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals_p;
var compare_price_minus_price_p = ((res_compare_price_p - res_price_p) > 0) ? res_compare_price_p - res_price_p : 0;
_self.checkPrice(compare_price_minus_price_p, function(res_compare_price_minus_price_ecimals_p) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price_p;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals_p;
_self.getTotalStock($scope.data.attribute.dataArray.option_attribute[index].product_total_stock, $scope._maxstock, function(res_total_stock_s) {
$scope.data.product_price.total_stock = res_total_stock_s;
$scope.data.product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_price.total_stock = res_total_stock_s;
$scope.data.sum_product_compare_minus_sum_product_price.total_stock = res_total_stock_s;
/* stock */
$scope.data.quantity.quantity_max = res_total_stock_s;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_total_stock_s; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* stock */
})
});
});
});
});
}
}
return getFunction;
};
$scope.getAttributeCustom = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
createArray: function(productCustomTemplates, callback) {
var _self = this;
var custom_attributes = [];
if (productCustomTemplates.templates.length != 0) {
angular.forEach(productCustomTemplates.templates, function(item, index) {
if (item.option_sets.length != 0) {
_self.getAttributes(item.option_sets, function(res_attributes) {
custom_attributes = custom_attributes.concat(res_attributes);
});
}
});
/* if (productCustomTemplates.templates[0].option_sets.length != 0) {
_self.getAttributes(productCustomTemplates.templates[0].option_sets, function(res_attributes) {
custom_attributes = res_attributes;
});
} */
}
_self.consoleLog("createArray : productCustomTemplates", productCustomTemplates);
_self.consoleLog("createArray : custom_attributes", custom_attributes);
callback(custom_attributes, true);
},
formatAttribute: function(index, optionSubsetIndex, setType, optionSetArray, callback) {
var _self = this;
var set_id = (setType == 'attribute') ? optionSetArray.set_id : optionSetArray.subset_id;
var attribute = {
attribute_index: index,
attribute_option_subset_index: optionSubsetIndex,
active_option_id: (optionSetArray.option_data.select_id != 0) ? optionSetArray.option_data.select_id : "-1",
active_option_index: -1,
active_option_index_str: "-1",
active_textarea: "",
active_array: [],
set_id: set_id,
name: optionSetArray.name,
set_type: optionSetArray.ss_type,
option: []
}
callback(attribute);
},
getOption: function(index, optionDataArray, callback) {
var _self = this;
var options = {
index: index,
ss_data_id: optionDataArray.ss_data_id,
name: optionDataArray.name,
image: optionDataArray.image,
price: optionDataArray.price,
compare_price: 0,
total_stock: 0
}
callback(options);
},
getActive: function(index, activeOptionId, activeOptionIdIn, optionDataArray, callback) {
var _self = this;
var actives_index = (optionDataArray.ss_data_id == activeOptionId) ? index : activeOptionIdIn;
var actives = (optionDataArray.ss_data_id != activeOptionId) ? "0" : "1";
callback(actives_index, actives);
},
getAttributes: function(optionSetArray, callback) {
var _self = this;
var attributes = [];
for (var index = 0; index < optionSetArray.length; index++) {
_self.formatAttribute(index, 0, 'attribute', optionSetArray[index], function(res_attribute) {
if (optionSetArray[index].option_subsets.length != 0) {
for (var option_subset_index = 0; option_subset_index < optionSetArray[index].option_subsets.length; option_subset_index++) {
_self.formatAttribute(index, option_subset_index, res_attribute.set_type, optionSetArray[index].option_subsets[option_subset_index], function(res_attribute_sub) {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_subsets[option_subset_index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute_sub.active_option_id, active_option_id, optionSetArray[index].option_subsets[option_subset_index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute_sub.option = options;
res_attribute_sub.active_option_index = active_option_id;
res_attribute_sub.active_option_index_str = String(active_option_id);
res_attribute_sub.active_array = active_option_array;
attributes.push(res_attribute_sub);
});
}
} else {
var options = [];
var active_option_id = -1;
var active_option_array = [];
for (var option = 0; option < optionSetArray[index].option_data.options.length; option++) {
_self.getOption(option, optionSetArray[index].option_data.options[option], function(res_option) {
options.push(res_option);
});
_self.getActive(option, res_attribute.active_option_id, active_option_id, optionSetArray[index].option_data.options[option], function(res_actives_index, res_actives) {
active_option_id = res_actives_index;
active_option_array.push(res_actives);
});
}
res_attribute.option = options;
res_attribute.active_option_index = active_option_id;
res_attribute.active_option_index_str = String(active_option_id);
res_attribute.active_array = active_option_array;
attributes.push(res_attribute);
}
});
}
callback(attributes)
},
getformatQuantity: function(index, attributeCustom, callback) {
var _self = this;
var quantity = {
name: String(index + 1),
dataArray: attributeCustom
}
callback(quantity);
},
onClickRadio: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickRadio : index", index);
_self.consoleLog("onClickRadio : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickRadio : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickDropdown: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickDropdown : index", index);
_self.consoleLog("onClickDropdown : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i != parseInt(index_option)) ? "0" : "1";
}
_self.consoleLog("onClickDropdown : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
},
onClickCheckbox: function(index, index_option) {
var _self = this;
_self.consoleLog("onClickCheckbox : index", index);
_self.consoleLog("onClickCheckbox : index_option", index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index = parseInt(index_option);
$scope.data.attribute_custom.dataArray[index].active_option_index_str = String(index_option);
for (var i = 0; i < $scope.data.attribute_custom.dataArray[index].active_array.length; i++) {
$scope.data.attribute_custom.dataArray[index].active_option_id = (i != parseInt(index_option)) ? $scope.data.attribute_custom.dataArray[index].active_option_id : $scope.data.attribute_custom.dataArray[index].option[i].ss_data_id;
$scope.data.attribute_custom.dataArray[index].active_array[i] = (i == parseInt(index_option)) ? (($scope.data.attribute_custom.dataArray[index].active_array[i] != "0") ? "0" : "1") : $scope.data.attribute_custom.dataArray[index].active_array[i];
}
_self.consoleLog("onClickCheckbox : $scope.data.attribute_custom.dataArray[index]", $scope.data.attribute_custom.dataArray[index]);
}
}
return getFunction;
};
$scope.getReward = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
momentUnix: function(callback) {
var _self = this;
var now = moment().unix();
callback(now);
},
getCalculator: function(sumProductPrice, reward, callback) {
var _self = this;
_self.consoleLog("getCalculator : sumProductPrice", sumProductPrice);
_self.consoleLog("getCalculator : reward", reward);
var point_reward = 0;
if (reward.type_id == "100") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
} else if (reward.type_id == "101") {
point_reward = reward.reward_amount;
} else if (reward.type_id == "102") {
point_reward = (reward.reward_percent * sumProductPrice.price) / 100;
} else if (reward.type_id == "103") {
point_reward = Math.floor((sumProductPrice.price / reward.reward_every_price)) * reward.reward_amount;
}
_self.consoleLog("getCalculator : point_reward", point_reward);
callback(point_reward);
},
getProductReward: function(now, productReward, callback) {
var _self = this;
var reward = {
reward_length: (productReward.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(productReward.reward_lifetime.lifetime_start_time);
reward.lifetime_end_time = parseInt(productReward.reward_lifetime.lifetime_end_time);
reward.type_id = productReward.reward_type_id;
reward.amount = parseInt(productReward.reward_amount);
reward.percent = parseInt(productReward.reward_percent);
reward.every_price = parseInt(productReward.reward_every_price);
}
_self.consoleLog("getProductReward : reward", reward);
callback(reward);
},
getPointConfig: function(now, shopPointConfig, callback) {
var _self = this;
var reward = {
reward_length: (shopPointConfig.length != 0) ? true : false,
lifetime_time: 0,
lifetime_start_time: 0,
lifetime_end_time: 0,
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
reward.lifetime_time = now;
if (reward.reward_length) {
reward.lifetime_start_time = parseInt(shopPointConfig.er_from);
reward.lifetime_end_time = parseInt(shopPointConfig.er_to);
reward.type_id = "100";
reward.amount = parseInt(shopPointConfig.er_earn);
reward.every_price = parseInt(shopPointConfig.er_rate);
}
_self.consoleLog("getPointConfig : reward", reward);
callback(reward);
},
checkPointReward: function(reward, callback) {
var _self = this;
var state = false;
if (reward.reward_length) {
var start = reward.lifetime_start_time < reward.lifetime_time && reward.lifetime_start_time != 0;
var end = (reward.lifetime_end_time != -1) ? reward.lifetime_time <= reward.lifetime_end_time && reward.lifetime_end_time != 0 : true;
if (start && end) {
if (reward.type_id == "100") {
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
} else if (reward.type_id == "101") {
var amount = reward.amount != 0;
if (amount) {
state = true;
}
} else if (reward.type_id == "102") {
var percent = reward.percent != 0;
if (percent) {
state = true;
}
} else if (reward.type_id == "103") {
var percent = reward.percent != 0;
var amount = reward.amount != 0;
var every_price = reward.every_price != 0;
if (amount && every_price) {
state = true;
}
}
}
}
callback(state);
},
checkReward: function(rewardProduct, rewardPointConfig, callback) {
var _self = this;
_self.consoleLog("checkReward : rewardProduct", rewardProduct);
_self.consoleLog("checkReward : rewardPointConfig", rewardPointConfig);
var reward = {
type_id: "0",
amount: 0,
percent: 0,
every_price: 0
};
_self.checkPointReward(rewardProduct, function(res_state_product) {
_self.checkPointReward(rewardPointConfig, function(res_state_point_config) {
if (res_state_point_config) {
reward.type_id = rewardPointConfig.type_id;
reward.type_id = rewardPointConfig.type_id;
reward.amount = rewardPointConfig.amount;
reward.percent = rewardPointConfig.percent;
reward.every_price = rewardPointConfig.every_price;
} else if (res_state_product) {
reward.type_id = rewardProduct.type_id;
reward.amount = rewardProduct.amount;
reward.percent = rewardProduct.percent;
reward.every_price = rewardProduct.every_price;
}
_self.consoleLog("checkReward : reward", reward);
callback(reward);
});
});
},
checkRewardType: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.momentUnix(function(now) {
_self.getProductReward(now, productReward, function(res_reward_product) {
_self.getPointConfig(now, shopPointConfig, function(res_reward_point_config) {
_self.checkReward(res_reward_product, res_reward_point_config, function(res_reward) {
callback(res_reward);
});
});
});
});
},
createReward: function(productReward, shopPointConfig, callback) {
var _self = this;
_self.consoleLog("createReward : productReward", productReward);
_self.consoleLog("createReward : shopPointConfig", shopPointConfig);
_self.checkRewardType(productReward, shopPointConfig, function(res_reward) {
_self.consoleLog("createReward : res_reward", res_reward);
callback(res_reward);
});
}
}
return getFunction;
};
$scope.getQuantity = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
upDateReward: function() {
var _self = this;
},
upDateReward: function() {
var _self = this;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
},
upDatePrice: function() {
var _self = this;
var product_price = $scope.data.product_price.price * $scope.data.quantity.quantity_input;
var product_compare_price = $scope.data.product_compare_price.price * $scope.data.quantity.quantity_input;
$scope.getAttribute().checkPrice(product_price, function(res_price_ecimals) {
$scope.data.sum_product_price.price = product_price;
$scope.data.sum_product_price.price_ecimals = res_price_ecimals;
$scope.getAttribute().checkPrice(product_compare_price, function(res_compare_price_ecimals) {
$scope.data.sum_product_compare_price.price = product_compare_price;
$scope.data.sum_product_compare_price.price_ecimals = res_compare_price_ecimals;
var compare_price_minus_price = ((product_compare_price - product_price) > 0) ? product_compare_price - product_price : 0;
$scope.getAttribute().checkPrice(compare_price_minus_price, function(res_compare_price_minus_price_ecimals) {
$scope.data.sum_product_compare_minus_sum_product_price.price = compare_price_minus_price;
$scope.data.sum_product_compare_minus_sum_product_price.price_ecimals = res_compare_price_minus_price_ecimals;
_self.upDateReward();
});
});
});
},
input: function(quantityInput) {
var _self = this;
quantityInput = (quantityInput == null) ? 1 : parseInt(quantityInput);
_self.consoleLog("input : quantityInput", quantityInput);
if (quantityInput != null) {
if (quantityInput >= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_max;
}
if (quantityInput <= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
} else {
$scope.data.quantity.quantity_input = $scope.data.quantity.quantity_min;
}
_self.upDatePrice();
},
minus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input - 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_min", $scope.data.quantity.quantity_min);
if (quantity >= $scope.data.quantity.quantity_min) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
},
plus: function() {
var _self = this;
var quantity = $scope.data.quantity.quantity_input + 1;
_self.consoleLog("plus : quantity", quantity);
_self.consoleLog("plus : quantity_max", $scope.data.quantity.quantity_max);
if (quantity <= $scope.data.quantity.quantity_max) {
$scope.data.quantity.quantity_input = quantity;
}
_self.upDatePrice();
}
}
return getFunction;
};
$scope.getBuy = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = params.product_id.split("-", 1).join("");
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
postApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.post(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
UiCartProductAdd: function(productId, quantityInput, promotionId, customOptions, callback) {
quantityInput = (quantityInput > $scope.data.quantity.quantity_max) ? $scope.data.quantity.quantity_max : quantityInput;
UiCart.delegate.product.add(productId, quantityInput, promotionId, function(res_data) {
callback(res_data);
});
},
isLogin: function(callback) {
var buy_login = $scope._buylogin;
var is_login = UiCustomerBox.delegate.get.isLogin();
var is_state = (buy_login) ? (!is_login) ? true : false : false;
callback(is_state);
},
formLogin: function(is_state, callback) {
if (is_state) {
$inloginPopup.open();
}
callback(is_state);
},
getProductStaffId(staff_id_check, callback) {
var res_staff_id_check = staff_id_check;
var res_staff_id = $scope.dataApi.product.dataArray.product_staff_id;
var res_is_state = (res_staff_id != 0 && res_staff_id != '0' && res_staff_id != undefined) ? true : false;
callback(res_staff_id_check, res_staff_id, res_is_state);
},
isStaffId: function(staff_id_check, callback) { /* todo */
var _self = this;
_self.getProductStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
callback(res_staff_id_check, res_staff_id, res_is_state);
});
},
checkCartDuplicateStaff: function(res_staff_id_check, txt_staff_id, res_is_state, callback) {
var _self = this
var res_is_state = true;
if (res_staff_id_check) {
var dataSend = {
'txt_staff_id': txt_staff_id,
};
_self.dataSend("cart/duplicate_staff", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
res_is_state = res_api.data.duplicate;
callback(res_is_state);
});
});
} else {
callback(res_is_state);
}
},
showAlert: function(res_staff_id_check, res_staff_id, res_is_state, res_api, callback) {
var res_state = (res_staff_id_check) ? ((res_api) ? ((res_is_state) ? false : true) : true) : false;
if (res_state) {
if (!res_api) {
if (res_staff_id != '0' && res_staff_id != 0) {
$scope.controlAlert().alert('002');
} else {
$scope.controlAlert().alert('003');
}
} else {
if (!res_is_state) {
$scope.controlAlert().alert('003');
}
}
}
callback(res_state);
},
checkStaff: function(callback) {
var _self = this
var staff_id_check = $scope._checkstaff;
var res_check = false;
_self.isStaffId(staff_id_check, function(res_staff_id_check, res_staff_id, res_is_state) {
_self.checkCartDuplicateStaff(res_staff_id_check, res_staff_id, res_is_state, function(res_api) {
_self.showAlert(res_staff_id_check, res_staff_id, res_is_state, res_api, function(res_state) {
res_check = res_state;
callback(res_check);
});
});
});
},
isProgress: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isProgress(productId)) ? true : false;
_self.consoleLog("isProgress : productId", productId);
_self.consoleLog("isProgress : state", state);
callback(state);
},
isSelected: function(productId, callback) {
var _self = this;
var state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
_self.consoleLog("isSelected : productId", productId);
_self.consoleLog("isSelected : state", state);
callback(state);
},
isSelectedReturn: function(productId) {
var _self = this;
var ui_cart_state = (UiCart.delegate.product.isSelected(productId)) ? true : false;
if (!$scope.setBuy.state_active) {
$scope.setBuy.state_active = true;
var state_process = $scope.setBuy.state_process;
var state_step = $scope.setBuy.state_step;
if (ui_cart_state && !state_process && state_step != 4) /* cart */ {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else if (!ui_cart_state && !state_process && state_step != 0) /* unset */ {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_active = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
} else {
$scope.setBuy.state_active = false;
}
}
return ui_cart_state;
},
updateState: function(productId) {
_self = this;
_self.isSelected(productId, function(res_state) {
if (res_state) {
_self.onTimeout(250, function() {
_self.onPass(1, function(res_step) {
_self.onTimeout(500, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onUnset(0, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
}
return res_state;
});
},
uiCart: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
_self.UiCartProductAdd(productId, quantityInput, promotionId, customOptions, function(res_data) {
if (res_data) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
}
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
},
postApiA: function(productId, quantityInput, promotionId, customOptions, res_step) {
var _self = this;
var custom_options = {};
var dataSend = {
'txt_product_id': productId,
'txt_amount': quantityInput,
'txt_is_clear_cart_before': "0",
'txt_custom_options_json': JSON.stringify(custom_options)
};
_self.dataSend("cart/product_add", dataSend, function(res_api, res_dataSend) {
_self.postApi(res_api, res_dataSend, function(res_ok, res_api, state) {
if (res_ok) {
_self.onTimeout(500, function() {
_self.onPass(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onCart(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[4].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[4].data_background_color;
});
});
});
});
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
});
},
onProcess: function(data, productId, quantityInput, promotionId, customOptions) {
var _self = this;
_self.isLogin(function(res_is_login) {
_self.formLogin(res_is_login, function(res_form) {
_self.checkStaff(function(res_is_state) {
if (!$scope.setBuy.state_process && !res_form && !res_is_state) {
$scope.setBuy.state_process = true;
_self.isSelected(productId, function(res_state) {
if (!res_state) {
_self.onLoad($scope.setBuy.state_step, function(res_step) {
if (data.sum_product_price.price != 0 && data.quantity.quantity_max != 0 && (data.attribute.state == (data.attribute.productId != ''))) {
/* UiCart */
_self.uiCart(productId, quantityInput, promotionId, customOptions, res_step);
/* api post offline */
/*_self.postApiA(productId, quantityInput, promotionId, customOptions, res_step); */
} else {
_self.onTimeout(500, function() {
_self.onError(res_step, function(res_step) {
_self.onTimeout(1000, function() {
_self.onUnset(res_step, function(res_step) {
$scope.setBuy.state_process = false;
$scope.setBuy.state_data_font_color = $scope.setBuy.stepArray[0].data_font_color;
$scope.setBuy.state_data_background_color = $scope.setBuy.stepArray[0].data_background_color;
});
});
});
});
}
});
} else {
$scope.setBuy.state_process = false;
if ($scope._cart == "trumpComponentCarts") {
_self.trumpComponentCarts();
} else if ($scope._cart == "viewcart") {
_self.viewCart($scope._cart);
}
}
});
}
});
});
});
},
onTimeout: function(time, callback) {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
callback(true)
}, time);
},
onUnset: function(step, callback) {
var _self = this;
step = (step == 0) ? 0 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onLoad: function(step, callback) {
var _self = this;
step = (step == 0 || step == 1) ? 1 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onPass: function(step, callback) {
var _self = this;
step = (step == 1 || step == 2) ? 2 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onError: function(step, callback) {
var _self = this;
step = (step == 1 || step == 3) ? 3 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
onCart: function(step, callback) {
var _self = this;
step = (step == 2 || step == 4) ? 4 : 0;
$scope.setBuy.state_step = step;
callback(step);
},
trumpComponentCarts: function() {
var controlCart = share.getTrumpComponentCarts();
var component_carts = $('.cover-cards').hasClass('active');
if (!component_carts) {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.cart();
}
} else {
var component_icon_cart = $("div").hasClass('cover-icon-carts');
if (component_icon_cart) {
controlCart.load();
}
}
},
viewCart: function(viewcart) {
var _self = this;
_self.pageUrl(viewcart);
},
locationUrlReplace: function(page) {
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
main: function(callback) {
var _self = this;
}
}
return getFunction;
};
$scope.getDetail = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getDetail: function(api, callback) {
var _self = this;
var description = api.product_description;
var info = api.product_more_info;
var specificatio = [];
if (api.product_attribute.specification_data != undefined) {
specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? api.product_attribute.specification_data.pclass_array : [];
}
var state_specificatio = false;
if (api.product_attribute.specification_data != undefined) {
state_specificatio = (api.product_attribute.specification_data.length != 0 && api.product_attribute.specification_data != undefined) ? true : false;
}
var state_info = (api.product_is_more_info == 1) ? true : false;
_self.consoleLog("getDetail : description", description);
_self.consoleLog("getDetail : info", info);
_self.consoleLog("getDetail : state_info", state_info);
_self.consoleLog("getDetail : specificatio", specificatio);
_self.consoleLog("getDetail : state_specificatio", state_specificatio);
callback(description, info, state_info, specificatio, state_specificatio);
},
onClickDetail: function(index) {
var _self = this;
$scope.data.detail.active = index;
_self.consoleLog("onClickDetail : data.detail.active", $scope.data.detail.active);
}
}
return getFunction;
};
$scope.pages = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageName: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page_name);
},
pageUrl: function(page_name, id, name_url) {
var _self = this;
var page = page_name + "/" + id + "-" + name_url;
_self.locationUrlReplace(page);
}
}
return getFunction;
};
$scope.countDown = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getLocation: function(callback) {
var _self = this;
var res_location = $location;
_self.consoleLog("getLocation", "res_location", res_location);
callback(res_location);
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
_self.consoleLog("getRouteParams", "params", params);
callback(params);
},
getLocationUrlNameProductDetail: function(callback) {
var _self = this;
_self.getRouteParams(function(res_params) {
_self.getLocation(function(res_location) {
var url_page_name = "/product-detail/" + res_params.product_id;
var res_url_name_product_detail = (res_location.url() == url_page_name) ? true : false;
_self.consoleLog("getLocationUrlNameProductDeal", "res_url_name_product_detail", res_url_name_product_detail);
callback(res_url_name_product_detail);
});
});
},
getUnix: function(callback) {
var _self = this;
var now = moment().unix();
_self.consoleLog("getUnix", "now", now);
callback(now);
},
getCountDown: function(now, product_lifetime, callback) {
var _self = this;
var countdown_unix = parseInt(product_lifetime.lifetime_end_time) - now;
var milliseconds = moment.duration(countdown_unix * 1000, "milliseconds");
var res_countdown = ((milliseconds.days() <= 9) ? '0' + milliseconds.days() : milliseconds.days());
res_countdown = res_countdown + ' : ' + ((milliseconds.hours() <= 9) ? '0' + milliseconds.hours() : milliseconds.hours());
res_countdown = res_countdown + ' : ' + ((milliseconds.minutes() <= 9) ? '0' + milliseconds.minutes() : milliseconds.minutes());
res_countdown = res_countdown + ' : ' + ((milliseconds.seconds() <= 9) ? '0' + milliseconds.seconds() : milliseconds.seconds());
_self.consoleLog("getCountDown", "res_countdown", res_countdown);
callback(res_countdown, countdown_unix);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
locationUrlReplace: function(page) {
var _self = this;
$location.url(page).replace();
},
pageUrl: function(page_name) {
var _self = this;
var page = page_name;
_self.locationUrlReplace(page);
},
countDownByProduct: function(now, data_array, callback) {
var _self = this;
if (data_array.length != 0) {
if (data_array.product_lifetime.length != 0) {
_self.getCountDown(now, data_array.product_lifetime, function(res_count_down, res_countdown_unix) {
data_array.product_lifetime.lifetime_countdown = (res_countdown_unix > 0) ? res_count_down : "";
if (data_array.product_lifetime.lifetime_countdown == "") {
_self.getNameUrl(data_array.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", data_array.product_set_array[0].product_id, res_name);
});
}
});
}
}
_self.consoleLog("countDownByProduct", "data_array", data_array);
callback(data_array);
},
loop: function() {
var _self = this;
var load = $timeout(function() {
$timeout.cancel(load);
_self.getUnix(function(res_now) {
_self.countDownByProduct(res_now, $scope.dataApi.product.dataArray, function(data_array) {
$scope.dataApi.product.dataArray = data_array;
_self.getLocationUrlNameProductDetail(function(res_url_name_product_detail) {
if (res_url_name_product_detail) {
_self.loop();
}
});
});
});
}, 1000);
}
}
return getFunction;
};
$scope.getPromotion = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
setPromotionId: function(promotion_id) {
var _self = this;
_self.consoleLog("setPromotionId", "promotion_id", promotion_id);
$scope.data.promotion.promotion_id = promotion_id;
_self.consoleLog("setPromotionId", "data.promotion.promotion_id", $scope.data.promotion.promotion_id);
},
}
return getFunction;
};
$scope.control = function() {
var getFunction = {
popupVideo: function(state, video_link, video_embed_code) {
var _self = this;
if (video_embed_code != '') {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
} else if (video_link != '') {
window.open(video_link, '_blank');
} else {
$scope.data_control.page_video.popup = state;
$scope.data_control.page_video.shop_video_embed_code = video_embed_code;
}
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.data_control = {
page_video: {
popup: false,
shop_video_embed_code: ""
}
}
$scope.control_alert = {
alert: {
error_id: '',
index: null,
state: true,
error: [{
id: '001',
title: 'การสั่งซื้อ',
messages: 'สามารถสั่งซื้อได้เพียงทีละออเดอร์เท่านั้น'
}, {
id: '002',
title: 'การเพิ่มสินค้า',
messages: 'ไม่สามารถเพิ่มสินค้าของร้านมากกว่า 1 ร้านค้าได้'
}, {
id: '003',
title: 'การสั่งซื้อ',
messages: 'ไม่สามารถเพิ่มสินค้า(ไม่มีร้านค้า)'
}]
}
};
$scope.controlAlert = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getErrorMessages: function(error_id, callback) {
var _self = this;
var messages = {
res_error_id: '',
res_index: null
}
angular.forEach($scope.control_alert.alert.error, function(item, index) {
if (item.id == error_id) {
messages.res_error_id = item.id;
messages.res_index = index;
}
});
callback(messages.res_error_id, messages.res_index);
},
alert: function(error_id) {
var _self = this;
_self.getErrorMessages(error_id, function(res_error_id, res_index) {
$scope.control_alert.alert.error_id = res_error_id;
$scope.control_alert.alert.index = res_index;
$scope.control_alert.alert.state = (!$scope.control.alert && res_error_id != '') ? true : false;
});
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.countDown().loop();
/* set carousel */
$scope.setCarousel = {
carousel: 0,
index: 0
};
$scope.getCarousel().getCarousel($scope.setCarousel.carousel, function(res_carousel_id) {
$scope.setCarousel.carousel = res_carousel_id;
});
/* set carousel */
/* get product api */
$scope.dataApi = {
reward: {
dataSend: {},
api: "shop/current",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
staff: {
dataSend: {
txt_staff_id: 0
},
api: "staff/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
product: {
dataSend: {
txt_product_id: 0
},
api: "product/id",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
},
relation: {
dataSend: {
txt_referral_id: 0
},
api: "referral/relation",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.data = {
attribute: {
state: false,
productId: "",
dataArray: []
},
attribute_custom: {
state: false,
dataArray: []
},
reward: {
quantity_name: 'reward',
type_id: "0",
reward_amount: 0,
reward_percent: 0,
reward_every_price: 0,
point_reward: 0
},
quantity: {
quantity_name: 'quantity',
quantity_min: 1,
quantity_max: 1,
quantity_input: 1,
quantity_select: []
},
product_price: {
price_name: 'product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
product_compare_price: {
price_name: 'product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_price: {
price_name: 'sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_price: {
price_name: 'sum_product_compare_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
sum_product_compare_minus_sum_product_price: {
price_name: 'sum_product_compare_minus_sum_product_price',
price: 0,
price_ecimals: 0,
total_stock: 0
},
detail: {
active: '0',
dataArray: [{
index: '0',
state: true,
en: ($scope.description != undefined && $scope.description != "") ? $scope.description : 'Description',
th: '',
data: '',
dataArray: []
}, {
index: '1',
state: true,
en: ($scope.info != undefined && $scope.info != "") ? $scope.info : 'Info',
th: '',
data: '',
dataArray: []
}, {
index: '2',
state: true,
en: ($scope.specification != undefined && $scope.specification != "") ? $scope.specification : 'Specification',
th: '',
data: '',
dataArray: []
}]
},
promotion : {
promotion_id : '0'
}
};
$scope.setBuy = {
state_active: false,
state_process: false,
state_step: 0,
state_data_font_color: "",
state_data_background_color: "",
stepArray: [{
step: 0,
name: "unset",
icon: $scope._icebuyicon,
state: $scope._buytext,
data_font_color: "",
data_background_color: ""
}, {
step: 1,
name: "load",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 2,
name: "pass",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 3,
name: "error",
icon: "",
state: "",
data_font_color: "",
data_background_color: ""
}, {
step: 4,
name: "cart",
icon: "",
state: $scope._viewcarttext,
data_font_color: "",
data_background_color: "primary_darkest"
}]
};
/* - get api product/id start - */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.product.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
$scope.dataApi.product.dataSend.txt_product_id = (res_product_id != false) ? res_product_id : 0;
$scope.getData().dataSend($scope.dataApi.product.api, $scope.dataApi.product.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_product, res_state) {
$scope.dataApi.product.ok = res_ok;
if ($scope._imageappcoverchecked) {
var images = [];
angular.forEach(get_res_api_product.data.product_image,function(image,index_image){
if (!image.image_app_cover_checked) {
images.push(image)
}
});
get_res_api_product.data.product_image = images;
}
angular.element('.load-effect').removeClass('is-active');
$scope.dataApi.product.dataArray = get_res_api_product.data;
$scope.getData().consoleLog("get_res_api_product", get_res_api_product);
$scope.dataApi.product.dataArrayState = res_state;
/* -- get api shop/current to reward -- */
if (res_ok) {
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getData().dataSend($scope.dataApi.reward.api, $scope.dataApi.reward.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_shop, res_state) {
$scope.dataApi.reward.ok = res_ok;
$scope.dataApi.reward.dataArray = get_res_api_shop.data;
$scope.dataApi.reward.dataArrayState = res_state;
$scope.getReward().createReward($scope.dataApi.product.dataArray.product_reward, get_res_api_shop.data.shop_point_config, function(res_reward) {
$scope.data.reward.type_id = res_reward.type_id;
$scope.data.reward.reward_amount = res_reward.amount;
$scope.data.reward.reward_percent = res_reward.percent;
$scope.data.reward.reward_every_price = res_reward.every_price;
/* --- Wait product/id ,shop/current --- */
/* ---- get attribute ---- */
$scope.getAttribute().productAttribute(get_res_api_product.data.product_attribute, function(res_attribute) {
$scope.data.attribute.dataArray = res_attribute;
$scope.getAttribute().checkMinPrices(get_res_api_product, res_attribute, function(res_data_price, res_state) {
$scope.data.attribute.state = res_state;
$scope.data.product_price = res_data_price.product_price;
$scope.data.product_compare_price = res_data_price.product_compare_price;
$scope.data.sum_product_price = res_data_price.sum_product_price;
$scope.data.sum_product_compare_price = res_data_price.sum_product_compare_price;
$scope.data.sum_product_compare_minus_sum_product_price = res_data_price.sum_product_compare_minus_sum_product_price;
$scope.getReward().getCalculator($scope.data.sum_product_price, $scope.data.reward, function(res_point_reward) {
$scope.data.reward.point_reward = res_point_reward;
});
/* ----- stock ----- */
$scope.data.quantity.quantity_max = res_data_price.product_price.total_stock;
$scope.data.quantity.quantity_select = [];
for (var i = 0; i < res_data_price.product_price.total_stock; i++) {
$scope.data.quantity.quantity_select.push(i + 1);
}
/* ----- stock ----- */
});
});
/* ---- get attribute ---- */
/* ---- get attribute custom ---- */
$scope.getAttributeCustom().createArray(get_res_api_product.data.product_custom_templates, function(res_custom_attribute, res_state) {
$scope.data.attribute_custom.state = res_state;
$scope.data.attribute_custom.dataArray = res_custom_attribute;
});
/* ---- get attribute custom ---- */
/* ---- get detail ---- */
$scope.getDetail().getDetail(get_res_api_product.data, function(res_description, res_info, res_state_info, res_specificatio, res_state_specificatio) {
$scope.data.detail.dataArray[0].data = res_description;
$scope.data.detail.dataArray[1].data = res_info;
$scope.data.detail.dataArray[1].state = res_state_info;
$scope.data.detail.dataArray[2].dataArray = res_specificatio;
$scope.data.detail.dataArray[2].state = res_state_specificatio;
});
/* ---- get detail ---- */
/* ---- update state ---- */
$scope.getBuy().updateState($scope.dataApi.product.dataArray.product_id);
/* ---- update state ---- */
/* --- Wait product/id ,shop/current --- */
});
});
});
});
/* -- get api shop/current to reward -- */
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.relation.dataArrayState = res_state;
$scope.getData().getReferralId(get_res_api_product.data.product_referral_display, function(res_referral_id) {
$scope.dataApi.relation.dataSend.txt_referral_id = res_referral_id;
$scope.getData().dataSend($scope.dataApi.relation.api, $scope.dataApi.relation.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_referral, res_state) {
$scope.dataApi.relation.ok = res_ok;
$scope.dataApi.relation.dataArray = (res_referral_id != 0) ? get_res_api_referral.data : [];
$scope.dataApi.relation.dataArrayState = res_state;
});
});
});
});
/* -- res_referral_id from product/id to txt_referral_id get api referral/relation -- */
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.getData().getStaffId(get_res_api_product.data.product_staff_id, function(res_staff) {
if (res_staff.status) {
$scope.dataApi.staff.dataArrayState = res_state;
$scope.dataApi.staff.dataSend.txt_staff_id = res_staff.staff_id;
$scope.getData().dataSend($scope.dataApi.staff.api, $scope.dataApi.staff.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, res, res_state) {
$scope.dataApi.staff.ok = res_ok;
$scope.dataApi.staff.dataArray = res.data;
$scope.getData().getNameUrl(res.data.staff_first_name, function(res_staff_first_name_url) {
$scope.dataApi.staff.dataArray.staff_first_name_url = res_staff_first_name_url;
$scope.dataApi.staff.dataArrayState = res_state;
});
});
});
}
});
});
/* -- product_staff_id from product/id to txt_staff_id get api staff/id -- */
} else {
/* ok = false */
if ($scope.dataApi.product.dataArray.length != 0) {
/* product deal to product original */
if ($scope.dataApi.product.dataArray.product_set_array.length != 0) {
$scope.countDown().getNameUrl($scope.dataApi.product.dataArray.product_set_array[0].product_title, function(res_name) {
$scope.pages().pageUrl("product-detail", $scope.dataApi.product.dataArray.product_set_array[0].product_id, res_name);
});
} else {
$scope.pages().pageName("home");
}
} else {
/* product null */
$scope.pages().pageName("home");
}
}
});
});
});
});
/* - get api product/id end - */
/* get product api */
};
return promise;
});_ui_share_app.directive('componentProductDiscount', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductDiscount';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
'feature':'@feature',
'badgeid':'@badgeid',
'badgetext':'@badgetext',
'imgpath':'@imgpath',
'margin':'@margin',
};
promise.link = function (scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function ($scope, $timeout, $interval) {
$scope.use_feature = (typeof $scope.feature !== 'undefined' && $scope.feature == 'true') ? true : false;
/**
* Check if object array available for "website application" or "Mobile application" or "Featured"
* @params object array
* return true | false (default)
*/
$scope._showWeb = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 18) {
r = true;
break;
}
}
return r;
};
$scope._showApp = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 19) {
r = true;
break;
}
}
return r;
};
$scope._showFeature = function (objArray) {
var r = false;
for (var i = 0; i < objArray.length; i++) {
if (objArray[i].badge_id == 16) {
r = true;
break;
}
}
return r;
};
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
/*
* view current routeParams
* @params (default)
* @return function
*/
$scope._viewRouteParams = function () {
return $routeParams || false;
};
/* Dummy */
$scope.getDummyArray = function(){
var r = [];
var max = 6;
for(var i = 0; i < max; i++){
r.push({
product_id: '999999',
product_title: 'Samsung Galaxy S8',
product_price: '45000',
product_compare_price: '55000',
product_image:[{image_url:'extensions/themes/gae_default301/staticfiles/images/default/490x490.gif'}],
product_badge:[{badge_id:18}],
callback_array:true
});
}
return r;
};
$scope.data = [];
$scope.data_discount = [];
$scope.data_done = false;
/* Get referral data (all)
* @params none
* @return array
*/
$scope.getData = function(badgeId){
$scope.data = [];
$scope.data_discount = [];
$scope.data_discount.discount_price = 0;
$scope.data_done = false;
var filterJson = {'badge_id_array':[18]};
if($scope.use_feature){
filterJson.badge_id_array.push(16);
}
var d = {
'cur_page':1,
'per_page':8,
'txt_filter_json':JSON.stringify(filterJson),
};
GAEAPI.get('product/lists',d,$scope).then(function(e){
if(e.ok == 1){
if(e.data.dataList.length > 0){
$scope.data = e.data.dataList;
for (var i = 0; i < e.data.dataList.length; i++) {
console.log("test_discount : ",i,e.data.dataList[i].product_discount.length , e.data.dataList[i].product_discount);
if(e.data.dataList[i].product_discount.length == undefined && e.data.dataList[i].product_discount){
console.log("test_discount",e.data.dataList[i].product_discount);
$scope.data_discount.push(e.data.dataList[i]);
if(e.data.dataList[i].product_discount.discount_price != 0){
$scope.data_discount[i].discount_price = (e.data.dataList[i].product_price-e.data.dataList[i].product_discount.discount_price);
}else if(e.data.dataList[i].product_discount.discount_price == 0 && e.data.dataList[i].product_discount.discount_percent != 0){
$scope.data_discount[i].discount_price = (e.data.dataList[i].product_price-((e.data.dataList[i].product_price*e.data.dataList[i].product_discount.discount_percent)/100));
}
console.log("test_discount_price",$scope.data_discount[i].discount_price);
}
}
} else {
var dummy = $scope.getDummyArray();
$scope.data = dummy;
}
$scope.buildImageSlider($scope.data);
$scope.data_done = true;
}
});
};
/* Get referral data (by referral_id)
* @params id = referral_id
* @return array
*/
$scope.getDataReferral = function(id){
$scope.data = [];
$scope.data_done = false;
var d = {
'txt_referral_id':id
};
GAEAPI.get('referral/id_map',d,$scope).then(function(e){
if(e.ok == 1){
$scope.data[0] = e.data;
$scope.data_done = true;
$scope.buildImageSlider($scope.data);
}
});
};
/*
* params listener
* @params newValue
* @params oldValue
* @return function
*/
$scope.$watch('badgeid', function (newValue, oldValue) {
if (!newValue){
return;
}
$scope.getData(newValue);
});
/*
* check if image array exist or build dummy image array
* @params arrayObject = object array
* @return array
*/
$scope.buildImageSlider = function(){
var imageArray = function(){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_1.jpg'},
/*{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/gallery_2.jpg'},*/
];
};
var imageBannerArray = function(){
return [
{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_1.jpg'},
/*{'image_url':'extensions/themes/gae_myhappyphone301/staticfiles/images/default/banner_cat_2.jpg'},*/
];
};
angular.forEach($scope.data, function(item,key){
if(typeof item.product_image == 'undefined'){
item.product_image = [];
}
/*if(typeof item.referral_image_banner == 'undefined'){
item.referral_image_banner = [];
}*/
if(!item.product_image.length){
item.product_image = imageArray();
}
/*item.referral_image_banner = imageBannerArray();*/
});
};
/* Make Carousel */
$scope._makeProductToCarousel = function (keyCustom) {
var elementName = '[data-id="' + keyCustom + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
};
return sliderProvider(elementName, optionsParmas, "", keyCustom);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(){
return "-" + (($('.row.slick-slider[data-id="'+$scope._uniqueKey+'"]').height() / 2) + 34) + "px";
};
/* Carousel Arrow Click */
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
/* Carousel Arrow Click */
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Event Listener when ng-repeat end */
$rootScope.$on('repeatend', function() {
if($('[data-id*="gallery-"]').length){
$('[data-id*="gallery-"]').not('.slick-initialized').each(function(Key,Object){
if($(this).find('.imageItem').length > 0){
$scope._makeProductToCarousel($(this).attr('data-id'));
}
});
}
});
/* Check if seo enable */
$scope.checkSeo = function(){
return (GURL.isHtml5Mode()) ? true : false;
};
$scope.buildTitleUrl = function(str){
var s = str.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--","-");
return s;
};
};
return promise;
});
if (typeof $productTimingRequest == 'undefined') {
var $productTimingRequest = {
request: 0,
data: 0,
timeMemory: null,
checkAllDone: function() {
console.log("checkAllDone", this.data, this.request);
if (this.data > 0 && this.data >= this.request) {
$('.all-load').addClass('active');
$('.all-content').addClass('active');
this.timeMemory = setTimeout(function() {
$('.all-content').addClass('shown');
window.clearTimeout(this.timeMemory);
}, 650);
}
},
instantDisplay: function() {
console.log("checkAllDone: not match => display");
$('.all-load').addClass('active');
$('.all-content').addClass('active');
$('.all-content').addClass('shown');
this.timeMemory = null;
}
};
}
var _countHide = 0;
_ui_share_app.directive('componentProductLayout', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductLayout';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
imgcart: '@imgcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.productData = [];
$scope.productDataload = false;
$scope.type = $scope.request;
$scope.done = false;
/* GET product list in category (feature *any) */
$scope._get_category_feature = function() {
$scope.productData = [];
var dataSendCat = {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'referral_sort_index_asc_name_asc',
'txt_filter_json': JSON.stringify([{
'badge_id_array': [16]
}])
};
/* badge_sort_index_asc*/
GAEAPI.get('referral/lists', dataSendCat, $scope).then(function(resultCategory) {
var ref = [];
for (var i = 0; i < resultCategory.data.dataList.length; i++) {
for (var ii = 0; ii < resultCategory.data.dataList[i].referral_badge.length; ii++) {
if (resultCategory.data.dataList[i].referral_badge[ii].badge_id == 16) {
ref.push(parseInt(resultCategory.data.dataList[i].referral_id));
break;
}
}
}
$scope.productDataload = false;
var jsonFilter = {
'referral_id_array_or': ref,
'badge_id_array': [18]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
});
};
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
$scope._get_product_by_badge = function(badgeId) {
$scope.productData = [];
$scope.productDataload = false;
var jsonFilter = {
'badge_id_array': [18, badgeId]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
/*product_lastest_create */
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
};
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function(referral_id) {
$scope.productDataload = false;
$productTimingRequest.request = $productTimingRequest.request + 1;
var j = {
'badge_id_array': [18],
'referral_id_array': [referral_id]
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(j)
};
/* root_category_index_asc */
console.log("Fetching 1", $scope.referral);
GAEAPI.get('product/lists', d, $scope).then(function(e) {
$scope.productDataload = true;
$scope.productData = e.data.dataList;
$productTimingRequest.data = $productTimingRequest.data + 1;
$productTimingRequest.checkAllDone();
if (e.data.dataList.length <= 0 && $routeParams.referral_id == referral_id) {
/* window.location.href="home";*/
} else if (e.data.dataList.length <= 0) {
$('div[data-id="' + $scope.referral + '"]').hide();
}
if (typeof $routeParams.section !== 'undefined') {
// alert($routeParams.section);
$timeout(function() {
$('html, body').animate({
scrollTop: $("div[id='" + $routeParams.section + "']").offset().top - 250
}, 200);
}, 200);
}
console.log("Fetching 2", $scope.referral, " : result :", $scope.productData);
});
};
$scope.$watch('type', function(newValue, oldValue) {
if (!newValue) {
return;
}
if (newValue == 'category_feature') {
/* Featured Product */
/*return $scope._get_category_feature();*/
return $scope._get_product_by_badge(16);
}
if (newValue == 'product_newarrival' || newValue == 'new_arrival') {
/* New Arrival */
return $scope._get_product_by_badge(72);
}
if (newValue == 'product_bestseller' || newValue == 'best_seller') {
/* New Arrival */
return $scope._get_product_by_badge(75);
}
if (newValue == 'product_feature' || newValue == 'product_recommend') {
/* Recommend */
return $scope._get_product_by_badge(74);
}
if (newValue == 'product_list_by_category') {
return $scope._get_product_list_by_category($scope.referral);
}
});
$scope.shopid = '';
$scope.getShopid = function() {
$scope.shopid = CUR_THEME.shop_id();
};
$scope.getShopid();
$scope.initSlider = function() {
var elementName = '.row-product[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 3,
slidesToScroll: 1,
dots: false,
arrows: false,
infinite: true,
responsive: [{
breakpoint: 768,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 2
}
}]
};
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(v) {
return "-" + ($('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2) + v + "px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function(v) {
return $('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2;
};
$rootScope.$on('repeatend', function() {
if ($scope.use_carousel) {
var t = $interval(function() {
if ($scope._uniqueKey !== "") {
$interval.cancel(t);
var tt = $timeout(function() {
$timeout.cancel(tt);
$scope.done = true;
$scope.initSlider();
}, 300);
}
}, 500);
}
});
$scope.checkHideCondition = function(referral_id) {
return true;
if ($location.path() != '/' && $location.path() !== '/home') {
if (typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id) {
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});
var _countHide = 0;
_ui_share_app.directive('componentProductLayoutA', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductLayoutA';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first':'?textFirst',
'text_second':'?textSecond',
};
promise.link = function (scope, element, attr) {};
promise.controller = function ($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.productData = [];
$scope.type = $scope.request;
/* GET product list in category (feature *any) */
$scope._get_category_feature = function(){
$scope.productData = [];
var dataSendCat = {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'referral_sort_index_asc_name_asc',
'txt_filter_json': JSON.stringify([{'badge_id_array': [16]}])
};
/* badge_sort_index_asc*/
GAEAPI.get('referral/lists', dataSendCat).then(function(resultCategory){
var ref = [];
for(var i = 0; i < resultCategory.data.dataList.length; i++){
for(var ii = 0; ii < resultCategory.data.dataList[i].referral_badge.length; ii++){
if(resultCategory.data.dataList[i].referral_badge[ii].badge_id == 16){
ref.push(parseInt(resultCategory.data.dataList[i].referral_id));
break;
}
}
}
var jsonFilter = {
'referral_id_array_or': ref,
'badge_id_array': [18]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'product_title_a-z',
'txt_filter_json': JSON.stringify(jsonFilter)
};
GAEAPI.get('product/lists', dataSend).then(function(e){
if(e.ok == 1){
$scope.productData = e.data.dataList;
}
});
});
};
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
$scope._get_product_by_badge = function(badgeId){
$scope.productData = [];
var jsonFilter = {
'badge_id_array': [18,badgeId]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'badge_sort_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
/*product_lastest_create */
GAEAPI.get('product/lists', dataSend).then(function(e){
if(e.ok == 1){
$scope.productData = e.data.dataList;
}
});
};
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function(referral_id){
var j = {
'badge_id_array': [18],
'referral_id_array': [referral_id]
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_sortby':'root_category_index_0-9',
'txt_filter_json': JSON.stringify(j)
};
/* root_category_index_asc */
console.log("Fetching ", $scope.referral);
if(CUR_THEME.shop_id() == 500){
$scope.text_first = 'testtt';
$http.get('https://missmonribs.getappeasy.com/store/api/v1/product/lists',{params:d}).then(function(res){
var e = res.data;
$scope.productData = e.data.dataList;
console.log("Fetching ", $scope.referral, " : result :", $scope.productData);
if($scope.productData.length <= 0 && $routeParams.referral_id == referral_id){
return $location.path("/home");
}
});
} else {
GAEAPI.get('product/lists',d).then(function(e){
$scope.productData = e.data.dataList;
console.log("Fetching ", $scope.referral, " : result :", e);
});
}
};
$scope.$watch('type', function(newValue,oldValue){
if(!newValue){
return;
}
if(newValue == 'category_feature'){
/* Featured Product */
/*return $scope._get_category_feature();*/
return $scope._get_product_by_badge(16);
}
if(newValue == 'product_newarrival' || newValue == 'new_arrival') {
/* New Arrival */
return $scope._get_product_by_badge(72);
}
if(newValue == 'product_feature' || newValue == 'product_recommend') {
/* Recommend */
return $scope._get_product_by_badge(74);
}
if(newValue == 'product_list_by_category'){
return $scope._get_product_list_by_category($scope.referral);
}
});
$scope._makeProductToCarousel = function () {
var elementName = '[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 4,
slidesToScroll: 4,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
responsive: [
{
breakpoint: 769,
settings: {
slidesToShow: 3,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 601,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 481,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false,
dots: false
}
}
]
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(v){
return "-" + ($('[data-id="'+$scope._uniqueKey+'"]').height() / 2) + "."+ v + "px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function(v){
return $('[data-id="'+$scope._uniqueKey+'"]').height() / 2;
};
$rootScope.$on('repeatend', function() {
if($('[data-id="'+$scope._uniqueKey+'"]').not('.slick-initialized') && $scope.use_carousel){
$timeout(function(){
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.checkHideCondition = function(referral_id){
return true;
if($location.path() != '/' && $location.path() !== '/home'){
if(typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id){
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});
var _countHide = 0;
_ui_share_app.directive('componentProductLayoutB', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductLayoutB';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
lesspad: '@lesspad',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first':'?textFirst',
'text_second':'?textSecond',
};
promise.link = function (scope, element, attr) {};
promise.controller = function ($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
$scope.use_lesspad = (typeof $scope.lesspad !== 'undefined' && $scope.lesspad == 'true') ? true : false;
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.productData = [];
$scope.type = $scope.request;
/* GET product list in category (feature *any) */
$scope._get_category_feature = function(){
$scope.productData = [];
var dataSendCat = {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'referral_sort_index_asc_name_asc',
'txt_filter_json': JSON.stringify([{'badge_id_array': [16]}])
};
/* badge_sort_index_asc*/
GAEAPI.get('referral/lists', dataSendCat).then(function(resultCategory){
var ref = [];
for(var i = 0; i < resultCategory.data.dataList.length; i++){
for(var ii = 0; ii < resultCategory.data.dataList[i].referral_badge.length; ii++){
if(resultCategory.data.dataList[i].referral_badge[ii].badge_id == 16){
ref.push(parseInt(resultCategory.data.dataList[i].referral_id));
break;
}
}
}
var jsonFilter = {
'referral_id_array_or': ref,
'badge_id_array': [18]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'product_title_a-z',
'txt_filter_json': JSON.stringify(jsonFilter)
};
GAEAPI.get('product/lists', dataSend).then(function(e){
if(e.ok == 1){
$scope.productData = e.data.dataList;
console.log("tiuuiy111",$scope.productData);
}
});
});
};
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
$scope._get_product_by_badge = function(badgeId){
$scope.productData = [];
var jsonFilter = {
'badge_id_array': [18,badgeId]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'badge_sort_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
/*product_lastest_create */
GAEAPI.get('product/lists', dataSend).then(function(e){
if(e.ok == 1){
$scope.productData = e.data.dataList;
console.log("tiuuiy222",$scope.productData);
}
});
};
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function(referral_id){
var j = {
'badge_id_array': [18],
'referral_id_array': [referral_id]
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_sortby':'root_category_index_0-9',
'txt_filter_json': JSON.stringify(j)
};
/* root_category_index_asc */
console.log("Fetching ", $scope.referral);
if(CUR_THEME.shop_id() == 500){
$scope.text_first = 'testtt';
$http.get('https://missmonribs.getappeasy.com/store/api/v1/product/lists',{params:d}).then(function(res){
var e = res.data;
$scope.productData = e.data.dataList;
console.log("Fetching ", $scope.referral, " : result :", $scope.productData);
if($scope.productData.length <= 0 && $routeParams.referral_id == referral_id){
return $location.path("/home");
}
});
} else {
GAEAPI.get('product/lists',d).then(function(e){
$scope.productData = e.data.dataList;
console.log("Fetching ", $scope.referral, " : result :", e);
console.log("tiuuiy333",$scope.productData);
});
}
};
$scope.$watch('type', function(newValue,oldValue){
if(!newValue){
return;
}
if(newValue == 'category_feature'){
/* Featured Product */
/*return $scope._get_category_feature();*/
return $scope._get_product_by_badge(16);
}
if(newValue == 'product_newarrival' || newValue == 'new_arrival') {
/* New Arrival */
return $scope._get_product_by_badge(72);
}
if(newValue == 'product_feature' || newValue == 'product_recommend') {
/* Recommend */
return $scope._get_product_by_badge(74);
}
if(newValue == 'product_list_by_category'){
return $scope._get_product_list_by_category($scope.referral);
}
});
$scope._makeProductToCarousel = function () {
var elementName = '[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 3,
slidesToScroll: 3,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
responsive: [
{
breakpoint: 769,
settings: {
slidesToShow: 2,
slidesToScroll: 2,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 601,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 481,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false,
dots: false
}
}
]
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(v){
return "-" + ($('[data-id="'+$scope._uniqueKey+'"]').height() / 2) + v + "px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function(v){
return $('[data-id="'+$scope._uniqueKey+'"]').height() / 2;
};
$rootScope.$on('repeatend', function() {
if($('[data-id="'+$scope._uniqueKey+'"]').not('.slick-initialized') && $scope.use_carousel){
$timeout(function(){
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.checkHideCondition = function(referral_id){
return true;
if($location.path() != '/' && $location.path() !== '/home'){
if(typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id){
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});
var _countHide = 0;
_ui_share_app.directive('componentProductLayoutC', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductLayoutC';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
imgcart: '@imgcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.productData = [];
$scope.productDataload = false;
$scope.type = $scope.request;
$scope.done = false;
/* GET product list in category (feature *any) */
$scope._get_category_feature = function() {
$scope.productData = [];
var dataSendCat = {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'referral_sort_index_asc_name_asc',
'txt_filter_json': JSON.stringify([{
'badge_id_array': [16]
}])
};
/* badge_sort_index_asc*/
GAEAPI.get('referral/lists', dataSendCat, $scope).then(function(resultCategory) {
var ref = [];
for (var i = 0; i < resultCategory.data.dataList.length; i++) {
for (var ii = 0; ii < resultCategory.data.dataList[i].referral_badge.length; ii++) {
if (resultCategory.data.dataList[i].referral_badge[ii].badge_id == 16) {
ref.push(parseInt(resultCategory.data.dataList[i].referral_id));
break;
}
}
}
$scope.productDataload = false;
var jsonFilter = {
'referral_id_array_or': ref,
'badge_id_array': [18]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
});
};
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
$scope._get_product_by_badge = function(badgeId) {
$scope.productData = [];
$scope.productDataload = false;
var jsonFilter = {
'badge_id_array': [18, badgeId]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
/*product_lastest_create */
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
};
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function(referral_id) {
// $scope.productData = [];
$scope.productDataload = false;
$productTimingRequest.request = $productTimingRequest.request + 1;
var f_first = {
'txt_referral_id': referral_id
}
GAEAPI.get('referral/id_map', f_first, $scope).then(function(e) {
if (e.ok == 1) {
if(e.data.referral_sub_array.length > 0){
$scope.productDataload = true;
$scope.productData = e.data.referral_sub_array;
console.log("pop kai sod test 1 :",$scope.productData);
$scope.havsub = true;
}else{
var j = {
'badge_id_array': [18],
'referral_id_array': [referral_id]
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(j)
};
$scope.havsub = false;
console.log("Fetching 1", $scope.referral);
GAEAPI.get('product/lists', d, $scope).then(function(e) {
$scope.productDataload = true;
$scope.productData = e.data.dataList;
console.log("pop kai sod test 2 :",$scope.productData);
$productTimingRequest.data = $productTimingRequest.data + 1;
$productTimingRequest.checkAllDone();
if (e.data.dataList.length <= 0 && $routeParams.referral_id == referral_id) {
/* window.location.href="home";*/
} else if (e.data.dataList.length <= 0) {
$('div[data-id="' + $scope.referral + '"]').hide();
}
if (typeof $routeParams.section !== 'undefined') {
// alert($routeParams.section);
$timeout(function() {
$('html, body').animate({
scrollTop: $("div[id='" + $routeParams.section + "']").offset().top - 250
}, 200);
}, 200);
}
console.log("Fetching 2", $scope.referral, " : result :", $scope.productData);
});
}
}
});
/* root_category_index_asc */
};
$scope.$watch('type', function(newValue, oldValue) {
if (!newValue) {
return;
}
if (newValue == 'category_feature') {
/* Featured Product */
/*return $scope._get_category_feature();*/
return $scope._get_product_by_badge(16);
}
if (newValue == 'product_newarrival' || newValue == 'new_arrival') {
/* New Arrival */
return $scope._get_product_by_badge(72);
}
if (newValue == 'product_bestseller' || newValue == 'best_seller') {
/* New Arrival */
return $scope._get_product_by_badge(75);
}
if (newValue == 'product_feature' || newValue == 'product_recommend') {
/* Recommend */
return $scope._get_product_by_badge(74);
}
if (newValue == 'product_list_by_category') {
// $scope.havsub = false;
return $scope._get_product_list_by_category($scope.referral);
}
});
$scope.shopid = '';
$scope.getShopid = function() {
$scope.shopid = CUR_THEME.shop_id();
};
$scope.getShopid();
$scope.initSlider = function() {
var elementName = '.row-product[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 3,
slidesToScroll: 1,
dots: false,
arrows: false,
infinite: true,
responsive: [{
breakpoint: 768,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 2
}
}]
};
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(v) {
return "-" + ($('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2) + v + "px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function(v) {
return $('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2;
};
$rootScope.$on('repeatend', function() {
if ($scope.use_carousel) {
var t = $interval(function() {
if ($scope._uniqueKey !== "") {
$interval.cancel(t);
var tt = $timeout(function() {
$timeout.cancel(tt);
$scope.done = true;
$scope.initSlider();
}, 300);
}
}, 500);
}
});
$scope.checkHideCondition = function(referral_id) {
return true;
if ($location.path() != '/' && $location.path() !== '/home') {
if (typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id) {
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});_ui_share_app.factory('$componentProductLayoutMain', function componentProductLayoutMain($routeParams, $timeout) {
return
});_ui_share_app.directive('componentProductLayoutMainA', function($rootScope, $routeParams) {
var templateName = 'componentProductLayoutMainA';
var componentMain = 'componentProductLayoutMain';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
stylebutton: '@stylebutton',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope._viewRouteParams = function () {
return $routeParams || false;
};
$scope.productData = [];
$scope.productDataload = false;
$scope.type = $scope.request;
/* GET product list in category (feature *any) */
$scope._get_category_feature = function() {
$scope.productData = [];
var dataSendCat = {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'referral_sort_index_asc_name_asc',
'txt_filter_json': JSON.stringify([{
'badge_id_array': [16]
}])
};
/* badge_sort_index_asc*/
GAEAPI.get('referral/lists', dataSendCat, $scope).then(function(resultCategory) {
var ref = [];
for (var i = 0; i < resultCategory.data.dataList.length; i++) {
for (var ii = 0; ii < resultCategory.data.dataList[i].referral_badge.length; ii++) {
if (resultCategory.data.dataList[i].referral_badge[ii].badge_id == 16) {
ref.push(parseInt(resultCategory.data.dataList[i].referral_id));
break;
}
}
}
$scope.productDataload = false;
var jsonFilter = {
'referral_id_array_or': ref,
'badge_id_array': [18]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'product_title_a-z',
'txt_filter_json': JSON.stringify(jsonFilter)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
});
};
$scope.categoryData = [];
$scope._getCategory = function(badgeId) {
var dataSend = {
'txt_referral_type_id': 11
};
GAEAPI.get('referral/map', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.categoryData = e.data;
}
});
};
$scope._getCategory();
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
$scope._get_product_by_badge = function(badgeId) {
$scope.productData = [];
$scope.productDataload = false;
var jsonFilter = {
'badge_id_array': [18, badgeId]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'badge_sort_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
/*product_lastest_create */
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
};
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function(referral_id) {
$scope.productDataload = false;
$productTimingRequest.request = $productTimingRequest.request + 1;
var j = {
'badge_id_array': [18],
'referral_id_array': [referral_id]
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(j)
};
/* root_category_index_asc */
console.log("Fetching 1", $scope.referral);
GAEAPI.get('product/lists', d, $scope).then(function(e) {
$scope.productDataload = true;
$scope.productData = e.data.dataList;
$productTimingRequest.data = $productTimingRequest.data + 1;
$productTimingRequest.checkAllDone();
if (e.data.dataList.length <= 0 && $routeParams.referral_id == referral_id) {
/* window.location.href="home";*/
} else if (e.data.dataList.length <= 0) {
$('div[data-id="' + $scope.referral + '"]').hide();
}
console.log("Fetching 2", $scope.referral, " : result :", $scope.productData);
});
};
$scope.$watch('type', function(newValue, oldValue) {
if (!newValue) {
return;
}
if (newValue == 'category_feature') {
/* Featured Product */
/*return $scope._get_category_feature();*/
return $scope._get_product_by_badge(16);
}
if (newValue == 'product_newarrival' || newValue == 'new_arrival') {
/* New Arrival */
return $scope._get_product_by_badge(72);
}
if (newValue == 'product_feature' || newValue == 'product_recommend') {
/* Recommend */
return $scope._get_product_by_badge(74);
}
if (newValue == 'product_list_by_category') {
return $scope._get_product_list_by_category($scope.referral);
}
});
$scope._makeProductToCarousel = function() {
var elementName = '[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 3,
slidesToScroll: 3,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
responsive: [{
breakpoint: 769,
settings: {
slidesToShow: 2,
slidesToScroll: 2,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 601,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 481,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false,
dots: false
}
}]
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(v) {
return "-" + ($('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2) + v + "px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function(v) {
return $('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2;
};
$rootScope.$on('repeatend', function() {
if ($('[data-id="' + $scope._uniqueKey + '"]').not('.slick-initialized') && $scope.use_carousel) {
$timeout(function() {
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.arrayDataDOno = function(id, indata) {
var dataSend = 0;
for (var i = 0; i < indata.length; i++) {
if (indata[i].product_referral_display.category[0].referral_parent_id == id) {
dataSend++;
}
}
return dataSend;
};
$scope.arrayDataDTwo = function(id, indata) {
var dataSend = 0;
for (var i = 0; i < indata.length; i++) {
if (indata[i].product_referral_display.category[0].referral_id == id) {
dataSend++;
}
}
return dataSend;
};
$scope.checkHideCondition = function(referral_id) {
return true;
if ($location.path() != '/' && $location.path() !== '/home') {
if (typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id) {
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});
_ui_share_app.directive('componentProductLayoutZ', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductLayoutZ';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
imgcart: '@imgcart',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.productData = [];
$scope.productDataload = false;
$scope.type = $scope.referral;
$scope.done = false;
/* GET product list in category (feature *any) */
$scope._get_category_feature = function() {
$scope.productData = [];
var dataSendCat = {
'txt_referral_type_id': 11,
'cur_page': 1,
'per_page': 20,
'txt_sortby': 'referral_sort_index_asc_name_asc',
'txt_filter_json': JSON.stringify([{
'badge_id_array': [16]
}])
};
/* badge_sort_index_asc*/
GAEAPI.get('referral/lists', dataSendCat, $scope).then(function(resultCategory) {
var ref = [];
for (var i = 0; i < resultCategory.data.dataList.length; i++) {
for (var ii = 0; ii < resultCategory.data.dataList[i].referral_badge.length; ii++) {
if (resultCategory.data.dataList[i].referral_badge[ii].badge_id == 16) {
ref.push(parseInt(resultCategory.data.dataList[i].referral_id));
break;
}
}
}
$scope.productDataload = false;
var jsonFilter = {
'referral_id_array_or': ref,
'badge_id_array': [18]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
});
};
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
$scope._get_product_by_badge = function(badgeId) {
$scope.productData = [];
$scope.productDataload = false;
var jsonFilter = {
'badge_id_array': [18, badgeId]
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(jsonFilter)
};
/*product_lastest_create */
GAEAPI.get('product/lists', dataSend, $scope).then(function(e) {
if (e.ok == 1) {
$scope.productData = e.data.dataList;
$scope.productDataload = true;
}
});
};
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function(referral_id) {
$scope.productDataload = false;
$productTimingRequest.request = $productTimingRequest.request + 1;
var j = {
'badge_id_array': [18],
'referral_id_array': [referral_id]
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_sortby': 'root_category_index_asc',
'txt_filter_json': JSON.stringify(j)
};
/* root_category_index_asc */
console.log("Fetching 1", $scope.referral);
GAEAPI.get('product/lists', d, $scope).then(function(e) {
$scope.productDataload = true;
$scope.productData = e.data.dataList;
$productTimingRequest.data = $productTimingRequest.data + 1;
$productTimingRequest.checkAllDone();
if (e.data.dataList.length <= 0 && $routeParams.referral_id == referral_id) {
/* window.location.href="home";*/
} else if (e.data.dataList.length <= 0) {
$('div[data-id="' + $scope.referral + '"]').hide();
}
if (typeof $routeParams.section !== 'undefined') {
// alert($routeParams.section);
$timeout(function() {
$('html, body').animate({
scrollTop: $("div[id='" + $routeParams.section + "']").offset().top - 250
}, 200);
}, 200);
}
console.log("Fetching 2", $scope.referral, " : result :", $scope.productData);
});
};
$scope.$watch('type', function(newValue, oldValue) {
if (!newValue) {
return;
}
if(newValue){
$scope._get_product_list_by_category($scope.referral);
}
});
$scope.shopid = '';
$scope.getShopid = function() {
$scope.shopid = CUR_THEME.shop_id();
};
$scope.getShopid();
$scope.initSlider = function() {
var elementName = '.row-product[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 3,
slidesToScroll: 1,
dots: false,
arrows: false,
infinite: true,
responsive: [{
breakpoint: 768,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
centerMode: true,
centerPadding: '0px',
slidesToShow: 2
}
}]
};
var extraOptions = {
animate: false
};
sliderProvider(elementName, optionsParmas, $scope.type, $scope._key(), extraOptions);
};
$scope._slickGoLeft = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function() {
$timeout(function() {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function(v) {
return "-" + ($('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2) + v + "px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function(v) {
return $('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2;
};
$rootScope.$on('repeatend', function() {
if ($scope.use_carousel) {
var t = $interval(function() {
if ($scope._uniqueKey !== "") {
$interval.cancel(t);
var tt = $timeout(function() {
$timeout.cancel(tt);
$scope.done = true;
$scope.initSlider();
}, 300);
}
}, 500);
}
});
$scope.checkHideCondition = function(referral_id) {
return true;
if ($location.path() != '/' && $location.path() !== '/home') {
if (typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id) {
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});_ui_share_app.factory('$componentProductListBadge', function componentProductListBadge($routeParams, $timeout) {
return
});_ui_share_app.directive('componentProductListBadgeIdA', function($rootScope, $routeParams) {
var templateName = 'componentProductListBadgeIdA';
var componentMain = 'componentProductListBadge';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
margin: '@margin',
stylebutton: '@stylebutton',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = {};
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.data_per_page = 15;
$scope.JsonDATA = {
result_rows: 0,
total_rows: 0
};
$scope.JsonProductArray = [];
$scope.JsonProductArrayState = {
load: false,
done: false
};
$scope.getJsonProductArray = function(page, id) {
$scope.JsonProductArrayState = $scope.StateData(true, false);
var dataSend = {
'cur_page': 1,
'per_page': page,
'txt_filter_json': JSON.stringify({
'badge_id_array': [18, id]
})
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
$scope.JsonProductArray = output.data;
}
$scope.JsonProductArrayState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope.getJsonProductArray($scope.data_per_page, $scope._viewRouteParams().badge_id);
$scope.loadMore = function() {
$scope.data_per_page = parseInt($scope.data_per_page) + 8;
$scope.getJsonProductArray($scope.data_per_page, $scope._viewRouteParams().badge_id);
};
$scope.showDebug = function() {
return (typeof $routeParams.debug !== 'undefined') ? true : false;
};
};
return promise;
});
if (typeof $productTimingRequest == 'undefined') {
var $productTimingRequest = {
request: 0,
data: 0,
timeMemory: null,
checkAllDone: function () {
console.log("checkAllDone", this.data, this.request);
if (this.data > 0 && this.data >= this.request) {
$('.all-load').addClass('active');
$('.all-content').addClass('active');
this.timeMemory = setTimeout(function () {
$('.all-content').addClass('shown');
window.clearTimeout(this.timeMemory);
}, 650);
}
},
instantDisplay: function () {
console.log("checkAllDone: not match => display");
$('.all-load').addClass('active');
$('.all-content').addClass('active');
$('.all-content').addClass('shown');
this.timeMemory = null;
}
};
}
var _countHide = 0;
_ui_share_app.directive('componentProductRelate', function ($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelate';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
tagname: '@tagname',
imgpath: '@imgpath',
request: '@type',
carousel: '@carousel',
referral: '@referral',
datapid:'@datapid',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function (scope, element, attr) {};
promise.controller = function ($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.forbidden = false;
$scope._config = [];
$scope._host = _ui_share_host + templateName + '/';
$scope.assetsPath = 'extensions/themes/assets/';
$scope.use_carousel = (typeof $scope.carousel !== 'undefined' && $scope.carousel == 'true') ? true : false;
console.log("tagname : ",$scope.tagname);
/* UNIQUE KEY */
$scope._uniqueKey = '';
$scope._key = function () {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.productData = [];
$scope.productDataload = false;
$scope.type = $scope.request;
/* GET product list in category (feature *any) */
/* GET product list by badge id (reccommend,new arriaval, best seller, feature) */
/* GET product list by each category (1st level) */
$scope._get_product_list_by_category = function () {
$scope.productDataload = false;
$productTimingRequest.request = $productTimingRequest.request + 1;
var j = {
'badge_id_array': [18],
'tags': $scope.tagname,
};
var d = {
'cur_page': 1,
'per_page': 30,
'txt_filter_json': JSON.stringify(j)
};
/* root_category_index_asc */
console.log("Fetching 1", $scope.tagname);
GAEAPI.get('product/lists', d, $scope).then(function (e) {
$scope.productDataload = true;
if($scope.datapid != undefined){
for (var i = 0; i < e.data.dataList.length; i++) {
if(e.data.dataList[i].product_id != datapid){
$scope.productData.push(e.data.dataList[i]);
}
}
}else{
$scope.productData = e.data.dataList;
}
$productTimingRequest.data = $productTimingRequest.data + 1;
$productTimingRequest.checkAllDone();
if (e.data.dataList.length <= 0 && $routeParams.referral_id == referral_id) {
/*window.location.href="home"; */
} else if (e.data.dataList.length <= 0) {
$('div[data-id="' + $scope.referral + '"]').hide();
}
console.log("Fetching 2", $scope.referral, " : result :", $scope.productData);
});
};
$scope.$watch("tagname",function(newValue){
if(GAEAPI.getValue(newValue,"")!=""){
$scope._get_product_list_by_category();
}
});
$scope._makeProductToCarousel = function () {
var elementName = '[data-id="' + $scope._uniqueKey + '"]';
var optionsParmas = {
autoplay: (window.location.host !== 'localhost') ? true : false,
slidesToShow: 4,
slidesToScroll: 1,
dots: false,
arrows: false,
centerMode: false,
infinite: true,
variableWidth: false,
responsive: [
{
breakpoint: 991,
settings: {
slidesToShow: 3,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 601,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
variableWidth: false,
centerMode: false
}
}, {
breakpoint: 481,
settings: {
slidesToShow: 1,
slidesToScroll: 1,
variableWidth: false,
centerMode: false,
dots: false
}
}
]
};
return sliderProvider(elementName, optionsParmas, $scope.type, $scope._uniqueKey);
};
$scope._slickGoLeft = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickPrev');
}, 100);
};
$scope._slickGoRight = function () {
$timeout(function () {
$('[data-id="' + $scope._uniqueKey + '"]').slick('slickNext');
}, 100);
};
/* Calculate Product Block for Arrows */
$scope.calculateProductBlock = function (v) {
console.log("eeeeeeeeeeeee",("-"+($('.row-product[data-id="' + $scope._uniqueKey + '"]').height()/2))+"px");
return ("-"+(($('.row-product[data-id="' + $scope._uniqueKey + '"]').height()/2)+40))+"px";
};
/* Calculate Product mobile for Arrows */
$scope.calculateProductBlockMobile = function (v) {
return $('.row-product[data-id="' + $scope._uniqueKey + '"]').height() / 2;
};
$rootScope.$on('repeatend', function () {
if ($('[data-id="' + $scope._uniqueKey + '"]').not('.slick-initialized') && $scope.use_carousel) {
$timeout(function () {
$scope._makeProductToCarousel();
}, 500);
}
});
$scope.checkHideCondition = function (referral_id) {
return true;
if ($location.path() != '/' && $location.path() !== '/home') {
if (typeof $routeParams.root_id !== 'undefined' && $routeParams.root_id > 0 && $routeParams.root_id != referral_id) {
return false; /* hide */
}
return true;
}
return true;
};
};
return promise;
});
_ui_share_app.directive('componentProductRelateB', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelateB';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
tagname: '@tagname',
stylebutton: '@stylebutton',
productid: '@productid',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.slideProductDeal = function(elem) {
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 4,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 4,
}
}, {
breakpoint: 991,
settings: {
arrows: false,
slidesToShow: 3
}
}, {
breakpoint: 768,
settings: {
arrows: false,
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
slidesToShow: 1
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.productLists = [];
$scope.productLists_temp = [];
$scope.productListsState = {
load: true,
done: false
};
$scope.getProductLists = function() {
$scope.productListsState = $scope.StateData(true, false);
var data = {
'badge_id_array': [18],
'tags': $scope.tagname,
};
var dataSend = {
'cur_page': 1,
'per_page': 30,
'txt_filter_json': JSON.stringify(data)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
if($scope.productid != undefined){
for (var i = 0; i < output.data.dataList.length; i++) {
if(output.data.dataList[i].product_id != $scope.productid){
$scope.productLists.push(output.data.dataList[i]);
}
}
console.log("product relate is id :", $scope.productid , $scope.productLists);
}else{
$scope.productLists = output.data.dataList;
console.log("product relate is id 2 :", $scope.productid);
}
}
$scope.productListsState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope.getProductLists();
$scope.showDebug = function() {
return (typeof $routeParams.debugcontact !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentProductRelateC', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelateC';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
tagnameclass: '@tagnameclass',
stylebutton: '@stylebutton',
productid: '@productid',
imgpath : '@imgpath',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.slideProductDeal = function(elem) {
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 4,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 4,
}
}, {
breakpoint: 991,
settings: {
arrows: false,
slidesToShow: 3
}
}, {
breakpoint: 768,
settings: {
arrows: false,
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
slidesToShow: 1
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.productLists = [];
$scope.productLists_temp = [];
$scope.productListsState = {
load: true,
done: false
};
$scope.tag_name = [];
$scope.getProductLists = function(tagname) {
$scope.productListsState = $scope.StateData(true, false);
$scope.tag_name = tagname.split(",");
console.log("product relate is id 0 :",$scope.tag_name[0]);
if($scope.tag_name.length > 1){
var data = {
'badge_id_array': [18],
'tags': ($scope.tagname.split(",").join(",")+""),
};
}
if($scope.tag_name.length == 1){
var data = {
'badge_id_array': [18],
'tags': $scope.tag_name[0],
};
}
var dataSend = {
'cur_page': 1,
'per_page': 30,
'txt_filter_json': JSON.stringify(data)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
if($scope.productid != undefined){
for (var i = 0; i < output.data.dataList.length; i++) {
if(output.data.dataList[i].product_id != $scope.productid){
$scope.productLists.push(output.data.dataList[i]);
}
}
console.log("product relate is id :", $scope.productid , $scope.productLists , $scope.tag_name.length);
}else{
$scope.productLists = output.data.dataList;
console.log("product relate is id 2 :", $scope.productid);
}
}
$scope.productListsState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope.$watch('tagnameclass', function(newValue, oldValue) {
if(newValue){
$scope.getProductLists(newValue);
}
if (!newValue) return;
});
$scope.showDebug = function() {
return (typeof $routeParams.debugcontact !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentProductRelateD', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelateD';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
component: '@component',
referralid: '@referralid',
stylebutton: '@stylebutton',
productid: '@productid',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_second': '?textSecond',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.slideProductDeal = function(elem) {
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 4,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 4,
}
}, {
breakpoint: 991,
settings: {
arrows: false,
slidesToShow: 3
}
}, {
breakpoint: 768,
settings: {
arrows: false,
slidesToShow: 2
}
}, {
breakpoint: 480,
settings: {
arrows: false,
slidesToShow: 1
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.productLists = [];
$scope.productLists_temp = [];
$scope.productListsState = {
load: true,
done: false
};
$scope.getProductLists = function() {
$scope.productListsState = $scope.StateData(true, false);
var data = {
'referral_id_array_in': $scope.referralid,
};
var dataSend = {
'cur_page': 1,
'per_page': 10,
'txt_filter_json': JSON.stringify(data)
};
GAEAPI.get('product/lists', dataSend, $scope).then(function(output) {
if (output.ok == 1) {
if ($scope.productid != undefined) {
for (var i = 0; i < output.data.dataList.length; i++) {
if (output.data.dataList[i].product_id != $scope.productid) {
$scope.productLists.push(output.data.dataList[i]);
}
}
console.log("product relate is id :", $scope.productid, $scope.productLists);
} else {
$scope.productLists = output.data.dataList;
console.log("product relate is id 2 :", $scope.productid);
}
}
$scope.productListsState = $scope.StateData(false, true);
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
}
$scope.getProductLists();
$scope.showDebug = function() {
return (typeof $routeParams.debugcontact !== 'undefined') ? true : false;
};
};
return promise;
});_ui_share_app.directive('componentProductRelateE', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelateE';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
component: '@component',
stylebutton: '@stylebutton',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_end': '?textEnd',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
console.log('componentProductRelateE : ', functionName, ' : ', data);
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = params.product_id.split("-", 1).join("");
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_api, state);
});
},
carousel: function(coverIn, carouselIn) {
$(coverIn).css('height', '0');
$(carouselIn).css('opacity', '0');
setTimeout(function() {
var carousel = $(carouselIn);
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 4,
slidesToScroll: 1,
infinite: true,
speed: 600,
prevArrow: '
',
nextArrow: '
'
};
$scope.carousels.push(objectArray);
var res_index = ($scope.carousels.length != 0) ? $scope.carousels.length - 1 : 0;
callback(res_index);
},
setSpeed: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.speed = state;
});
},
setDots: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.dots = state;
});
},
setArrows: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.arrows = state;
});
},
setInfinite: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.infinite = state;
});
},
setAutoplay: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.autoplay = state;
});
},
setAdaptiveHeight: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.adaptiveHeight = state;
});
},
setAutoplaySpeed: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.autoplaySpeed = state;
});
},
setCenterMode: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.centerMode = state;
});
},
setCenterPadding: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.centerPadding = state;
});
},
setFocusOnSelect: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.focusOnSelect = state;
});
},
setSlidesToScroll: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.slidesToScroll = state;
});
},
setPrevArrow: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.prevArrow = state;
});
},
setNextArrow: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.nextArrow = state;
});
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carousel: function(cover, carousel, xs, sm, md, lg) {
var _self = this;
var carousels = $(carousel);
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
var _xs = parseInt(xs);
var _sm = parseInt(sm);
var _md = parseInt(md);
var _lg = parseInt(lg);
setTimeout(function() {
carousels.not('.slick-initialized').slick({
speed: $scope.carousels[0].speed,
dots: $scope.carousels[0].dots,
arrows: $scope.carousels[0].arrows,
infinite: $scope.carousels[0].infinite,
autoplay: $scope.carousels[0].autoplay,
slidesToScroll: $scope.carousels[0].slidesToScroll,
slidesToShow: _lg,
autoplaySpeed: $scope.carousels[0].autoplaySpeed,
adaptiveHeight: $scope.carousels[0].adaptiveHeight,
prevArrow: $scope.carousels[0].prevArrow,
nextArrow: $scope.carousels[0].nextArrow,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: _md,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: _sm,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: _xs,
}
}],
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselIndex: function(index, cover, carousel, xs, sm, md, lg) {
var _self = this;
var carousels = $(carousel);
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
var _xs = parseInt(xs);
var _sm = parseInt(sm);
var _md = parseInt(md);
var _lg = parseInt(lg);
var slick_array = {};
slick_array.slidesToShow = _lg;
slick_array.arrows = $scope.carousels[index].arrows;
if ($scope.carousels[index].dots) {
slick_array.dots = $scope.carousels[index].dots;
}
if ($scope.carousels[index].speed != 0) {
slick_array.speed = $scope.carousels[index].speed;
}
if ($scope.carousels[index].autoplay) {
slick_array.arrows = $scope.carousels[index].arrows;
}
if ($scope.carousels[index].infinite) {
slick_array.infinite = $scope.carousels[index].infinite;
}
if ($scope.carousels[index].prevArrow != '') {
slick_array.prevArrow = $scope.carousels[index].prevArrow;
}
if ($scope.carousels[index].nextArrow != '') {
slick_array.nextArrow = $scope.carousels[index].nextArrow;
}
if ($scope.carousels[index].centerMode) {
slick_array.centerMode = $scope.carousels[index].centerMode;
}
if ($scope.carousels[index].centerPadding != '0' && $scope.carousels[index].centerPadding != '') {
slick_array.centerPadding = $scope.carousels[index].centerPadding;
}
if ($scope.carousels[index].focusOnSelect) {
slick_array.focusOnSelect = $scope.carousels[index].focusOnSelect;
}
if ($scope.carousels[index].autoplaySpeed != 0) {
slick_array.autoplaySpeed = $scope.carousels[index].autoplaySpeed;
}
if ($scope.carousels[index].adaptiveHeight) {
slick_array.adaptiveHeight = $scope.carousels[index].adaptiveHeight;
}
if ($scope.carousels[index].slidesToScroll != 0) {
slick_array.slidesToScroll = $scope.carousels[index].slidesToScroll;
}
slick_array.responsive = [{
breakpoint: 1200,
settings: {
slidesToShow: _md,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: _sm,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: _xs,
}
}];
if ($scope.carousels[index].centerPadding != '0' && $scope.carousels[index].centerPadding != '') {
slick_array.centerPadding = $scope.carousels[index].centerPadding;
slick_array.responsive[2].settings.centerPadding = '0px'
}
setTimeout(function() {
carousels.not('.slick-initialized').slick(slick_array).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 1000);
}
}
return getFunction;
};
$scope.carousels = [{
speed: 600,
dots: false,
arrows: true,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
'
}];
$scope.dataApi = {
related: {
dataSend: {},
api: "product/lists",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.related.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
var filter_json = {
'referral_id_array_in': [$scope.referralid],
'tags': $scope.tagname
};
var dataSend = {
'cur_page': 1,
'per_page': 12,
'jso_badge': JSON.stringify(filter_json)
};
$scope.dataApi.related.dataSend = dataSend;
$scope.getData().dataSend($scope.dataApi.related.api, $scope.dataApi.related.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_related, res_state) {
$scope.dataApi.related.ok = res_ok;
$scope.dataApi.related.dataArray = get_res_api_related.data.dataList;
$scope.getData().consoleLog("get_res_api_big_related", get_res_api_related);
$scope.dataApi.related.dataArrayState = res_state;
});
});
});
});
};
return promise;
});_ui_share_app.directive('componentProductRelateMagic', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelateMagic';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope._console = (window.location.hostname == "localhost") ? true : false;
$scope._component = "componentProductRelateMagic";
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(_self,params, state);
},
formatDataSend: function(data, callback) {
var _self = this;
_self.consoleLog("formatDataSend", "data", data);
callback(data);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = (params.product_id != undefined) ? params.product_id.split("-", 1).join("") : false;
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
getReferralId: function(productReferralDisplay, callback) {
var _self = this;
var referral_id = 0;
if (productReferralDisplay.length != 0) {
if (productReferralDisplay.category != undefined) {
if (productReferralDisplay.category.length != 0) {
referral_id = productReferralDisplay.category[0].referral_id
}
}
}
callback(referral_id);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getCarousel = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getFunctionCarousel: function(callback) {
var _self = this;
callback(_self);
},
setCarousels: function(carousel, callback) {
var _self = this;
callback(carousel);
},
pushObjectCarousel: function(callback) {
var _self = this;
var objectArray = {
speed: 600,
dots: false,
arrows: false,
infinite: false,
autoplay: false,
focusOnSelect: false,
adaptiveHeight: false,
autoplaySpeed: 4000,
slidesToScroll: 1,
centerMode: false,
centerPadding: '0px',
prevArrow: '
',
nextArrow: '
'
};
$scope.carousels.push(objectArray);
var res_index = ($scope.carousels.length != 0) ? $scope.carousels.length - 1 : 0;
callback(res_index);
},
setSpeed: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.speed = state;
});
},
setDots: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.dots = state;
});
},
setArrows: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.arrows = state;
});
},
setInfinite: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.infinite = state;
});
},
setAutoplay: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.autoplay = state;
});
},
setAdaptiveHeight: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.adaptiveHeight = state;
});
},
setAutoplaySpeed: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.autoplaySpeed = state;
});
},
setCenterMode: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.centerMode = state;
});
},
setCenterPadding: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.centerPadding = state;
});
},
setFocusOnSelect: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.focusOnSelect = state;
});
},
setSlidesToScroll: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.slidesToScroll = state;
});
},
setPrevArrow: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.prevArrow = state;
});
},
setNextArrow: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.nextArrow = state;
});
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carousel: function(cover, carousel, xs, sm, md, lg) {
var _self = this;
var carousels = $(carousel);
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
var _xs = parseInt(xs);
var _sm = parseInt(sm);
var _md = parseInt(md);
var _lg = parseInt(lg);
setTimeout(function() {
carousels.not('.slick-initialized').slick({
speed: $scope.carousels[0].speed,
dots: $scope.carousels[0].dots,
arrows: $scope.carousels[0].arrows,
infinite: $scope.carousels[0].infinite,
autoplay: $scope.carousels[0].autoplay,
slidesToScroll: $scope.carousels[0].slidesToScroll,
slidesToShow: _lg,
autoplaySpeed: $scope.carousels[0].autoplaySpeed,
adaptiveHeight: $scope.carousels[0].adaptiveHeight,
prevArrow: $scope.carousels[0].prevArrow,
nextArrow: $scope.carousels[0].nextArrow,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: _md,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: _sm,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: _xs,
}
}],
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselIndex: function(index, cover, carousel, xs, sm, md, lg) {
var _self = this;
var carousels = $(carousel);
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
var _xs = parseInt(xs);
var _sm = parseInt(sm);
var _md = parseInt(md);
var _lg = parseInt(lg);
var slick_array = {};
slick_array.slidesToShow = _lg;
slick_array.arrows = $scope.carousels[index].arrows;
if ($scope.carousels[index].dots) {
slick_array.dots = $scope.carousels[index].dots;
}
if ($scope.carousels[index].speed != 0) {
slick_array.speed = $scope.carousels[index].speed;
}
if ($scope.carousels[index].autoplay) {
slick_array.arrows = $scope.carousels[index].arrows;
}
if ($scope.carousels[index].infinite) {
slick_array.infinite = $scope.carousels[index].infinite;
}
if ($scope.carousels[index].prevArrow != '') {
slick_array.prevArrow = $scope.carousels[index].prevArrow;
}
if ($scope.carousels[index].nextArrow != '') {
slick_array.nextArrow = $scope.carousels[index].nextArrow;
}
if ($scope.carousels[index].centerMode) {
slick_array.centerMode = $scope.carousels[index].centerMode;
}
if ($scope.carousels[index].centerPadding != '0' && $scope.carousels[index].centerPadding != '') {
slick_array.centerPadding = $scope.carousels[index].centerPadding;
}
if ($scope.carousels[index].focusOnSelect) {
slick_array.focusOnSelect = $scope.carousels[index].focusOnSelect;
}
if ($scope.carousels[index].autoplaySpeed != 0) {
slick_array.autoplaySpeed = $scope.carousels[index].autoplaySpeed;
}
if ($scope.carousels[index].adaptiveHeight) {
slick_array.adaptiveHeight = $scope.carousels[index].adaptiveHeight;
}
if ($scope.carousels[index].slidesToScroll != 0) {
slick_array.slidesToScroll = $scope.carousels[index].slidesToScroll;
}
slick_array.responsive = [{
breakpoint: 1200,
settings: {
slidesToShow: _md,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: _sm,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: _xs,
}
}];
if ($scope.carousels[index].centerPadding != '0' && $scope.carousels[index].centerPadding != '') {
slick_array.centerPadding = $scope.carousels[index].centerPadding;
slick_array.responsive[2].settings.centerPadding = '0px'
}
setTimeout(function() {
carousels.not('.slick-initialized').slick(slick_array).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 1000);
}
}
return getFunction;
};
$scope.carousels = [{
speed: 600,
dots: false,
arrows: false,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
'
}];
$scope.dataApi = {
shop_current: {
data_send: {},
api: "shop/current",
ok: false,
data_array: [],
data_array_state: {
load: false,
done: false
}
},
related: {
dataSend: {},
api: "product/big_related",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.getData().getRouteParams(function(_self,res_params, res_state) {
$scope.dataApi.shop_current.data_array_state = res_state;
_self.formatDataSend($scope.dataApi.shop_current, function(res_data) {
_self.dataSend(res_data.api, res_data.data_send, function(res_api, res_data_send) {
_self.getApi(res_api, res_data_send, function(res_ok, res_api, res_state) {
res_data.ok = res_ok;
res_data.data_array = res_api.data;
res_data.data_array_state = res_state;
_self.consoleLog("getApiData", "res_data", res_data);
});
});
});
$scope.dataApi.related.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
var filter_json = [18];
var dataSend = {
'txt_product_id': res_product_id,
'cur_page': 1,
'per_page': 12,
'jso_badge': JSON.stringify(filter_json)
};
$scope.dataApi.related.dataSend = dataSend;
$scope.getData().dataSend($scope.dataApi.related.api, $scope.dataApi.related.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_related, res_state) {
$scope.dataApi.related.ok = res_ok;
/* angular.forEach(get_res_api_related.data.dataList, function(item, index) {
$scope.getData().getNameUrl(get_res_api_related.data.dataList[index].product_title, function(res_title) {
get_res_api_related.data.dataList[index].product_title_url = res_title;
});
var images = [];
angular.forEach(item.product_image,function(image,index_image){
if (image.image_app_cover_checked) {
images.push(image)
}
});
item.product_image = images;
}); */
$scope.dataApi.related.dataArray = get_res_api_related.data.dataList;
$scope.getData().consoleLog("get_res_api_big_related", get_res_api_related);
});
});
});
});
};
return promise;
});_ui_share_app.directive('componentProductRelateVono', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductRelateVono';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope._console = (window.location.hostname == "localhost") ? true : false;
$scope._component = "componentProductRelateVono";
$scope._imgPath = CUR_THEME.file_url() + "images/";
$scope._icnPath = CUR_THEME.file_url() + "../../assets/";
$scope.getData = function() {
var getFunction = {
consoleLog: function(functionName, data) {
if ($scope._console) {
console.log($scope._component, ' : ', functionName, ' : ', data);
}
},
getRouteParams: function(callback) {
var _self = this;
var params = $routeParams;
var state = _self.stateData(true, false);
_self.consoleLog("getRouteParams params", params);
callback(params, state);
},
getProductId: function(params, callback) {
var _self = this;
var product_id = (params.product_id != undefined) ? params.product_id.split("-", 1).join("") : false;
_self.consoleLog("getProductId product_id", product_id);
callback(product_id);
},
stateData: function(load, done) {
var _self = this;
var state = {
load: load,
done: done
};
_self.consoleLog("stateData state", state);
return state;
},
dataSend: function(api, dataSend, callback) {
var _self = this;
_self.consoleLog("dataSend api", api);
_self.consoleLog("dataSend dataSend", dataSend);
callback(api, dataSend);
},
checkGetApi: function(resApi, callback) {
var _self = this;
var ok = false;
if (resApi.ok == 1) {
ok = true;
}
_self.consoleLog("checkGetApi ok", ok);
callback(ok);
},
getApi: function(api, dataSend, callback) {
var _self = this;
var state = _self.stateData(true, false);
GAEAPI.get(api, dataSend, $scope).then(function(res_api) {
_self.checkGetApi(res_api, function(res_ok) {
_self.consoleLog("getApi api", api);
_self.consoleLog("getApi dataSend", dataSend);
_self.consoleLog("getApi res_api", res_api);
state = _self.stateData(false, true);
callback(res_ok, res_api, state);
})
});
},
getReferralId: function(productReferralDisplay, callback) {
var _self = this;
var referral_id = 0;
if (productReferralDisplay.length != 0) {
if (productReferralDisplay.category != undefined) {
if (productReferralDisplay.category.length != 0) {
referral_id = productReferralDisplay.category[0].referral_id
}
}
}
callback(referral_id);
},
getNameUrl: function(name, callback) {
var _self = this;
name = name.replace(/[^a-zA-Zก-๙0-9 ]/g, "").split(" ").join("-").replace("--", "-");
_self.consoleLog("getNameUrl", "name", name);
callback(name);
},
main: function() {
var _self = this;
}
}
return getFunction;
};
$scope.getCarousel = function() {
var getFunction = {
consoleLog: function(function_name, data_name, data) {
if ($scope._console) {
console.log($scope._component, ' : ', function_name, ' : ', data_name, ' : ', data);
}
},
getFunctionCarousel: function(callback) {
var _self = this;
callback(_self);
},
setCarousels: function(carousel, callback) {
var _self = this;
callback(carousel);
},
pushObjectCarousel: function(callback) {
var _self = this;
var objectArray = {
speed: 600,
dots: false,
arrows: false,
infinite: false,
autoplay: false,
focusOnSelect: false,
adaptiveHeight: false,
autoplaySpeed: 4000,
slidesToScroll: 1,
centerMode: false,
centerPadding: '0px',
prevArrow: '
',
nextArrow: '
'
};
$scope.carousels.push(objectArray);
var res_index = ($scope.carousels.length != 0) ? $scope.carousels.length - 1 : 0;
callback(res_index);
},
setSpeed: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.speed = state;
});
},
setDots: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.dots = state;
});
},
setArrows: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.arrows = state;
});
},
setInfinite: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.infinite = state;
});
},
setAutoplay: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.autoplay = state;
});
},
setAdaptiveHeight: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.adaptiveHeight = state;
});
},
setAutoplaySpeed: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.autoplaySpeed = state;
});
},
setCenterMode: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.centerMode = state;
});
},
setCenterPadding: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.centerPadding = state;
});
},
setFocusOnSelect: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.focusOnSelect = state;
});
},
setSlidesToScroll: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.slidesToScroll = state;
});
},
setPrevArrow: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.prevArrow = state;
});
},
setNextArrow: function(index, state) {
var _self = this;
_self.setCarousels($scope.carousels[index], function(res_carousel) {
res_carousel.nextArrow = state;
});
},
getCarousel: function(carousel, callback) {
var _self = this;
var carousel_id = 0;
if (carousel == 0) {
carousel_id = Math.floor((Math.random() * 9999) + 1000);
}
callback(carousel_id);
},
carousel: function(cover, carousel, xs, sm, md, lg) {
var _self = this;
var carousels = $(carousel);
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
var _xs = parseInt(xs);
var _sm = parseInt(sm);
var _md = parseInt(md);
var _lg = parseInt(lg);
setTimeout(function() {
carousels.not('.slick-initialized').slick({
speed: $scope.carousels[0].speed,
dots: $scope.carousels[0].dots,
arrows: $scope.carousels[0].arrows,
infinite: $scope.carousels[0].infinite,
autoplay: $scope.carousels[0].autoplay,
slidesToScroll: $scope.carousels[0].slidesToScroll,
slidesToShow: _lg,
autoplaySpeed: $scope.carousels[0].autoplaySpeed,
adaptiveHeight: $scope.carousels[0].adaptiveHeight,
prevArrow: $scope.carousels[0].prevArrow,
nextArrow: $scope.carousels[0].nextArrow,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: _md,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: _sm,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: _xs,
}
}],
}).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 500);
},
carouselIndex: function(index, cover, carousel, xs, sm, md, lg) {
var _self = this;
var carousels = $(carousel);
$(cover).css('height', '0');
$(cover).css('opacity', '0');
$(carousel).css('opacity', '0');
var _xs = parseInt(xs);
var _sm = parseInt(sm);
var _md = parseInt(md);
var _lg = parseInt(lg);
var slick_array = {};
slick_array.slidesToShow = _lg;
slick_array.arrows = $scope.carousels[index].arrows;
if ($scope.carousels[index].dots) {
slick_array.dots = $scope.carousels[index].dots;
}
if ($scope.carousels[index].speed != 0) {
slick_array.speed = $scope.carousels[index].speed;
}
if ($scope.carousels[index].autoplay) {
slick_array.arrows = $scope.carousels[index].arrows;
}
if ($scope.carousels[index].infinite) {
slick_array.infinite = $scope.carousels[index].infinite;
}
if ($scope.carousels[index].prevArrow != '') {
slick_array.prevArrow = $scope.carousels[index].prevArrow;
}
if ($scope.carousels[index].nextArrow != '') {
slick_array.nextArrow = $scope.carousels[index].nextArrow;
}
if ($scope.carousels[index].centerMode) {
slick_array.centerMode = $scope.carousels[index].centerMode;
}
if ($scope.carousels[index].centerPadding != '0' && $scope.carousels[index].centerPadding != '') {
slick_array.centerPadding = $scope.carousels[index].centerPadding;
}
if ($scope.carousels[index].focusOnSelect) {
slick_array.focusOnSelect = $scope.carousels[index].focusOnSelect;
}
if ($scope.carousels[index].autoplaySpeed != 0) {
slick_array.autoplaySpeed = $scope.carousels[index].autoplaySpeed;
}
if ($scope.carousels[index].adaptiveHeight) {
slick_array.adaptiveHeight = $scope.carousels[index].adaptiveHeight;
}
if ($scope.carousels[index].slidesToScroll != 0) {
slick_array.slidesToScroll = $scope.carousels[index].slidesToScroll;
}
slick_array.responsive = [{
breakpoint: 1200,
settings: {
slidesToShow: _md,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: _sm,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: _xs,
}
}];
if ($scope.carousels[index].centerPadding != '0' && $scope.carousels[index].centerPadding != '') {
slick_array.centerPadding = $scope.carousels[index].centerPadding;
slick_array.responsive[2].settings.centerPadding = '0px'
}
setTimeout(function() {
carousels.not('.slick-initialized').slick(slick_array).closest('section').addClass('active');
$(cover).css('height', 'auto');
$(cover).css('opacity', '1');
$(carousel).css('opacity', '1');
}, 1000);
}
}
return getFunction;
};
$scope.carousels = [{
speed: 600,
dots: false,
arrows: false,
infinite: true,
autoplay: true,
adaptiveHeight: true,
autoplaySpeed: 4000,
slidesToScroll: 1,
prevArrow: '
',
nextArrow: '
'
}];
$scope.dataApi = {
related: {
dataSend: {},
api: "product/big_related",
ok: false,
dataArray: [],
dataArrayState: {
load: false,
done: false
}
}
};
$scope.getData().getRouteParams(function(res_params, res_state) {
$scope.dataApi.related.dataArrayState = res_state;
$scope.getData().getProductId(res_params, function(res_product_id) {
var filter_json = [18];
var dataSend = {
'txt_product_id': res_product_id,
'cur_page': 1,
'per_page': 12,
'jso_badge': JSON.stringify(filter_json)
};
$scope.dataApi.related.dataSend = dataSend;
$scope.getData().dataSend($scope.dataApi.related.api, $scope.dataApi.related.dataSend, function(res_api, res_dataSend) {
$scope.getData().getApi(res_api, res_dataSend, function(res_ok, get_res_api_related, res_state) {
$scope.dataApi.related.ok = res_ok;
angular.forEach(get_res_api_related.data.dataList, function(item, index) {
$scope.getData().getNameUrl(get_res_api_related.data.dataList[index].product_title, function(res_title) {
get_res_api_related.data.dataList[index].product_title_url = res_title;
});
var images = [];
angular.forEach(item.product_image,function(image,index_image){
if (image.image_app_cover_checked) {
images.push(image)
}
});
item.product_image = images;
});
$scope.dataApi.related.dataArray = get_res_api_related.data.dataList;
$scope.getData().consoleLog("get_res_api_big_related", get_res_api_related);
});
});
});
});
};
return promise;
});_ui_share_app.directive('componentProductReward', function($rootScope, $routeParams, sliderProvider, carouselData) {
var templateName = 'componentProductReward';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
productid: '@productid',
qty: '@qty',
pricesale: '@pricesale',
imgreward: '@imgreward',
textright: '@textright',
textbefore: '@textbefore',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope._dataArray = false;
$scope.reward = false;
$scope.qty = $scope.qty || 1;
$scope.rewardlast = 0;
$scope._getPostIdFromURL = function() {
var test = $scope.id;
var a = $scope.id;
if (typeof $routeParams.product_id !== 'undefined') {
test = parseInt($routeParams.product_id);
a = $routeParams.product_id;
}
if (typeof test === 'number' && test > 0) {
return test;
} else {
var b = a.split("-");
return b[0];
}
};
$scope.$watch('productid', function(newValue, oldValue) {
if (newValue) {
$scope._getDataArray(newValue);
} else {
return;
}
});
$scope.$watch('pricesale', function(newValue, oldValue) {
if (newValue) {
if ($scope._dataArray.product_reward != undefined) {
if ($scope._dataArray.product_reward.reward_type_id == 103) {
if (($scope.qty * newValue) % $scope._dataArray.product_reward.reward_every_price == 0) {
$scope.pointmain = ($scope.qty * newValue / $scope._dataArray.product_reward.reward_every_price) * $scope._dataArray.product_reward.reward_amount;
$scope.rewardTime($scope._dataArray.product_reward.reward_lifetime.lifetime_start_time, $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time, $scope.pointmain);
} else {
var price_all = ($scope.qty * newValue) - (($scope.qty * newValue) % $scope._dataArray.product_reward.reward_every_price);
$scope.pointmain = (price_all / $scope._dataArray.product_reward.reward_every_price) * $scope._dataArray.product_reward.reward_amount;
$scope.rewardTime($scope._dataArray.product_reward.reward_lifetime.lifetime_start_time, $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time, $scope.pointmain);
}
} else if ($scope._dataArray.product_reward.reward_type_id == 102) {
$scope.pointmain = ($scope._dataArray.product_reward.reward_percent / 100) * ($scope.qty * newValue);
$scope.rewardTime($scope._dataArray.product_reward.reward_lifetime.lifetime_start_time, $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time, $scope.pointmain);
} else {
$scope.rewardlast = $scope.getreward($scope.qty);
}
}
} else {
$scope.rewardlast = $scope.getreward(1);
}
});
$scope.$watch('qty', function(newValue, oldValue) {
if (newValue) {
if ($scope._dataArray.product_reward != undefined) {
if ($scope._dataArray.product_reward.reward_type_id == 103) {
if (($scope.pricesale * newValue) % $scope._dataArray.product_reward.reward_every_price == 0) {
$scope.pointmain = ($scope.pricesale * newValue / $scope._dataArray.product_reward.reward_every_price) * $scope._dataArray.product_reward.reward_amount;
$scope.rewardTime($scope._dataArray.product_reward.reward_lifetime.lifetime_start_time, $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time, $scope.pointmain);
} else {
var price_all = ($scope.pricesale * newValue) - (($scope.pricesale * newValue) % $scope._dataArray.product_reward.reward_every_price);
$scope.pointmain = (price_all / $scope._dataArray.product_reward.reward_every_price) * $scope._dataArray.product_reward.reward_amount;
$scope.rewardTime($scope._dataArray.product_reward.reward_lifetime.lifetime_start_time, $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time, $scope.pointmain);
}
} else if ($scope._dataArray.product_reward.reward_type_id == 102) {
$scope.pointmain = ($scope._dataArray.product_reward.reward_percent / 100) * ($scope.pricesale * newValue);
$scope.rewardTime($scope._dataArray.product_reward.reward_lifetime.lifetime_start_time, $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time, $scope.pointmain);
} else {
$scope.rewardlast = $scope.getreward(newValue);
}
}
} else {
$scope.rewardlast = $scope.getreward(1);
}
});
$scope.pointmain = 0;
$scope._getDataArray = function(id) {
$scope.pointmain = 0;
$scope.reward = false;
var dataSend = {
'txt_product_id': id
};
GAEAPI.get('product/id', dataSend, $scope).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
if ($scope._dataArray.product_reward.length != 0) {
var starttime = $scope._dataArray.product_reward.reward_lifetime.lifetime_start_time;
var endtime = $scope._dataArray.product_reward.reward_lifetime.lifetime_end_time;
if ($scope._dataArray.product_reward.reward_type_id == 101) {
$scope.pointmain = $scope._dataArray.product_reward.reward_amount;
$scope.rewardTime(starttime, endtime, $scope.pointmain);
}
if ($scope._dataArray.product_reward.reward_type_id == 102) {
$scope.pointmain = ($scope._dataArray.product_reward.reward_percent / 100) * $scope.pricesale;
$scope.rewardTime(starttime, endtime, $scope.pointmain);
}
if ($scope._dataArray.product_reward.reward_type_id == 103) {
$scope.pointmain = ($scope.pricesale * $scope.qty / $scope._dataArray.product_reward.reward_every_price) * $scope._dataArray.product_reward.reward_amount;
/* if($scope.pointmain%$scope._dataArray.product_reward.reward_amount == 0){
} */
if ($scope.pointmain >= $scope._dataArray.product_reward.reward_amount) {
/* alert($scope.pointmain); */
$scope.rewardTime(starttime, endtime, $scope.pointmain);
} else {
$scope.popkaisod = true;
}
}
}
}
});
};
$scope.rewardTime = function(t_start, t_end, reward_point) {
console.log("rewardTime : reward_point : ", reward_point, " t_start : ", parseInt(t_start), " t_end : ", parseInt(t_end));
var date_now = new Date();
var date_start = new Date(t_start * 1000);
var date_end = new Date(t_end * 1000);
console.log("rewardTime : date_now : ", date_now, " date_end : ", date_end, " date_start : ", date_start);
if (parseInt(t_start) <= parseInt(t_end)) {
if (date_start <= date_now && date_end > date_now) {
$scope.reward = reward_point;
$scope.rewardlast = $scope.reward;
}
} else if (parseInt(t_end) == -1) {
$scope.reward = reward_point;
$scope.rewardlast = $scope.reward;
} else {
if (parseInt(t_start) <= date_now && parseInt(t_end) > date_now) {
$scope.reward = reward_point;
$scope.rewardlast = $scope.reward;
}
}
/* var date_end = 0;
var date_now = new Date();
var date_start = new Date(t_start * 1000);
if (t_end != -1) {
date_end = new Date(t_end * 1000);
if (t_start <= date_now && t_end > date_now) {
$scope.reward = reward_point;
$scope.rewardlast = $scope.reward;
}
}
if (t_start <= date_now && t_end == -1) {
$scope.reward = reward_point;
$scope.rewardlast = $scope.reward;
console.log("point_reward 3 :", $scope.reward);
} */
};
$scope.getreward = function(valuer) {
return $scope.reward * valuer;
}
};
return promise;
});_ui_share_app.factory('$componentProductSetDetail', function componentProductSetDetail($routeParams, $timeout) {
return
});_ui_share_app.directive('componentProductSetDetailTypeA', function($rootScope, $routeParams) {
var templateName = 'componentProductSetDetailTypeA';
var componentMain = 'componentProductSetDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
promotelink: '@promotelink',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
$scope.product_sku = "";
$scope.product_code = "";
$scope.product_price = 0;
$scope.product_compare_price = 0;
$scope._dataArrayState = {
load: true,
done: false
};
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var dataSend = {
'txt_product_id': id
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/set_id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
console.log("_getDataArray _dataArray : ", $scope._dataArray);
$scope.dataPreserve = res.data;
if (res.data.product_sku != undefined) {
$scope.product_sku = res.data.product_sku;
}
if (res.data.product_code != undefined) {
$scope.product_code = res.data.product_code;
}
$scope.product_price = res.data.product_price;
/*$scope.calculate(
res.data.product_price,
res.data.product_compare_price,
res.data.product_discount.discount_id,
res.data.product_discount.discount_price,
res.data.product_discount.discount_percent);*/
if (res.data.product_tag != undefined) {
$scope.dataTag = res.data.product_tags.split(",");
}
$scope.qtyCurrentSize(0, 20);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.dataRelation = [];
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined) {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, compare_price, discount_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
calculate = price - discount_price;
} else if (discount_percent != 0 && discount_price == 0) {
calculate = price - ((discount_percent / 100) * price);
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_variant, product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : product_total_variant : ", product_total_variant, "product_total_stock : ", product_total_stock);
if (product_total_variant == 0) {
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock < 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock == 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_variant > 0) {
if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
} else if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
for (var i = 0; i < product_total_stock; i++) {
$scope.qty_current_size.push(i + 1);
}
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_qๆid = dataVariants[i].product_id;
if (dataVariants[i].sku != "") {
$scope.product_sku = dataVariants[i].sku;
} else {
$scope.product_sku = $scope._dataArray.product_sku;
}
if (dataVariants[i].sku != "") {
$scope.product_code = dataVariants[i].barcode;
} else {
$scope.product_code = $scope._dataArray.product_code;
}
$scope.product_price = $scope.calculate(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
$scope.product_price = $scope._dataArray.product_price;
$scope.product_compare_price = $scope._dataArray.product_compare_price;
$scope.product_sku = $scope._dataArray.product_sku;
$scope.product_code = $scope._dataArray.product_code;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope._getDataArray($scope._getIdUrl());
$scope.returnSizeProductCard = function() {
var id = $("#productcard");
var out = $("#productcard_product_title");
return id.outerHeight();
};
$scope.checkHide = function() {
var start = 8;
var end = 23;
var DateHours = (new Date()).getHours();
return [23, 0, 1, 2, 3, 4, 5, 6, 7].indexOf(DateHours) != -1;
};
};
return promise;
});_ui_share_app.directive('componentProductSetDetailTypeB', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductSetDetailTypeB';
var componentMain = 'componentProductSetDetail';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'E';
promise.scope = {
name: '@name',
};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $window) {
$scope.imgPath = CUR_THEME.file_url() + 'images/';
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.dataTag = false;
$scope._dataArray = [];
$scope.product_id = "";
$scope.product_sku = "";
$scope.product_code = "";
$scope.product_price = 0;
$scope.product_compare_price = 0;
// $scope.promotion_list = 0;
$scope._dataArrayState = {
load: true,
done: false
};
// console.log("promotion_list : ", $scope.promotion_list);
$scope._getDataArray = function(id) {
$scope._dataArrayState = $scope.StateData(true, false);
var filter_json = {}
var dataSend = {
'txt_product_id': id,
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/set_id', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._dataArray = res.data;
// if($scope._dataArray.product_is_promotion != 0){
// $scope.promotion_list = $scope._dataArray.product_promotion[0].promotion_id;
// }
// console.log("promotion_list : ", $scope.promotion_list);
console.log("_getDataArray _dataArray : ", $scope._dataArray);
$scope.product_id = $scope._dataArray.product_id;
$scope.dataPreserve = res.data;
if (res.data.product_sku != undefined) {
$scope.product_sku = res.data.product_sku;
}
if (res.data.product_code != undefined) {
$scope.product_code = res.data.product_code;
}
$scope.product_price = $scope.calculate(res.data.product_set_price.original_price,res.data.product_price, res.data.product_compare_price, res.data.product_discount.discount_type_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(res.data.product_set_price.original_price, res.data.product_compare_price, res.data.product_discount.discount_id, res.data.product_discount.discount_price, res.data.product_discount.discount_percent);
if ($scope._dataArray.product_referral_display.category != 'undefined' && $scope._dataArray.product_referral_display.category != null) {
$scope.getRelation($scope._dataArray.product_referral_display.category[0].referral_id);
}
// $scope.dataTag = res.data.product_tags.split(",");
$scope.qtyCurrentSize(res.data.product_total_stock);
// $scope.buildVariantOption(res.data);
}
$scope._dataArrayState = $scope.StateData(false, true);
});
};
$scope.mkCarousel = function(elem) {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
responsive: [{
breakpoint: 1200,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 1,
}
}]
}).closest('section').addClass('active');
};
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.dataRelation = [];
$scope.getRelation = function(referral_id) {
var dataSend = {
'txt_referral_id': referral_id
};
GAEAPI.get('referral/relation', dataSend, $scope).then(function(res) {
if (res.ok == 1) {
$scope.dataRelation = res.data;
}
});
};
$scope.StateData = function(_load_in, _done_in) {
var State = {
load: _load_in,
done: _done_in
};
return State;
};
$scope._getIdUrl = function() {
var getData = [];
var returnData = '';
if (typeof $routeParams.product_id !== 'undefined') {
getData = $routeParams.product_id;
returnData = getData.split("-");
return returnData[0];
}
};
$scope._stateReward = function(datain) {
var state = false;
/* console.log("_stateReward : reward_lifetime : ", datain.reward_lifetime); */
if (datain.length != 0) {
state = true;
}
return state;
};
$scope._getReward = function(datain, product_price, qty) {
if (datain.length == 0) {
return 'Data Reward Error';
}
console.log("_getReward : product_price : ", product_price, " qty : ", qty);
var reward = "NULL";
if (datain.reward_type_id == "101") {} else if (datain.reward_type_id == "102") {} else if (datain.reward_type_id == "103") {
var reward_every_price = parseInt(datain.reward_every_price);
var sum_product_price = Math.round(product_price) * qty;
var reward_amount = parseInt(datain.reward_amount);
console.log("_getReward : reward_every_price : ", reward_every_price, " sum_product_price : ", sum_product_price, " reward_amount : ", reward_amount);
if (reward_every_price <= sum_product_price) {
var divided = Math.floor(sum_product_price / reward_every_price);
var multiplied = divided * reward_amount;
console.log("_getReward : divided : ", divided, " multiplied : ", multiplied);
reward = multiplied;
} else {
reward = "ZERO";
}
} else {
return 'Data Reward Type Id Error';
}
return reward;
};
$scope.viewImg = 0;
$scope.changeImg = function(i) {
return $scope.viewImg = i;
};
$scope._saleState = {
discount: 0
};
$scope.sale = function(price, compare_price, discount_id, discount_price, discount_percent) {
var sale = 0;
if (discount_id != undefined) {
if (discount_price != 0 && discount_percent == 0) {
sale = discount_price;
$scope._saleStatres.discount = 'price';
} else if (discount_percent != 0 && discount_price == 0) {
sale = discount_percent;
$scope._saleStatres.discount = 'percent';
}
}
return (sale > 0) ? sale : 0;
}
$scope._pricefullState = {
pricefull: 0
};
$scope.pricefull = function(price, compare_price, discount_id, discount_price, discount_percent) {
var pricefull = 0;
if (discount_id != undefined && discount_percent == 0 && discount_price == 0) {
if (compare_price > 0 && compare_price != undefined) {
pricefull = compare_price;
$scope._pricefullState.pricefull = 'not zero';
} else {
$scope._pricefullState.pricefull = 'zero';
}
} else {
if (price != undefined && price != 0) {
pricefull = price;
$scope._pricefullState.pricefull = 'not zero';
} else {
pricefull = 0;
$scope._pricefullState.pricefull = 'zero';
}
}
return pricefull;
}
$scope._calculateState = {
calculate: 0
};
$scope.calculate = function(price, product_price, compare_price, discount_type_id, discount_price, discount_percent) {
var calculate = 0;
if (discount_type_id != undefined) {
if (discount_type_id == "101") {
calculate = price - discount_price;
} else if (discount_type_id == "102") {
calculate = price - ((discount_percent / 100) * price);
} else if (discount_type_id == "103") {
calculate = product_price;
} else {
calculate = price;
}
} else {
calculate = price
}
if (calculate != undefined && calculate != 0) {
$scope._calculateState.calculate = 'not zero';
} else {
$scope._calculateState.calculate = 'zero';
}
return (calculate > 0) ? calculate : 0;
}
$scope.qtyCurrentSize = function(product_total_stock) {
$scope.qty_current_size = [];
console.log("qtyCurrentSize : ", "product_total_stock : ", product_total_stock);
if (product_total_stock > 0) {
$scope.qty_current_size_state = true;
$scope.buy_state = true;
if (product_total_stock >= 20) {
for (var i = 0; i < 20; i++) {
$scope.qty_current_size.push(i + 1);
}
} else {
for (var i = 0; i < parseInt(product_total_stock); i++) {
$scope.qty_current_size.push(i + 1);
}
}
} else if (product_total_stock <= 0) {
$scope.qty_current_size_state = false;
$scope.buy_state = true;
for (var i = 0; i < 1; i++) {
$scope.qty_current_size.push(i + 1);
}
}
$scope.qtyShow($scope.qty_current_size);
};
$scope.htmlSelectTime = 0;
$scope.qtyShow = function(array) {
$scope.htmlSelectTime = 0;
console.log("qtyShow ", array);
var htmlOPT = "";
for (var i = 0; i < array.length; i++) {
htmlOPT += '';
}
console.log("qty_current_size htmlOPT", htmlOPT);
if (htmlOPT != "") {
$scope.htmlSelectTime = $timeout(function() {
$('#qtyselect').html(htmlOPT);
$timeout.cancel($scope.htmlSelectTime);
}, 500);
}
}
$scope.viewQuantity = function() {
var check_int = 1;
if ($(".d_qty").val() == undefined) {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
check_int = 1;
} else if ($(".d_qty").val() == "? number:1 ?") {
$(".d_qty").val("1");
check_int = parseInt($(".d_qty").val());
} else {
check_int = parseInt($(".d_qty").val());
$(".d_qty").val(check_int);
}
return check_int;
};
$scope.dataOption = [];
$scope.dataVariants = [];
$scope.buildVariantOption = function(objectData) {
if (objectData.product_total_variant <= 0) {
return;
}
$scope.dataOption = objectData.product_attribute.option_data.pclass_array;
$scope.dataVariants = objectData.product_attribute.option_data.variant_array;
$scope.makeVariantsClick();
};
$scope.dataVariantsPick = [];
$scope.onSelectVariantItems = function($index, option_id) {
console.log("onSelectVariantItems option_id:", $index, option_id);
$scope.dataVariantsPick[$index] = option_id;
console.log("onSelectVariantItems dataVariantsPick:", $scope.dataVariantsPick);
if ($scope.dataVariantsPick.length >= $scope.dataOption.length) {
$scope.findVariantsData($scope.dataVariantsPick);
}
};
$scope.findVariantsData = function(variantsPick) {
function compareArray(array_a, array) {
if (!array) return false;
if (array_a.length != array.length) return false;
for (var i = 0, l = array_a.length; i < l; i++) {
if (array_a[i] instanceof Array && array[i] instanceof Array) {
if (!compareArray(array_a[i], array[i])) return false;
} else if (array_a[i] != array[i]) {
return false;
}
}
return true;
}
var dataVariants = $scope.dataVariants;
for (var i = 0; i < dataVariants.length; i++) {
var optionJson = angular.fromJson(dataVariants[i].option_id_json);
console.log("dataVariants :", dataVariants);
if (compareArray(variantsPick, optionJson)) {
$scope._dataArray.product_id = dataVariants[i].product_id;
if (dataVariants[i].sku != "") {
$scope.product_sku = dataVariants[i].sku;
} else {
$scope.product_sku = $scope._dataArray.product_sku;
}
if (dataVariants[i].sku != "") {
$scope.product_code = dataVariants[i].barcode;
} else {
$scope.product_code = $scope._dataArray.product_code;
}
$scope.product_price = $scope.calculate(dataVariants[i].price, $scope._dataArray.product_price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_type_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.product_compare_price = $scope.pricefull(dataVariants[i].price, dataVariants[i].compare_price, $scope._dataArray.product_discount.discount_id, $scope._dataArray.product_discount.discount_price, $scope._dataArray.product_discount.discount_percent);
$scope.qtyCurrentSize(dataVariants.length, dataVariants[i].total_stock);
break;
} else {
$scope.qty_current_size_state = false;
$scope.buy_state = false;
$scope.product_price = $scope._dataArray.product_price;
$scope.product_compare_price = $scope._dataArray.product_compare_price;
$scope.product_sku = $scope._dataArray.product_sku;
$scope.product_code = $scope._dataArray.product_code;
}
}
};
$scope.makeVariantsClick = function() {
var s = $timeout(function() {
$scope.buy_state = false;
}, 100);
};
$scope.viewInfo = 1;
$scope.view = function(input) {
$scope.viewInfo = input;
}
$scope._getDataArray($scope._getIdUrl());
// setTimeout(function() {
// alert($('input[name=radiogroup]:checked').val());
// }, 700);
$scope.clickckvalue = function() {
var result = 0;
$scope.promotion_list = $('input[name=radiogroup]:checked').val();
console.log("promotion_list : ", $scope.promotion_list);
if ($('input[name=radiogroup]:checked').val() != "" && $('input[name=radiogroup]:checked').val() != undefined) {
result = $('input[name=radiogroup]:checked').val();
} else {
result = 0;
}
return result;
}
};
return promise;
});/*_ui_share_app.directive('componentFooter', function($rootScope, $routeParams) {
var templateName = 'componentFooter';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
id: '=',
background: '@',
primary: '@',
secondary: '@',
name: '@name',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = true;
promise.controller = function($scope, $timeout, $interval, $q, $window) {};
return promise;
});*/
_ui_share_app.factory('$componentProductSlide', function componentFooter($routeParams, $timeout) {
return
});_ui_share_app.directive('componentProductSlideA', function($rootScope, $routeParams) {
var templateName = 'componentProductSlideA';
var componentMain = 'componentProductSlide';
var templatePathUrl = _ui_share_host + componentMain + '/expansions/' + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
name: '@name',
referralid: '@referralid',
};
promise.link = function(scope, element, attr) {};
promise.templateUrl = templatePathUrl;
promise.transclude = {};
promise.controller = function($scope, $timeout, $interval, $q, $window) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope.mkCarouselProduct = function(elem) {
console.debug('mkCarouselProduct: trigger');
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: true,
arrows: true,
autoplay: true,
autoplaySpeed: 4000,
slidesToShow: 1,
slidesToScroll: 1,
infinite: true,
speed: 600,
prevArrow: '',
nextArrow: '',
responsive: [{
breakpoint: 1330,
settings: {
slidesToShow: 1,
}
}, {
breakpoint: 991,
settings: {
arrows: false,
slidesToShow: 1
}
}, {
breakpoint: 768,
settings: {
arrows: false,
slidesToShow: 1
}
}, {
breakpoint: 480,
settings: {
arrows: false,
slidesToShow: 1
}
}]
}).closest('section').addClass('active');
}, 1000);
};
$scope._productArray = [];
$scope._productArrayDone = {
load: true,
done: false
};
$scope._getProductArray = function(id) {
$scope._productArrayDone = {
load: true,
done: false
};
$scope._productArray = [];
var filter_json = {
"referral_id_array": [id]
}
console.log('filter_json_Product', filter_json);
var dataSend = {
'cur_page': 1,
'per_page': 20,
'txt_filter_json': JSON.stringify(filter_json)
};
console.log('dataSend_Product', dataSend);
GAEAPI.get('product/lists', dataSend).then(function(res) {
if (res.ok === 1) {
$scope._productArray = res.data.dataList;
}
$scope._productArrayDone = {
load: false,
done: true
};
console.log('productArray', $scope._productArray);
});
};
$scope._getProductArray($scope.referralid);
$scope._uniqueKey = '';
$scope._key = function() {
if ($scope._uniqueKey === '') {
$scope._uniqueKey = Math.floor((Math.random() * 9999) + 1000);
return $scope._uniqueKey;
} else {
return $scope._uniqueKey;
}
};
$scope.slickGoLeft = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickPrev');
}, 100);
};
$scope.slickGoRight = function() {
setTimeout(function() {
$('.recommend .-recommend[data-id="' + $scope._key() + '"]').slick('slickNext');
}, 100);
};
$scope.openCity = function(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " active";
}
};
return promise;
});_ui_share_app.directive('componentProductTagA', function($rootScope, $routeParams, sliderProvider) {
var templateName = 'componentProductTagA';
var templatePathUrl = _ui_share_host + templateName + '/' + templateName + '.html';
var promise = {};
promise.restrict = 'AE';
promise.scope = {
productid: '@productid',
referralid : '@referralid',
tag: '@tag',
limit: '@limit',
tagname: '@tagname',
component: '@component',
stylebutton: '@stylebutton',
margin: '@margin',
};
promise.templateUrl = templatePathUrl;
promise.transclude = {
'text_first': '?textFirst',
'text_end': '?textEnd',
};
promise.link = function(scope, element, attr) {};
promise.controller = function($scope, $timeout, $interval, $q, $window, $location, $http) {
$scope.icnPath = CUR_THEME.file_url() + '../../assets/';
$scope._viewRouteParams = function() {
return $routeParams || false;
};
$scope._idUrl = function(instr) {
var outstr = instr.split("-", 1).join("");
return outstr;
};
$scope.slideProductDeal = function(elem) {
$('.component-product-tag-a').css('height', '0');
$('.component-product-tag-a').css('opacity', '0');
setTimeout(function() {
var carousel = $(elem + '[data-id=' + $scope._key() + ']');
var is_dark;
carousel.not('.slick-initialized').slick({
dots: false,
arrows: true,
autoplay: false,
autoplaySpeed: 4000,
slidesToShow: 4,
slidesToScroll: 1,
infinite: true,
speed: 600,
prevArrow: '