TIFNJK_E41221880/resources/views/pages/periode/periode.blade.php

307 lines
17 KiB
PHP

@extends('pages.index')
@php
use Carbon\Carbon;
@endphp
@section('admin_content')
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<style>
.table-custom-header th {
background: linear-gradient(90deg, #365CF5 0%, #6a8ffd 100%) !important;
color: white !important; font-weight: 600; letter-spacing: 0.5px;
padding: 14px 12px !important; border: none !important; white-space: nowrap;
}
.table tbody tr { transition: background 0.2s; }
.table tbody tr:nth-child(even) { background: #f4f7ff !important; }
.table tbody tr:hover { background: #e3eafd !important; }
.table th, .table td { border: none !important; vertical-align: middle !important; }
.table { border-collapse: separate !important; border-spacing: 0 !important; font-size: 15px; }
.summary-card { border-radius: 16px; padding: 18px 24px; color: white; display: flex; align-items: center; gap: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.10); transition: transform 0.2s; }
.summary-card:hover { transform: translateY(-3px); }
.summary-card .icon-wrap { width: 52px; height: 52px; background: rgba(255,255,255,0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.7rem; }
.summary-card .label { font-size: 0.78rem; opacity: 0.85; }
.summary-card .count { font-size: 1.6rem; font-weight: 800; line-height: 1; }
.form-card { border-radius: 16px; border: none; box-shadow: 0 4px 20px rgba(54,92,245,0.08); }
.form-card .card-header { background: linear-gradient(135deg, #365CF5 0%, #6a8ffd 100%); border-radius: 16px 16px 0 0; padding: 1.2rem 1.5rem; }
</style>
<div class="container-fluid">
<div class="title-wrapper pt-30">
<div class="row align-items-start">
<div class="col-md-6">
<h2 style="font-weight:500;"><i class="fas fa-calendar-alt me-2 text-primary"></i>Periode Absensi</h2>
</div>
<div class="col-md-6">
<nav aria-label="breadcrumb">
<ol class="breadcrumb justify-content-md-end" style="font-size: 0.90rem;">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
<li class="breadcrumb-item active">Periode Absensi</li>
</ol>
</nav>
</div>
</div>
</div>
@php
$totalPeriode = $periods->count();
$periodeAktif = $periods->where('is_active', true)->count();
$periodeNonAktif = $periods->where('is_active', false)->count();
@endphp
<!-- Summary Cards -->
<div class="row g-3 mb-4 mt-3">
<div class="col-6 col-md-4">
<div class="summary-card" style="background:linear-gradient(135deg,#365CF5,#6a8ffd);">
<div class="icon-wrap"><i class="fas fa-calendar-alt"></i></div>
<div><div class="label">Total Periode</div><div class="count">{{ $totalPeriode }}</div></div>
</div>
</div>
<div class="col-6 col-md-4">
<div class="summary-card" style="background:linear-gradient(135deg,#22c55e,#4ade80);">
<div class="icon-wrap"><i class="fas fa-toggle-on"></i></div>
<div><div class="label">Aktif</div><div class="count">{{ $periodeAktif }}</div></div>
</div>
</div>
<div class="col-6 col-md-4">
<div class="summary-card" style="background:linear-gradient(135deg,#94a3b8,#cbd5e1);">
<div class="icon-wrap"><i class="fas fa-toggle-off"></i></div>
<div><div class="label">Tidak Aktif</div><div class="count">{{ $periodeNonAktif }}</div></div>
</div>
</div>
</div>
@if(session('success'))
<div class="alert alert-success alert-dismissible fade show rounded-3 shadow-sm mb-4" role="alert">
<i class="fas fa-check-circle me-2"></i>{{ session('success') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
@if($errors->any())
<div class="alert alert-danger alert-dismissible fade show rounded-3 shadow-sm mb-4" role="alert">
<i class="fas fa-exclamation-circle me-2"></i>
<ul class="mb-0">@foreach($errors->all() as $err)<li>{{ $err }}</li>@endforeach</ul>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
<div class="row g-4">
<!-- Form Tambah Periode -->
<div class="col-lg-4">
<div class="card form-card">
<div class="card-header">
<h5 class="mb-0 text-white fw-bold"><i class="fas fa-plus-circle me-2"></i>Tambah Periode Baru</h5>
</div>
<div class="card-body p-4">
<form action="{{ route('periode.store') }}" method="POST">
@csrf
<div class="mb-3">
<label class="form-label fw-semibold text-dark"><i class="fas fa-calendar me-1 text-primary"></i> Tahun Ajaran</label>
<input type="text" class="form-control rounded-3" placeholder="2023/2024" name="tahun_ajaran" value="{{ old('tahun_ajaran') }}">
</div>
<div class="mb-3">
<label class="form-label fw-semibold text-dark"><i class="fas fa-book me-1 text-primary"></i> Semester</label>
<select class="form-select rounded-3" name="semester">
<option value="ganjil" {{ old('semester') == 'ganjil' ? 'selected' : '' }}>Ganjil</option>
<option value="genap" {{ old('semester') == 'genap' ? 'selected' : '' }}>Genap</option>
</select>
</div>
<div class="mb-3">
<label class="form-label fw-semibold text-dark"><i class="fas fa-calendar-day me-1 text-primary"></i> Tanggal Mulai</label>
<input type="date" class="form-control rounded-3" name="start_date" value="{{ old('start_date') }}">
</div>
<div class="mb-3">
<label class="form-label fw-semibold text-dark"><i class="fas fa-calendar-check me-1 text-primary"></i> Tanggal Selesai</label>
<input type="date" class="form-control rounded-3" name="end_date" value="{{ old('end_date') }}">
</div>
<button type="submit" class="btn btn-primary w-100 fw-bold rounded-3 py-2">
<i class="fas fa-save me-2"></i>Simpan Periode
</button>
</form>
</div>
</div>
</div>
<!-- Daftar Periode -->
<div class="col-lg-8">
<div class="card border-0 shadow-sm rounded-4">
<div class="card-header bg-white border-0 rounded-top-4 py-3 px-4">
<h5 class="mb-0 fw-bold text-primary"><i class="fas fa-list me-2"></i>Daftar Periode</h5>
</div>
<div class="card-body px-4 py-3">
<div class="table-responsive rounded-3">
<table class="table table-hover align-middle w-100">
<thead class="table-custom-header">
<tr>
<th>No</th>
<th>Semester</th>
<th>Tanggal Mulai</th>
<th>Tanggal Selesai</th>
<th>Status</th>
<th class="text-center">Aksi</th>
</tr>
</thead>
<tbody>
@forelse($periods as $i => $p)
<tr>
<td><span class="fw-semibold text-muted">{{ $i+1 }}</span></td>
<td>
<span class="fw-semibold text-dark d-block">{{ $p->name }}</span>
</td>
<td>
<span class="badge rounded-pill px-3 py-2" style="background:#e3eafd;color:#365CF5;font-weight:600;">
<i class="fas fa-calendar-day me-1"></i>{{ Carbon::parse($p->start_date)->format('d M Y') }}
</span>
</td>
<td>
<span class="badge rounded-pill px-3 py-2" style="background:#fef9c3;color:#b45309;font-weight:600;">
<i class="fas fa-calendar-check me-1"></i>{{ Carbon::parse($p->end_date)->format('d M Y') }}
</span>
</td>
<td>
@if($p->is_active)
<span class="badge rounded-pill px-3 py-2 fw-bold" style="background:#dcfce7;color:#16a34a;">
<i class="fas fa-check-circle me-1"></i> Aktif
</span>
@else
<span class="badge rounded-pill px-3 py-2 fw-bold" style="background:#f3f4f6;color:#6b7280;">
<i class="fas fa-times-circle me-1"></i> Tidak Aktif
</span>
@endif
</td>
<td class="text-center">
<div class="d-flex gap-1 justify-content-center">
<form action="{{ route('periode.activate', $p->id) }}" method="POST" style="display:inline;">
@csrf
<button type="submit"
class="btn btn-sm rounded-pill px-2"
style="background-color: {{ $p->is_active ? '#16a34a' : '#dc3545' }}; color:#fff;"
{{ $p->is_active ? 'disabled' : '' }}
title="{{ $p->is_active ? 'Aktif' : 'Tidak Aktif' }}">
<i class="fas {{ $p->is_active ? 'fa-toggle-on' : 'fa-toggle-off' }}"></i>
</button>
</form>
<button class="btn btn-sm rounded-pill px-2" style="background:#fef9c3;color:#b45309;" title="Edit"
data-bs-toggle="modal" data-bs-target="#editPeriodeModal"
onclick="setEditPeriode('{{ $p->id }}','{{ explode(' ', $p->name, 2)[1] ?? '' }}','{{ strtolower(explode(' ', $p->name, 2)[0] ?? '') }}','{{ Carbon::parse($p->start_date)->format('Y-m-d') }}','{{ Carbon::parse($p->end_date)->format('Y-m-d') }}',{{ $p->is_active ? 'true' : 'false' }})">
<i class="fas fa-pencil-alt"></i>
</button>
<button class="btn btn-sm rounded-pill px-2" style="background:#fee2e2;color:#dc2626;" title="Hapus"
data-bs-toggle="modal" data-bs-target="#deletePeriodeModal"
onclick="setDeletePeriode('{{ $p->id }}', '{{ $p->name }}')">
<i class="fas fa-trash-alt"></i>
</button>
</div>
</td>
</tr>
@empty
<tr>
<td colspan="6" class="text-center text-muted py-4">
<i class="fas fa-calendar-times fa-2x mb-2 d-block opacity-50"></i>
Belum ada data periode.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
<small class="text-muted"><i class="fas fa-info-circle me-1"></i> Hanya satu periode yang bisa aktif dalam satu waktu.</small>
</div>
</div>
</div>
</div>
{{-- Modal Edit Periode --}}
<div class="modal fade" id="editPeriodeModal" tabindex="-1" aria-labelledby="editPeriodeModalLabel" aria-hidden="true">
<div class="modal-dialog">
<form class="modal-content" id="editPeriodeForm" method="POST">
@csrf
@method('PUT')
<input type="hidden" id="edit_id" name="id">
<div class="modal-header">
<h5 class="modal-title" id="editPeriodeModalLabel">Edit Periode</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="edit_tahun_ajaran" class="form-label">Tahun Ajaran</label>
<input type="text" class="form-control" id="edit_tahun_ajaran" name="tahun_ajaran">
</div>
<div class="mb-3">
<label for="edit_semester" class="form-label">Semester</label>
<select class="form-select" id="edit_semester" name="semester">
<option value="ganjil">Ganjil</option>
<option value="genap">Genap</option>
</select>
</div>
<div class="mb-3">
<label for="edit_start_date" class="form-label">Tanggal Mulai</label>
<input type="date" class="form-control" id="edit_start_date" name="start_date">
</div>
<div class="mb-3">
<label for="edit_end_date" class="form-label">Tanggal Selesai</label>
<input type="date" class="form-control" id="edit_end_date" name="end_date">
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" value="1" id="edit_is_active" name="is_active">
<label class="form-check-label" for="edit_is_active">
Aktifkan Periode Ini
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-primary">Simpan Perubahan</button>
</div>
</form>
</div>
</div>
<script>
// id, tahun_ajaran, semester, start, end, isActive
function setEditPeriode(id, tahun_ajaran, semester, start, end, isActive) {
document.getElementById('edit_id').value = id;
document.getElementById('edit_tahun_ajaran').value = tahun_ajaran;
document.getElementById('edit_semester').value = semester.toLowerCase();
document.getElementById('edit_start_date').value = start;
document.getElementById('edit_end_date').value = end;
document.getElementById('edit_is_active').checked = !!isActive;
// Set action form
var form = document.getElementById('editPeriodeForm');
form.action = "{{ url('periode') }}/" + id;
}
// Set id periode untuk hapus
function setDeletePeriode(id, name) {
document.getElementById('delete_id').value = id;
document.getElementById('deletePeriodeName').innerText = name;
var form = document.getElementById('deletePeriodeForm');
form.action = "{{ url('periode') }}/" + id;
}
</script>
{{-- Modal Hapus Periode --}}
<div class="modal fade" id="deletePeriodeModal" tabindex="-1" aria-labelledby="deletePeriodeModalLabel" aria-hidden="true">
<div class="modal-dialog">
<form class="modal-content" id="deletePeriodeForm" method="POST">
@csrf
@method('DELETE')
<input type="hidden" id="delete_id" name="id">
<div class="modal-header">
<h5 class="modal-title" id="deletePeriodeModalLabel">Konfirmasi Hapus Periode</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Apakah Anda yakin ingin menghapus periode <strong id="deletePeriodeName"></strong>?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-danger">Hapus</button>
</div>
</form>
</div>
</div>
</div>
@endsection