has('q')) { $query->where(function($q) use ($request) { $q->where('business_name', 'like', "%{$request->q}%") ->orWhere('rfc', 'like', "%{$request->q}%"); }); } // Filtro por estado if ($request->has('is_active')) { $query->where('is_active', $request->is_active); } $suppliers = $query->orderBy('business_name') ->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'suppliers' => $suppliers ]); } public function store(Request $request) { $validated = $request->validate([ 'business_name' => 'required|string|max:255', 'email' => 'nullable|email', 'phone' => 'nullable|string|max:10', 'rfc' => 'nullable|string|unique:suppliers,rfc', 'address' => 'nullable|string', 'postal_code' => 'nullable|string', 'notes' => 'nullable|string', ]); $supplier = Supplier::create($validated); return ApiResponse::CREATED->response([ 'supplier' => $supplier ]); } public function show(Supplier $supplier) { return ApiResponse::OK->response([ 'supplier' => $supplier->load('inventoryMovements') ]); } public function update(Request $request, Supplier $supplier) { $validated = $request->validate([ 'business_name' => 'nullable|string|max:255', 'email' => 'nullable|email', 'phone' => 'nullable|string|max:10', 'rfc' => 'nullable|string|unique:suppliers,rfc,' . $supplier->id, 'address' => 'nullable|string', 'postal_code' => 'nullable|string', 'notes' => 'nullable|string', ]); $supplier->update($validated); return ApiResponse::OK->response([ 'supplier' => $supplier->fresh() ]); } public function destroy(Supplier $supplier) { $supplier->delete(); return ApiResponse::OK->response(); } /** * Productos suministrados por el proveedor */ public function products(Supplier $supplier) { $products = $supplier->suppliedProducts() ->with(['category', 'price']) ->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'products' => $products ]); } /** * Historial de compras al proveedor */ public function purchases(Supplier $supplier, Request $request) { $query = $supplier->inventoryMovements() ->with(['inventory', 'warehouseTo', 'user']) ->orderBy('created_at', 'desc'); if ($request->has('from_date')) { $query->whereDate('created_at', '>=', $request->from_date); } if ($request->has('to_date')) { $query->whereDate('created_at', '<=', $request->to_date); } $purchases = $query->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'purchases' => $purchases, 'total_amount' => $supplier->total_purchases ]); } }