93 lines
2.8 KiB
PHP
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);
|
|
}
|
|
} |