Actualiser js/admin.js
This commit is contained in:
+61
-21
@@ -446,30 +446,70 @@ function normalizeVideothequeRow(row) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleVideothequeUpload(input) {
|
// ── 2. Importation et Mapping du CSV Blu-ray.com ──
|
||||||
if (!input.files || input.files.length === 0) return;
|
function handleVideothequeUpload(input) {
|
||||||
let allData = [];
|
const file = input.files[0];
|
||||||
for (const file of input.files) { try { allData = allData.concat(parseCSV(await file.text())); } catch(e) {} }
|
if (!file) return;
|
||||||
if (allData.length === 0) { input.value = ''; return alert('❌ Fichier vide.'); }
|
|
||||||
allData = allData.map(normalizeVideothequeRow);
|
const reader = new FileReader();
|
||||||
showImportModal(allData.length, 'videotheque');
|
reader.onload = async (e) => {
|
||||||
let processed = 0;
|
const text = e.target.result;
|
||||||
for (let i = 0; i < allData.length; i += 3) {
|
|
||||||
const batch = allData.slice(i, i + 3);
|
// On suppose que ta fonction parseCSV retourne un tableau d'objets avec les en-têtes en clés
|
||||||
|
const parsedData = parseCSV(text);
|
||||||
|
|
||||||
|
const items = parsedData.map(row => {
|
||||||
|
// Lecture des colonnes spécifiques du CSV de Blu-ray.com
|
||||||
|
const title = row['title'] ? row['title'].trim() : '';
|
||||||
|
if (!title) return null;
|
||||||
|
|
||||||
|
// On priorise l'EAN, avec un fallback sur l'UPC si l'EAN est vide
|
||||||
|
let ean = row['ean_isbn13'] ? row['ean_isbn13'].trim() : '';
|
||||||
|
if (!ean && row['upc_isbn10']) {
|
||||||
|
ean = row['upc_isbn10'].trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extraction de l'année depuis la date complète
|
||||||
|
const publishDate = row['publish_date'] ? row['publish_date'].trim() : '';
|
||||||
|
const year = publishDate ? publishDate.split('-')[0] : '';
|
||||||
|
|
||||||
|
const description = row['description'] ? row['description'].trim() : '';
|
||||||
|
|
||||||
|
return { title, ean, year, description };
|
||||||
|
}).filter(item => item !== null);
|
||||||
|
|
||||||
|
if (items.length === 0) {
|
||||||
|
alert("Aucun film valide trouvé dans le fichier CSV.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`${API_URL}?action=import_batch`, { method: 'POST', headers: { 'Authorization': localStorage.getItem('token'), 'Content-Type': 'application/json' }, body: JSON.stringify({ items: batch, type: 'videotheque' }) });
|
const response = await fetch(`${API_URL}?action=import_batch`, {
|
||||||
if (!response.ok) throw new Error(`Erreur serveur ${response.status}`);
|
method: 'POST',
|
||||||
const result = await response.json();
|
headers: {
|
||||||
if (!result.success) throw new Error(result.error || "Erreur inconnue.");
|
'Authorization': localStorage.getItem('token'),
|
||||||
} catch (err) {
|
'Content-Type': 'application/json'
|
||||||
closeImportModal(); alert("❌ Échec de l'import : " + err.message); input.value = ''; return;
|
},
|
||||||
|
body: JSON.stringify({ type: 'videotheque', items })
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
if (data.success) {
|
||||||
|
// Utilisation de ta modale de succès
|
||||||
|
if (typeof showSuccessModal === 'function') {
|
||||||
|
showSuccessModal(`${data.imported} éditions physiques importées !`);
|
||||||
|
} else {
|
||||||
|
alert(`${data.imported} éditions physiques importées !`);
|
||||||
}
|
}
|
||||||
processed += batch.length;
|
|
||||||
updateImportModal(processed, allData.length);
|
|
||||||
}
|
|
||||||
input.value = ''; closeImportModal();
|
|
||||||
showSuccessModal(`${allData.length} support(s) importé(s) avec succès.`);
|
|
||||||
loadDashboardData();
|
loadDashboardData();
|
||||||
|
} else {
|
||||||
|
alert("Erreur lors de l'importation côté serveur.");
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Erreur d'importation :", err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
reader.readAsText(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showImportModal(total, type) {
|
function showImportModal(total, type) {
|
||||||
|
|||||||
Reference in New Issue
Block a user