From 358e2afc22b1756b32f8e09810dc75899297a2e7 Mon Sep 17 00:00:00 2001
From: gianella <146126967+GianellaDelMestre@users.noreply.github.com>
Date: Sat, 18 Apr 2026 15:58:35 -0300
Subject: [PATCH 1/4] Proveedores alta, baja, modif y armar pedido
---
app/Http/Controllers/SupplierController.php | 101 ++++++++++
resources/views/suppliers/create.blade.php | 43 +++++
resources/views/suppliers/edit.blade.php | 45 +++++
resources/views/suppliers/index.blade.php | 114 +++++++++++
resources/views/suppliers/order.blade.php | 203 ++++++++++++++++++++
5 files changed, 506 insertions(+)
create mode 100644 app/Http/Controllers/SupplierController.php
create mode 100644 resources/views/suppliers/create.blade.php
create mode 100644 resources/views/suppliers/edit.blade.php
create mode 100644 resources/views/suppliers/index.blade.php
create mode 100644 resources/views/suppliers/order.blade.php
diff --git a/app/Http/Controllers/SupplierController.php b/app/Http/Controllers/SupplierController.php
new file mode 100644
index 0000000..f279594
--- /dev/null
+++ b/app/Http/Controllers/SupplierController.php
@@ -0,0 +1,101 @@
+input('search');
+
+ $suppliers = Supplier::query()
+ ->when($query, function ($q) use ($query) {
+ return $q->where('name', 'like', "%{$query}%");
+ })
+ ->orderBy('name', 'asc')
+ ->paginate(10)
+ ->withQueryString();
+
+ return view('suppliers.index', compact('suppliers'));
+ }
+
+ /**
+ * para crear un proveedor
+ */
+ public function create()
+ {
+ return view('suppliers.create');
+ }
+
+
+ public function store(Request $request)
+ {
+ $validated = $request->validate([
+ 'name' => 'required|string|max:255',
+ 'phone' => 'nullable|string|max:50',
+ 'email' => 'nullable|email|max:255|unique:suppliers,email',
+ 'address' => 'nullable|string|max:255',
+ ]);
+
+ Supplier::create($validated);
+
+ return redirect()->route('suppliers.index')
+ ->with('success', 'Proveedor creado correctamente.');
+ }
+
+ /**
+ * muestra un proveedor
+ */
+ public function show(Supplier $supplier)
+ {
+ return view('suppliers.show', compact('supplier'));
+ }
+
+ public function edit(Supplier $supplier)
+ {
+ return view('suppliers.edit', compact('supplier'));
+ }
+
+ public function update(Request $request, Supplier $supplier)
+ {
+ $validated = $request->validate([
+ 'name' => 'required|string|max:255',
+ 'phone' => 'nullable|string|max:50',
+ 'email' => 'nullable|email|max:255|unique:suppliers,email,' . $supplier->id,
+ 'address' => 'nullable|string|max:255',
+ ]);
+
+ $supplier->update($validated);
+
+ return redirect()->route('suppliers.index')
+ ->with('success', 'Proveedor actualizado correctamente.');
+ }
+
+ /**
+ * elimina (solo si no tiene productos asociados)
+ */
+ public function destroy(Supplier $supplier)
+ {
+ try {
+ $supplier->delete();
+ return redirect()->route('suppliers.index')
+ ->with('success', 'Proveedor eliminado correctamente.');
+
+ } catch (\Illuminate\Database\QueryException $e) {
+ // Si el proveedor tiene productos asociados, va a tirar un error de llave foránea.
+ return back()->with('error', 'No se puede eliminar el proveedor porque tiene productos registrados en el inventario.');
+ }
+ }
+ /**
+ * trae todos los productos de un proveedor
+ */
+ public function order(Supplier $supplier)
+ {
+ $products = $supplier->products()->orderBy('name')->get();
+
+ return view('suppliers.order', compact('supplier', 'products'));
+ }
+}
\ No newline at end of file
diff --git a/resources/views/suppliers/create.blade.php b/resources/views/suppliers/create.blade.php
new file mode 100644
index 0000000..cb046c9
--- /dev/null
+++ b/resources/views/suppliers/create.blade.php
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/views/suppliers/edit.blade.php b/resources/views/suppliers/edit.blade.php
new file mode 100644
index 0000000..1952dc8
--- /dev/null
+++ b/resources/views/suppliers/edit.blade.php
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/views/suppliers/index.blade.php b/resources/views/suppliers/index.blade.php
new file mode 100644
index 0000000..7fd2443
--- /dev/null
+++ b/resources/views/suppliers/index.blade.php
@@ -0,0 +1,114 @@
+
+
+
+
+
+ @if(session('success'))
+