Browse Source

update disposal

master
Gunawan19621 1 year ago
parent
commit
734fdd0325
  1. 72
      app/Http/Controllers/DisposalController.php
  2. 42
      app/Http/Controllers/HomeController.php
  3. 43
      app/Http/Requests/Disposal/ValidasiCreateDisposal.php
  4. 28
      app/Http/Requests/Disposal/ValidasiUpdateDisposal.php
  5. 46
      app/Models/Disposal.php
  6. 36
      database/migrations/2023_11_17_075418_create_disposals_table.php
  7. 58
      resources/views/dashboard/Disposal/create.blade.php
  8. 118
      resources/views/dashboard/Disposal/edit.blade.php
  9. 47
      resources/views/dashboard/Disposal/index.blade.php
  10. 94
      resources/views/dashboard/index.blade.php
  11. 8
      resources/views/layouts/sidebar.blade.php
  12. 4
      routes/web.php

72
app/Http/Controllers/DisposalController.php

@ -3,14 +3,19 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Peti; use App\Models\Peti;
use App\Models\Customer;
use App\Models\m_warehouse; use App\Models\m_warehouse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\Disposal\ValidasiCreateDisposal;
use App\Models\Disposal;
class DisposalController extends Controller class DisposalController extends Controller
{ {
public function index() public function index()
{ {
$data = [ $data = [
'disposal' => Disposal::all(),
'active' => 'menu-disposal', 'active' => 'menu-disposal',
]; ];
return view('dashboard.Disposal.index', $data); return view('dashboard.Disposal.index', $data);
@ -25,6 +30,7 @@ class DisposalController extends Controller
$data = [ $data = [
'peti' => Peti::get(), 'peti' => Peti::get(),
'warehouse' => m_warehouse::get(), 'warehouse' => m_warehouse::get(),
'customer' => Customer::get(),
'active' => 'menu-disposal', 'active' => 'menu-disposal',
]; ];
return view('dashboard.Disposal.create', $data); return view('dashboard.Disposal.create', $data);
@ -33,52 +39,76 @@ class DisposalController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*/ */
public function store($request) public function store(ValidasiCreateDisposal $request)
{ {
// // dd($request->all());
try {
// Mendapatkan informasi pengguna yang sedang login
$currentUser = Auth::user();
// Validasi data dari request
$validatedData = $request->validated();
// Menambahkan informasi pengguna ke dalam data yang akan disimpan
$validatedData['created_by'] = $currentUser->fullname;
$validatedData['updated_by'] = $currentUser->fullname;
// Membuat entitas Transfer
Disposal::create($validatedData);
return redirect()->route('dashboard.disposal.index')->with('success', 'Data Disposal Peti berhasil ditambahkan');
} catch (\Throwable $th) {
return redirect()->back()->with('error', 'Data Disposal Peti gagal dimasukan ke disposal');
}
} }
/** /**
* Display the specified resource. * Display the specified resource.
*/ */
public function show($id) // public function show($id)
{ // {
$data = [ // $data = [
'active' => 'menu-disposal', // 'active' => 'menu-disposal',
]; // ];
return view('dashboard.Disposal.show', $data); // return view('dashboard.Disposal.show', $data);
} // }
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
*/ */
public function edit($id) public function edit($id)
{ {
$jenis_disposal = ['Pemusnaan', 'Perbaikan'];
$data = [ $data = [
'disposal' => Disposal::findOrFail($id),
'peti' => Peti::get(),
'customer' => Customer::get(),
'warehouse' => m_warehouse::get(),
'active' => 'menu-disposal', 'active' => 'menu-disposal',
]; ];
return view('dashboard.Disposal.edit', $data); return view('dashboard.Disposal.edit', compact('jenis_disposal'), $data);
} }
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*/ */
public function update($request, $id) // public function update($request, $id)
{ // {
// // //
} // }
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*/ */
public function destroy($id) public function destroy($id)
{ {
// try { // dd("oke");
// $typepeti = Peti::findOrFail($id); try {
// $typepeti->delete(); $disposal = Disposal::findOrFail($id);
// return redirect()->back()->with('success', 'Data peti berhasil dihapus'); $disposal->delete();
// } catch (\Throwable $th) { return redirect()->back()->with('success', 'Data disposal peti berhasil dihapus');
// return redirect()->back()->with('error', 'Data peti gagal dihapus'); } catch (\Throwable $th) {
// } return redirect()->back()->with('error', 'Data disposal peti gagal dihapus');
}
} }
} }

42
app/Http/Controllers/HomeController.php

@ -24,7 +24,6 @@ class HomeController extends Controller
{ {
$data = [ $data = [
'reminder' => \App\Models\asset_status::whereNull('enter_at')->count(), 'reminder' => \App\Models\asset_status::whereNull('enter_at')->count(),
'jumlahAsset' => \App\Models\m_asset::count(),
'jumlahPeminjaman' => \App\Models\asset_status::count(), 'jumlahPeminjaman' => \App\Models\asset_status::count(),
'jumlahPengembalian' => \App\Models\asset_status::whereNotNull('enter_at')->count(), 'jumlahPengembalian' => \App\Models\asset_status::whereNotNull('enter_at')->count(),
'active' => 'menu-user', 'active' => 'menu-user',
@ -32,6 +31,8 @@ class HomeController extends Controller
return view('pages.user.index', $data); return view('pages.user.index', $data);
} }
//data pertahun untuk bar chart
public function generateChartData() public function generateChartData()
{ {
$years = []; $years = [];
@ -86,4 +87,43 @@ class HomeController extends Controller
return compact('years', 'exitData', 'enterData', 'monthNames'); return compact('years', 'exitData', 'enterData', 'monthNames');
} }
public function generateChartDataPie()
{
$years = [];
$enterData = [];
$monthNames = [
'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni',
'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'
];
// Ambil data tahun dari kolom date_pembuatan
$enterYears = \App\Models\Peti::selectRaw('YEAR(date_pembuatan) as year')
->distinct()
->orderBy('year', 'asc')
->get()
->pluck('year')
->toArray();
// Gabungkan dan sortir tahun-tahun dari kolom date_pembuatan
$years = array_unique($enterYears);
sort($years);
foreach ($years as $year) {
$yearEnterData = [];
// Ambil data untuk setiap bulan dalam tahun tersebut
foreach ($monthNames as $monthName) {
$enterCount = \App\Models\Peti::whereYear('date_pembuatan', $year)
->whereMonth('date_pembuatan', array_search($monthName, $monthNames) + 1)
->count();
$yearEnterData[] = $enterCount;
}
$enterData[] = $yearEnterData;
}
return compact('years', 'enterData', 'monthNames');
}
} }

43
app/Http/Requests/Disposal/ValidasiCreateDisposal.php

@ -0,0 +1,43 @@
<?php
namespace App\Http\Requests\Disposal;
use Illuminate\Foundation\Http\FormRequest;
class ValidasiCreateDisposal extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'peti_id' => 'nullable',
'customer_id' => 'nullable',
'warehouse_id' => 'nullable',
'date_disposal' => 'nullable|date',
'description' => 'nullable|string',
'jenis_disposal' => 'nullable|string|max:50',
];
}
public function messages(): array
{
return [
'date_disposal.date' => 'Format tanggal disposal tidak valid.',
'description.string' => 'Deskripsi harus berupa teks.',
'jenis_disposal.string' => 'Jenis disposal harus berupa teks.',
'jenis_disposal.max' => 'Jenis disposal tidak boleh lebih dari :max karakter.',
];
}
}

28
app/Http/Requests/Disposal/ValidasiUpdateDisposal.php

@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests\Disposal;
use Illuminate\Foundation\Http\FormRequest;
class ValidasiUpdateDisposal extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
];
}
}

46
app/Models/Disposal.php

@ -0,0 +1,46 @@
<?php
namespace App\Models;
use App\Traits\UUID;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Disposal extends Model
{
use HasFactory, SoftDeletes, UUID;
protected $table = 'disposals';
protected $fillable = [
'peti_id',
'customer_id',
'date_disposal',
'warehouse_id',
'description',
'jenis_disposal',
'created_by',
'updated_by',
];
public function peti()
{
return $this->belongsTo(Peti::class, 'peti_id')->select(
'id',
'tipe_peti_id',
'customer_id',
'warehouse_id',
'date_pembuatan',
'kondisipeti_id',
'fix_lot',
'updated_by',
);
}
public function customer()
{
return $this->belongsTo(Customer::class, 'customer_id')->select(
'name',
'code_customer',
);
}
}

36
database/migrations/2023_11_17_075418_create_disposals_table.php

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('disposals', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->foreignUuid('peti_id')->nullable()->constrained('petis')->onDelete('set null');
$table->foreignUuid('customer_id')->nullable()->constrained('customers');
$table->foreignUuid('warehouse_id')->nullable()->constrained('m_warehouses');
$table->date('date_disposal')->nullable();
$table->text('description')->nullable();
$table->string('jenis_disposal', 50)->nullable();
$table->timestamps();
$table->softDeletes();
$table->string('created_by', 200)->nullable();
$table->string('updated_by', 200)->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('disposals');
}
};

58
resources/views/dashboard/Disposal/create.blade.php

@ -10,8 +10,8 @@
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<form action="{{ route('dashboard.transfer.store') }}" method="POST" enctype="multipart/form-data" <form action="{{ route('dashboard.disposal.store') }}" method="POST" enctype="multipart/form-data"
id="transferForm"> id="disposalForm">
@csrf @csrf
<div class="form-group"> <div class="form-group">
<label for="peti_id" class="col-form-label">Pilih Detail Peti: <span <label for="peti_id" class="col-form-label">Pilih Detail Peti: <span
@ -26,9 +26,38 @@
@endforeach @endforeach
</select> </select>
<label for="name" class="col-form-label">Customer: <span class="text-danger">*</span></label> <label for="customer_id" class="col-form-label">Customer: <span class="text-danger">*</span></label>
<input class="form-control" name="name" type="text" id="name" <select class="form-control" name="customer_id" type="text" id="customer_id">
placeholder="Nama Customer akan otomatis terpilih ketika memilih detail peti."> <option disabled selected>Nama Customer akan otomatis terpilih ketika memilih detail peti.</option>
@foreach ($customer as $data_customer)
<option value="{{ $data_customer->id }}">{{ $data_customer->name }}</option>
@endforeach
</select>
<label for="date_disposal" class="col-form-label">Tanggal Disposal: <span
class="text-danger">*</span></label>
<input class="form-control" name="date_disposal" type="date" id="date_disposal"
value="{{ old('date_disposal') }}">
<label for="warehouse_id" class="col-form-label">Asal Gudang: <span class="text-danger">*</span></label>
<select class="form-control" name="warehouse_id" type="text" id="warehouse_id">
<option disabled selected>Asal gudang akan otomatis terpilih ketika memilih detail peti.</option>
@foreach ($warehouse as $data)
<option value="{{ $data->id }}">{{ $data->name }}</option>
@endforeach
</select>
<label for="description" class="col-form-label">Alasan Disposal: <span
class="text-danger">*</span></label>
<textarea class="form-control" name="description" id="description" placeholder="Masukan Alasan Disposal" required>{{ old('description') }}</textarea>
<label for="jenis_disposal" class="col-form-label">Jenis Disposal: <span
class="text-danger">*</span></label>
<select class="form-control" name="jenis_disposal" id="jenis_disposal">
<option disabled selected>Pilih Jenis Disposal</option>
<option value="Pemusnaan">Pemusnaan</option>
<option value="Perbaikan">Perbaikan</option>
</select>
</div> </div>
<div class="modal-footer d-flex justify-content-center"> <div class="modal-footer d-flex justify-content-center">
<a href="{{ route('dashboard.disposal.index') }}" class="btn btn-secondary">Kembali</a> <a href="{{ route('dashboard.disposal.index') }}" class="btn btn-secondary">Kembali</a>
@ -40,7 +69,7 @@
<!-- auto disable form pada saat sudah di simpan--> <!-- auto disable form pada saat sudah di simpan-->
<script> <script>
document.getElementById('transferForm').addEventListener('submit', function() { document.getElementById('disposalForm').addEventListener('submit', function() {
document.getElementById('submitButton').setAttribute('disabled', 'true'); document.getElementById('submitButton').setAttribute('disabled', 'true');
}); });
</script> </script>
@ -51,10 +80,10 @@
const petiSelect = document.getElementById('peti_id'); const petiSelect = document.getElementById('peti_id');
// Mendapatkan elemen select asal gudang // Mendapatkan elemen select asal gudang
const exitWarehouseSelect = document.getElementById('exit_warehouse'); const warehouseSelect = document.getElementById('warehouse_id');
// Mendapatkan elemen input Customer // Mendapatkan elemen select Customer
const nameInput = document.getElementById('name'); const customerSelect = document.getElementById('customer_id');
// Menambahkan event listener ke select detail peti // Menambahkan event listener ke select detail peti
petiSelect.addEventListener('change', function() { petiSelect.addEventListener('change', function() {
@ -66,10 +95,15 @@
const customerName = selectedOption.getAttribute('data-customer-name'); const customerName = selectedOption.getAttribute('data-customer-name');
// Memilih asal gudang berdasarkan data-warehouse-id // Memilih asal gudang berdasarkan data-warehouse-id
exitWarehouseSelect.value = warehouseId; warehouseSelect.value = warehouseId;
// Mengisi input Customer dengan nama pelanggan // Memilih customer berdasarkan data-customer-name
nameInput.value = customerName; for (let i = 0; i < customerSelect.options.length; i++) {
if (customerSelect.options[i].text === customerName) {
customerSelect.selectedIndex = i;
break;
}
}
}); });
</script> </script>
@endsection @endsection

118
resources/views/dashboard/Disposal/edit.blade.php

@ -1,5 +1,121 @@
@extends('layouts.main') @extends('layouts.main')
@section('content') @section('content')
@include('layouts.components.alert-prompt') @include('layouts.components.alert-prompt')
<p>Halaman Edit Disposal</p> @include('layouts.components.alert-prompt')
<div class="card shadow mb-4">
<div class="card-header py-3">
<div class="row">
<div class="col-6">
<h5 class="m-0 font-weight-bold text-primary mt-2">Edit Disposal Peti</h5>
</div>
</div>
</div>
<div class="card-body">
<form action="{{ route('dashboard.disposal.store') }}" method="POST" enctype="multipart/form-data"
id="disposalForm">
@csrf
<div class="form-group">
<label for="peti_id" class="col-form-label">Pilih Detail Peti: <span
class="text-danger">*</span></label>
<select class="form-control" name="peti_id" type="text" id="peti_id" required>
<option disabled selected>Pilih Detail Peti</option>
@foreach ($peti as $data_peti)
<option value="{{ $data_peti->id }}" data-warehouse-id="{{ $data_peti->warehouse_id }}"
data-customer-name="{{ $data_peti->customer->name }}"
{{ $data_peti->id == $disposal->peti_id ? 'selected' : '' }}>
{{ $data_peti->fix_lot }}
</option>
@endforeach
</select>
<label for="customer_id" class="col-form-label">Customer: <span class="text-danger">*</span></label>
<select class="form-control" name="customer_id" type="text" id="customer_id" required>
<option disabled selected>Pilih Customer</option>
@foreach ($customer as $data_customer)
<option value="{{ $data_customer->id }}"
{{ $data_customer->id == $disposal->customer_id ? 'selected' : '' }}>
{{ $data_customer->name }}
</option>
@endforeach
</select>
<label for="date_disposal" class="col-form-label">Tanggal Disposal: <span
class="text-danger">*</span></label>
<input class="form-control" name="date_disposal" type="date" id="date_disposal"
value="{{ $disposal->date_disposal }}">
<label for="warehouse_id" class="col-form-label">Asal Gudang: <span class="text-danger">*</span></label>
<select class="form-control" name="warehouse_id" type="text" id="warehouse_id" required>
<option disabled selected>Pilih Asal gudang</option>
@foreach ($warehouse as $data_warehouse)
<option value="{{ $data_warehouse->id }}"
{{ $data_warehouse->id == $disposal->warehouse_id ? 'selected' : '' }}>
{{ $data_warehouse->name }}
</option>
@endforeach
</select>
<label for="description" class="col-form-label">Alasan Disposal: <span
class="text-danger">*</span></label>
<textarea class="form-control" name="description" id="description" placeholder="Masukan Alasan Disposal" required>{{ $disposal->description }}</textarea>
<label for="jenis_disposal" class="col-form-label">Jenis Disposal: <span
class="text-danger">*</span></label>
<select class="form-control" name="jenis_disposal" id="jenis_disposal">
<option disabled selected>Pilih Jenis Disposal</option>
<option value="Pemusnaan">Pemusnaan</option>
<option value="Perbaikan">Perbaikan</option>
</select>
</div>
<div class="modal-footer d-flex justify-content-center">
<a href="{{ route('dashboard.disposal.index') }}" class="btn btn-secondary">Kembali</a>
<button type="submit" class="btn btn-primary" id="submitButton">Simpan</button>
</div>
</form>
</div>
</div>
<!-- auto disable form pada saat sudah di simpan-->
<script>
document.getElementById('disposalForm').addEventListener('submit', function() {
document.getElementById('submitButton').setAttribute('disabled', 'true');
});
</script>
<!-- otomatis asal gudang dan Customer berdasarkan detail peti -->
<script>
// Mendapatkan elemen select detail peti
const petiSelect = document.getElementById('peti_id');
// Mendapatkan elemen select asal gudang
const warehouseSelect = document.getElementById('warehouse_id');
// Mendapatkan elemen select Customer
const customerSelect = document.getElementById('customer_id');
// Menambahkan event listener ke select detail peti
petiSelect.addEventListener('change', function() {
// Mendapatkan data-warehouse-id dari option yang dipilih
const selectedOption = this.options[this.selectedIndex];
const warehouseId = selectedOption.getAttribute('data-warehouse-id');
// Mendapatkan data-customer-name dari option yang dipilih
const customerName = selectedOption.getAttribute('data-customer-name');
// Memilih asal gudang berdasarkan data-warehouse-id
warehouseSelect.value = warehouseId;
// Memilih customer berdasarkan data-customer-name
for (let i = 0; i < customerSelect.options.length; i++) {
if (customerSelect.options[i].text === customerName) {
customerSelect.selectedIndex = i;
break;
}
}
});
</script>
@endsection @endsection

47
resources/views/dashboard/Disposal/index.blade.php

@ -26,7 +26,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-bordered" id="tablebarang" width="100%" cellspacing="0"> {{-- <table class="table table-bordered" id="tablebarang" width="100%" cellspacing="0">
<thead> <thead>
<tr> <tr>
<th class="text-center">No</th> <th class="text-center">No</th>
@ -61,26 +61,37 @@
</form> </form>
</td> </td>
</tr> </tr>
{{-- @php </tbody>
$no_peminjaman = 1; </table> --}}
<table class="table table-bordered" id="tablebarang" width="100%" cellspacing="0">
<thead>
<tr>
<th class="text-center">No</th>
<th>Kode Peti</th>
<th>Nama Customer</th>
<th>Tanggal Disposal</th>
<th>Alasan Disposal</th>
<th>Jenis Disposal</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
@php
$nodisposal = 1;
@endphp @endphp
@forelse ($peminjaman as $data_peminjaman) @forelse ($disposal as $data_disposal)
@if ($data_peminjaman->enter_warehouse == null)
<tr> <tr>
<td class="text-center">{{ $no_peminjaman++ }}</td> <td>{{ $nodisposal++ }}</td>
<td>{{ $data_peminjaman->peti->fix_lot }}</td> <td>{{ $data_disposal->peti->fix_lot }}</td>
<td>{{ $data_peminjaman->peti->customer->name }}</td> <td>{{ $data_disposal->customer->name }}</td>
<td>{{ $data_peminjaman->peti->customer->code_customer }} - <td>{{ \Carbon\Carbon::parse($data_disposal->date_disposal)->format('d/m/Y') }}</td>
{{ $data_peminjaman->peti->tipe_peti->type }}</td> <td>{{ $data_disposal->description }}</td>
<td>{{ \Carbon\Carbon::parse($data_peminjaman->exit_at)->format('d/m/Y') }}</td> <td>{{ $data_disposal->jenis_disposal }}</td>
<td>{{ $data_peminjaman->exit_pic }}</td>
<td>{{ $data_peminjaman->warehouse->name }}</td>
<td class="text-center"> <td class="text-center">
<a href="{{ route('dashboard.peminjaman.edit', $data_peminjaman->id) }}" <a href="{{ route('dashboard.disposal.edit', $data_disposal->id) }}" title="Edit">
title="Edit">
<i class="fa fa-edit mr-2" style="font-size: 20px"></i> <i class="fa fa-edit mr-2" style="font-size: 20px"></i>
</a> </a>
<form action="{{ route('dashboard.peminjaman.destroy', $data_peminjaman->id) }}" <form action="{{ route('dashboard.disposal.destroy', $data_disposal->id) }}"
method="POST" style="display: inline;"> method="POST" style="display: inline;">
@csrf @csrf
@method('DELETE') @method('DELETE')
@ -92,12 +103,12 @@
</form> </form>
</td> </td>
</tr> </tr>
@endif
@empty @empty
<p>Data Kosong</p> <p>Data Kosong</p>
@endforelse --}} @endforelse
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>

94
resources/views/dashboard/index.blade.php

@ -87,7 +87,7 @@
</div> </div>
<!-- Area Bar Chart --> <!-- Area Bar Chart -->
<div class="col-xl-7 col-lg-7"> {{-- <div class="col-xl-7 col-lg-7">
<div class="card shadow mb-4"> <div class="card shadow mb-4">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between"> <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Grafik Peminjaman VS Pengembalian</h6> <h6 class="m-0 font-weight-bold text-primary">Grafik Peminjaman VS Pengembalian</h6>
@ -105,12 +105,35 @@
@endforeach @endforeach
</select> </select>
<canvas id="ChartAssetStatus" style="max-height: 500px;"></canvas> <canvas id="ChartAssetStatus" style="max-height: 600px;"></canvas>
</div> </div>
</div> </div>
</div> --}}
<div class="col-xl-7 col-lg-7">
<div class="card shadow mb-4" style="max-height: 600px;">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Grafik Peminjaman VS Pengembalian</h6>
</div>
@php
$chartData = app('App\Http\Controllers\HomeController')->generateChartData();
@endphp
<div class="card-body" style="height: 80%;"> <!-- Sesuaikan persentase tinggi konten yang diinginkan -->
<label for="yearFilter">Pilih Tahun:</label>
<select id="yearFilter" class="form-control">
@foreach ($chartData['years'] as $year)
@if ($chartData['exitData'][$loop->index] || $chartData['enterData'][$loop->index])
<option value="{{ $year }}">{{ $year }}</option>
@endif
@endforeach
</select>
<canvas id="ChartAssetStatus" style="width: 100px; height: 68px;"></canvas>
</div>
</div>
</div> </div>
<!-- Area Pie Chart --> <!-- Area Pie Chart -->
<div class="col-xl-5 col-lg-5"> <div class="col-xl-5 col-lg-5">
<div class="card shadow mb-4"> <div class="card shadow mb-4">
@ -118,46 +141,66 @@
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between"> <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Grafik Pengadaan Peti</h6> <h6 class="m-0 font-weight-bold text-primary">Grafik Pengadaan Peti</h6>
</div> </div>
<!-- Card Body --> @php
<div class="card-body"> $chartDataPie = app('App\Http\Controllers\HomeController')->generateChartDataPie();
@endphp
<div class="card-body"> <div class="card-body">
<label for="yearFilter">Pilih Tahun:</label>
<select id="yearFilter" class="form-control">
@foreach ($chartDataPie['years'] as $year)
@if (count($chartDataPie['enterData']) > 0 && $chartDataPie['enterData'][$loop->index])
<option value="{{ $year }}">{{ $year }}</option>
@endif
@endforeach
</select>
<canvas id="myPieChartsiopas"></canvas> <canvas id="myPieChartsiopas"></canvas>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
@push('script') @push('script')
<!-- script pie chart --> <!-- script pie chart -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script> <script>
// Sample data for the pie chart // Function to update the pie chart based on selected year
var data = { function updatePieChart(selectedYear) {
labels: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", // Call the controller function to get data for the selected year
"November", "Desember" var chartData = {!! json_encode(app('App\Http\Controllers\HomeController')->generateChartDataPie()) !!};
], var yearIndex = chartData.years.indexOf(selectedYear);
datasets: [{
data: [30, 40, 30, 25, 35, 45, 20, 30, 40, 50, 30, 20], // Update the pie chart data
backgroundColor: ["#4e73df", "#1cc88a", "#36b9cc", "#ff6384", "#ff9f40", "#9966ff", "#cc65fe", myPieChart.data.datasets[0].data = chartData.enterData[yearIndex];
"#ffcc29", "#a4e56d", "#ff3d00", "#9c9c9c", "#0d47a1" myPieChart.update();
], }
}]
}; // Initial chart data
var initialChartData = {!! json_encode(app('App\Http\Controllers\HomeController')->generateChartDataPie()) !!};
// Get the canvas element for the pie chart // Get the canvas element for the pie chart
var ctx = document.getElementById("myPieChartsiopas").getContext('2d'); var ctx = document.getElementById("myPieChartsiopas").getContext('2d');
// Create the pie chart instance // Create the initial pie chart instance
var myPieChart = new Chart(ctx, { var myPieChart = new Chart(ctx, {
type: 'pie', type: 'pie',
data: data, data: {
labels: initialChartData.monthNames,
datasets: [{
data: initialChartData.enterData[0],
backgroundColor: ["#4e73df", "#1cc88a", "#36b9cc", "#ff6384", "#ff9f40", "#9966ff",
"#cc65fe",
"#ffcc29", "#a4e56d", "#ff3d00", "#9c9c9c", "#0d47a1"
],
}]
},
options: { options: {
responsive: true, responsive: true,
plugins: { plugins: {
legend: { legend: {
position: 'right', // Set the legend position to the right position: 'right',
maxHeight: 200, // Set a maximum height for the legend maxHeight: 200,
}, },
tooltip: { tooltip: {
callbacks: { callbacks: {
@ -166,7 +209,7 @@
if (label) { if (label) {
label += ' : '; label += ' : ';
} }
label += Math.round(context.parsed * 1) + '%'; label += Math.round(context.parsed * 1) + ' Peti';
return label; return label;
} }
} }
@ -177,8 +220,15 @@
// Custom legend using legendCallback // Custom legend using legendCallback
document.getElementById('chart-legend').innerHTML = myPieChart.generateLegend(); document.getElementById('chart-legend').innerHTML = myPieChart.generateLegend();
// Event listener for year filter change
document.getElementById('yearFilter').addEventListener('change', function() {
var selectedYear = this.value;
updatePieChart(selectedYear);
});
</script> </script>
<!-- script bar chart --> <!-- script bar chart -->
<script> <script>
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {

8
resources/views/layouts/sidebar.blade.php

@ -64,7 +64,7 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo" <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo"
aria-expanded="{{ $isUserActive ? 'true' : 'false' }}" aria-controls="collapseTwo"> aria-expanded="{{ $isUserActive ? 'true' : 'false' }}" aria-controls="collapseTwo">
<i class="fas fa-fw fa-user"></i> <i class="fas fa-fw fa-users"></i>
<span>Manajemen User</span> <span>Manajemen User</span>
</a> </a>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar"> <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
@ -78,7 +78,7 @@
</li> </li>
<li class="nav-item {{ $active == 'menu-customer' ? 'active' : '' }}"> <li class="nav-item {{ $active == 'menu-customer' ? 'active' : '' }}">
<a class="nav-link" href="{{ route('dashboard.customer.index') }}"> <a class="nav-link" href="{{ route('dashboard.customer.index') }}">
<i class="fas fa-fw fa-users"></i> <i class="fas fa-fw fa-user"></i>
<span>Customer</span> <span>Customer</span>
</a> </a>
</li> </li>
@ -89,7 +89,7 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsepeti" <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsepeti"
aria-expanded="{{ $isPetiActive ? 'true' : 'false' }}" aria-controls="collapsepeti"> aria-expanded="{{ $isPetiActive ? 'true' : 'false' }}" aria-controls="collapsepeti">
<i class="fas fa-fw fa-user"></i> <i class="fas fa-fw fa-box"></i>
<span>Manajemen Peti</span> <span>Manajemen Peti</span>
</a> </a>
<div id="collapsepeti" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar"> <div id="collapsepeti" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
@ -106,7 +106,7 @@
</li> </li>
<li class="nav-item {{ $active == 'menu-warehouse' ? 'active' : '' }}"> <li class="nav-item {{ $active == 'menu-warehouse' ? 'active' : '' }}">
<a class="nav-link" href="{{ route('dashboard.warehouse.index') }}"> <a class="nav-link" href="{{ route('dashboard.warehouse.index') }}">
<i class="fas fa-fw fa-table"></i> <i class="fas fa-fw fa-warehouse"></i>
<span>Warehouse</span> <span>Warehouse</span>
</a> </a>
</li> </li>

4
routes/web.php

@ -85,9 +85,9 @@ Route::prefix('dashboard')->name('dashboard.')->middleware(['auth'])->group(func
Route::get('disposal', 'index')->name('disposal.index'); Route::get('disposal', 'index')->name('disposal.index');
Route::get('disposal/create', 'create')->name('disposal.create'); Route::get('disposal/create', 'create')->name('disposal.create');
Route::post('disposal/store', 'store')->name('disposal.store'); Route::post('disposal/store', 'store')->name('disposal.store');
Route::get('disposal/{id}', 'show')->name('disposal.show'); // Route::get('disposal/{id}', 'show')->name('disposal.show');
Route::get('disposal/{id}/edit', 'edit')->name('disposal.edit'); Route::get('disposal/{id}/edit', 'edit')->name('disposal.edit');
Route::put('disposal/{id}', 'update')->name('disposal.update'); // Route::put('disposal/{id}', 'update')->name('disposal.update');
Route::delete('disposal/delete/{id}', 'destroy')->name('disposal.destroy'); Route::delete('disposal/delete/{id}', 'destroy')->name('disposal.destroy');
}); });

Loading…
Cancel
Save