Files
cleaning-company/app/Http/Controllers/AvailabilitiesController.php
Владимир ae5ab2554b commit 12.01
2026-01-12 14:25:15 +00:00

93 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\EmployeeAvailability;
class AvailabilitiesController extends Controller
{
public function index(Request $request)
{
$availabilities = EmployeeAvailability::with('employee')
->when($request->has('employee_id'), function ($query) use ($request) {
$query->where('employee_id', $request->employee_id);
})
->when($request->has('date'), function ($query) use ($request) {
$query->where('date', $request->date);
})
->get();
return response()->json($availabilities);
}
public function store(Request $request)
{
$validated = $request->validate([
'employee_id' => 'required|exists:users,id',
'date' => 'required|date',
'start_time' => 'required|date_format:H:i:s',
'end_time' => 'required|date_format:H:i:s|after:start_time',
'is_available' => 'boolean'
]);
$availability = EmployeeAvailability::create($validated);
return response()->json($availability, 201);
}
public function bulkStore(Request $request)
{
$validated = $request->validate([
'employee_id' => 'required|exists:users,id',
'date' => 'required|date',
'intervals' => 'required|array'
]);
foreach ($request->intervals as $interval) {
EmployeeAvailability::create([
'employee_id' => $request->employee_id,
'date' => $request->date,
'start_time' => $interval['start'],
'end_time' => $interval['end'],
'is_available' => true
]);
}
return response()->json(['message' => 'Расписание добавлено']);
}
public function destroy($id)
{
$availability = EmployeeAvailability::findOrFail($id);
$availability->delete();
return response()->json(['message' => 'Слот удалён']);
}
// ✅ Единственный метод publicAvailability
public function publicAvailability(Request $request)
{
$serviceId = $request->query('service_id');
$date = $request->query('date');
if (!$serviceId || !$date) {
return response()->json([]);
}
$availabilities = EmployeeAvailability::where('date', $date)
->where('is_available', true)
->get();
$slots = [];
foreach ($availabilities as $avail) {
$slots[] = [
'employee_id' => $avail->employee_id,
'start' => substr($avail->start_time, 0, 5),
'end' => substr($avail->end_time, 0, 5),
];
}
return response()->json($slots);
}
}