Progress
This commit is contained in:
parent
17616bad17
commit
c1802dfb52
@ -20,7 +20,7 @@ public function planned()
|
|||||||
|
|
||||||
public function plannedDetail(MaintenanceHistory $maintenance_history)
|
public function plannedDetail(MaintenanceHistory $maintenance_history)
|
||||||
{
|
{
|
||||||
if (!empty($maintenance_history->finished_at)){
|
if (!empty($maintenance_history->finished_at)) {
|
||||||
abort(404);
|
abort(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,26 +31,55 @@ public function plannedDetail(MaintenanceHistory $maintenance_history)
|
|||||||
|
|
||||||
public function plannedDetailPut(Request $request, MaintenanceHistory $maintenance_history)
|
public function plannedDetailPut(Request $request, MaintenanceHistory $maintenance_history)
|
||||||
{
|
{
|
||||||
if (!empty($maintenance_history->finished_at)){
|
if (!empty($maintenance_history->finished_at)) {
|
||||||
abort(404);
|
abort(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
$maintenance_history->finished_at = Carbon::now();
|
|
||||||
$maintenance_history->save();
|
|
||||||
|
|
||||||
return view('maintenance.planned-detail-done', [
|
return view('maintenance.planned-detail-done', [
|
||||||
'maintenance_history' => $maintenance_history,
|
'maintenance_history' => $maintenance_history,
|
||||||
'maintenance_task_status' => $request->input('maintenance_task_status'),
|
'maintenance_task_status' => $request->input('maintenance_task_status'),
|
||||||
|
'maintenance_host_skipped' => $request->input('maintenance_host_skipped'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function plannedDetailFinishPost(Request $request, MaintenanceHistory $maintenance_history)
|
public function plannedDetailFinishPost(Request $request, MaintenanceHistory $maintenance_history)
|
||||||
{
|
{
|
||||||
dd();
|
if (!empty($maintenance_history->finished_at)) {
|
||||||
|
abort(404);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($request->input('skippedHostsSummary') as $history_host_id => $summary) {
|
||||||
|
$maintenance_history->historyHosts->find($history_host_id)->update([
|
||||||
|
'summary' => $summary,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$request->has('skippedHostsTasksSummary')) {
|
||||||
|
foreach ($maintenance_history->historyHosts as $history_host) {
|
||||||
|
if (!isset($request->input('skippedHostsTasksSummary')[$history_host->id]))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach ($request->input('skippedHostsTasksSummary')[$history_host->id] as $history_task_id => $task_summary) {
|
||||||
|
$history_host->find($history_task_id)->update([
|
||||||
|
'summary' => $task_summary,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$maintenance_history->finished_at = Carbon::now();
|
||||||
|
$maintenance_history->save();
|
||||||
|
|
||||||
|
return redirect()->route('maintenance.history.detail', $maintenance_history->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function history(Request $request, MaintenanceHistory $maintenance_history)
|
public function history(Request $request)
|
||||||
{
|
{
|
||||||
return view('maintenance.history');
|
return view('maintenance.history');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function historyDetail(Request $request, MaintenanceHistory $maintenance_history)
|
||||||
|
{
|
||||||
|
dd($maintenance_history->historyHosts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
use App\Models\MaintenanceTask;
|
use App\Models\MaintenanceTask;
|
||||||
use App\Models\Task;
|
use App\Models\Task;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class Form extends Component
|
class Form extends Component
|
||||||
{
|
{
|
||||||
@ -47,7 +48,7 @@ protected function rules()
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function mount($model = null)
|
public function mount(Request $request, $model = null)
|
||||||
{
|
{
|
||||||
$this->hosts_available = Host::all()->pluck('hostname', 'id')->toArray();
|
$this->hosts_available = Host::all()->pluck('hostname', 'id')->toArray();
|
||||||
$this->hosts_tasks_available = Task::all()->pluck('name', 'id')->toArray();
|
$this->hosts_tasks_available = Task::all()->pluck('name', 'id')->toArray();
|
||||||
@ -76,6 +77,8 @@ public function mount($model = null)
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->action = 'update';
|
$this->action = 'update';
|
||||||
|
} else {
|
||||||
|
$this->guestor_id = $request->user()->id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Livewire\Maintenance;
|
namespace App\Livewire\Maintenance;
|
||||||
|
|
||||||
use App\Models\MaintenanceHistory;
|
use App\Models\MaintenanceHistory;
|
||||||
|
use App\Models\MaintenanceHostHistory;
|
||||||
use App\Models\MaintenanceTaskHistory;
|
use App\Models\MaintenanceTaskHistory;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
@ -16,21 +17,50 @@ class ProgressForm extends Component
|
|||||||
//INPUTS
|
//INPUTS
|
||||||
public array $maintenance_task_status;
|
public array $maintenance_task_status;
|
||||||
public array $maintenance_task_status_old;
|
public array $maintenance_task_status_old;
|
||||||
|
public array $maintenance_host_skipped;
|
||||||
|
|
||||||
public function mount(int $maintenanceHistory)
|
public function mount(int $maintenanceHistory)
|
||||||
{
|
{
|
||||||
$this->maintenanceHistory = self::getMaintenanceHistory($maintenanceHistory);
|
$this->maintenanceHistory = self::getMaintenanceHistory($maintenanceHistory, true);
|
||||||
if (!empty($this->maintenanceHistory->finished_at)){
|
if (!empty($this->maintenanceHistory->finished_at)) {
|
||||||
abort(404);
|
abort(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->maintenanceHistory->historyHosts as $maintenanceHost) {
|
foreach ($this->maintenanceHistory->historyHosts as $maintenanceHost) {
|
||||||
|
$this->maintenance_host_skipped[$maintenanceHost->id] = (bool)$maintenanceHost->is_skipped;
|
||||||
foreach ($maintenanceHost->historyTasks as $maintenanceTask) {
|
foreach ($maintenanceHost->historyTasks as $maintenanceTask) {
|
||||||
$this->maintenance_task_status[$maintenanceHost->id][$maintenanceTask->id] = (!empty($maintenanceTask->finished_at) ? true : false);
|
$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)
|
public function updatedMaintenanceTaskStatus($value)
|
||||||
{
|
{
|
||||||
foreach ($this->maintenance_task_status as $host_history_id => $tasks) {
|
foreach ($this->maintenance_task_status as $host_history_id => $tasks) {
|
||||||
@ -39,7 +69,7 @@ public function updatedMaintenanceTaskStatus($value)
|
|||||||
$notDone = [];
|
$notDone = [];
|
||||||
|
|
||||||
foreach ($tasks as $task_history_id => $state) {
|
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){
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +112,12 @@ public function render()
|
|||||||
return view('livewire.maintenance.progress-form');
|
return view('livewire.maintenance.progress-form');
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function getMaintenanceHistory(int $maintenanceHistoryId){
|
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 Cache::remember("maintenance_history_{$maintenanceHistoryId}", 60, function () use ($maintenanceHistoryId) {
|
||||||
return MaintenanceHistory::with([
|
return MaintenanceHistory::with([
|
||||||
'maintenance.tasks',
|
'maintenance.tasks',
|
||||||
|
@ -12,6 +12,12 @@ class MaintenanceHostHistory extends Model
|
|||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'maintenance_history_id',
|
'maintenance_history_id',
|
||||||
'host_id',
|
'host_id',
|
||||||
|
'summary',
|
||||||
|
'is_skipped',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $cast = [
|
||||||
|
'is_skipped' => 'bool'
|
||||||
];
|
];
|
||||||
|
|
||||||
public function host()
|
public function host()
|
||||||
|
@ -13,6 +13,7 @@ class MaintenanceTaskHistory extends Model
|
|||||||
'maintenance_task_id',
|
'maintenance_task_id',
|
||||||
'maintenance_history_id',
|
'maintenance_history_id',
|
||||||
'maintenance_host_history_id',
|
'maintenance_host_history_id',
|
||||||
|
'summary',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function maintenance()
|
public function maintenance()
|
||||||
|
@ -22,6 +22,7 @@ public function up(): void
|
|||||||
$table->foreignIdFor(MaintenanceHostHistory::class);
|
$table->foreignIdFor(MaintenanceHostHistory::class);
|
||||||
$table->string('status')->default(1);
|
$table->string('status')->default(1);
|
||||||
$table->datetime('finished_at')->nullable();
|
$table->datetime('finished_at')->nullable();
|
||||||
|
$table->text('summary')->nullable();
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,8 @@ public function up(): void
|
|||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignIdFor(MaintenanceHistory::class);
|
$table->foreignIdFor(MaintenanceHistory::class);
|
||||||
$table->foreignIdFor(Host::class);
|
$table->foreignIdFor(Host::class);
|
||||||
|
$table->text('summary')->nullable();
|
||||||
|
$table->boolean('is_skipped')->default(false);
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,19 @@
|
|||||||
<div>
|
<div>
|
||||||
@foreach ($maintenanceHistory->historyHosts as $historyHost)
|
@foreach ($maintenanceHistory->historyHosts as $historyHost)
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<div class="btn-toggle btn py-3 w-100 bg-primary text-start d-flex justify-content-between" style="--bs-bg-opacity: .2;" data-bs-toggle="collapse" data-bs-target="#collapse{{ $historyHost->id }}">
|
<div class="position-relative">
|
||||||
<b>{{ $historyHost->host->hostname }}</b>
|
<div class="btn-toggle btn py-3 bg-primary w-100 text-start" style="--bs-bg-opacity: .2;" data-bs-toggle="collapse" data-bs-target="#collapse{{ $historyHost->id }}">
|
||||||
<x-form::checkbox groupClass="ms-auto" wire:key="{{ $historyHost->id . 'skip' }}" name="test[{{ $historyHost->id }}][skip]" id="test-{{ $historyHost->id }}-skip" label="{{ __('Skip') }}" />
|
<b>{{ $historyHost->host->hostname }}</b>
|
||||||
|
</div>
|
||||||
|
<div class="position-absolute top-50 end-0 translate-middle-y px-3 py-2">
|
||||||
|
<x-form::checkbox groupClass="ms-auto" wire:key="{{ $historyHost->id . 'skip' }}" wire:model.live.debounce.250ms="maintenance_host_skipped.{{ $historyHost->id }}" name="maintenance_host_skipped[{{ $historyHost->id }}]" id="maintenance_host_skipped-{{ $historyHost->id }}" label="{{ __('Skip') }}" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse" id="collapse{{ $historyHost->id }}" wire:ignore.self>
|
<div class="collapse" id="collapse{{ $historyHost->id }}" wire:ignore.self>
|
||||||
<div class="card card-body mt-2">
|
<div class="card card-body mt-2">
|
||||||
@foreach ($historyHost->historyTasks as $historyTasks)
|
@foreach ($historyHost->historyTasks as $historyTask)
|
||||||
<x-form::checkbox wire:key="{{ $historyHost->id . $historyTasks->id }}" wire:model.live.debounce.250ms="maintenance_task_status.{{ $historyHost->id }}.{{ $historyTasks->id }}" name="maintenance_task_status[{{ $historyHost->id }}][{{ $historyTasks->id }}]" id="maintenance_task_status-{{ $historyHost->id }}-{{ $historyTasks->id }}" label="{{ $historyTasks->maintenanceTask->task->name }}" />
|
<x-form::checkbox wire:key="{{ $historyHost->id . $historyTask->id }}" wire:model.live.debounce.250ms="maintenance_task_status.{{ $historyHost->id }}.{{ $historyTask->id }}" name="maintenance_task_status[{{ $historyHost->id }}][{{ $historyTask->id }}]" id="maintenance_task_status-{{ $historyHost->id }}-{{ $historyTask->id }}" label="{{ $historyTask->maintenanceTask->task->name }}" />
|
||||||
<p>{!! $historyTasks->maintenanceTask->task->description !!}</p>
|
<p>{!! $historyTask->maintenanceTask->task->description !!}</p>
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,14 +4,21 @@
|
|||||||
<h1>{{ __('Planned Maintenance') }}</h1>
|
<h1>{{ __('Planned Maintenance') }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<p>{!! $maintenance_history->maintenance->description !!}</p>
|
<p>{!! $maintenance_history->maintenance->description !!}</p>
|
||||||
@foreach ($maintenance_history->historyHosts as $historyHost)
|
<x-form::form action="{{ route('maintenance.planned.finished', ['maintenance_history' => $maintenance_history->id]) }}" method="POST">
|
||||||
<b>{{ $historyHost->host->hostname }}</b>
|
@foreach ($maintenance_history->historyHosts as $historyHost)
|
||||||
@foreach ($historyHost->historyTasks as $historyTasks)
|
@if (in_array($historyHost->id, array_keys($maintenance_host_skipped)))
|
||||||
<x-form::checkbox onclick="return false" checked="{{ isset($maintenance_task_status[$historyHost->id][$historyTasks->id]) ? 'checked' : '' }}" label="{{ $historyTasks->maintenanceTask->task->name }}" name="test-{{ $historyHost->id }}-{{ $historyTasks->id }}" />
|
<x-form::quill label="{{ __('Reason for Skipping Host: ') . $historyHost->host->hostname}}" id="skipped-host-{{ $historyHost->id }}-summary" name="skippedHostsSummary[{{ $historyHost->id }}]" help="{{ _('Describe why did you skipped the host') }}" />
|
||||||
@if(!isset($maintenance_task_status[$historyHost->id][$historyTasks->id]))
|
@else
|
||||||
<x-form::quill />
|
@foreach ($historyHost->historyTasks as $historyTask)
|
||||||
@endif
|
@if (!isset($maintenance_task_status[$historyHost->id][$historyTask->id]))
|
||||||
@endforeach
|
<x-form::quill label="{{ __('Reason for Skipping Task: ') . $historyTask->maintenanceTask->name}}" id="skipped-host-{{ $historyHost->id }}-task-{{ $historyTask->id }}-summary" name="skippedHostTasksSummary[{{ $historyHost->id }}][{{ $historyTask->id }}]" help="{{ _('Describe why did you not finished the task') }}" />
|
||||||
@endforeach
|
@else
|
||||||
|
<x-form::checkbox onclick="return false" checked="{{ isset($maintenance_task_status[$historyHost->id][$historyTask->id]) ? 'checked' : '' }}" label="{{ $historyTask->maintenanceTask->task->name }}" name="test-{{ $historyHost->id }}-{{ $historyTask->id }}" />
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
<x-form::button class="btn-primary" type="submit">{{ __('Ukončit Maintenance') }}</x-form::button>
|
||||||
|
</x-form::form>
|
||||||
</div>
|
</div>
|
||||||
</x-layout-app>
|
</x-layout-app>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<p>{!! $maintenance_history->maintenance->description !!}</p>
|
<p>{!! $maintenance_history->maintenance->description !!}</p>
|
||||||
<x-form::form action="{{ route('maintenance.planned.detail.put', ['maintenance_history' => $maintenance_history->id]) }}" method="PUT">
|
<x-form::form action="{{ route('maintenance.planned.detail.put', ['maintenance_history' => $maintenance_history->id]) }}" method="PUT">
|
||||||
@livewire('maintenance.progress-form', ['maintenanceHistory' => $maintenance_history->id], key('progress-form'))
|
@livewire('maintenance.progress-form', ['maintenanceHistory' => $maintenance_history->id], key('progress-form'))
|
||||||
<x-form::button class="btn-primary" type="submit">{{ __('Ukončit') }}</x-form::button>
|
<x-form::button class="btn-primary" type="submit">{{ __('Pokračovat') }}</x-form::button>
|
||||||
</x-form::form>
|
</x-form::form>
|
||||||
</div>
|
</div>
|
||||||
</x-layout-app>
|
</x-layout-app>
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
Route::get('/maintenance/planned', [App\Http\Controllers\MaintenanceController::class, 'planned'])->name('maintenance.planned');
|
Route::get('/maintenance/planned', [App\Http\Controllers\MaintenanceController::class, 'planned'])->name('maintenance.planned');
|
||||||
Route::get('/maintenance/planned/{maintenance_history}', [App\Http\Controllers\MaintenanceController::class, 'plannedDetail'])->name('maintenance.planned.detail');
|
Route::get('/maintenance/planned/{maintenance_history}', [App\Http\Controllers\MaintenanceController::class, 'plannedDetail'])->name('maintenance.planned.detail');
|
||||||
Route::put('/maintenance/planned/{maintenance_history}', [App\Http\Controllers\MaintenanceController::class, 'plannedDetailPut'])->name('maintenance.planned.detail.put');
|
Route::put('/maintenance/planned/{maintenance_history}', [App\Http\Controllers\MaintenanceController::class, 'plannedDetailPut'])->name('maintenance.planned.detail.put');
|
||||||
|
Route::post('/maintenance/planned/{maintenance_history}/finished', [App\Http\Controllers\MaintenanceController::class, 'plannedDetailFinishPost'])->name('maintenance.planned.finished');
|
||||||
Route::get('/maintenance/history/', [App\Http\Controllers\MaintenanceController::class, 'history'])->name('maintenance.history');
|
Route::get('/maintenance/history/', [App\Http\Controllers\MaintenanceController::class, 'history'])->name('maintenance.history');
|
||||||
|
Route::get('/maintenance/history/{maintenance_history}', [App\Http\Controllers\MaintenanceController::class, 'historyDetail'])->name('maintenance.history.detail');
|
||||||
|
|
||||||
|
|
||||||
Route::get('/host', [App\Http\Controllers\HostController::class, 'index'])->name('host');
|
Route::get('/host', [App\Http\Controllers\HostController::class, 'index'])->name('host');
|
||||||
|
8
start.sh
8
start.sh
@ -30,8 +30,16 @@ php artisan migrate --force --no-interaction
|
|||||||
# Link storage and create default user
|
# Link storage and create default user
|
||||||
if [ "$init" = true ]; then
|
if [ "$init" = true ]; then
|
||||||
echo "Initialization of Laravel"
|
echo "Initialization of Laravel"
|
||||||
|
|
||||||
|
# Install project build dependencies
|
||||||
|
composer install --quiet --prefer-dist-o
|
||||||
|
|
||||||
php artisan db:seed --force --class=DatabaseSeeder
|
php artisan db:seed --force --class=DatabaseSeeder
|
||||||
php artisan storage:link
|
php artisan storage:link
|
||||||
|
|
||||||
|
#clear build dependencies and install production dependencies
|
||||||
|
rm -rf vendor/*
|
||||||
|
composer install --quiet --prefer-dist --no-dev -o
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clear Cashes
|
# Clear Cashes
|
||||||
|
Loading…
Reference in New Issue
Block a user