diff --git a/app/Http/Controllers/Reports/SaringanGadaianController.php b/app/Http/Controllers/Reports/SaringanGadaianController.php new file mode 100644 index 0000000..10fe794 --- /dev/null +++ b/app/Http/Controllers/Reports/SaringanGadaianController.php @@ -0,0 +1,129 @@ +startDate ?? now()->startOfMonth()->toDateString(); + $endDate = $request->endDate ?? now()->endOfMonth()->toDateString(); + + $active_dbs = Helper::getActiveCawanganDbConnection(); + + $cawangan = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_dbs) + ->get(); + + $responses = []; + + foreach ($cawangan as $caw) { + + $db = $caw->mysql; + + $tgb = Tebus::on($db) + ->join('gadai as g1', 'tebus.norujukan', '=', 'g1.norujukan') + ->join('gadai as g2', function ($join) { + $join->on('g2.nokp', '=', 'g1.nokp') + ->on('g2.t_gadai', '=', 'tebus.t_tebus') + ->whereRaw('ABS(g2.berat - g1.berat) <= 0.02') + ->whereColumn('g2.norujukan', '!=', 'g1.norujukan'); + }) + ->whereBetween('tebus.t_tebus', [$startDate, $endDate]) + ->groupBy('tebus.norujukan') + ->selectRaw(" + tebus.norujukan as norujukan_tebus, + MAX(g2.norujukan) as norujukan_gadai_balik, + MAX(g2.nokp) as nokp, + MAX(g2.berat) as berat, + MAX(g2.nilaimarhun) as nilaimarhun, + MAX(g2.pinjaman) as pinjaman, + MAX(g2.t_gadai) as t_gadai, + MAX(g1.taglel) as taglel_lama + ") + ->get() + ->map(function ($row) { + return [ + 'norujukan_tebus' => $row->norujukan_tebus, + 'norujukan_gadai_balik' => $row->norujukan_gadai_balik, + 'nokp' => $row->nokp, + 'berat' => (float) $row->berat, + 'nilaimarhun' => (float) $row->nilaimarhun, + 'pinjaman' => (float) $row->pinjaman, + 'taglel_lama' => $row->taglel_lama, + 't_gadai' => $row->t_gadai, + 'jenis' => $row->taglel_lama == 1 ? 'TGB_LELONG' : 'TGB_BIASA', + ]; + }) + ->toArray(); + + $tgb_norujukan = array_column($tgb, 'norujukan_gadai_balik'); + + + $gadai_biasa = DB::connection($db) + ->table('gadai') + ->whereBetween('t_gadai', [$startDate, $endDate]) + ->whereNotIn('norujukan', $tgb_norujukan) + ->select([ + DB::raw('NULL as norujukan_tebus'), + 'norujukan as norujukan_gadai_balik', + 'nokp', + 'berat', + 'nilaimarhun', + 'pinjaman', + DB::raw('NULL as taglel_lama'), + 't_gadai', + ]) + ->get() + ->map(function ($row) { + return [ + 'norujukan_tebus' => null, + 'norujukan_gadai_balik' => $row->norujukan_gadai_balik, + 'nokp' => $row->nokp, + 'berat' => (float) $row->berat, + 'nilaimarhun' => (float) $row->nilaimarhun, + 'pinjaman' => (float) $row->pinjaman, + 'taglel_lama' => null, + 't_gadai' => $row->t_gadai, + 'jenis' => 'GADAI_BIASA', + ]; + }) + ->toArray(); + + + $details = collect($tgb) + ->merge($gadai_biasa) + ->unique('norujukan_gadai_balik') + ->sortBy(['jenis', 't_gadai']) + ->values() + ->all(); + + + $responses[] = [ + 'kodcaw' => $caw->kodcaw, + 'details_caw' => $caw->details_caw, + 'jumlah_surat' => count($details), + 'total_tgb_lelong' => collect($details)->where('jenis', 'TGB_LELONG')->count(), + 'total_tgb_biasa' => collect($details)->where('jenis', 'TGB_BIASA')->count(), + 'total_gadai_biasa' => collect($details)->where('jenis', 'GADAI_BIASA')->count(), + 'sum_berat' => collect($details)->sum('berat'), + 'sum_nilai_marhun' => collect($details)->sum('nilaimarhun'), + 'sum_pinjaman' => collect($details)->sum('pinjaman'), + 'details' => $details, + ]; + } + + return response()->json($responses); + } +} diff --git a/routes/report.php b/routes/report.php index 6cf98f2..ce9aab6 100644 --- a/routes/report.php +++ b/routes/report.php @@ -56,6 +56,6 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('gadaitebusmasa', ['uses' => 'GadaianController@getSummaryLaporanGadaiTebusMasa']); $router->get('gadaitebusmasa/{kod_cawangan}', ['uses' => 'GadaianController@getLaporanGadaiTebusMasaCawangan']); - + $router->get('saringan/gadaian', ['uses' => 'SaringanGadaianController@getLaporanGadai']); }); });