diff --git a/app/Http/Controllers/Reports/AnsuranController.php b/app/Http/Controllers/Reports/AnsuranController.php index e6009c9..cc366fc 100644 --- a/app/Http/Controllers/Reports/AnsuranController.php +++ b/app/Http/Controllers/Reports/AnsuranController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Reports; use App\Cawangan; +use App\Gadai; use App\Helper; use App\Http\Controllers\Controller; use App\Services\Reports\AnsuranService as ReportAnsuranService; @@ -21,7 +22,12 @@ class AnsuranController extends Controller public function getSummaryLaporanAnsuran(Request $request) { $online_array_db_connection = Helper::getOnlineArrahnConnection(); + $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw', 'mysql')->get(); + $kodcaw_array = array_column($cawangan_available->toArray(), 'kodcaw'); + $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); + + // Step 1: Fetch the ansuran data grouped by cawangan $ansuran_query = Transaction::on($online_array_db_connection) ->leftJoin('transaksi_keuntungan', function ($join) { $join->on('transaction.norujukan', '=', 'transaksi_keuntungan.norujukan'); @@ -31,28 +37,55 @@ class AnsuranController extends Controller ->whereDate('transaction.created_at', '>=', date($request->startDate)) ->whereDate('transaction.created_at', '<=', date($request->endDate)) ->selectRaw(' + transaction.kodcaw as kod_cawangan, count(transaction.norujukan) as bilangan_ansuran, sum(transaksi_keuntungan.bayaran_pembiayaan) as bayaran_pembiayaan, sum(transaksi_keuntungan.bayaran_keuntungan) as bayaran_kos_keuntungan, - sum(transaction.duit_masuk) as jumlah_bayaran - '); - - $summary_ansuran = (clone $ansuran_query)->get()->toArray()[0]; - - $summary_ansuran_by_cawangan = (clone $ansuran_query) - ->addSelect('transaction.kodcaw as kod_cawangan') + sum(transaction.duit_masuk) as jumlah_bayaran, + GROUP_CONCAT(transaction.norujukan) as norujukan_list + ') ->groupBy('transaction.kodcaw') ->get(); - $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw')->get()->toArray(); - $kodcaw_array = array_column($cawangan_available, 'kodcaw'); - $cawangan_detail_array = array_column($cawangan_available, 'details_caw'); - $kod_caw_with_cawangan_detail_array = array_combine($kodcaw_array, $cawangan_detail_array); + $total_nilai_marhun_by_cawangan = []; - $summary_ansuran_by_cawangan = $summary_ansuran_by_cawangan->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array) { - $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$ansuran_cawangan['kod_cawangan']]; - return $ansuran_cawangan; - }); + // Step 2: Loop through ansuran_query and fetch nilai_marhun per kodcaw + foreach ($ansuran_query as $ansuran_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $norujukan_list = explode(',', $ansuran_cawangan->norujukan_list); // Convert to array + + // Get database connection for this branch + $mysql_connection = $cawangan_available->where('kodcaw', $kodcaw)->first()->mysql ?? null; + if (!$mysql_connection) { + continue; + } + + // Sum nilai_marhun for matching norujukan in gadai table + $total_nilai_marhun_by_cawangan[$kodcaw] = Gadai::on($mysql_connection) + ->whereIn('norujukan', $norujukan_list) + ->sum('nilaimarhun'); + } + + // Step 3: Merge ansuran summary with total_nilai_marhun + $summary_ansuran_by_cawangan = $ansuran_query + ->filter(function ($ansuran_cawangan) use ($kodcaw_array) { + return in_array($ansuran_cawangan['kod_cawangan'], $kodcaw_array); + }) + ->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array, $total_nilai_marhun_by_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$kodcaw] ?? 'Unknown'; + $ansuran_cawangan->total_nilai_marhun = $total_nilai_marhun_by_cawangan[$kodcaw] ?? 0; + unset($ansuran_cawangan->norujukan_list); // Remove unnecessary field + return $ansuran_cawangan; + }) + ->values(); + + // Step 4: Calculate overall total_nilai_marhun + $total_nilai_marhun_all = array_sum($total_nilai_marhun_by_cawangan); + + // Step 5: Prepare the overall ansuran summary + $summary_ansuran = (clone $ansuran_query)->toArray()[0] ?? []; + $summary_ansuran['total_nilai_marhun'] = $total_nilai_marhun_all; $response = [ 'summary_ansuran_by_cawangan' => $summary_ansuran_by_cawangan, @@ -61,4 +94,5 @@ class AnsuranController extends Controller return json_encode($response); } + }