diff --git a/app/Services/PrizeImportService.php b/app/Services/PrizeImportService.php index 58c1008..7b305e4 100644 --- a/app/Services/PrizeImportService.php +++ b/app/Services/PrizeImportService.php @@ -20,6 +20,10 @@ class PrizeImportService $failed = 0; $errors = []; + // Jejak susunan_cabutan yang telah dikosongkan (overwrite) dalam import ini, + // supaya item yang baru dimasukkan tidak dipadam semula oleh baris seterusnya. + $cleared = []; + foreach ($rows as $i => $row) { $line = $i + 2; @@ -35,6 +39,21 @@ class PrizeImportService $kodHadiah = trim($row['kod_hadiah'] ?? ''); $batch = $kodHadiah !== '' ? $kodHadiah : 'B' . str_pad((string) ($i + 1), 4, '0', STR_PAD_LEFT); + // Overwrite data lama jika susunan_cabutan adalah nombor yang sama. + if ($drawOrder > 0 && ! isset($cleared[$drawOrder])) { + $existing = Prize::where('draw_order', $drawOrder)->get(); + + if ($existing->contains(fn (Prize $p) => $p->status === Prize::STATUS_DISAHKAN)) { + $failed++; + $errors[] = "Baris {$line}: susunan_cabutan {$drawOrder} sudah ada pemenang disahkan, tidak boleh ditulis ganti."; + continue; + } + + $duplicate += $existing->count(); + Prize::where('draw_order', $drawOrder)->delete(); + $cleared[$drawOrder] = true; + } + try { foreach ($this->expand($nama, $kuantiti) as $index => $itemName) { Prize::create([ diff --git a/resources/views/admin/prizes/import.blade.php b/resources/views/admin/prizes/import.blade.php index 46879a4..f22110c 100644 --- a/resources/views/admin/prizes/import.blade.php +++ b/resources/views/admin/prizes/import.blade.php @@ -8,7 +8,8 @@
Format CSV atau XLSX. Lajur: kod_hadiah, nama_hadiah, kategori, nilai_anggaran, susunan_cabutan, kuantiti.
- Jika kuantiti > 1, sistem akan jana beberapa item berasingan (cth Hamper #1 … #5).
susunan_cabutan adalah nombor yang sama (kecuali yang sudah ada pemenang disahkan).