var csvToCartLang = {
tr: {
title : "CSV Dosyası İle Sepete Ürün Yükleme",
btn_upload : "Dökümanı Yükle",
btn_csv_file: "Örnek CSV Dosyası",
product : "Ürün",
not_product : "Ürün Bulunamadı",
status : "Durum",
reminders : 'Hatırlatmalar',
only_csv : 'Sadece .csv uzantılı dosya yüklenebilmektedir.',
csv_info : 'Csv uzantılı dosyada ilk sütun ürün ekleme kimiği alanı, ikinci sütun ürünün adedi girilmelidir.',
csv_limit : 'Aynı anda en fazla 1000 satır dosya yüklemeniz önerilir.',
select_error: 'Geçerli Bir Dosya Seçiniz!',
loading : 'Yükleniyor...',
done : 'Tamamlandı',
product_add_type : "Ürün Ekleme Kimliği",
barcode_type : "Ürün Barkodu",
ws_code_type : "Ürün Web Servis Kodu",
},
en: {
title : "Adding Products to Cart with CSV File",
btn_upload : "Upload Document",
btn_csv_file: "Example CSV File",
product : "Product",
not_product : "Product Not Found",
status : "Status",
reminders : 'Reminders',
only_csv : 'Only .csv file can be uploaded.',
csv_info : 'In the csv extension file, the first column product add type field, the second column product quantity must be entered.',
csv_limit : 'It is recommended that you upload no more than 1000 lines of files at a time.',
select_error: 'Choose a Valid File!',
loading : 'Loading...',
done : 'Completed',
product_add_type : "Product Add Type",
barcode_type : "Product Barcode",
ws_code_type : "Product Code",
},
};
var csvLang = window.LANGUAGE == 'en' ? csvToCartLang.en : csvToCartLang.tr;
document.write(`
` + csvLang.title + `
` + csvLang.reminders + `:
- ` + csvLang.only_csv + `
- ` + csvLang.csv_info + `
- ` + csvLang.csv_limit + `
` + csvLang.product_add_type + `:
` + csvLang.btn_csv_file + `
` + csvLang.product + ` |
` + csvLang.status + ` |
`);
document.getElementById("csvFileUpload").addEventListener(
"change",
function (e) {
csvToCart.csvFile = e.target.files[0];
},
false
);
csvToCart = {
csvFile: null,
addedCount: 0,
csvLineCount: 0,
csvArray: [],
notFoundBarcode: [],
sendLimit : 25,
productType : 'getProductByBarcodes',
paramsKey : 'barcodes',
paramKey : 'barcode',
createCsv: function () {
csvToCart.productType = document.querySelector('input[name="csvToCartType"]:checked').value;
csvToCart.paramsKey = csvToCart.productType === 'getProductByBarcodes' ? 'barcodes' : 'ws_codes';
csvToCart.paramKey = csvToCart.productType === 'getProductByBarcodes' ? 'barcode' : 'ws_code';
csvToCart.csvArray = [];
csvToCart.addedCount = 0;
if (
csvToCart.csvFile == null ||
csvToCart.csvFile.name.toLowerCase().indexOf(".csv") == -1
) {
alert(csvLang.select_error);
return;
}
var reader = new FileReader();
reader.readAsText(csvToCart.csvFile);
reader.onload = function (event) {
var lines = this.result.split("\n");
for (var line = 0; line < lines.length; line++) {
// Detect Delimiter
var allowed_delimiters = [",",";"];
var delimiter = ";";
var max = 0;
allowed_delimiters.forEach(function(item, index, arr){
var count = (lines[line].match(new RegExp(item, "g")) || []).length;
if(count > max){
max = count;
delimiter = item;
}
});
// Detect Delimiter End
var row = lines[line]
.trim()
.replace(/(\r\n|\n|\r)/gm, "")
.split(delimiter);
if (lines[line] != "" && lines[line] != delimiter) {
csvToCart.csvArray.push(row);
}
}
csvToCart.csvLineCount = csvToCart.csvArray.length;
csvToCart.post(0, csvToCart.sendLimit);
var csvLoadingText = document.getElementById("csvLoadingCount");
csvLoadingText.style.display = "block";
csvLoadingText.innerText = '0 / ' + csvToCart.csvLineCount + ' ' + csvLang.loading;
};
reader.onerror = function () {
alert("Unable to read");
};
},
post: function (start, end) {
var data = csvToCart.csvArray.slice(start, end);
var formData = new FormData();
for (var i = 0; i < data.length; i++) {
formData.append( csvToCart.paramsKey +"[]", data[i][0]);
}
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
start += csvToCart.sendLimit;
end += csvToCart.sendLimit;
if (start < csvToCart.csvLineCount) {
csvToCart.post(start, end);
}
var resp = JSON.parse(this.responseText);
csvToCart.addTable(resp.not_found, csvLang.not_product, false);
var respData = resp.data;
for (var i = 0; i < respData.length; i++) {
for (var j = 0; j < data.length; j++) {
if (respData[i][csvToCart.paramKey] == data[j][0]) {
respData[i]["quantity"] = data[j][1];
}
}
}
csvToCart.addtocart(respData);
}
});
xhr.open("POST", window.location.origin + "/srv/service/product/"+csvToCart.productType);
xhr.send(formData);
if (end > csvToCart.csvArray.length) {
csvToCart.csvArray = [];
}
},
addtocart: function (data) {
for (var i = 0; i < data.length; i++) {
var formData = new FormData();
formData.append("productId", data[i].id);
formData.append("variantId", data[i].variant_id);
formData.append("quantity", data[i].quantity);
formData.append("csrfToken", window.CART_CSRF_TOKEN);
csvToCart.postCart(formData, data[i][csvToCart.paramKey]);
}
},
postCart: function (formData, barcode) {
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
var resp = JSON.parse(this.responseText);
csvToCart.addTable([barcode], resp.statusText, resp.status);
if (resp.status == 3){
$('#cartDetail').angularTemplate();
}
}
});
xhr.open("POST", window.location.origin + "/srv/service/cart/add-to-cart");
xhr.send(formData);
},
addTable: function (data, msg, status) {
document.getElementById("CsvErrorTable").style.display = "block";
var table = document.getElementById("CsvErrorTable");
var rowBgColor = status == true || status == 3 ? 'green' : 'red';
data.forEach((e) => {
csvToCart.addedCount++;
var csvLoadingText = document.getElementById("csvLoadingCount");
var loadText = csvToCart.addedCount != csvToCart.csvLineCount ? csvLang.loading : csvLang.done;
csvLoadingText.innerText = csvToCart.addedCount + ' / ' + csvToCart.csvLineCount + ' ' + loadText;
var row = table.insertRow(1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML = e;
cell2.innerHTML = '' + msg + '';
});
},
};