46 lines
1.4 KiB
PHP
46 lines
1.4 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace DishPlanner\Schedule\Actions;
|
||
|
|
|
||
|
|
use App\Models\Planner;
|
||
|
|
use App\Models\Schedule;
|
||
|
|
use App\Models\ScheduledUserDish;
|
||
|
|
use App\Models\User;
|
||
|
|
use Carbon\Carbon;
|
||
|
|
use Illuminate\Support\Facades\DB;
|
||
|
|
|
||
|
|
class RegenerateScheduleForDateForUsersAction
|
||
|
|
{
|
||
|
|
public function execute(Planner $planner, Carbon $date, array $userIds): void
|
||
|
|
{
|
||
|
|
DB::transaction(function () use ($planner, $date, $userIds) {
|
||
|
|
$schedule = Schedule::firstOrCreate(
|
||
|
|
['planner_id' => $planner->id, 'date' => $date->format('Y-m-d')],
|
||
|
|
['is_skipped' => false]
|
||
|
|
);
|
||
|
|
|
||
|
|
ScheduledUserDish::where('schedule_id', $schedule->id)
|
||
|
|
->whereIn('user_id', $userIds)
|
||
|
|
->delete();
|
||
|
|
|
||
|
|
$users = User::with('userDishes.dish')
|
||
|
|
->whereIn('id', $userIds)
|
||
|
|
->where('planner_id', $planner->id)
|
||
|
|
->get();
|
||
|
|
|
||
|
|
foreach ($users as $user) {
|
||
|
|
if ($user->userDishes->isNotEmpty()) {
|
||
|
|
$randomUserDish = $user->userDishes->random();
|
||
|
|
|
||
|
|
ScheduledUserDish::create([
|
||
|
|
'schedule_id' => $schedule->id,
|
||
|
|
'user_id' => $user->id,
|
||
|
|
'user_dish_id' => $randomUserDish->id,
|
||
|
|
'is_skipped' => false,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|