Files
expense/resources/views/backend/pages/budget_control/index.blade.php
T

273 lines
17 KiB
PHP
Raw Normal View History

2025-01-07 17:23:42 +07:00
@extends('layouts.app')
2026-06-01 15:01:03 +07:00
@section('title', 'Active Budgets Control')
2025-01-07 17:23:42 +07:00
@section('admin-content')
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
2026-06-01 15:01:03 +07:00
<h1 class="fw-bold text-dark">Active Budgets Control</h1>
2025-01-07 17:23:42 +07:00
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
2026-06-01 15:01:03 +07:00
<li class="breadcrumb-item active">Budget Control</li>
2025-01-07 17:23:42 +07:00
</ol>
</div>
</div>
</div>
</section>
2026-06-01 15:01:03 +07:00
2025-01-07 17:23:42 +07:00
<section class="content">
<div class="container-fluid">
2026-06-01 15:01:03 +07:00
{{-- --- BAGIAN 1: PANEL FILTER DINAMIS --- --}}
<div class="card shadow-sm mb-4" style="border-radius: 15px; border-top: 3px solid #007bff;">
<div class="card-body py-3">
<form action="{{ route('budget_control') }}" method="GET" id="filter-form">
<div class="row align-items-end">
<div class="col-md-3 mb-2 mb-md-0">
<label class="small font-weight-bold text-muted text-uppercase">Region</label>
<select name="region_id" id="filter_region" class="form-control form-control-sm select2-filter">
{{-- Munculkan 'Semua Region' HANYA untuk role pusat --}}
@if(auth()->user()->hasAnyRole(['Superadmin', 'Super Admin', 'Accounting', 'accounting']))
<option value="">Semua Region</option>
@else
{{-- Untuk Admin Region, langsung arahkan ke pilihannya --}}
<option value="" disabled>Pilih Region Anda</option>
@endif
@foreach($regions as $reg)
<option value="{{ $reg->id }}" {{ request('region_id', (count($regions) == 1 ? $regions->first()->id : '')) == $reg->id ? 'selected' : '' }}>
{{ $reg->name }}
</option>
@endforeach
</select>
</div>
<div class="col-md-3 mb-2 mb-md-0">
<label class="small font-weight-bold text-muted text-uppercase">Cabang</label>
<select name="cabang_id" id="filter_cabang" class="form-control form-control-sm select2-filter">
<option value="">Semua Cabang</option>
@foreach($cabangOptions as $cab)
<option value="{{ $cab->id }}" {{ request('cabang_id') == $cab->id ? 'selected' : '' }}>{{ $cab->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-2 mb-2 mb-md-0">
<label class="small font-weight-bold text-muted text-uppercase">Bulan</label>
<select name="month" class="form-control form-control-sm select2-filter">
<option value="">Semua Bulan</option>
@foreach(['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] as $m)
<option value="{{ $m }}" {{ request('month') == $m ? 'selected' : '' }}>{{ $m }}</option>
@endforeach
</select>
</div>
<div class="col-md-2 mb-2 mb-md-0">
<label class="small font-weight-bold text-muted text-uppercase">Tahun</label>
<select name="year" class="form-control form-control-sm select2-filter">
@for($y = date('Y'); $y >= 2024; $y--)
<option value="{{ $y }}" {{ request('year', date('Y')) == $y ? 'selected' : '' }}>{{ $y }}</option>
@endfor
</select>
</div>
<div class="col-md-2">
<div class="btn-group w-100">
<button type="submit" class="btn btn-sm btn-primary shadow-sm"><i class="fas fa-filter mr-1"></i></button>
<a href="{{ route('budget_control') }}" class="btn btn-sm btn-secondary shadow-sm"><i class="fas fa-sync-alt"></i></a>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="card card-primary card-outline shadow-sm" style="border-radius: 15px;">
2025-01-07 17:23:42 +07:00
<div class="card-body">
2026-06-01 15:01:03 +07:00
<div class="d-flex justify-content-between align-items-center mb-3">
<h4 class="header-title m-0">Current Active Budget</h4>
@if (auth()->user()->can('budget_control.create'))
<div>
@if(auth()->user()->hasAnyRole(['Accounting', 'accounting', 'Admin Region', 'Superadmin', 'Super Admin']))
<button type="button" class="btn btn-success btn-sm rounded-pill px-3 shadow-sm mr-2" data-toggle="modal" data-target="#modalBulkUpload">
<i class="fas fa-file-excel mr-1"></i> Bulk Upload
</button>
@endif
<a class="btn btn-primary btn-sm rounded-pill px-3 shadow-sm" href="{{ route('budget_control.create') }}">
<i class="fas fa-plus-circle mr-1"></i> Add New Budget
</a>
</div>
@endif
</div>
2025-01-07 17:23:42 +07:00
<div class="dataTables_wrapper dt-bootstrap4 mt-2">
@include('backend.layouts.partials.messages')
2026-06-01 15:01:03 +07:00
<div class="table-responsive">
<table id="dataTable" class="table table-bordered table-striped table-hover w-100">
<thead class="bg-light text-capitalize">
<tr>
<th width="3%">#</th>
<th>Penerima / Cabang</th>
<th>Pengirim</th>
<th>Assigned Budget</th>
<th>Real-time Sisa Budget</th>
<th>Periode</th>
<th>Status Budget</th>
<th>Status Transfer</th>
<th width="5%" class="text-center">Bukti</th>
<th width="10%">Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($data as $item)
@php
$realtimeBudget = $item->availableBudget ?? 0;
@endphp
<tr>
<td>{{ ($data->currentPage() - 1) * $data->perPage() + $loop->iteration }}</td>
<td>
<div class="fw-bold text-dark">{{ $item->receiver->name ?? '-' }}</div>
<small class="text-muted"><i class="fas fa-building mr-1"></i>{{ $item->cabang->name ?? '-' }}</small>
</td>
<td>{{ $item->sender->name ?? '-' }}</td>
<td class="align-middle">
<div class="fw-bold text-primary">Rp {{ number_format($item->amount, 0, ',', '.') }}</div>
</td>
<td class="align-middle">
<div class="fw-bold {{ $realtimeBudget >= 0 ? 'text-success' : 'text-danger' }}">
Rp {{ number_format($realtimeBudget, 0, ',', '.') }}
</div>
</td>
<td class="align-middle">
<span class="badge badge-light border shadow-sm px-2 py-1">
{{ strtoupper($item->periode_month) }} {{ $item->periode_year }}
</span>
</td>
<td class="align-middle text-center">
<span class="badge {{ $item->status == 'Assigned' ? 'badge-success' : 'badge-warning' }} px-2 py-1">
{{ $item->status }}
</span>
<div class="mt-1" style="line-height: 1.1;">
<small class="text-muted d-block" style="font-size: 10px;">{{ $item->created_at->format('d M Y H:i') }} WIB</small>
</div>
</td>
<td class="align-middle text-center">
@php
$tStatus = $item->transfer_status ?? 'Pending';
$badgeClass = match(strtolower($tStatus)) {
'validated' => 'badge-success',
'waiting approval' => 'badge-info',
'rejected' => 'badge-danger',
default => 'badge-secondary'
};
@endphp
<span class="badge {{ $badgeClass }} px-2 py-1">{{ $tStatus }}</span>
</td>
<td class="text-center align-middle">
@if($item->transfer_proof)
<a href="{{ asset(str_starts_with($item->transfer_proof, 'uploads/') ? $item->transfer_proof : 'uploads/' . $item->transfer_proof) }}"
target="_blank" class="btn btn-xs btn-info shadow-sm">
<i class="fas fa-eye"></i> View
</a>
@else
<span class="text-muted small">-</span>
@endif
</td>
<td class="align-middle">
<div class="btn-group shadow-sm">
@if(strtolower($item->transfer_status) != 'validated')
<button type="button" class="btn btn-sm btn-outline-primary btn-upload" data-id="{{ $item->id }}" data-toggle="modal" data-target="#modalUploadProof">
<i class="fas fa-upload"></i>
</button>
@endif
@if(Auth::user()->hasAnyRole(['accounting', 'Accounting', 'admin', 'Admin', 'Superadmin']) && strtolower($item->transfer_status) == 'waiting approval')
<form action="{{ route('budget_control.approve_transfer', $item->id) }}" method="POST" class="d-inline ml-1">
@csrf
<button type="submit" class="btn btn-sm btn-success" onclick="return confirm('Sahkan transfer ini?')"><i class="fas fa-check"></i></button>
</form>
<form action="{{ route('budget_control.reject_transfer', $item->id) }}" method="POST" class="d-inline ml-1">
@csrf
<button type="submit" class="btn btn-sm btn-danger" onclick="return confirm('Tolak transfer ini?')"><i class="fas fa-times"></i></button>
</form>
@endif
@if (auth()->user()->can('budget_control.delete'))
<form action="{{ route('budget_control.destroy', $item->id) }}" method="POST" class="d-inline ml-1" onsubmit="return confirm('Hapus data?');">
@csrf @method('DELETE')
<button type="submit" class="btn btn-danger btn-sm"><i class="fas fa-trash"></i></button>
</form>
@endif
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
{{-- --- BAGIAN 2: NAVIGASI HALAMAN (SERVER-SIDE) --- --}}
<div class="mt-4 d-flex justify-content-between align-items-center">
<div class="small text-muted">
Menampilkan {{ $data->firstItem() }} sampai {{ $data->lastItem() }} dari {{ $data->total() }} data
</div>
<div>
{{ $data->appends(request()->query())->links('pagination::bootstrap-4') }}
</div>
</div>
</div>
2025-01-07 17:23:42 +07:00
</div>
</div>
</div>
</section>
2026-06-01 15:01:03 +07:00
@include('backend.pages.budget_control.partials.modals')
2025-01-07 17:23:42 +07:00
@endsection
@section('scripts')
<script>
2026-06-01 15:01:03 +07:00
function toggleUploadType() {
const isRegion = document.getElementById('type_region').checked;
document.getElementById('group_region').classList.toggle('d-none', !isRegion);
document.getElementById('group_cabang').classList.toggle('d-none', isRegion);
}
$(document).ready(function () {
// Inisialisasi Select2 untuk Filter
$('.select2-filter').select2({
theme: 'bootstrap4',
width: '100%'
}).on('change', function() {
$('#filter-form').submit();
});
// Inisialisasi DataTables
if ($('#dataTable').length) {
$('#dataTable').DataTable({
paging: false,
info: false,
responsive: false,
dom: 'Blfrtip',
buttons: [
{ extend: 'excel', className: 'btn-sm btn-success', text: '<i class="fas fa-file-excel mr-1"></i> Excel' },
{ extend: 'pdf', className: 'btn-sm btn-danger', text: '<i class="fas fa-file-pdf mr-1"></i> PDF' }
]
});
}
$(document).on('click', '.btn-upload', function() {
$('#budget_id').val($(this).data('id'));
});
// Select2 di dalam modal
$('#modalBulkUpload').on('shown.bs.modal', function () {
$('.select2_modal').select2({
theme: 'bootstrap4',
width: '100%',
dropdownParent: $('#modalBulkUpload')
});
});
});
</script>
@endsection