let intl = new Intl.NumberFormat('vi-VN');
let fadeTime = 200;
/*let intervalHeight = setInterval(() => {
jQuery(".swp-item-product-name").css("height", "auto");
let heights = jQuery(".swp-item-product-name").map(function () {
return jQuery(this).height();
}).get();
let maxHeight = Math.max.apply(null, heights);
if (maxHeight) {
jQuery(".swp-item-product-name").css("height", maxHeight);
// clearInterval(intervalHeight);
}
}, 1000);*/
let htmlLoading = ``;
let settingsRequestAddress = {
url: DOMAIN_CRM + "/api/address",
method: "POST",
timeout: 0,
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
}
};
let settingsRequestOrder = {
url: DOMAIN_CRM + "/api/order",
method: "POST",
timeout: 0,
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
}
};
function turnOnLoading(selector) {
let element = document.getElementById(selector);
if (element) {
element.innerHTML = htmlLoading;
}
}
function turnOffLoading(selector) {
let element = document.getElementById(selector);
if (element) {
element.innerHTML = "";
}
}
/**
* Begin Cart And List Product Box ============================================
*/
function openPopupCart() {
let el = document.querySelector('.swp-modal-cart');
if (el) {
el.classList.toggle('swp-modal-cart-show');
}
}
function closePopupCart() {
let el = document.querySelector('.swp-modal-cart');
if (el) {
el.classList.toggle('swp-modal-cart-show');
}
}
function openCart() {
openPopupCart();
}
function closeCart() {
closePopupCart();
}
function Item(productId, image, name, price, count, description, currency, currencyPos, textRemove) {
this.productId = productId;
this.image = image;
this.name = name;
this.price = price;
this.count = count;
this.description = description;
this.currency = currency;
this.currencyPos = currencyPos;
this.textRemove = textRemove;
}
let shoppingCart = (function() {
let cart = [];
function saveCart() {
localStorage.setItem('shoppingCart', JSON.stringify(cart));
}
function loadCart() {
cart = JSON.parse(localStorage.getItem('shoppingCart'));
}
if (localStorage.getItem("shoppingCart") != null) {
loadCart();
}
let obj = {};
obj.loadCart = function() {
return cart;
};
obj.addItemToCart = function(productId, image ,name, price, count, description, currency, currencyPos, textRemove) {
for(let item of cart) {
if(item.productId === productId) {
item.count ++;
saveCart();
return;
}
}
let item = new Item(productId, image, name, price, count, description, currency, currencyPos, textRemove);
cart.push(item);
saveCart();
};
obj.setCountForItem = function(name, count) {
for(let item of cart) {
if (item.name === name) {
item.count = count;
break;
}
}
saveCart();
};
obj.removeItemFromCart = function(name) {
for(let i = 0; i < cart.length; i++) {
if (cart[i].name === name) {
cart.splice(i, 1);
break;
}
}
saveCart();
};
obj.clearCart = function() {
cart = [];
saveCart();
};
obj.totalCount = function() {
let totalCount = 0;
for(let item of cart) {
totalCount += item.count;
}
return totalCount;
};
obj.totalCart = function() {
let totalCart = 0;
for(let item of cart) {
totalCart += item.price * item.count;
}
return Number(totalCart.toFixed(2));
};
return obj;
})();
function listenToEventsProductBox() {
jQuery('.add-to-cart').click(function(event) {
event.preventDefault();
let productId = jQuery(this).data('id');
let image = jQuery(this).data('image');
let name = jQuery(this).data('name');
let description = jQuery(this).data('description');
let price = Number(jQuery(this).data('price'));
let currency = jQuery(this).data('currency');
let currencyPos = jQuery(this).data('currencypos');
let textRemove = jQuery(this).data('textremove');
shoppingCart.addItemToCart(productId ,image ,name, price, 1, description, currency, currencyPos, textRemove);
displayCart();
jQuery(this).closest('.swp-item-product').find('.swp-added-to-cart').removeClass('hidden');
});
}
listenToEventsProductBox();
function displayCart() {
let cartArray = shoppingCart.loadCart();
let output = '', formatPrice = '',formatTotalAPrice = '', forrmatSubTotal = '';
if (cartArray && cartArray.length > 0) {
for(let i in cartArray) {
forrmatSubTotal = ''+intl.format(cartArray[i].price * cartArray[i].count)+'';
if(cartArray[i].currencyPos === 'left'){
formatPrice = cartArray[i].currency+intl.format(cartArray[i].price);
formatTotalAPrice = cartArray[i].currency+forrmatSubTotal;
} else if (cartArray[i].currencyPos === 'left_spacing'){
formatPrice = cartArray[i].currency+' '+intl.format(cartArray[i].price);
formatTotalAPrice = cartArray[i].currency+' '+forrmatSubTotal;
} else if (cartArray[i].currencyPos === 'right'){
formatPrice = intl.format(cartArray[i].price)+cartArray[i].currency;
formatTotalAPrice = forrmatSubTotal+cartArray[i].currency;
} else {
formatPrice = intl.format(cartArray[i].price)+' '+cartArray[i].currency;
formatTotalAPrice = forrmatSubTotal+' '+cartArray[i].currency;
}
output += '
\n' +
'
\n' +
'
\n' +
'
\n' +
'
\n' +
'
'+ cartArray[i].name+'
\n' +
'
'+ cartArray[i].description +'
\n' +
'
\n' +
'
' + formatPrice + '
\n' +
'
\n' +
' x ' +
' \n' +
'
\n' +
'
\n' +
' \n' +
'
\n' +
'
'+ formatTotalAPrice +'
\n' +
'
'
}
}
jQuery('.swp-modal-cart-show-list-product').html(output);
jQuery('.total-cart').html(shoppingCart.totalCart());
jQuery('.total-count').html(shoppingCart.totalCount());
updateCountCartShop();
listenToEventsCart();
recalculateCart();
}
function Order(name, email, phone, provinceCode, provinceName, districtCode, districtName, wardCode, wardName, address, note, payment) {
this.name = name;
this.email = email;
this.phone = phone;
this.provinceCode = provinceCode;
this.provinceName = provinceName;
this.districtCode = districtCode;
this.districtName = districtName;
this.wardCode = wardCode;
this.wardName = wardName;
this.address = address;
this.note = note;
this.payment = payment;
}
let orderInfo = (function() {
let order = new Order();
function saveOrder() {
localStorage.setItem('order', JSON.stringify(order));
}
function loadOrder() {
order = JSON.parse(localStorage.getItem('order'));
}
if (localStorage.getItem("order") != null) {
loadOrder();
}
let obj = {};
obj.loadOrder = function() {
return order;
};
obj.saveOrder = function(orderUpdate) {
order = orderUpdate;
saveOrder();
};
obj.removeOrder = function() {
order = new Order();
saveOrder();
};
return obj;
})();
displayCart();
function listenToEventsCart() {
jQuery(".swp-modal-cart-product-quantity input").change(function () {
updateQuantity(this);
});
jQuery(".swp-modal-cart-product-removal button").click(function () {
removeItem(this);
});
}
function recalculateCart() {
let subtotal = 0;
/* Sum up row totals */
jQuery(".swp-modal-cart-product").each(function (index, element, event) {
// let linePrice = jQuery(this).children(".swp-modal-cart-product-line-price").text();
let linePrice = jQuery(this).find(".swp-modal-cart-product-subtotal").text();
let lstNum = linePrice.split(".");
linePrice = 0;
for (let i = 0; i < lstNum.length; i++) {
linePrice += lstNum[i];
}
linePrice = Number(linePrice);
subtotal += Number(linePrice);
});
let optionCart = jQuery('.swp-products-crm-option-cart');
let currencyCart = optionCart.data('currency');
let currencyCartPos = optionCart.data('currencypos');
let country = optionCart.data('hidenaddr');
let offemail = optionCart.data('onoffemailcus');
let order = orderInfo.loadOrder();
order.country = country;
order.offemail = offemail;
orderInfo.saveOrder(order);
let total = '';
/* Calculate totals */
if(currencyCartPos === 'left'){
total = currencyCart+intl.format(subtotal);
} else if (currencyCartPos === 'left_spacing'){
total = currencyCart+' '+intl.format(subtotal);
} else if (currencyCartPos === 'right'){
total = intl.format(subtotal)+currencyCart;
} else {
total = intl.format(subtotal)+' '+currencyCart;
}
/* Update totals display */
jQuery(".swp-modal-cart-totals-value").fadeOut(300, function () {
//jQuery("#cart-subtotal").html(intl.format(subtotal));
jQuery('.swp-modal-cart-totals-value').html(total);
if (subtotal === 0) {
jQuery(".swp-modal-cart-open-order").fadeOut(fadeTime);
} else {
jQuery(".swp-modal-cart-open-order").fadeIn(fadeTime);
}
jQuery(".swp-modal-cart-totals-value").fadeIn(fadeTime);
});
updateCountCartShop();
if (subtotal === 0) {
jQuery('.swp-modal-cart-show-list-product').html('Bạn chưa thêm sản phẩm nào giỏ hàng
');
}
}
function updateCountCartShop() {
let el = document.querySelector('.swp-cart-bell');
if (el) {
el.setAttribute('data-count', shoppingCart.totalCount());
el.classList.remove('notify');
el.offsetWidth = el.offsetWidth;
el.classList.add('notify');
//el.classList.add('show-count');
}
}
function updateQuantity(quantityInput) {
/* Calculate line price */
let productRow = jQuery(quantityInput).parent().parent();
let price = Number(jQuery(quantityInput).data('price'));
let quantity = Number(jQuery(quantityInput).val());
let linePrice = price * quantity;
let name = jQuery(quantityInput).data('name');
shoppingCart.setCountForItem(name, quantity);
/* Update line price display and recalc cart totals */
//productRow.children(".swp-modal-cart-product-line-price").each(function () {
productRow.find(".swp-modal-cart-product-subtotal").each(function () {
jQuery(this).fadeOut(fadeTime, function () {
// $(this).text(linePrice.toFixed(2));
jQuery(this).text(intl.format(linePrice));
recalculateCart();
jQuery(this).fadeIn(fadeTime);
});
});
}
function removeItem(removeButton) {
// Xoá khỏi bộ nhớ
let name = jQuery(removeButton).data('name');
shoppingCart.removeItemFromCart(name);
let productRow = jQuery(removeButton).parent().parent();
productRow.slideUp(fadeTime, function () {
productRow.remove();
recalculateCart();
});
}
/**
* End Cart And List Product Box ===============================================
*/
/**
* Begin Order ==========================================================
*/
function openPopupOrder() {
let el = document.querySelector('.swp-modal-order');
if (el) {
el.classList.toggle('swp-modal-order-show');
}
}
function closePopupOrder() {
let el = document.querySelector('.swp-modal-order');
if (el) {
el.classList.toggle('swp-modal-order-show');
}
}
function openOrder() {
openPopupOrder();
closeCart();
let order = orderInfo.loadOrder();
let optionCart = jQuery('.swp-products-crm-option-cart'), currencyCart = optionCart.data('currency');
let currencyCartPos = optionCart.data('currencypos'), textOrderTotal = optionCart.data('ordertotal');
let textOrdernameCus = optionCart.data('ordernamecus'), textPlacehdNameCus = optionCart.data('placehdnamecus');
let textOrderemailCus = optionCart.data('orderemailcus'), textPlacehdEmailCus = optionCart.data('placehdemailcus');
let textOrderphoneCus = optionCart.data('orderphonecus'), textPlacehdPhoneCus = optionCart.data('placehdphonecus');
let textOrderaddressCus = optionCart.data('orderaddresscus'), textPlacehdAddressCus = optionCart.data('placehdaddresscus');
let textOrdernoteCus = optionCart.data('ordernotecus'), textPlacehdNoteCus = optionCart.data('placehdnotecus');
let hidenAddrCus = optionCart.data('hidenaddr'), onoffemailcus = optionCart.data('onoffemailcus');
let customerName = '';
if (order.name) {
customerName += '';
} else {
customerName += '';
}
jQuery('.order-customer-name-outline').html(customerName);
let customerEmail = '';
if (order.email) {
customerEmail += '';
} else {
customerEmail += '';
}
jQuery('.order-customer-email-outline').html(customerEmail);
let customerPhone = '';
if (order.phone) {
customerPhone += '';
} else {
customerPhone += '';
}
jQuery('.order-customer-phone-outline').html(customerPhone);
let tbodyTableProductOrder = '';
let carts = shoppingCart.loadCart();
let total = 0, intoMoney = 0, intoMoneyCur = '', totalCur = '';
for (let cart of carts) {
intoMoney = cart.count * cart.price;
if(cart.currencyPos === 'left'){
intoMoneyCur = cart.currency+intl.format(intoMoney);
} else if (cart.currencyPos === 'left_spacing'){
intoMoneyCur = cart.currency+' '+intl.format(intoMoney);
} else if (cart.currencyPos === 'right'){
intoMoneyCur = intl.format(intoMoney)+cart.currency;
} else {
intoMoneyCur = intl.format(intoMoney)+' '+cart.currency;
}
tbodyTableProductOrder += '\n' +
' \n' +
' '+ cart.name +' \t\t\t\t\t\t ' +
' × '+cart.count+'\t\t\t\t\t\t\t\t\t\t\t\n' +
' | \n' +
' \n' +
' '+intoMoneyCur+'\t\t\t\t\t\n' +
' | \n' +
'
';
total += intoMoney;
}
if(currencyCartPos === 'left'){
totalCur = currencyCart+intl.format(total);
} else if (currencyCartPos === 'left_spacing'){
totalCur = currencyCart+' '+intl.format(total);
} else if (currencyCartPos === 'right'){
totalCur = intl.format(total)+currencyCart;
} else {
totalCur = intl.format(total)+' '+currencyCart;
}
let tfootTableProductOrder = '\n' +
' ' + textOrderTotal + ' | \n' +
' ' +
' ' +
' '+ totalCur + '' +
' ' +
' | \n' +
'
';
jQuery('.tbody-table-product-order').html(tbodyTableProductOrder);
jQuery('.tfoot-table-product-order').html(tfootTableProductOrder);
let address = '';
if (order.address) {
address += '';
} else {
address += '';
}
jQuery('.order-address-outline').html(address);
let note = '';
if (order.note) {
note += ' ';
} else {
note += ' ';
}
jQuery('.order-note-outline').html(note);
if(hidenAddrCus === 'no') {
jQuery('.order-customer-province').hide();
jQuery('.order-customer-district').hide();
jQuery('.order-customer-ward').hide();
}
if(onoffemailcus === 'yes') {
jQuery('.order-customer-email-outline').hide();
}
listenToEventsOrder();
}
function closeOrder() {
openCart();
closePopupOrder();
}
let requestAddress = {};
requestAddress.getProvinces = function() {
settingsRequestAddress.data = {
function: "get_provinces"
};
return new Promise((resolve, reject) => {
jQuery.ajax(settingsRequestAddress).done(function (response) {
resolve(response);
}).fail(function (error) {
reject(error);
});
})
};
requestAddress.getDistricts = function(provinceCode) {
settingsRequestAddress.data = {
function: "get_districts",
provinceId: provinceCode
};
return new Promise((resolve, reject) => {
jQuery.ajax(settingsRequestAddress).done(function (response) {
resolve(response);
}).fail(function (error) {
reject(error);
});
})
};
requestAddress.getWards = function(provinceCode, districtCode) {
settingsRequestAddress.data = {
function: "get_wards",
provinceId: provinceCode,
districtId: districtCode
};
return new Promise((resolve, reject) => {
jQuery.ajax(settingsRequestAddress).done(function (response) {
resolve(response);
}).fail(function (error) {
reject(error);
});
})
};
requestAddress.getProvinces().then(data => {
let lstProvinces = data.results;
let order = orderInfo.loadOrder();
let html = '';
html = '';
for (let province of lstProvinces) {
if (order.provinceCode && order.provinceCode.length > 0 && order.provinceCode === province.code) {
html += '';
} else {
html += '';
}
}
if (order.provinceCode) {
turnOnLoading("orderLoadingDistrict");
turnOnLoading("orderLoadingWard");
requestAddress.getDistricts(order.provinceCode).then((data) => {
let lstDistricts = data.results;
html = '';
if (!order.districtCode) {
html += '';
order.districtCode = null;
}
for (let district of lstDistricts) {
if (order.districtCode && order.districtCode === district.code) {
html += '';
} else {
html += '';
}
}
jQuery('.order-select-district').html(html);
turnOffLoading("orderLoadingDistrict");
if (order.districtCode) {
turnOnLoading("orderLoadingWard");
requestAddress.getWards(order.provinceCode, order.districtCode).then((data) => {
let lstWards = data.results;
html = '';
if (!order.wardCode) {
html += '';
order.wardCode = null;
}
for (let ward of lstWards) {
if (order.wardCode && order.wardCode === ward.code) {
html += '';
} else {
html += '';
}
}
jQuery('.order-select-ward').html(html);
turnOffLoading("orderLoadingWard");
}).catch((error) => {
turnOffLoading("orderLoadingWard");
console.log(error);
});
} else {
html = '';
html += '';
jQuery('.order-select-ward').html(html);
turnOffLoading("orderLoadingWard");
}
}).catch((error) => {
turnOffLoading("orderLoadingDistrict");
turnOffLoading("orderLoadingWard");
console.log(error);
});
}
jQuery('.order-select-province').html(html);
}).catch(error => {
turnOnLoading("orderLoadingDistrict");
turnOnLoading("orderLoadingWard");
});
let requestOrder = {};
requestOrder.createOrder = function(order, cart) {
settingsRequestOrder.data = {
function: "create_order",
order: order,
cart: cart,
note: order.note,
name: jQuery('.swp-products-crm-option-cart').data('projectname'),
link: jQuery('.swp-products-crm-option-cart').data('projectlink')
};
return new Promise((resolve, reject) => {
jQuery.ajax(settingsRequestOrder).done(function (response) {
jQuery('.order-button-submit-order-now').removeAttr('disabled');
jQuery('div[class^=swp-content-success-]').addClass('hidden');
jQuery('.swp-content-success-'+order.payment).removeClass('hidden');
jQuery('.swp-content-success-'+order.payment+' .swp-mdh').text(response.code);
resolve(response);
}).fail(function (error) {
reject(error);
});
})
};
function listenToEventsOrder() {
const customerName = document.querySelector('.order-customer-name');
if (customerName) {
customerName.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
order.name = event.target.value;
orderInfo.saveOrder(order);
});
}
const customerEmail = document.querySelector('.order-customer-email');
if (customerEmail) {
customerEmail.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
order.email = event.target.value;
orderInfo.saveOrder(order);
});
}
const customerPhone = document.querySelector('.order-customer-phone');
if (customerPhone) {
customerPhone.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
order.phone = event.target.value;
orderInfo.saveOrder(order);
});
}
const province = document.querySelector('.order-select-province');
if (province) {
province.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
if(event.target.value){
order.provinceCode = event.target.value;
let province = document.querySelector('.order-select-province');
order.provinceName = province.options[province.selectedIndex].text;
} else {
order.provinceCode = null;
order.provinceName = null;
}
order.districtCode = null;
order.districtName = null;
orderInfo.saveOrder(order);
turnOnLoading("orderLoadingDistrict");
turnOnLoading("orderLoadingWard");
let lstDistricts = [];
requestAddress.getDistricts(order.provinceCode).then((data) => {
lstDistricts = data.results;
let html = '';
html += '';
if(typeof lstDistricts === 'object' && lstDistricts !== undefined){
for (let district of lstDistricts) {
html += '';
}
}
jQuery('.order-select-district').html(html);
turnOffLoading("orderLoadingDistrict");
html = '';
html += '';
jQuery('.order-select-ward').html(html);
turnOffLoading("orderLoadingWard");
}).catch((error) => {
turnOffLoading("orderLoadingDistrict");
turnOffLoading("orderLoadingWard");
console.log(error);
});
});
}
const district = document.querySelector('.order-select-district');
if (district) {
district.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
let district = document.querySelector('.order-select-district');
order.districtCode = event.target.value;
order.districtName = district.options[district.selectedIndex].text;
order.wardCode = null;
order.wardName = null;
orderInfo.saveOrder(order);
turnOnLoading("orderLoadingWard");
let lstWards = [];
requestAddress.getWards(order.provinceCode, order.districtCode).then((data) => {
lstWards = data.results;
let html = '';
html += '';
if(typeof lstWards === 'object' && lstWards !== undefined){
for (let ward of lstWards) {
html += '';
}
}
jQuery('.order-select-ward').html(html);
turnOffLoading("orderLoadingWard");
}).catch((error) => {
turnOffLoading("orderLoadingWard");
console.log(error);
});
});
}
const ward = document.querySelector('.order-select-ward');
if (ward) {
ward.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
let ward = document.querySelector('.order-select-ward');
order.wardCode = event.target.value;
order.wardName = ward.options[ward.selectedIndex].text;
orderInfo.saveOrder(order);
});
}
const address = document.querySelector('.order-address');
if (address) {
address.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
order.address = event.target.value;
orderInfo.saveOrder(order);
});
}
const note = document.querySelector('.order-note');
if (note) {
note.addEventListener('change', (event) => {
let order = orderInfo.loadOrder();
order.note = event.target.value;
orderInfo.saveOrder(order);
});
}
}
//listenToEventsOrder();
let timeout = null;
function createOrder() {
jQuery('.order-button-submit-order-now').attr('disabled', true);
let order = orderInfo.loadOrder();
let carts = shoppingCart.loadCart();
let cartsOptimal = [];
for (let cart of carts) {
cartsOptimal.push({
productId: Number(cart.productId),
quantity: Number(cart.count)
})
}
requestOrder.createOrder(order, cartsOptimal).then(data => {
closePopupOrder();
openOrderSuccess();
//timeout = setTimeout(function(){ closeOrderSuccess() }, 2000);
shoppingCart.clearCart();
displayCart();
}).catch(error => {
if(error.responseText && error.responseText !== '') {
jQuery('.swp-modal-error-message').text(JSON.parse(error.responseText).messageError);
}
});
}
/**
* End Order ==========================================================
*/
function orderSuccess(nr) {
jQuery('.swp-model-success-message').toggleClass('swp-model-success-comein');
jQuery('.swp-model-success-check').toggleClass('swp-model-success-scaledown');
}
function openOrderSuccess() {
orderSuccess(50);
}
function closeOrderSuccess() {
clearTimeout(timeout);
orderSuccess(500);
}
function changePaymentMethod() {
let order = orderInfo.loadOrder();
if(order.payment) {
jQuery('#swp-'+order.payment).prop('checked',true);
jQuery('.swp-accordion .swp-content').addClass('hidden');
jQuery('#swp-'+order.payment).closest('li').find('.swp-content').removeClass('hidden');
} else {
order.payment = 'cod';
orderInfo.saveOrder(order);
jQuery('#swp-'+order.payment).prop('checked',true);
jQuery('#swp-'+order.payment).closest('li').find('.swp-content').removeClass('hidden');
}
jQuery('.swp-accordion input:radio[name=payment-method]').change(function(){
jQuery('.swp-accordion .swp-content').addClass('hidden');
jQuery(this).closest('li').find('.swp-content').removeClass('hidden');
order.payment = jQuery(this).val();
orderInfo.saveOrder(order);
});
}
changePaymentMethod();