get(); return view('admin.flash-sales.index', compact('flashSales')); } /** * Show the form for creating a new resource. */ public function create() { return view('admin.flash-sales.create'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $request->validate([ 'nama' => 'required|string|max:255', 'deskripsi' => 'nullable|string', 'banner' => 'nullable|image|max:2048', 'waktu_mulai' => 'required|date', 'waktu_selesai' => 'required|date|after:waktu_mulai', 'aktif' => 'required|boolean', ]); $data = $request->all(); if ($request->hasFile('banner')) { $data['banner'] = $request->file('banner')->store('flash-sales', 'public'); } $flashSale = FlashSale::create($data); return redirect()->route('admin.flash-sales.index')->with('success', 'Flash sale berhasil ditambahkan'); } /** * Display the specified resource. */ public function show(FlashSale $flashSale) { return view('admin.flash-sales.show', compact('flashSale')); } /** * Show the form for editing the specified resource. */ public function edit(FlashSale $flashSale) { return view('admin.flash-sales.edit', compact('flashSale')); } /** * Update the specified resource in storage. */ public function update(Request $request, FlashSale $flashSale) { $request->validate([ 'nama' => 'required|string|max:255', 'deskripsi' => 'nullable|string', 'banner' => 'nullable|image|max:2048', 'waktu_mulai' => 'required|date', 'waktu_selesai' => 'required|date|after:waktu_mulai', 'aktif' => 'required|boolean', ]); $data = $request->all(); if ($request->hasFile('banner')) { // Hapus banner lama jika ada if ($flashSale->banner) { Storage::disk('public')->delete($flashSale->banner); } $data['banner'] = $request->file('banner')->store('flash-sales', 'public'); } $flashSale->update($data); return redirect()->route('admin.flash-sales.index')->with('success', 'Flash sale berhasil diperbarui'); } /** * Remove the specified resource from storage. */ public function destroy(FlashSale $flashSale) { // Hapus banner jika ada if ($flashSale->banner) { Storage::disk('public')->delete($flashSale->banner); } // Hapus semua item flash sale terkait $flashSale->items()->delete(); $flashSale->delete(); return redirect()->route('admin.flash-sales.index')->with('success', 'Flash sale berhasil dihapus'); } /** * Toggle status flash sale */ public function toggleStatus(FlashSale $flashSale) { $flashSale->aktif = !$flashSale->aktif; $flashSale->save(); return redirect()->route('admin.flash-sales.index')->with('success', 'Status flash sale berhasil diubah'); } /** * Menampilkan halaman daftar item flash sale */ public function showItems(FlashSale $flashSale) { $barangs = Barang::whereDoesntHave('flashSaleItems', function($query) use ($flashSale) { $query->where('flash_sale_id', $flashSale->id); })->get(); return view('admin.flash-sales.items', compact('flashSale', 'barangs')); } /** * Menambahkan item ke flash sale */ public function storeItem(Request $request, FlashSale $flashSale) { $request->validate([ 'barang_id' => 'required|exists:barangs,id', 'harga_flash_sale' => 'required|numeric|min:0', 'persentase_diskon' => 'nullable|numeric|min:0|max:100', 'stok_flash_sale' => 'required|integer|min:1', 'aktif' => 'required|boolean', ]); $data = $request->all(); $data['flash_sale_id'] = $flashSale->id; $data['stok_terjual'] = 0; // Hitung persentase diskon jika tidak diisi if (empty($data['persentase_diskon'])) { $barang = Barang::find($data['barang_id']); $data['persentase_diskon'] = round((($barang->harga - $data['harga_flash_sale']) / $barang->harga) * 100); } FlashSaleItem::create($data); return redirect()->route('admin.flash-sales.items', $flashSale)->with('success', 'Item berhasil ditambahkan ke flash sale'); } /** * Update item flash sale */ public function updateItem(Request $request, FlashSaleItem $flashSaleItem) { $request->validate([ 'harga_flash_sale' => 'required|numeric|min:0', 'persentase_diskon' => 'required|numeric|min:0|max:100', 'stok_flash_sale' => 'required|integer|min:' . $flashSaleItem->stok_terjual, 'aktif' => 'required|boolean', ]); $flashSaleItem->update($request->all()); return redirect()->route('admin.flash-sales.items', $flashSaleItem->flash_sale_id)->with('success', 'Item flash sale berhasil diperbarui'); } public function destroyItem(FlashSaleItem $flashSaleItem) { $flashSaleId = $flashSaleItem->flash_sale_id; $flashSaleItem->delete(); return redirect()->route('admin.flash-sales.items', $flashSaleId)->with('success', 'Item flash sale berhasil dihapus'); } public function getItemData(FlashSaleItem $flashSaleItem) { return response()->json([ 'id' => $flashSaleItem->id, 'harga_flash_sale' => $flashSaleItem->harga_flash_sale, 'persentase_diskon' => $flashSaleItem->persentase_diskon, 'stok_flash_sale' => $flashSaleItem->stok_flash_sale, 'aktif' => $flashSaleItem->aktif ]); } }