maintenanceHistory = self::getMaintenanceHistory($maintenanceHistory, true); if (!empty($this->maintenanceHistory->finished_at)) { abort(404); } foreach ($this->maintenanceHistory->historyHosts as $maintenanceHost) { $this->maintenance_host_skipped[$maintenanceHost->id] = (bool)$maintenanceHost->is_skipped; foreach ($maintenanceHost->historyTasks as $maintenanceTask) { $this->maintenance_task_status[$maintenanceHost->id][$maintenanceTask->id] = (!empty($maintenanceTask->finished_at) ? true : false); } } } public function updatedMaintenanceHostSkipped($value) { $skipped = []; $notSkipped = []; foreach ($this->maintenance_host_skipped as $host_history_id => $is_skipped) { if ($is_skipped === true) { $skipped[] = $host_history_id; continue; } $notSkipped[] = $host_history_id; } if (count($skipped) != 0) { MaintenanceHostHistory::whereIn('id', $skipped)->update([ 'is_skipped' => true, ]); } if (count($notSkipped) != 0) { MaintenanceHostHistory::whereIn('id', $notSkipped)->update([ 'is_skipped' => 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, bool $force = false) { if ($force){ Cache::forget("maintenance_history_{$maintenanceHistoryId}"); } return Cache::remember("maintenance_history_{$maintenanceHistoryId}", 60, function () use ($maintenanceHistoryId) { return MaintenanceHistory::with([ 'maintenance.tasks', 'maintenance.hosts', 'historyHosts', 'historyHosts.host', 'historyHosts.historyTasks', 'historyHosts.historyTasks.maintenanceTask', 'historyHosts.historyTasks.maintenanceTask.task' ])->find($maintenanceHistoryId); }); } }