227 lines
6.3 KiB
JavaScript
227 lines
6.3 KiB
JavaScript
let defaultTypes = [
|
|
'Nouveau',
|
|
'Alimentaire',
|
|
'Boissons',
|
|
'Utilitaires'
|
|
];
|
|
|
|
let defaultStock = [
|
|
{
|
|
name: 'Granola',
|
|
quantity: '2',
|
|
price: '1.3',
|
|
code: '7622210601988',
|
|
image : 'https://cookieandkate.com/images/2015/10/granola-mixed-in-bowl.jpg',
|
|
type: [
|
|
'Alimentaire',
|
|
]
|
|
}
|
|
];
|
|
|
|
let currentDataset = [];
|
|
let currentTypes = [];
|
|
|
|
function initValuesFromPHPDump() {
|
|
currentDataset = json_dump.articles; // json_dump is set using PHP
|
|
currentTypes = json_dump.types;
|
|
console.log(currentDataset);
|
|
console.log(currentTypes);
|
|
generateTable(currentDataset);
|
|
}
|
|
|
|
|
|
|
|
$(document).ready(function () {
|
|
initValuesFromPHPDump();
|
|
generateTypeCheckboxes();
|
|
});
|
|
|
|
|
|
function generateTable(dataset) {
|
|
for (let i = 0; i < dataset.length; i++) {
|
|
generateLine(dataset[i]);
|
|
}
|
|
}
|
|
|
|
function generateLine(item) {
|
|
$.selector_cache('#stockTable').append(
|
|
'<tr id="row_' + item.code + '">' +
|
|
'<td>' + item.name + '</td>' +
|
|
'<td>' + item.quantity + '</td>' +
|
|
'<td>' + item.price + '</td>' +
|
|
'<td>' + item.code + '</td>' +
|
|
'<td><ul id="typeList_' + item.code + '"></ul></td>' +
|
|
'<td><a href="' + item.image + '" target="_blank">LINK</a></td>' +
|
|
'<td>' +
|
|
'<button class="btn btn-danger" id="delete_' + item.code + '" onclick="deleteItem(this)"><i class="fas fa-times"></i></button>' +
|
|
'<button class="btn btn-primary" id="edit_' + item.code + '" onclick="editItem(this)"><i class="fas fa-edit"></i></button>' +
|
|
'</td>' +
|
|
'</tr>'
|
|
);
|
|
// Fill in the type cell
|
|
for (let i = 0; i < item.type.length; i++) {
|
|
$('#typeList_' + item.code).append(
|
|
'<li>' + item.type[i] + '</li>'
|
|
);
|
|
}
|
|
}
|
|
|
|
function generateTypeCheckboxes() {
|
|
for (let i = 0; i < currentTypes.length; i++) {
|
|
let id = 'typeCheck_' + currentTypes[i];
|
|
$('#typeCheckboxesCell').append(
|
|
'<div class="form-check">' +
|
|
'<input type="checkbox" class="form-check-input" id="' + id + '">' +
|
|
'<label class="form-check-label" for="' + id + '">' + currentTypes[i] + '</label>' +
|
|
'</div>'
|
|
);
|
|
}
|
|
}
|
|
|
|
function getItemOfCode(code) {
|
|
let item = {};
|
|
for (let i = 0; i < currentDataset.length; i++) {
|
|
if (currentDataset[i].code === code) {
|
|
item = currentDataset[i];
|
|
break;
|
|
}
|
|
}
|
|
return item;
|
|
}
|
|
|
|
function addNewItem() {
|
|
if (isItemInputFilled()) {
|
|
let item = {
|
|
name: $.selector_cache('#nameInput').val(),
|
|
quantity: $.selector_cache('#quantityInput').val(),
|
|
price: $.selector_cache('#priceInput').val(),
|
|
code: $.selector_cache('#codeInput').val(),
|
|
type: getTypesChecked(),
|
|
image: $.selector_cache('#imageInput').val(),
|
|
};
|
|
if (isCodeAvailable(item.code)) {
|
|
setEditFieldValues('', '', '', '', [], '');
|
|
currentDataset.push(item);
|
|
generateLine(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
function editItem(elem) {
|
|
if (isItemInputEmpty()) {
|
|
let code = elem.id.replace('edit_', '');
|
|
let item = getItemOfCode(code);
|
|
setEditFieldValues(item.name, item.quantity, item.price, item.code, item.type, item.image);
|
|
removeItemFromList(item); // Move the item in the edit fields
|
|
}
|
|
}
|
|
|
|
function deleteItem(elem) {
|
|
let code = elem.id.replace('delete_', '');
|
|
let item = getItemOfCode(code);
|
|
removeItemFromList(item);
|
|
}
|
|
|
|
function removeItemFromList(item) {
|
|
currentDataset.splice(currentDataset.indexOf(item), 1);
|
|
$('#row_' + item.code).remove();
|
|
}
|
|
|
|
function getTypesChecked() {
|
|
let types = [];
|
|
for (let i = 0; i < currentTypes.length; i++) {
|
|
let id = 'typeCheck_' + currentTypes[i];
|
|
if ($('#' + id).is(':checked')) {
|
|
types.push(currentTypes[i]);
|
|
}
|
|
}
|
|
return types;
|
|
}
|
|
|
|
function setTypesChecked(types) {
|
|
for (let i = 0; i < currentTypes.length; i++) {
|
|
let id = 'typeCheck_' + currentTypes[i];
|
|
$('#' + id).prop('checked', types.indexOf(currentTypes[i]) !== -1);
|
|
}
|
|
return types;
|
|
}
|
|
|
|
function setEditFieldValues(name, quantity, price, code, type, image) {
|
|
$.selector_cache('#nameInput').val(name);
|
|
$.selector_cache('#quantityInput').val(quantity);
|
|
$.selector_cache('#priceInput').val(price);
|
|
$.selector_cache('#codeInput').val(code);
|
|
$.selector_cache('#codeInput').val(code);
|
|
setTypesChecked(type);
|
|
$.selector_cache('#imageInput').val(image);
|
|
}
|
|
|
|
function isCodeAvailable (code) {
|
|
let isAvailable = true;
|
|
for (let i = 0; i < currentDataset.length; i++) {
|
|
if (currentDataset[i].code === code) {
|
|
isAvailable = false;
|
|
break;
|
|
}
|
|
}
|
|
return isAvailable;
|
|
}
|
|
|
|
function isItemInputEmpty() {
|
|
return $.selector_cache('#nameInput').val() === '' &&
|
|
$.selector_cache('#quantityInput').val() === '' &&
|
|
$.selector_cache('#priceInput').val() === '' &&
|
|
$.selector_cache('#codeInput').val() === '' &&
|
|
$.selector_cache('#imageInput').val() === '' &&
|
|
getTypesChecked().length === 0;
|
|
}
|
|
|
|
function isItemInputFilled() {
|
|
return $.selector_cache('#nameInput').val() !== '' &&
|
|
$.selector_cache('#quantityInput').val() !== '' &&
|
|
$.selector_cache('#priceInput').val() !== '' &&
|
|
$.selector_cache('#codeInput').val() !== '' &&
|
|
$.selector_cache('#imageInput').val() !== '' &&
|
|
getTypesChecked().length > 0;
|
|
}
|
|
|
|
|
|
|
|
function saveDataset() {
|
|
let finalDataset = {
|
|
types: currentTypes,
|
|
articles: currentDataset
|
|
};
|
|
console.log(finalDataset);
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "write_json.php",
|
|
data: JSON.stringify(finalDataset),
|
|
dataType: "json",
|
|
contentType: "application/json; charset=utf-8",
|
|
complete: function (data) {
|
|
alert(data.responseText);
|
|
console.log(data);
|
|
},
|
|
});
|
|
}
|
|
|
|
|
|
|
|
function scanArticle(code) {
|
|
let data = {
|
|
password: 'coucou',
|
|
code : code,
|
|
};
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "../ajax/scan_article.php",
|
|
data: JSON.stringify(data),
|
|
dataType: "json",
|
|
contentType: "application/json; charset=utf-8",
|
|
complete: function (data) {
|
|
// alert(data.responseText);
|
|
console.log(data.responseText);
|
|
},
|
|
});
|
|
}
|