diff --git a/app/Exports/LelonganExport.php b/app/Exports/LelonganExport.php
new file mode 100644
index 0000000..8109596
--- /dev/null
+++ b/app/Exports/LelonganExport.php
@@ -0,0 +1,53 @@
+cawangan_detail = $data['cawangan_detail'];
+ $this->query = $data['query'];
+ $this->lelongan = $data['lelongan'];
+ $this->summary_lelongan = $data['summary_lelongan'];
+ }
+
+ public function sheets(): array
+ {
+ $sheets = [];
+
+ // Use array_reduce to calculate the sum of values
+ $data = $this->lelongan;
+ $teller_with_lelongan_summary_data = array_reduce(array_keys($data), function ($accumulator, $key) use ($data) {
+ $accumulator[] = [
+ 'teller' => $key,
+ 'summary_lelongan_teller' => $data[$key]['summary_lelongan_teller'],
+ ];
+ return $accumulator;
+ }, []);
+
+
+
+
+ $sheets[] = new LelonganSummaryExport($this->cawangan_detail, $this->query, $teller_with_lelongan_summary_data, $this->summary_lelongan);
+
+ foreach ($this->lelongan as $teller => $data) {
+
+ $teller_with_lelongan_data = [
+ 'teller' => $teller,
+ 'data' => $data,
+ ];
+
+ $sheets[] = new LelonganPerTellerExport($this->cawangan_detail, $this->query, $teller_with_lelongan_data);
+ }
+
+ return $sheets;
+ }
+}
diff --git a/app/Exports/LelonganPerTellerExport.php b/app/Exports/LelonganPerTellerExport.php
new file mode 100644
index 0000000..9c79588
--- /dev/null
+++ b/app/Exports/LelonganPerTellerExport.php
@@ -0,0 +1,123 @@
+cawangan_detail = $cawangan_detail;
+ $this->query = $query;
+ $this->teller_with_lelongan_data = $teller_with_lelongan_data;
+ }
+
+ public function title(): string
+ {
+ return sprintf("TELLER %s", $this->teller_with_lelongan_data['teller']);
+ }
+
+ public function bindValue(Cell $cell, $value)
+ {
+ if (is_numeric($value)) {
+ $cell->setValueExplicit($value, DataType::TYPE_NUMERIC);
+
+ return true;
+ }
+
+ // else return default behavior
+ return parent::bindValue($cell, $value);
+ }
+
+ public function columnWidths(): array
+ {
+ return [
+ 'A' => 20.5,
+ 'B' => 42,
+ 'C' => 14.18,
+ 'D' => 14.18,
+ 'E' => 9.19,
+ 'F' => 27.5,
+ ];
+ }
+
+ public function columnFormats(): array
+ {
+ return [
+ 'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'E' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'F' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'G' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'H' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'I' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'J' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'K' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'L' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ ];
+ }
+
+ public function registerEvents(): array
+ {
+ $table_style = [
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => '#000000'],
+ ],
+ ],
+ ];
+
+ $main_table_row_count = count($this->teller_with_lelongan_data) + 1;
+ $main_table_start_at_row = 9;
+
+ $main_table_range = 'A' . $main_table_start_at_row . ':J' . ($main_table_row_count + $main_table_start_at_row);
+
+ $summary_table_row_count = 1;
+ $summary_table_start_at_row = $main_table_row_count + $main_table_start_at_row + 5;
+
+ $summary_table_range = 'A' . $summary_table_start_at_row . ':I' . ($summary_table_row_count + $summary_table_start_at_row);
+
+ $summary_table_column_head = 'A' . $summary_table_start_at_row . ':F' . $summary_table_start_at_row;
+
+ // return [
+ // AfterSheet::class => function (AfterSheet $event) use ($main_table_range, $summary_table_range, $summary_table_column_head, $table_style) {
+
+ // $event->sheet->getStyle($main_table_range)->applyFromArray($table_style);
+ // $event->sheet->getStyle($summary_table_range)->applyFromArray($table_style);
+
+ // $event->sheet->mergeCells($summary_table_column_head);
+
+ // },
+
+ // ];
+
+ return [];
+ }
+
+ public function view(): View
+ {
+ return view('exports.lelongan.cawangan', [
+ 'cawangan_detail' => $this->cawangan_detail,
+ 'query' => $this->query,
+ 'teller_with_lelongan_data' => $this->teller_with_lelongan_data,
+ ]);
+ }
+}
diff --git a/app/Exports/LelonganSummaryExport.php b/app/Exports/LelonganSummaryExport.php
new file mode 100644
index 0000000..f6dad6d
--- /dev/null
+++ b/app/Exports/LelonganSummaryExport.php
@@ -0,0 +1,121 @@
+cawangan_detail = $cawangan_detail;
+ $this->query = $query;
+ $this->teller_with_lelongan_summary_data = $teller_with_lelongan_data;
+ $this->summary_lelongan = $summary_lelongan;
+ }
+
+ public function title(): string
+ {
+ return 'SUMMARY LELONGAN';
+ }
+
+ public function bindValue(Cell $cell, $value)
+ {
+ if (is_numeric($value)) {
+ $cell->setValueExplicit($value, DataType::TYPE_NUMERIC);
+
+ return true;
+ }
+
+ // else return default behavior
+ return parent::bindValue($cell, $value);
+ }
+
+ public function columnWidths(): array
+ {
+ return [
+ 'A' => 28,
+ 'B' => 14.67,
+ 'C' => 16.00,
+ 'D' => 14.18,
+ ];
+ }
+
+ public function columnFormats(): array
+ {
+ return [
+ 'E' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'F' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'G' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'H' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'I' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'J' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'C' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ 'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
+ ];
+ }
+
+ public function registerEvents(): array
+ {
+ $table_style = [
+ 'borders' => [
+ 'allBorders' => [
+ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
+ 'color' => ['argb' => '#000000'],
+ ],
+ ],
+ ];
+
+ $main_table_row_count = count($this->teller_with_lelongan_summary_data) + 1;
+ $main_table_start_at_row = 9;
+
+ $main_table_range = 'A' . $main_table_start_at_row . ':J' . ($main_table_row_count + $main_table_start_at_row);
+
+ $summary_table_row_count = 1;
+ $summary_table_start_at_row = $main_table_row_count + $main_table_start_at_row + 5;
+
+ $summary_table_range = 'A' . $summary_table_start_at_row . ':I' . ($summary_table_row_count + $summary_table_start_at_row);
+
+ $summary_table_column_head = 'A' . $summary_table_start_at_row . ':F' . $summary_table_start_at_row;
+
+ // return [
+ // AfterSheet::class => function (AfterSheet $event) use ($main_table_range, $summary_table_range, $summary_table_column_head, $table_style) {
+
+ // $event->sheet->getStyle($main_table_range)->applyFromArray($table_style);
+ // $event->sheet->getStyle($summary_table_range)->applyFromArray($table_style);
+
+ // $event->sheet->mergeCells($summary_table_column_head);
+
+ // },
+
+ // ];
+
+ return [];
+ }
+
+ public function view(): View
+ {
+ return view('exports.lelongan.summary', [
+ 'cawangan_detail' => $this->cawangan_detail,
+ 'query' => $this->query,
+ 'teller_with_lelongan_data' => $this->teller_with_lelongan_summary_data,
+ 'summary_lelongan' => $this->summary_lelongan,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php
new file mode 100644
index 0000000..5aca29f
--- /dev/null
+++ b/app/Http/Controllers/Reports/LelonganController.php
@@ -0,0 +1,111 @@
+toDateString();
+ }
+
+ return $date_string;
+ };
+
+ $request->hostname = config('api.url');
+
+ $lelongan = Http::get($request->hostname . '/api/reports/lelongan', [
+ 'startDate' => $getReportDate($request->startDate),
+ 'endDate' => $getReportDate($request->endDate),
+ ])->json();
+ // dd($lelongan);
+
+ $startDate = $getReportDate($request->startDate);
+ $endDate = $getReportDate($request->endDate);
+
+ return view('reports.laporan-lelong.index', compact('lelongan', 'startDate', 'endDate'));
+ }
+
+ public function show(Request $request)
+ {
+ $validated = $request->validate(
+ ['monthYear' => 'required'],
+ ['monthYear.required' => 'Sila isi tarikh sebelum hantar',
+ ]);
+
+ $current = Carbon::now();
+ $tarikh_cetak = $current->toDateString();
+ $tokens = explode('-', $validated['monthYear']);
+ $month = ltrim($tokens[0], '0');
+ $year = $tokens[1];
+
+ // Set the locale to Malaysian
+ App::setLocale('ms');
+
+ // Create a Carbon instance representing the date
+ $date = Carbon::createFromDate($year, $month, 1); // Set the day to 1st of the month
+
+ // Get the name of the month in Malaysian local
+ $monthName = $date->translatedFormat('F');
+
+ $request->hostname = config('api.url');
+
+ $stokAudit = Http::get($request->hostname . '/api/reports/stok-audit', [
+ 'month' => $month,
+ 'year' => $year,
+ ])->json();
+
+ $tebus_date = $monthName . ' ' . $year;
+ $file_title = sprintf("Laporan-StokAudit %s (%s - %s).xlsx", 'Semua cawanangan', $monthName, $year);
+
+ if ($request->generateType === 'pdf') {
+ return view('reports.stok-audit.show', compact('tebus_date', 'tarikh_cetak', 'stokAudit', 'month', 'year'));
+ } else {
+ return Excel::download(new StokAuditExport($stokAudit), $file_title);
+ }
+
+ }
+ public function downloadLelonganCawanganExcel(Request $request)
+ {
+ $api_url = $request->hostname;
+ $auth_user = Auth::user();
+ $current = Carbon::now();
+ $current = new Carbon();
+ $tarikh_cetak = $current->toDateString();
+
+ $getReportDate = function ($date_string) use ($current) {
+ if ($date_string == null) {
+ return $current->toDateString();
+ }
+
+ return $date_string;
+ };
+
+ $request->hostname = config('api.url');
+ $kod_cawangan = $request->kod_cawangan;
+ // dd($kod_cawangan);
+
+ $data = Http::get($request->hostname . '/api/reports/lelongan/' . $kod_cawangan, [
+ 'startDate' => $getReportDate($request->startDate),
+ 'endDate' => $getReportDate($request->endDate),
+ ])->json();
+ // dd($data);
+
+
+ $file_title = sprintf("LaporanLelongan %s (%s - %s).xlsx", $kod_cawangan, $request->startDate, $request->endDate);
+ return Excel::download(new LelonganExport($data), $file_title);
+ }
+}
diff --git a/resources/views/exports/lelongan/cawangan.blade.php b/resources/views/exports/lelongan/cawangan.blade.php
new file mode 100644
index 0000000..b1d7c59
--- /dev/null
+++ b/resources/views/exports/lelongan/cawangan.blade.php
@@ -0,0 +1,95 @@
+
+
+ | {{ $cawangan_detail['nama'] }} |
+
+
+ | {{ $cawangan_detail['code'] }} |
+
+
+ | {{ $cawangan_detail['alamat'] }} |
+
+
+ | {{ $cawangan_detail['waktu_operasi'] }} |
+
+
+
+
+
+ |
+ LAPORAN LELONGAN
+ |
+
+
+ |
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }}
+ |
+
+
+
+
+ |
+ TELLER : {{ $teller_with_lelongan_data['teller'] }}
+ |
+
+
+
+
+
+ | No rujukan |
+ Nama |
+
+ No KP |
+
+ Marhun |
+ Berat |
+ Nilai Marhun (RM) |
+ Pembiayaan (RM) |
+ % |
+ Baki Pembiayaan (RM) |
+ Keuntungan (RM) |
+ Caj Lelong (RM) |
+ Harga Jual (RM) |
+ Baki(RM) |
+
+
+
+ @foreach ($teller_with_lelongan_data['data']['lelongan'] as $lelongan_detail)
+
+ | {{ $lelongan_detail['no_rujukan'] }} |
+ {{ $lelongan_detail['nama'] }} |
+
+ '{{ $lelongan_detail['no_kp'] }} |
+
+ {{ $lelongan_detail['marhun'] }} |
+ {{ $lelongan_detail['berat'] }} |
+ {{ $lelongan_detail['nilai_marhun'] }} |
+ {{ $lelongan_detail['pinjaman'] }} |
+ {{ $lelongan_detail['peratusan_margin_pinjaman'] }} |
+ {{ $lelongan_detail['bakipjm'] }} |
+ {{ $lelongan_detail['keuntungan'] }} |
+ {{ $lelongan_detail['cajlelong'] }} |
+ {{ $lelongan_detail['hargajual'] }} |
+ {{ $lelongan_detail['baki'] }} |
+
+
+
+
+ @endforeach
+
+ |
+ |
+ |
+ Jumlah |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_berat'] }} |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_nilai_marhun'] }} |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_pembiayaan'] }} |
+ |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_bakipjm'] }} |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_keuntungan'] }} |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_cajlelong'] }} |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_hargajual'] }} |
+ {{ $teller_with_lelongan_data['data']['summary_lelongan_teller']['total_baki'] }} |
+
+
+
+
diff --git a/resources/views/exports/lelongan/summary.blade.php b/resources/views/exports/lelongan/summary.blade.php
new file mode 100644
index 0000000..6875bde
--- /dev/null
+++ b/resources/views/exports/lelongan/summary.blade.php
@@ -0,0 +1,72 @@
+
+
+ | {{ $cawangan_detail['nama'] }} |
+
+
+ | {{ $cawangan_detail['code'] }} |
+
+
+ | {{ $cawangan_detail['alamat'] }} |
+
+
+ | {{ $cawangan_detail['waktu_operasi'] }} |
+
+
+
+
+
+ |
+ LAPORAN LELONGAN
+ |
+
+
+ |
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }}
+ |
+
+
+
+
+ | Teller |
+ Bil |
+ Berat |
+ N.Marhun |
+ Pembiayaan(RM) |
+ Baki Pembiayaan(RM) |
+ Keuntungan(RM) |
+ Caj Lelong(RM) |
+ Harga Jual(RM) |
+ Baki(RM) |
+
+
+ @foreach ($teller_with_lelongan_data as $data)
+
+ | {{ $data['teller'] }} |
+ {{ $data['summary_lelongan_teller']['total_lelongan'] }} |
+ {{ $data['summary_lelongan_teller']['total_berat'] }} |
+ {{ $data['summary_lelongan_teller']['total_nilai_marhun'] }} |
+ {{ $data['summary_lelongan_teller']['total_pembiayaan'] }} |
+ {{ $data['summary_lelongan_teller']['total_bakipjm'] }} |
+ {{ $data['summary_lelongan_teller']['total_keuntungan'] }} |
+ {{ $data['summary_lelongan_teller']['total_cajlelong'] }} |
+ {{ $data['summary_lelongan_teller']['total_hargajual'] }} |
+ {{ $data['summary_lelongan_teller']['total_baki'] }} |
+
+
+
+ @endforeach
+
+ |
+ {{ $summary_lelongan['total_lelongan'] }} |
+ {{ $summary_lelongan['total_berat'] }} |
+ {{ $summary_lelongan['total_nilai_marhun'] }} |
+ {{ $summary_lelongan['total_pembiayaan'] }} |
+ {{ $summary_lelongan['total_bakipjm'] }} |
+ {{ $summary_lelongan['total_keuntungan'] }} |
+ {{ $summary_lelongan['total_cajlelong'] }} |
+ {{ $summary_lelongan['total_hargajual'] }} |
+ {{ $summary_lelongan['total_baki'] }} |
+
+
+
+
diff --git a/resources/views/indexOverallReport.blade.php b/resources/views/indexOverallReport.blade.php
index a3e97b5..aaf134f 100644
--- a/resources/views/indexOverallReport.blade.php
+++ b/resources/views/indexOverallReport.blade.php
@@ -43,6 +43,12 @@
Stok Audit
+
diff --git a/resources/views/reports/laporan-lelong/index.blade.php b/resources/views/reports/laporan-lelong/index.blade.php
new file mode 100644
index 0000000..dfb8961
--- /dev/null
+++ b/resources/views/reports/laporan-lelong/index.blade.php
@@ -0,0 +1,359 @@
+@extends('layouts.app')
+
+@section('content')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ No
+ |
+
+ Kod Cawangan
+ |
+
+ Cawangan
+ |
+
+ Bil
+ |
+
+ Berat (g)
+ |
+
+ Nilai Marhun(RM)
+ |
+
+ Pembiayaan(RM)
+ |
+
+ Baki Pembiayaan(RM)
+ |
+
+ Keuntungan(RM)
+ |
+
+ Caj Lelong(RM)
+ |
+
+ Harga Jual(RM)
+ |
+
+ Baki(RM)
+ |
+
+ Action
+ |
+
+
+ @php
+ $totalbillelong = 0;
+ $totalberat = 0;
+ $totalnm = 0;
+ $totalpinjaman = 0;
+ $totalbakipjm = 0;
+ $totalkeuntungan = 0;
+ $totalcajlelong = 0;
+ $totalhargajual= 0;
+ $totalbaki= 0;
+ @endphp
+
+ @forelse ($lelongan as $lelong)
+ @php
+ $totalbillelong += $lelong['total_lelongan'];
+ $totalberat += $lelong['sum_berat'];
+ $totalnm += $lelong['sum_nilai_marhun'];
+ $totalpinjaman += $lelong['sum_pinjaman'];
+ $totalbakipjm += $lelong['sum_bakipjm'];
+ $totalkeuntungan += $lelong['sum_bakiupah'];
+ $totalcajlelong+= $lelong['sum_cajlelong'];
+ $totalhargajual+= $lelong['sum_hargajual'];
+ $totalbaki+= $lelong['sum_baki'];
+ @endphp
+
+
+
+
+
+ {{ $loop->iteration }}
+
+
+ |
+
+
+
+ {{ $lelong['kodcaw'] }}
+
+
+ |
+
+
+
+ {{ $lelong['details_caw'] }}
+
+
+ |
+
+
+
+ {{ $lelong['total_lelongan'] }}
+
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_berat'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_nilai_marhun'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_pinjaman'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_bakipjm'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_bakiupah'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_cajlelong'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_hargajual'], 2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($lelong['sum_baki'], 2) }}
+
+
+ |
+
+
+ |
+
+ @empty
+
+ |
+
+ |
+
+ @endforelse
+
+ |
+
+ |
+
+
+
+ {{ $totalbillelong}}
+
+
+
+ |
+
+
+
+
+ {{ number_format($totalberat,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalnm,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalpinjaman,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalbakipjm,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalkeuntungan,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalcajlelong,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalhargajual,2) }}
+
+
+ |
+
+
+
+
+ {{ number_format($totalbaki,2) }}
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ @include('layouts.footer')
+
+
+@endsection
\ No newline at end of file
diff --git a/routes/reports.php b/routes/reports.php
index 0748b1c..1831f78 100644
--- a/routes/reports.php
+++ b/routes/reports.php
@@ -5,6 +5,7 @@ use App\Http\Controllers\Reports\PenebusanController;
use App\Http\Controllers\Reports\AnsuranController;
use App\Http\Controllers\Reports\RingkasanHarianController;
use App\Http\Controllers\Reports\StokAuditController;
+use App\Http\Controllers\Reports\LelonganController;
use Illuminate\Support\Facades\Route;
Route::middleware(['roleChecker:admin,akaun,operasi,kpo, null'])->group(function () {
@@ -19,4 +20,6 @@ Route::middleware(['roleChecker:admin,akaun,operasi,kpo, null'])->group(function
Route::get('ringkasan-harian/{kod_cawangan}', [RingkasanHarianController::class, 'downloadRingkasanHarianPdf'])->name('reports.ringkasan-harian.cawangan.pdf');
Route::get('stok-audit', [StokAuditController::class, 'index'])->name('reports.stok-audit.index');
Route::get('stok-audit/view', [StokAuditController::class, 'show'])->name('reports.stok-audit.show');
+ Route::get('laporan-lelong', [LelonganController::class, 'index'])->name('reports.lelongan.index');
+ Route::get('lelongan/{kod_cawangan}', [LelonganController::class, 'downloadLelonganCawanganExcel'])->name('reports.lelongan.cawangan.excel');
});