From f70c2ef4ef43ccd9bae572228d7246512423c8b0 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 4 May 2025 11:23:57 +0800 Subject: [PATCH] tambah laporan keseluruhan peti besi --- .../PetibesiAllExportExcel.php | 72 ++++++++++++++ .../Reports/PetibesiController.php | 84 ++++++++++++++++ resources/views/indexOverallReport.blade.php | 6 ++ resources/views/layouts/sidebar.blade.php | 11 +++ .../views/reports/petibesi/index.blade.php | 99 +++++++++++++++++++ routes/reports.php | 2 + 6 files changed, 274 insertions(+) create mode 100644 app/Exports/LaporanKeseluruhan/PetibesiAllExportExcel.php create mode 100644 app/Http/Controllers/Reports/PetibesiController.php create mode 100644 resources/views/reports/petibesi/index.blade.php diff --git a/app/Exports/LaporanKeseluruhan/PetibesiAllExportExcel.php b/app/Exports/LaporanKeseluruhan/PetibesiAllExportExcel.php new file mode 100644 index 0000000..c1fa956 --- /dev/null +++ b/app/Exports/LaporanKeseluruhan/PetibesiAllExportExcel.php @@ -0,0 +1,72 @@ +petibesiData = $petibesiData; + } + + public function collection() + { + return collect($this->petibesiData); + } + + public function headings(): array + { + return [ + 'No.', + 'Kod Cawangan', + 'Cawangan', + 'Nilai (RM)', + ]; + } + + public function map($row): array + { + $nilai = is_numeric($row['bakieod'] ?? null) ? (float) $row['bakieod'] : 0; + $this->total += $nilai; + + return [ + $this->counter++, + $row['kodcaw'] ?? '', + $row['details_caw'] ?? '', + number_format($nilai, 2), + ]; + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + + // 1. Tajuk laporan pada baris 1 + $event->sheet->mergeCells('A1:D1'); + $event->sheet->setCellValue('A1', 'LAPORAN PETI BESI'); + $event->sheet->getStyle('A1')->getFont()->setSize(14)->setBold(true); + $event->sheet->getStyle('A1')->getAlignment()->setHorizontal('center'); + + // 2. Jumlah keseluruhan di bawah data + $lastRow = count($this->petibesiData) + 3; // +3 sebab ada tajuk + heading + + $event->sheet->setCellValue("A{$lastRow}", 'Jumlah Keseluruhan'); + $event->sheet->mergeCells("A{$lastRow}:C{$lastRow}"); + $event->sheet->setCellValue("D{$lastRow}", number_format($this->total, 2)); + $event->sheet->getStyle("A{$lastRow}:D{$lastRow}")->getFont()->setBold(true); + }, + ]; + } + +} diff --git a/app/Http/Controllers/Reports/PetibesiController.php b/app/Http/Controllers/Reports/PetibesiController.php new file mode 100644 index 0000000..e3954d5 --- /dev/null +++ b/app/Http/Controllers/Reports/PetibesiController.php @@ -0,0 +1,84 @@ +hostname = config('api.url'); + // dd($request->hostname ); + $kod_cawangan = $request->kod_cawangan; + $action = $request->input('action', 'search'); + // dd($action); + + $getReportDate = function ($date_string) use ($current) { + if ($date_string == null) { + return $current->toDateString(); + } + + return $date_string; + }; + + $request->hostname = config('api.url'); + + $petibesi = Http::get($request->hostname . '/api/reports/petibesi', [ + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + $endDate = $getReportDate($request->endDate); + + if ($action === 'excel') { + $file_title = sprintf("LaporanPetibesiCawangan.xlsx", $kod_cawangan, $request->endDate); + return Excel::download(new PetibesiAllExportExcel($petibesi), $file_title); + } + + $petibesi = $petibesi ?? []; + + return view('reports.petibesi.index', compact('petibesi', 'endDate')); + } + + public function show(Request $request) + { + $current = Carbon::now(); + $action = $request->input('action', 'search'); + + $getReportDate = function ($date_string) use ($current) { + return $date_string ? $date_string : $current->toDateString(); + }; + + $hostname = config('api.url'); + + $response = Http::get("$hostname/api/reports/petibesi", [ + 'endDate' => $getReportDate($request->endDate), + ]); + + $petibesi = $response->json() ?? []; // Ensure it's an array + + // Debugging: Check the response before using it + if (empty($petibesi)) { + return back()->with('error', 'Failed to fetch data from API.'); + } + + $endDate = $getReportDate($request->endDate); + + if ($action === 'excel') { + // Ensure $kod_cawangan is defined (Modify as per your data structure) + $kod_cawangan = $request->input('kod_cawangan', 'DEFAULT'); + + $file_title = sprintf("LaporanPetibesi(%s).xlsx", $kod_cawangan, $endDate); + return Excel::download(new PetibesiAllExportExcel($petibesi), $file_title); + } + return view('reports.petibesi.index', compact('petibesi', 'endDate')); + } +} diff --git a/resources/views/indexOverallReport.blade.php b/resources/views/indexOverallReport.blade.php index 206de5e..a387d62 100644 --- a/resources/views/indexOverallReport.blade.php +++ b/resources/views/indexOverallReport.blade.php @@ -62,6 +62,12 @@

Outstanding

+
+ +

Peti Besi Cawangan

+
+
diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php index 4fc416e..68c0203 100644 --- a/resources/views/layouts/sidebar.blade.php +++ b/resources/views/layouts/sidebar.blade.php @@ -317,6 +317,17 @@ + +
  • +
    + + + + Laporan Keseluruhan +
    +
  • +
    + {{--
  • diff --git a/resources/views/reports/petibesi/index.blade.php b/resources/views/reports/petibesi/index.blade.php new file mode 100644 index 0000000..92c51ef --- /dev/null +++ b/resources/views/reports/petibesi/index.blade.php @@ -0,0 +1,99 @@ +@extends('layouts.app') + +@section('content') + +
    +
    + +
    + @include('layouts.footer') +
    +@endsection + + diff --git a/routes/reports.php b/routes/reports.php index fc3093b..64755ae 100644 --- a/routes/reports.php +++ b/routes/reports.php @@ -8,6 +8,7 @@ use App\Http\Controllers\Reports\StokAuditController; use App\Http\Controllers\Reports\LelonganController; use App\Http\Controllers\Reports\AgingController; use App\Http\Controllers\Reports\OutstandingController; +use App\Http\Controllers\Reports\PetibesiController; use Illuminate\Support\Facades\Route; Route::middleware(['roleChecker:admin,akaun,operasi,kpo, null'])->group(function () { @@ -29,4 +30,5 @@ Route::middleware(['roleChecker:admin,akaun,operasi,kpo, null'])->group(function Route::get('aging/view', [AgingController::class, 'index'])->name('reports.aging.index'); Route::get('laporan-aging/view', [AgingController::class, 'show'])->name('reports.aging.show'); Route::get('outstanding/view', [OutstandingController::class, 'index'])->name('reports.outstanding.index'); + Route::get('petibesi/view', [PetibesiController::class, 'index'])->name('reports.petibesi.index'); });