maintenanceHistory = self::getMaintenanceHistory($maintenanceHistory); foreach ($this->maintenanceHistory->historyHosts as $maintenanceHost) { foreach ($maintenanceHost->historyTasks as $maintenanceTask) { $this->maintenance_task_status[$maintenanceHost->id][$maintenanceTask->id] = (!empty($maintenanceTask->finished_at) ? true : false); } } } public function updatedMaintenanceTaskStatus($value) { foreach ($this->maintenance_task_status as $host_history_id => $tasks) { $done = []; $notDone = []; foreach ($tasks as $task_history_id => $state) { if (isset($this->maintenance_task_status_old[$host_history_id][$task_history_id]) && $this->maintenance_task_status_old[$host_history_id][$task_history_id] === $state){ continue; } if ($state === true) { $done[] = $task_history_id; continue; } $notDone[] = $task_history_id; } if (count($done) != 0) { MaintenanceTaskHistory::where('maintenance_task_histories.maintenance_host_history_id', $host_history_id) ->where('maintenance_task_histories.status', '!=', 2) ->whereIn('maintenance_task_histories.id', $done) ->update([ 'maintenance_task_histories.status' => 2, 'maintenance_task_histories.finished_at' => Carbon::now(), ]); } if (count($notDone) != 0) { MaintenanceTaskHistory::where('maintenance_task_histories.maintenance_host_history_id', $host_history_id) ->where('maintenance_task_histories.status', '!=', 1) ->whereIn('maintenance_task_histories.id', $notDone) ->update([ 'maintenance_task_histories.status' => 1, 'maintenance_task_histories.finished_at' => null, ]); } } $this->maintenance_task_status_old = $this->maintenance_task_status; } public function render() { $this->maintenanceHistory = self::getMaintenanceHistory($this->maintenanceHistory->id); return view('livewire.maintenance.progress-form'); } private static function getMaintenanceHistory(int $maintenanceHistoryId){ return Cache::remember("maintenance_history_{$maintenanceHistoryId}", 60, function () use ($maintenanceHistoryId) { return MaintenanceHistory::with([ 'maintenance.tasks', 'historyHosts', 'historyHosts.historyTasks', 'historyHosts.historyTasks.maintenanceTask', 'historyHosts.historyTasks.maintenanceTask.task' ])->find($maintenanceHistoryId); }); } }