161 lines
9.4 KiB
PHP
161 lines
9.4 KiB
PHP
@extends('layout.main')
|
|
|
|
@use('App\Services\Konfigurasi\FormatLogAktivitas', 'Format')
|
|
@use('App\Models\Pertanian\Petani')
|
|
|
|
@section('content')
|
|
<div class="container-xxl flex-grow-1 container-p-y">
|
|
<div class="card">
|
|
<div class="card-header border-bottom">
|
|
<h5 class="card-title mb-1">Log Aktivitas</h5>
|
|
<small class="text-body-secondary">Jejak perubahan data, status petani, dan login pengguna.</small>
|
|
</div>
|
|
|
|
{{-- Filter --}}
|
|
<div class="card-body pt-4">
|
|
<form method="GET" action="{{ route('log-aktivitas.index') }}" class="row g-3 align-items-end">
|
|
<div class="col-md-2">
|
|
<label class="form-label" for="jenis">Jenis</label>
|
|
<select id="jenis" name="jenis" class="form-select form-select-sm">
|
|
<option value="">Semua</option>
|
|
@foreach ($jenis as $kunci => $j)
|
|
<option value="{{ $kunci }}" @selected(request('jenis') === $kunci)>{{ $j['label'] }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label class="form-label" for="dari">Dari Tanggal</label>
|
|
<input type="date" id="dari" name="dari" value="{{ request('dari') }}"
|
|
class="form-control form-control-sm @error('dari') is-invalid @enderror">
|
|
@error('dari')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
|
</div>
|
|
<div class="col-md-2">
|
|
<label class="form-label" for="sampai">Sampai Tanggal</label>
|
|
<input type="date" id="sampai" name="sampai" value="{{ request('sampai') }}"
|
|
class="form-control form-control-sm @error('sampai') is-invalid @enderror">
|
|
@error('sampai')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
|
</div>
|
|
<div class="col-md-1">
|
|
<label class="form-label" for="per_page">Tampil</label>
|
|
<select id="per_page" name="per_page" class="form-select form-select-sm">
|
|
@foreach ($perPage as $n)
|
|
<option value="{{ $n }}" @selected($aktivitas->perPage() == $n)>{{ $n }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="col-md-5">
|
|
<label class="form-label" for="search">Cari</label>
|
|
<div class="input-group input-group-sm">
|
|
<input type="text" id="search" name="search" class="form-control" value="{{ request('search') }}"
|
|
placeholder="Aktivitas, nama pengguna, atau nama petani...">
|
|
<button type="submit" class="btn btn-primary"><i class="icon-base ti tabler-search"></i></button>
|
|
@if (request()->hasAny(['jenis', 'search', 'dari', 'sampai']))
|
|
<a href="{{ route('log-aktivitas.index') }}" class="btn btn-label-secondary">Reset</a>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
{{-- Tabel log --}}
|
|
<div class="table-responsive">
|
|
<table class="table table-hover">
|
|
<thead class="border-top">
|
|
<tr>
|
|
<th class="text-nowrap">Waktu</th>
|
|
<th>Pengguna</th>
|
|
<th>Jenis</th>
|
|
<th>Aktivitas</th>
|
|
<th>Rincian</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse ($aktivitas as $item)
|
|
@php
|
|
$j = $jenis[$item->log_name] ?? ['label' => $item->log_name ?? '-', 'warna' => 'secondary'];
|
|
$prop = $item->properties ?? collect();
|
|
$baru = $prop['attributes'] ?? [];
|
|
$lama = $prop['old'] ?? null;
|
|
$petaniId = $item->subject_type === Petani::class ? $item->subject_id : ($prop['petani_id'] ?? null);
|
|
$namaData = $prop['label'] ?? null;
|
|
@endphp
|
|
<tr>
|
|
<td class="text-nowrap">
|
|
<span class="d-block">{{ $item->created_at->translatedFormat('d M Y') }}</span>
|
|
<small class="text-body-secondary">{{ $item->created_at->format('H:i:s') }}</small>
|
|
</td>
|
|
<td>
|
|
@if ($item->causer)
|
|
<span class="text-heading fw-medium d-block">{{ $item->causer->name }}</span>
|
|
<small class="text-body-secondary">{{ $item->causer->role?->label() }}</small>
|
|
@else
|
|
<span class="text-body-secondary">Sistem / tamu</span>
|
|
@endif
|
|
</td>
|
|
<td><span class="badge bg-label-{{ $j['warna'] }}">{{ $j['label'] }}</span></td>
|
|
<td>
|
|
<span class="d-block">{{ $item->description }}</span>
|
|
@if ($item->subject_type && $item->subject_type !== Petani::class)
|
|
<small class="text-body-secondary d-block">#{{ $item->subject_id }}{{ $namaData ? ' · ' . $namaData : '' }}</small>
|
|
@endif
|
|
@if ($petaniId)
|
|
<small class="text-body-secondary d-block">
|
|
<i class="icon-base ti tabler-user icon-xs"></i>
|
|
{{ $namaPetani[$petaniId] ?? $namaData ?? 'Petani #' . $petaniId }}
|
|
</small>
|
|
@endif
|
|
</td>
|
|
<td class="small">
|
|
@if ($item->log_name === 'verifikasi')
|
|
<span class="badge bg-label-secondary">{{ Format::status($prop['dari'] ?? null) }}</span>
|
|
<i class="icon-base ti tabler-arrow-right icon-xs mx-1"></i>
|
|
<span class="badge bg-label-primary">{{ Format::status($prop['ke'] ?? null) }}</span>
|
|
@if (! empty($prop['catatan']))
|
|
<div class="mt-1 text-wrap" style="max-width: 360px;">Catatan: {{ $prop['catatan'] }}</div>
|
|
@endif
|
|
@elseif ($item->log_name === 'auth')
|
|
<span class="d-block">IP: {{ $prop['ip'] ?? '-' }}</span>
|
|
@if (! empty($prop['identitas']))
|
|
<span class="d-block">Login: {{ $prop['identitas'] }}</span>
|
|
@endif
|
|
@elseif ($baru)
|
|
@php
|
|
$isian = collect($baru)->when(! $lama, fn ($c) => $c->reject(fn ($v) => $v === null || $v === ''));
|
|
$batas = $lama ? $isian->count() : 5;
|
|
@endphp
|
|
<ul class="list-unstyled mb-0">
|
|
@foreach ($isian->take($batas) as $kolom => $nilai)
|
|
<li class="text-wrap" style="max-width: 420px;">
|
|
<span class="fw-medium">{{ Format::kolom($kolom) }}:</span>
|
|
@if ($lama)
|
|
<span class="text-body-secondary text-decoration-line-through">{{ Format::nilai($kolom, $lama[$kolom] ?? null) }}</span>
|
|
<i class="icon-base ti tabler-arrow-right icon-xs mx-1"></i>
|
|
@endif
|
|
{{ Format::nilai($kolom, $nilai) }}
|
|
</li>
|
|
@endforeach
|
|
@if ($isian->count() > $batas)
|
|
<li class="text-body-secondary">+{{ $isian->count() - $batas }} isian lainnya</li>
|
|
@endif
|
|
</ul>
|
|
@else
|
|
<span class="text-body-secondary">-</span>
|
|
@endif
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="5" class="text-center py-4">Belum ada aktivitas yang tercatat.</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="d-flex justify-content-center justify-content-md-end border-top p-4">
|
|
{{ $aktivitas->links('pagination::simple-bootstrap-5') }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|