diff --git a/app/Exports/Ansuran/AnsuranExport.php b/app/Exports/Ansuran/AnsuranExport.php new file mode 100644 index 0000000..cf1c819 --- /dev/null +++ b/app/Exports/Ansuran/AnsuranExport.php @@ -0,0 +1,51 @@ +cawangan_detail = $data['cawangan_detail']; + $this->query = $data['query']; + $this->ansuran = $data['total_ansuran']; + $this->summary_ansuran = $data['summary_ansuran']; + } + + public function sheets(): array + { + $sheets = []; + + // Use array_reduce to calculate the sum of values + $data = $this->ansuran; + $teller_with_gadaian_summary_data = array_reduce(array_keys($data), function ($accumulator, $key) use ($data) { + $accumulator[] = [ + 'teller' => $key, + 'summary_ansuran_teller' => $data[$key]['summary_ansuran_teller'], + ]; + return $accumulator; + }, []); + + + $sheets[] = new AnsuranSummaryExport($this->cawangan_detail, $this->query, $teller_with_gadaian_summary_data, $this->summary_ansuran); + + foreach ($this->ansuran as $teller => $data) { + + $teller_with_gadaian_data = [ + 'teller' => $teller, + 'data' => $data, + ]; + + $sheets[] = new AnsuranPerTellerExport($this->cawangan_detail, $this->query, $teller_with_gadaian_data); + } + + return $sheets; + } +} diff --git a/app/Exports/Ansuran/AnsuranPerTellerExport.php b/app/Exports/Ansuran/AnsuranPerTellerExport.php new file mode 100644 index 0000000..152b699 --- /dev/null +++ b/app/Exports/Ansuran/AnsuranPerTellerExport.php @@ -0,0 +1,124 @@ +cawangan_detail = $cawangan_detail; + $this->query = $query; + $this->teller_with_ansuran_data = $teller_with_ansuran_data; + } + + public function title(): string + { + return sprintf("TELLER %s", $this->teller_with_ansuran_data['teller']); + } + + public function bindValue(Cell $cell, $value) + { + if (is_numeric($value)) { + $cell->setValueExplicit($value, DataType::TYPE_NUMERIC); + + return true; + } + + + $datePattern = '/^\d{4}-\d{2}-\d{2}$/'; + if (preg_match($datePattern, $value)) { + $cell->setValueExplicit( (new Carbon($value))->format('d/m/Y'), DataType::TYPE_STRING); + return true; + } + + // else return default behavior + return parent::bindValue($cell, $value); + } + + public function columnWidths(): array + { + return [ + 'A' => 20.5, + 'B' => 42, + 'C' => 14.50, + 'D' => 21.33, + 'E' => 21.67, + 'F' => 20.50, + ]; + } + + public function columnFormats(): array + { + return [ + 'C' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'E' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'F' => 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_ansuran_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.ansuran.cawangan', [ + 'cawangan_detail' => $this->cawangan_detail, + 'query' => $this->query, + 'teller_with_ansuran_data' => $this->teller_with_ansuran_data, + ]); + } +} diff --git a/app/Exports/Ansuran/AnsuranSummaryExport.php b/app/Exports/Ansuran/AnsuranSummaryExport.php new file mode 100644 index 0000000..ed833ad --- /dev/null +++ b/app/Exports/Ansuran/AnsuranSummaryExport.php @@ -0,0 +1,118 @@ +cawangan_detail = $cawangan_detail; + $this->query = $query; + $this->teller_with_ansuran_summary_data = $teller_with_ansuran_data; + $this->summary_ansuran = $summary_ansuran; + } + + public function title(): string + { + return 'SUMMARY ANSURAN'; + } + + 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' => 27, + 'B' => 21.30, + 'C' => 21.33, + 'D' => 24.67, + 'E' => 17.0, + ]; + } + + public function columnFormats(): array + { + return [ + 'B' => NumberFormat::FORMAT_NUMBER, + 'C' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'E' => 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_ansuran_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.ansuran.summary', [ + 'cawangan_detail' => $this->cawangan_detail, + 'query' => $this->query, + 'teller_with_ansuran_data' => $this->teller_with_ansuran_summary_data, + 'summary_ansuran' => $this->summary_ansuran, + ]); + } +} diff --git a/app/Exports/GadaianExport.php b/app/Exports/GadaianExport.php new file mode 100644 index 0000000..ac06b40 --- /dev/null +++ b/app/Exports/GadaianExport.php @@ -0,0 +1,53 @@ +cawangan_detail = $data['cawangan_detail']; + $this->query = $data['query']; + $this->gadaian = $data['gadaian']; + $this->summary_gadaian = $data['summary_gadaian']; + } + + public function sheets(): array + { + $sheets = []; + + // Use array_reduce to calculate the sum of values + $data = $this->gadaian; + $teller_with_gadaian_summary_data = array_reduce(array_keys($data), function ($accumulator, $key) use ($data) { + $accumulator[] = [ + 'teller' => $key, + 'summary_gadaian_teller' => $data[$key]['summary_gadaian_teller'], + ]; + return $accumulator; + }, []); + + + + + $sheets[] = new GadaianSummaryExport($this->cawangan_detail, $this->query, $teller_with_gadaian_summary_data, $this->summary_gadaian); + + foreach ($this->gadaian as $teller => $data) { + + $teller_with_gadaian_data = [ + 'teller' => $teller, + 'data' => $data, + ]; + + $sheets[] = new GadaianPerTellerExport($this->cawangan_detail, $this->query, $teller_with_gadaian_data); + } + + return $sheets; + } +} diff --git a/app/Exports/GadaianPerTellerExport.php b/app/Exports/GadaianPerTellerExport.php new file mode 100644 index 0000000..679bc9a --- /dev/null +++ b/app/Exports/GadaianPerTellerExport.php @@ -0,0 +1,119 @@ +cawangan_detail = $cawangan_detail; + $this->query = $query; + $this->teller_with_gadaian_data = $teller_with_gadaian_data; + } + + public function title(): string + { + return sprintf("TELLER %s", $this->teller_with_gadaian_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' => 60, + 'D' => 14.18, + 'E' => 9.19, + 'F' => 27.5, + ]; + } + + public function columnFormats(): array + { + return [ + 'D' => NumberFormat::FORMAT_NUMBER, + 'G' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'H' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'I' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'J' => NumberFormat::FORMAT_NUMBER_00, + ]; + } + + 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_gadaian_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.gadaian.cawangan', [ + 'cawangan_detail' => $this->cawangan_detail, + 'query' => $this->query, + 'teller_with_gadaian_data' => $this->teller_with_gadaian_data, + ]); + } +} diff --git a/app/Exports/GadaianSummaryExport.php b/app/Exports/GadaianSummaryExport.php new file mode 100644 index 0000000..d2287ca --- /dev/null +++ b/app/Exports/GadaianSummaryExport.php @@ -0,0 +1,116 @@ +cawangan_detail = $cawangan_detail; + $this->query = $query; + $this->teller_with_gadaian_summary_data = $teller_with_gadaian_data; + $this->summary_gadaian = $summary_gadaian; + } + + public function title(): string + { + return 'SUMMARY GADAIAN'; + } + + 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 [ + 'B' => 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_gadaian_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.gadaian.summary', [ + 'cawangan_detail' => $this->cawangan_detail, + 'query' => $this->query, + 'teller_with_gadaian_data' => $this->teller_with_gadaian_summary_data, + 'summary_gadaian' => $this->summary_gadaian, + ]); + } +} diff --git a/app/Exports/Penebusan/PenebusanExport.php b/app/Exports/Penebusan/PenebusanExport.php new file mode 100644 index 0000000..616cb93 --- /dev/null +++ b/app/Exports/Penebusan/PenebusanExport.php @@ -0,0 +1,51 @@ +cawangan_detail = $data['cawangan_detail']; + $this->query = $data['query']; + $this->penebusan = $data['penebusan']; + $this->summary_penebusan = $data['summary_penebusan']; + } + + public function sheets(): array + { + $sheets = []; + + // Use array_reduce to calculate the sum of values + $data = $this->penebusan; + $teller_with_gadaian_summary_data = array_reduce(array_keys($data), function ($accumulator, $key) use ($data) { + $accumulator[] = [ + 'teller' => $key, + 'summary_penebusan_teller' => $data[$key]['summary_penebusan_teller'], + ]; + return $accumulator; + }, []); + + + $sheets[] = new PenebusanSummaryExport($this->cawangan_detail, $this->query, $teller_with_gadaian_summary_data, $this->summary_penebusan); + + foreach ($this->penebusan as $teller => $data) { + + $teller_with_gadaian_data = [ + 'teller' => $teller, + 'data' => $data, + ]; + + $sheets[] = new PenebusanPerTellerExport($this->cawangan_detail, $this->query, $teller_with_gadaian_data); + } + + return $sheets; + } +} diff --git a/app/Exports/Penebusan/PenebusanPerTellerExport.php b/app/Exports/Penebusan/PenebusanPerTellerExport.php new file mode 100644 index 0000000..31b1cd3 --- /dev/null +++ b/app/Exports/Penebusan/PenebusanPerTellerExport.php @@ -0,0 +1,128 @@ +cawangan_detail = $cawangan_detail; + $this->query = $query; + $this->teller_with_penebusan_data = $teller_with_penebusan_data; + } + + public function title(): string + { + return sprintf("TELLER %s", $this->teller_with_penebusan_data['teller']); + } + + public function bindValue(Cell $cell, $value) + { + if (is_numeric($value)) { + $cell->setValueExplicit($value, DataType::TYPE_NUMERIC); + + return true; + } + + + $datePattern = '/^\d{4}-\d{2}-\d{2}$/'; + if (preg_match($datePattern, $value)) { + $cell->setValueExplicit( (new Carbon($value))->format('d/m/Y'), DataType::TYPE_STRING); + return true; + } + + // else return default behavior + return parent::bindValue($cell, $value); + } + + public function columnWidths(): array + { + return [ + 'A' => 20.5, + 'B' => 42, + 'C' => 60, + 'D' => 14.18, + 'E' => 9.19, + 'F' => 27.5, + ]; + } + + public function columnFormats(): array + { + return [ + 'C' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DDMMYYYY, + '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, + ]; + } + + 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_penebusan_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.penebusan.cawangan', [ + 'cawangan_detail' => $this->cawangan_detail, + 'query' => $this->query, + 'teller_with_penebusan_data' => $this->teller_with_penebusan_data, + ]); + } +} diff --git a/app/Exports/Penebusan/PenebusanSummaryExport.php b/app/Exports/Penebusan/PenebusanSummaryExport.php new file mode 100644 index 0000000..05c34b3 --- /dev/null +++ b/app/Exports/Penebusan/PenebusanSummaryExport.php @@ -0,0 +1,119 @@ +cawangan_detail = $cawangan_detail; + $this->query = $query; + $this->teller_with_penebusan_summary_data = $teller_with_penebusan_data; + $this->summary_penebusan = $summary_penebusan; + } + + public function title(): string + { + return 'SUMMARY PENEBUSAN'; + } + + 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 [ + 'B' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'C' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'E' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'F' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1, + 'G' => 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_penebusan_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.penebusan.summary', [ + 'cawangan_detail' => $this->cawangan_detail, + 'query' => $this->query, + 'teller_with_penebusan_data' => $this->teller_with_penebusan_summary_data, + 'summary_penebusan' => $this->summary_penebusan, + ]); + } +} diff --git a/app/Helper.php b/app/Helper.php new file mode 100644 index 0000000..2e165c1 --- /dev/null +++ b/app/Helper.php @@ -0,0 +1,49 @@ +format("d-m-Y"); + } + + public static function getActiveCawanganDbConnection() + { + + $all_active_db_keys = array_filter(array_keys(config('database.connections')), function ($connection) { + try { + DB::connection($connection)->getPdo(); + return true; + } catch (\Throwable $th) { + return false; + } + }); + + $non_cawangan_database = ['lelong', 'online_arrahn', 'kaunterpkb']; + + $all_cawangan_db = array_filter($all_active_db_keys, function ($db_key) use ($non_cawangan_database) { + $isNotCawangan = in_array(config('database.connections.' . $db_key . '.database'), $non_cawangan_database); + + if ($isNotCawangan) { + return false; + } + + return true; + }); + + return $all_cawangan_db; + + } +} diff --git a/app/Http/Controllers/Reports/AnsuranController.php b/app/Http/Controllers/Reports/AnsuranController.php new file mode 100644 index 0000000..d4a5f52 --- /dev/null +++ b/app/Http/Controllers/Reports/AnsuranController.php @@ -0,0 +1,70 @@ +toDateString(); + } + + return $date_string; + }; + + $request->hostname = config('api.url'); + + $data = Http::get($request->hostname . '/api/reports/ansuran', [ + 'startDate' => $getReportDate($request->startDate), + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + $summary_ansuran_by_cawangan = $data['summary_ansuran_by_cawangan']; + $summary_ansuran = $data['summary_ansuran']; + + $startDate = $getReportDate($request->startDate); + $endDate = $getReportDate($request->endDate); + + return view('reports.ansuran.index', compact('summary_ansuran_by_cawangan', 'summary_ansuran', 'startDate', 'endDate')); + } + + public function downloadAnsuranCawanganExcel(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; + + $data = Http::get($request->hostname . '/api/reports/ansuran/' . $kod_cawangan, [ + 'startDate' => $getReportDate($request->startDate), + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + $file_title = sprintf("LaporanAnsuran %s (%s - %s).xlsx", $kod_cawangan, $request->startDate, $request->endDate); + return Excel::download(new AnsuranExport($data), $file_title); + } +} diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php new file mode 100644 index 0000000..ca625bc --- /dev/null +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -0,0 +1,69 @@ +toDateString(); + } + + return $date_string; + }; + + $request->hostname = config('api.url'); + + $gadaian = Http::get($request->hostname . '/api/reports/gadaian', [ + 'startDate' => $getReportDate($request->startDate), + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + $startDate = $getReportDate($request->startDate); + $endDate = $getReportDate($request->endDate); + + return view('reports.gadaian.index', compact('gadaian', 'startDate', 'endDate')); + } + + public function downloadGadaianCawanganExcel(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; + + $data = Http::get($request->hostname . '/api/reports/gadaian/' . $kod_cawangan, [ + 'startDate' => $getReportDate($request->startDate), + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + + $file_title = sprintf("LaporanGadaian %s (%s - %s).xlsx", $kod_cawangan, $request->startDate, $request->endDate); + return Excel::download(new GadaianExport($data), $file_title); + } +} diff --git a/app/Http/Controllers/Reports/PenebusanController.php b/app/Http/Controllers/Reports/PenebusanController.php new file mode 100644 index 0000000..636dcb9 --- /dev/null +++ b/app/Http/Controllers/Reports/PenebusanController.php @@ -0,0 +1,67 @@ +toDateString(); + } + + return $date_string; + }; + + $request->hostname = config('api.url'); + + $penebusan = Http::get($request->hostname . '/api/reports/penebusan', [ + 'startDate' => $getReportDate($request->startDate), + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + $startDate = $getReportDate($request->startDate); + $endDate = $getReportDate($request->endDate); + + return view('reports.penebusan.index', compact('penebusan', 'startDate', 'endDate')); + } + + public function downloadPenebusanCawanganExcel(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; + + $data = Http::get($request->hostname . '/api/reports/penebusan/' . $kod_cawangan, [ + 'startDate' => $getReportDate($request->startDate), + 'endDate' => $getReportDate($request->endDate), + ])->json(); + + $file_title = sprintf("LaporanPenebusan %s (%s - %s).xlsx", $kod_cawangan, $request->startDate, $request->endDate); + return Excel::download(new PenebusanExport($data), $file_title); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 3bd3c81..e2ceefb 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -43,10 +43,17 @@ class RouteServiceProvider extends ServiceProvider ->namespace($this->namespace) ->group(base_path('routes/api.php')); + Route::middleware('web') + ->namespace($this->namespace) + ->prefix('reports') + ->group(base_path('routes/reports.php')); + Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); + }); + } /** diff --git a/resources/views/exports/Ansuran/cawangan.blade.php b/resources/views/exports/Ansuran/cawangan.blade.php new file mode 100644 index 0000000..c661a0f --- /dev/null +++ b/resources/views/exports/Ansuran/cawangan.blade.php @@ -0,0 +1,64 @@ + + + + + + + + + + + + + +
{{ $cawangan_detail['nama'] }}
{{ $cawangan_detail['code'] }}
{{ $cawangan_detail['alamat'] }}
{{ $cawangan_detail['waktu_operasi'] }}
+ + + + + + + + +
+ LAPORAN ANSURAN +
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }} +
+ + + +
+ TELLER : {{ $teller_with_ansuran_data['teller'] }} +
+ + + + + + + + + + + + + + @foreach ($teller_with_ansuran_data['data']['ansuran'] as $ansuran_detail) + + + + + + + + + @endforeach + + + + + + + +
No rujukanNamaNo KPBayaran Pembiayaan(RM)Bayaran Keuntungan(RM)Jumlah Ansuran(RM)
{{ $ansuran_detail['norujukan'] }}{{ $ansuran_detail['nama'] }}{{ $ansuran_detail['no_kp'] }}{{ $ansuran_detail['bayaran_pembiayaan'] }}{{ $ansuran_detail['bayaran_keuntungan'] }}{{ $ansuran_detail['jumlah_ansuran'] }}
Jumlah{{ $teller_with_ansuran_data['data']['summary_ansuran_teller']['sum_bayaran_pembiayaan'] }}{{ $teller_with_ansuran_data['data']['summary_ansuran_teller']['sum_bayaran_kos_keuntungan'] }}{{ $teller_with_ansuran_data['data']['summary_ansuran_teller']['sum_jumlah_bayaran'] }}
diff --git a/resources/views/exports/Ansuran/summary.blade.php b/resources/views/exports/Ansuran/summary.blade.php new file mode 100644 index 0000000..2992ae0 --- /dev/null +++ b/resources/views/exports/Ansuran/summary.blade.php @@ -0,0 +1,52 @@ + + + + + + + + + + + + + +
{{ $cawangan_detail['nama'] }}
{{ $cawangan_detail['code'] }}
{{ $cawangan_detail['alamat'] }}
{{ $cawangan_detail['waktu_operasi'] }}
+ + + + + + + + +
+ LAPORAN ANSURAN +
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }} +
+ + + + + + + + + @foreach ($teller_with_ansuran_data as $data) + + + + + + + + @endforeach + + + + + + + +
Jumlah Nombor RujukanBayaran Pembiayaan(RM)Bayaran Kos Keuntungan(RM)Jumlah Bayaran(RM)
{{ $data['teller'] }}{{ $data['summary_ansuran_teller']['sum_norujukan'] }}{{ $data['summary_ansuran_teller']['sum_bayaran_pembiayaan'] }}{{ $data['summary_ansuran_teller']['sum_bayaran_kos_keuntungan'] }}{{ $data['summary_ansuran_teller']['sum_jumlah_bayaran'] }}
{{ $summary_ansuran['sum_norujukan'] }}{{ $summary_ansuran['sum_bayaran_pembiayaan'] }}{{ $summary_ansuran['sum_bayaran_kos_keuntungan'] }}{{ $summary_ansuran['sum_jumlah_bayaran'] }}
diff --git a/resources/views/exports/gadaian/cawangan.blade.php b/resources/views/exports/gadaian/cawangan.blade.php new file mode 100644 index 0000000..44e6b5e --- /dev/null +++ b/resources/views/exports/gadaian/cawangan.blade.php @@ -0,0 +1,72 @@ + + + + + + + + + + + + + +
{{ $cawangan_detail['nama'] }}
{{ $cawangan_detail['code'] }}
{{ $cawangan_detail['alamat'] }}
{{ $cawangan_detail['waktu_operasi'] }}
+ + + + + + + + +
+ LAPORAN GADAI +
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }} +
+ + + +
+ TELLER : {{ $teller_with_gadaian_data['teller'] }} +
+ + + + + + + + + + + + + + + + + + @foreach ($teller_with_gadaian_data['data']['gadaian'] as $gadaian_detail) + + + + + + + + + + + + + @endforeach + + + + + + + +
No rujukanNamaAlamatNo KPMasaMarhunBeratNilai MarhunPembiayaan%
{{ $gadaian_detail['no_rujukan'] }}{{ $gadaian_detail['nama'] }}{{ $gadaian_detail['alamat'] }}{{ $gadaian_detail['no_kp'] }}{{ $gadaian_detail['masa'] }}{{ $gadaian_detail['marhun'] }}{{ $gadaian_detail['berat'] }}{{ $gadaian_detail['nilai_marhun'] }}{{ $gadaian_detail['pembiayaan'] }}{{ $gadaian_detail['peratusan_margin_pinjaman'] }}
Jumlah{{ $teller_with_gadaian_data['data']['summary_gadaian_teller']['total_berat'] }}{{ $teller_with_gadaian_data['data']['summary_gadaian_teller']['total_nilai_marhun'] }}{{ $teller_with_gadaian_data['data']['summary_gadaian_teller']['total_pembiayaan'] }}
diff --git a/resources/views/exports/gadaian/summary.blade.php b/resources/views/exports/gadaian/summary.blade.php new file mode 100644 index 0000000..f1ed993 --- /dev/null +++ b/resources/views/exports/gadaian/summary.blade.php @@ -0,0 +1,49 @@ + + + + + + + + + + + + + +
{{ $cawangan_detail['nama'] }}
{{ $cawangan_detail['code'] }}
{{ $cawangan_detail['alamat'] }}
{{ $cawangan_detail['waktu_operasi'] }}
+ + + + + + + + +
+ LAPORAN GADAI +
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }} +
+ + + + + + + + @foreach ($teller_with_gadaian_data as $data) + + + + + + + @endforeach + + + + + + +
BeratN.MarhunPembiayaan(RM)
{{ $data['teller'] }}{{ $data['summary_gadaian_teller']['total_berat'] }}{{ $data['summary_gadaian_teller']['total_nilai_marhun'] }}{{ $data['summary_gadaian_teller']['total_pembiayaan'] }}
{{ $summary_gadaian['total_berat'] }}{{ $summary_gadaian['total_nilai_marhun'] }}{{ $summary_gadaian['total_pembiayaan'] }}
diff --git a/resources/views/exports/penebusan/cawangan.blade.php b/resources/views/exports/penebusan/cawangan.blade.php new file mode 100644 index 0000000..eb79e28 --- /dev/null +++ b/resources/views/exports/penebusan/cawangan.blade.php @@ -0,0 +1,79 @@ + + + + + + + + + + + + + +
{{ $cawangan_detail['nama'] }}
{{ $cawangan_detail['code'] }}
{{ $cawangan_detail['alamat'] }}
{{ $cawangan_detail['waktu_operasi'] }}
+ + + + + + + + +
+ LAPORAN GADAI +
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }} +
+ + + +
+ TELLER : {{ $teller_with_penebusan_data['teller'] }} +
+ + + + + + + + + + + + + + + + + + + + @foreach ($teller_with_penebusan_data['data']['penebusan'] as $penebusan_detail) + + + + + + + + + + + + + + + @endforeach + + + + + + + + + + +
No rujukanNamaNo KPTarikh GadaiJBGNilai Pinjaman(RM)Baki Pinjaman(RM)Kos Keuntungan(RM)Kos Keuntungan Rebet(RM)Bayaran Penebusan(RM)Nilai Marhun(RM)Jenis Tebus
{{ $penebusan_detail['no_rujukan'] }}{{ $penebusan_detail['nama'] }}{{ $penebusan_detail['no_kp'] }}{{ $penebusan_detail['tarikh_gadai'] }}{{ $penebusan_detail['jbg'] }}{{ $penebusan_detail['nilai_pinjaman'] }}{{ $penebusan_detail['baki_pinjaman'] }}{{ $penebusan_detail['kos_keuntungan'] }}{{ $penebusan_detail['kos_keuntungan_rebet'] }}{{ $penebusan_detail['bayaran_penebusan'] }}{{ $penebusan_detail['nilai_marhun'] }}{{ $penebusan_detail['jenis_tebus'] }}
Jumlah{{ $teller_with_penebusan_data['data']['summary_penebusan_teller']['nilai_pinjaman'] }}{{ $teller_with_penebusan_data['data']['summary_penebusan_teller']['baki_pinjaman'] }}{{ $teller_with_penebusan_data['data']['summary_penebusan_teller']['kos_keuntungan'] }}{{ $teller_with_penebusan_data['data']['summary_penebusan_teller']['kos_keuntungan_rebet'] }}{{ $teller_with_penebusan_data['data']['summary_penebusan_teller']['bayaran_penebusan'] }}{{ $teller_with_penebusan_data['data']['summary_penebusan_teller']['nilai_marhun'] }}
diff --git a/resources/views/exports/penebusan/summary.blade.php b/resources/views/exports/penebusan/summary.blade.php new file mode 100644 index 0000000..1e8c3e1 --- /dev/null +++ b/resources/views/exports/penebusan/summary.blade.php @@ -0,0 +1,58 @@ + + + + + + + + + + + + + +
{{ $cawangan_detail['nama'] }}
{{ $cawangan_detail['code'] }}
{{ $cawangan_detail['alamat'] }}
{{ $cawangan_detail['waktu_operasi'] }}
+ + + + + + + + +
+ LAPORAN GADAI +
+ TARIKH DARI {{ $query['startDate'] }} hingga {{ $query['endDate'] }} +
+ + + + + + + + + + + @foreach ($teller_with_penebusan_data as $data) + + + + + + + + + + @endforeach + + + + + + + + + +
Nilai Pinjaman(RM)Baki Pinjaman(RM)Kos Keuntungan(RM)Kos Keuntungan Rebet(RM)Bayaran Penebusan(RM)Nilai Marhun(RM)
{{ $data['teller'] }}{{ $data['summary_penebusan_teller']['nilai_pinjaman'] }}{{ $data['summary_penebusan_teller']['baki_pinjaman'] }}{{ $data['summary_penebusan_teller']['kos_keuntungan'] }}{{ $data['summary_penebusan_teller']['kos_keuntungan_rebet'] }}{{ $data['summary_penebusan_teller']['bayaran_penebusan'] }}{{ $data['summary_penebusan_teller']['nilai_marhun'] }}
{{ $summary_penebusan['nilai_pinjaman'] }}{{ $summary_penebusan['baki_pinjaman'] }}{{ $summary_penebusan['kos_keuntungan'] }}{{ $summary_penebusan['kos_keuntungan_rebet'] }}{{ $summary_penebusan['bayaran_penebusan'] }}{{ $summary_penebusan['nilai_marhun'] }}
diff --git a/resources/views/indexOverallReport.blade.php b/resources/views/indexOverallReport.blade.php new file mode 100644 index 0000000..ee28315 --- /dev/null +++ b/resources/views/indexOverallReport.blade.php @@ -0,0 +1,42 @@ +@extends('layouts.app') + +@section('content') + +
+
+ +
+ + + +
+ +
+ + +
+
+ @include('layouts.footer') + @endsection diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php index 04f5f47..6c32c40 100644 --- a/resources/views/layouts/sidebar.blade.php +++ b/resources/views/layouts/sidebar.blade.php @@ -280,6 +280,19 @@ + +
  • +
    + + + + Laporan Keseluruhan +
    +
  • +
    {{--
  • @@ -337,7 +350,7 @@
  • --}} - + @elseif(Auth::user()->roles == 'kpo') diff --git a/resources/views/reports/ansuran/index.blade.php b/resources/views/reports/ansuran/index.blade.php new file mode 100644 index 0000000..7b44957 --- /dev/null +++ b/resources/views/reports/ansuran/index.blade.php @@ -0,0 +1,231 @@ +@extends('layouts.app') + +@section('content') + +
    +
    + +
    + + + + +
    +
    +
    +
    Laporan Ansuran
    +
    +
    +
    +
    + Mula + + Hingga + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + @forelse ($summary_ansuran_by_cawangan as $ansuran) + + + + + + + + + + + @empty + + + + @endforelse + @if (count($summary_ansuran_by_cawangan) !== 0) + + + + + + + + + @endif + + +
    + No + + Kod Cawangan + + Cawangan + + Bil Ansuran + + Bayaran Pembiayaan + + Bayaran Kos Keuntungan + + Jumlah Bayaran + + Action +
    +
    +
    +

    {{ $loop->iteration }}

    +
    +
    +
    +
    +
    +

    + {{ $ansuran['kod_cawangan'] }} +

    +
    +
    +
    +
    +
    +

    + {{ $ansuran['cawangan_detail'] }} +

    +
    +
    +
    +
    +
    +

    + {{ $ansuran['bilangan_ansuran'] }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($ansuran['bayaran_pembiayaan'], 2) }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($ansuran['bayaran_kos_keuntungan'], 2) }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($ansuran['jumlah_bayaran'], 2) }} +

    +
    +
    +
    + +
    +
    +
    +

    Data not available

    +
    +
    +
    +
    +
    +

    + {{ $summary_ansuran['bilangan_ansuran'] }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($summary_ansuran['bayaran_pembiayaan'], 2) }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($summary_ansuran['bayaran_kos_keuntungan'], 2) }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($summary_ansuran['jumlah_bayaran'], 2) }} +

    +
    +
    +
    +
    +
    +
    + @include('layouts.footer') + +
    +@endsection diff --git a/resources/views/reports/gadaian/index.blade.php b/resources/views/reports/gadaian/index.blade.php new file mode 100644 index 0000000..ca9c77d --- /dev/null +++ b/resources/views/reports/gadaian/index.blade.php @@ -0,0 +1,183 @@ +@extends('layouts.app') + +@section('content') + +
    +
    + +
    + + + + +
    +
    +
    +
    Laporan Gadaian
    +
    +
    +
    +
    + Mula + + Hingga + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + @forelse ($gadaian as $gadai) + + + + + + + + + + + @empty + + + + @endforelse + +
    + No + + Kod Cawangan + + Cawangan + + Bil Gadai + + Berat (g) + + Nilai Marhun(RM) + + Pinjaman(RM) + + Action +
    +
    +
    +

    {{ $loop->iteration }}

    +
    +
    +
    +
    +
    +

    {{ $gadai['kodcaw'] }}

    +
    +
    +
    +
    +
    +

    {{ $gadai['details_caw'] }}

    +
    +
    +
    +
    +
    +

    {{ $gadai['total_gadaian'] }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($gadai['sum_berat'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($gadai['sum_nilai_marhun'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($gadai['sum_pinjaman'], 2) }}

    +
    +
    +
    + +
    +
    +
    +

    Data not available

    +
    +
    +
    +
    +
    +
    + @include('layouts.footer') + +
    +@endsection diff --git a/resources/views/reports/penebusan/index.blade.php b/resources/views/reports/penebusan/index.blade.php new file mode 100644 index 0000000..a4b6dbf --- /dev/null +++ b/resources/views/reports/penebusan/index.blade.php @@ -0,0 +1,228 @@ +@extends('layouts.app') + +@section('content') + +
    +
    + +
    + + + + +
    +
    +
    +
    Laporan Penebusan
    +
    +
    +
    +
    + Mula + + Hingga + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + @forelse ($penebusan as $tebus) + + + + + + + + + + + + + + + @empty + + + + @endforelse + +
    + No + + Kod Cawangan + + Cawangan + + Bil Tebus + + Berat (g) + + Nilai Marhun(RM) + + Nilai Pinjaman(RM) + + Baki Pinjaman(RM) + + Keuntungan Asal(RM) + + Keuntungan Rebet(RM) + + Bayaran Penebusan(RM) + + Action +
    +
    +
    +

    {{ $loop->iteration }}

    +
    +
    +
    +
    +
    +

    {{ $tebus['kodcaw'] }}

    +
    +
    +
    +
    +
    +

    {{ $tebus['details_caw'] }}

    +
    +
    +
    +
    +
    +

    {{ $tebus['bilangan_tebus'] }} +

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['berat'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['nilai_pinjaman'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['baki_pinjaman'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['nilai_marhun'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['keuntungan_asal'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['keuntungan_rebet'], 2) }}

    +
    +
    +
    +
    +
    +

    + {{ number_format($tebus['bayaran_penebusan'], 2) }}

    +
    +
    +
    + +
    +
    +
    +

    Data not available

    +
    +
    +
    +
    +
    +
    + @include('layouts.footer') + +
    +@endsection diff --git a/routes/reports.php b/routes/reports.php new file mode 100644 index 0000000..c8b2af8 --- /dev/null +++ b/routes/reports.php @@ -0,0 +1,16 @@ +group(function () { + Route::get('', [App\Http\Controllers\HomeController::class, 'indexOverallReport'])->name('reports'); + Route::get('gadaian', [GadaianController::class, 'index'])->name('reports.gadaian.index'); + Route::get('gadaian/{kod_cawangan}', [GadaianController::class, 'downloadGadaianCawanganExcel'])->name('reports.gadaian.cawangan.excel'); + Route::get('penebusan', [PenebusanController::class, 'index'])->name('reports.penebusan.index'); + Route::get('penebusan/{kod_cawangan}', [PenebusanController::class, 'downloadPenebusanCawanganExcel'])->name('reports.penebusan.cawangan.excel'); + Route::get('ansuran', [AnsuranController::class, 'index'])->name('reports.ansuran.index'); + Route::get('ansuran/{kod_cawangan}', [AnsuranController::class, 'downloadAnsuranCawanganExcel'])->name('reports.ansuran.cawangan.excel'); +});