Загрузка данных


<?php

namespace App\Http\Controllers;

use App\Models\RepairOrder;
use App\Models\User;
use App\Models\Car;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RepairOrderController extends Controller
{
    // Список всех заказов
    public function index(Request $request)
    {
        $query = RepairOrder::with(['user', 'car']);
        
        // Поиск
        if ($search = $request->input('search')) {
            $query->where(function ($q) use ($search) {
                $q->where('order_number', 'like', "%{$search}%")
                  ->orWhereHas('user', function ($q2) use ($search) {
                      $q2->where('first_name', 'like', "%{$search}%")
                         ->orWhere('last_name', 'like', "%{$search}%")
                         ->orWhere('email', 'like', "%{$search}%");
                  })
                  ->orWhereHas('car', function ($q2) use ($search) {
                      $q2->where('brand', 'like', "%{$search}%")
                         ->orWhere('model', 'like', "%{$search}%")
                         ->orWhere('license_plate', 'like', "%{$search}%");
                  });
            });
        }
        
        $repairOrders = $query->paginate(6);
        return view('repair-orders.index', compact('repairOrders'));
    }

    // Показать форму создания
    public function create()
    {
        $users = User::all();
        $cars = Car::all();
        return view('repair-orders.create', compact('users', 'cars'));
    }

    // Сохранить новый заказ
    public function store(Request $request)
    {
        $validated = $request->validate([
            'user_id' => 'required|exists:users,id',
            'car_id' => 'required|exists:cars,id',
            'status' => 'required|in:pending,in_progress,completed,cancelled',
            'problem_description' => 'nullable|string',
            'order_date' => 'required|date',
        ]);

        $validated['order_number'] = 'ORD-' . date('Ymd') . '-' . rand(1000, 9999);
        $validated['admin_id'] = Auth::id();
        $validated['total_labor_cost'] = 0;
        $validated['total_parts_cost'] = 0;
        $validated['total_amount'] = 0;

        RepairOrder::create($validated);

        return redirect()->route('repair-orders.index')->with('success', 'Заказ-наряд создан');
    }

    // Показать один заказ
    public function show(string $id)
    {
        $repairOrder = RepairOrder::with(['user', 'car'])->findOrFail($id);
        return view('repair-orders.show', compact('repairOrder'));
    }

    // Показать форму редактирования
    public function edit(string $id)
    {
        $repairOrder = RepairOrder::findOrFail($id);
        $users = User::all();
        $cars = Car::all();
        return view('repair-orders.edit', compact('repairOrder', 'users', 'cars'));
    }

    // Обновить заказ
    public function update(Request $request, string $id)
    {
        $validated = $request->validate([
            'user_id' => 'required|exists:users,id',
            'car_id' => 'required|exists:cars,id',
            'status' => 'required|in:pending,in_progress,completed,cancelled',
            'problem_description' => 'nullable|string',
            'order_date' => 'required|date',
        ]);

        $repairOrder = RepairOrder::findOrFail($id);
        $repairOrder->update($validated);

        return redirect()->route('repair-orders.index')->with('success', 'Заказ-наряд обновлён');
    }

    // Удалить заказ
    public function destroy(string $id)
    {
        $repairOrder = RepairOrder::findOrFail($id);
        $repairOrder->delete();

        return redirect()->route('repair-orders.index')->with('success', 'Заказ-наряд удалён');
    }
}