1 parent
7c25513336
commit
7aeb0ed016
1 file changed
+12
-4
@@ -120,6 +120,10 @@ $importError = null;
|
|||||||
|
|
||||||
if (isset($_FILES['csv_file'])) {
|
if (isset($_FILES['csv_file'])) {
|
||||||
if ($_FILES['csv_file']['error'] == 0) {
|
if ($_FILES['csv_file']['error'] == 0) {
|
||||||
|
|
||||||
|
// 🔥 LE FIX VITAL POUR LES CSV PROVENANT D'iOS/MAC
|
||||||
|
ini_set('auto_detect_line_endings', TRUE);
|
||||||
|
|
||||||
$file = $_FILES['csv_file']['tmp_name'];
|
$file = $_FILES['csv_file']['tmp_name'];
|
||||||
$handle = fopen($file, "r");
|
$handle = fopen($file, "r");
|
||||||
|
|
||||||
@@ -153,6 +157,9 @@ if (isset($_FILES['csv_file'])) {
|
|||||||
fgetcsv($handle, 1000, $delimiter, "\"", "\\"); // Skip header
|
fgetcsv($handle, 1000, $delimiter, "\"", "\\"); // Skip header
|
||||||
|
|
||||||
while (($data = fgetcsv($handle, 1000, $delimiter, "\"", "\\")) !== FALSE) {
|
while (($data = fgetcsv($handle, 1000, $delimiter, "\"", "\\")) !== FALSE) {
|
||||||
|
// Si la ligne est vide on passe
|
||||||
|
if (empty(array_filter($data))) continue;
|
||||||
|
|
||||||
$amount = 0;
|
$amount = 0;
|
||||||
$isCredit = 0;
|
$isCredit = 0;
|
||||||
|
|
||||||
@@ -184,7 +191,7 @@ if (isset($_FILES['csv_file'])) {
|
|||||||
$dateSql = date('Y-m-d');
|
$dateSql = date('Y-m-d');
|
||||||
if ($dateFormat === 'd/m/Y') {
|
if ($dateFormat === 'd/m/Y') {
|
||||||
$dateParts = explode('/', $rawDate);
|
$dateParts = explode('/', $rawDate);
|
||||||
if (count($dateParts) == 3) {
|
if (count($dateParts) >= 3) {
|
||||||
$dateSql = $dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0];
|
$dateSql = $dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -192,7 +199,8 @@ if (isset($_FILES['csv_file'])) {
|
|||||||
if ($ts) $dateSql = date('Y-m-d', $ts);
|
if ($ts) $dateSql = date('Y-m-d', $ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
$label = trim($data[$colLabel] ?? '');
|
// On prend la colonne Label paramétrée, ou la 2ème en secours
|
||||||
|
$label = trim($data[$colLabel] ?? '') ?: trim($data[2] ?? '');
|
||||||
$refCSV = trim($data[$colRef] ?? '');
|
$refCSV = trim($data[$colRef] ?? '');
|
||||||
$uniqueKey = !empty($refCSV) ? "REF_".$refCSV : "HASH_".md5($dateSql.$label.number_format($amount, 2).$isCredit);
|
$uniqueKey = !empty($refCSV) ? "REF_".$refCSV : "HASH_".md5($dateSql.$label.number_format($amount, 2).$isCredit);
|
||||||
$isDuplicate = in_array($uniqueKey, $existingRefs);
|
$isDuplicate = in_array($uniqueKey, $existingRefs);
|
||||||
@@ -212,7 +220,7 @@ if (isset($_FILES['csv_file'])) {
|
|||||||
fclose($handle);
|
fclose($handle);
|
||||||
$showPreview = true;
|
$showPreview = true;
|
||||||
} else {
|
} else {
|
||||||
$importError = "Erreur lors de l'upload du fichier (Code d'erreur PHP : " . $_FILES['csv_file']['error'] . "). Le fichier est peut-être trop volumineux.";
|
$importError = "Erreur lors de l'upload du fichier (Code d'erreur PHP : " . $_FILES['csv_file']['error'] . "). Vérifiez le format ou la taille du fichier.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -811,7 +819,7 @@ $monthName = $monthNames[(int)$viewM] . ' ' . $viewY;
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if (!$showPreview): ?>
|
<?php if (!$showPreview): ?>
|
||||||
<!-- L'action sécurise le fait qu'on poste bien sur le mois et la vue actuels -->
|
<!-- L'action sécurise le fait qu'on poste bien sur le mois et la vue actuels même sur mobile -->
|
||||||
<form method="POST" enctype="multipart/form-data" action="?tab=suivi&m=<?= htmlspecialchars($viewM) ?>&y=<?= htmlspecialchars($viewY) ?>">
|
<form method="POST" enctype="multipart/form-data" action="?tab=suivi&m=<?= htmlspecialchars($viewM) ?>&y=<?= htmlspecialchars($viewY) ?>">
|
||||||
<div class="import-dropzone">
|
<div class="import-dropzone">
|
||||||
<div style="font-size: 2.5rem; margin-bottom: 10px;">📄</div>
|
<div style="font-size: 2.5rem; margin-bottom: 10px;">📄</div>
|
||||||
|
|||||||
Reference in new issue
Block a user