LAR_Maintenance/app/Livewire/Maintenance/ProgressForm.php

134 lines
4.6 KiB
PHP

<?php
namespace App\Livewire\Maintenance;
use App\Models\MaintenanceHistory;
use App\Models\MaintenanceHostHistory;
use App\Models\MaintenanceTaskHistory;
use Carbon\Carbon;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Livewire\Component;
class ProgressForm extends Component
{
public $maintenanceHistory;
//INPUTS
public array $maintenance_task_status;
public array $maintenance_task_status_old;
public array $maintenance_host_skipped;
public function mount(int $maintenanceHistory)
{
$this->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);
});
}
}