diff --git a/app/Http/Controllers/NampanController.php b/app/Http/Controllers/NampanController.php index 7bf5049..f1e251f 100644 --- a/app/Http/Controllers/NampanController.php +++ b/app/Http/Controllers/NampanController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Nampan; +use App\Models\Item; use Illuminate\Http\Request; class NampanController extends Controller @@ -85,4 +86,14 @@ class NampanController extends Controller 'message' => 'Nampan berhasil dihapus' ], 204); } + + public function kosongkan() + { + Item::query()->update(['id_nampan' => null]); + + return response()->json([ + 'message' => 'Semua nampan berhasil dikosongkan' + ], 200); + } + } diff --git a/app/Http/Controllers/ProdukController.php b/app/Http/Controllers/ProdukController.php index d91f2a8..7100b10 100644 --- a/app/Http/Controllers/ProdukController.php +++ b/app/Http/Controllers/ProdukController.php @@ -34,7 +34,7 @@ class ProdukController extends Controller 'harga_per_gram' => 'required|numeric', 'harga_jual' => 'required|numeric', 'id_user' => 'nullable|exists:users,id', - ], + ], [ 'nama.required' => 'Nama produk harus diisi.', 'id_kategori' => 'Kategori tidak valid.', @@ -59,13 +59,13 @@ class ProdukController extends Controller // Pindahkan foto sementara ke foto permanen jika ada if (isset($validated['id_user'])) { $fotoSementara = FotoSementara::where('id_user', $validated['id_user'])->get(); - + foreach ($fotoSementara as $fs) { Foto::create([ 'id_produk' => $produk->id, 'url' => $fs->url ]); - + // Hapus foto sementara setelah dipindah $fs->delete(); } @@ -110,7 +110,7 @@ class ProdukController extends Controller 'harga_jual' => 'required|numeric', 'id_user' => 'nullable|exists:users,id', // untuk mengambil foto sementara baru 'hapus_foto_lama' => 'nullable|boolean', // flag untuk menghapus foto lama - ], + ], [ 'nama.required' => 'Nama produk harus diisi.', 'id_kategori' => 'Kategori tidak valid.', @@ -123,11 +123,11 @@ class ProdukController extends Controller DB::beginTransaction(); try { $produk = Produk::findOrFail($id); - + // Update data produk $produk->update([ 'nama' => $validated['nama'], - 'kategori' => $validated['kategori'], + 'id_kategori' => $validated['id_kategori'], 'berat' => $validated['berat'], 'kadar' => $validated['kadar'], 'harga_per_gram' => $validated['harga_per_gram'], @@ -149,13 +149,13 @@ class ProdukController extends Controller // Tambahkan foto baru dari foto sementara jika ada if (isset($validated['id_user'])) { $fotoSementara = FotoSementara::where('id_user', $validated['id_user'])->get(); - + foreach ($fotoSementara as $fs) { Foto::create([ 'id_produk' => $produk->id, 'url' => $fs->url ]); - + // Hapus foto sementara setelah dipindah $fs->delete(); } diff --git a/resources/js/components/CreateItemModal.vue b/resources/js/components/CreateItemModal.vue index f2b2983..ee35328 100644 --- a/resources/js/components/CreateItemModal.vue +++ b/resources/js/components/CreateItemModal.vue @@ -102,7 +102,7 @@ const createdItem = ref(null); // Computed const selectedNampanName = computed(() => { if (!selectedNampan.value) return 'Brankas'; - + console.log("Selected nampan ID:", selectedNampan.value); const nampan = nampanList.value.find(n => n.id === Number(selectedNampan.value)); console.log("All nampan:", nampanList.value); @@ -147,7 +147,7 @@ const createItem = async () => { success.value = true; createdItem.value = response.data.data console.log('Item created:', createdItem); - + } catch (error) { console.error('Error creating item:', error); alert('Gagal membuat item: ' + (error.response?.data?.message || error.message)); diff --git a/resources/js/components/CreateSales.vue b/resources/js/components/CreateSales.vue new file mode 100644 index 0000000..d60ba81 --- /dev/null +++ b/resources/js/components/CreateSales.vue @@ -0,0 +1,58 @@ + + + diff --git a/resources/js/components/EditSales.vue b/resources/js/components/EditSales.vue new file mode 100644 index 0000000..f1c7a8b --- /dev/null +++ b/resources/js/components/EditSales.vue @@ -0,0 +1,72 @@ + + + diff --git a/resources/js/components/TrayList.vue b/resources/js/components/TrayList.vue index 5126730..df7eca6 100644 --- a/resources/js/components/TrayList.vue +++ b/resources/js/components/TrayList.vue @@ -9,44 +9,27 @@
-
+

{{ tray.nama }}

- -
-
+
- foto produk + foto produk

{{ item.produk.nama }}

{{ item.produk.kategori }}

@@ -88,11 +71,8 @@
-
- -
diff --git a/resources/js/pages/EditProduk.vue b/resources/js/pages/EditProduk.vue new file mode 100644 index 0000000..9a1be17 --- /dev/null +++ b/resources/js/pages/EditProduk.vue @@ -0,0 +1,266 @@ + + + diff --git a/resources/js/pages/Produk.vue b/resources/js/pages/Produk.vue index a04daa8..0a9400e 100644 --- a/resources/js/pages/Produk.vue +++ b/resources/js/pages/Produk.vue @@ -123,10 +123,12 @@
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ No + + Nama Sales + + No HP + + Alamat + + Aksi +
+ {{ index + 1 }} + + {{ item.nama }} + + {{ item.no_hp }} + + {{ item.alamat }} + +
+ + +
+
+
+ + + +

Tidak ada data sales

+
+
+
+ + +
+
+ Memuat data... +
+
+ + + + diff --git a/resources/js/pages/Tray.vue b/resources/js/pages/Tray.vue index 08d7729..360b29a 100644 --- a/resources/js/pages/Tray.vue +++ b/resources/js/pages/Tray.vue @@ -150,7 +150,7 @@ const closeConfirmModal = () => { showConfirmModal.value = false } const confirmEmptyTray = async () => { try { - await axios.post("/api/brankas", { action: "move_all_from_tray" }) + await axios.delete("/api/kosongkan-nampan",) alert("Semua item berhasil dipindahkan ke Brankas") closeConfirmModal() location.reload() diff --git a/resources/js/router/index.js b/resources/js/router/index.js index 5e22da1..390618f 100644 --- a/resources/js/router/index.js +++ b/resources/js/router/index.js @@ -6,6 +6,8 @@ import Tray from '../pages/Tray.vue' import Kasir from '../pages/Kasir.vue' import InputProduk from '../pages/InputProduk.vue' import Kategori from '../pages/Kategori.vue' +import Sales from '../pages/Sales.vue' +import EditProduk from '../pages/EditProduk.vue' const routes = [ @@ -44,6 +46,17 @@ const routes = [ name: 'Kategori', component: Kategori }, + { + path: '/sales', + name: 'Sales', + component: Sales + }, + { + path: '/produk/:id/edit', // :id = parameter dinamis + name: 'EditProduk', + component: EditProduk, + props: true // biar id bisa langsung jadi props di komponen + } ] diff --git a/routes/web.php b/routes/web.php index e4d9f5a..59fe37f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,6 +21,7 @@ Route::prefix('api')->group(function () { Route::apiResource('kategori', KategoriController::class); Route::get('brankas', [ItemController::class, 'brankasItem']); + Route::delete('kosongkan-nampan', [NampanController::class, 'kosongkan']); // Foto Sementara Route::post('foto/upload', [FotoSementaraController::class, 'upload']);