Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function hitungTriwulan($perspective, $indikator, $iku, $instansi, $unor, $unitkerja, $tahun, $bulan, $inputnilai)
- {
- $decodedIds = [
- Hashids::decode($perspective)[0] ?? null,
- Hashids::decode($indikator)[0] ?? null,
- Hashids::decode($iku)[0] ?? null,
- Hashids::decode($instansi)[0] ?? null,
- Hashids::decode($unor)[0] ?? null,
- Hashids::decode($unitkerja)[0] ?? null
- ];
- list($iddecodeprs, $iddecodeind, $iddecodeiku, $iddecodei, $iddecodeun, $iddecodeuk) = $decodedIds;
- // #01 - Mapping bulan ke triwulan dan semester
- $bulanTriwulan = [];
- $bulanSemester = [];
- for ($i = 1; $i <= 12; $i += 3) {
- if ($bulan >= sprintf('%02d', $i) && $bulan <= sprintf('%02d', $i + 2)) {
- $bulanTriwulan = [sprintf('%02d', $i), sprintf('%02d', $i + 1), sprintf('%02d', $i + 2)];
- $bulanSemester = ($i <= 6) ? ['01', '02', '03', '04', '05', '06'] : ['07', '08', '09', '10', '11', '12'];
- break;
- }
- }
- $kinerjas = Kinerjaorganisasi::where('mkoperspective_id', $iddecodeprs)
- ->where('mkoindikator_id', $iddecodeind)
- ->where('mkoiku_id', $iddecodeiku)
- ->where('instansi_id', $iddecodei)
- ->where('unor_id', $iddecodeuk)
- ->where('tahun', $tahun)
- ->whereIn('bulan', $bulanTriwulan)
- ->get()
- ->keyBy('bulan');
- $nilaiTriwulan = 0;
- foreach ($bulanTriwulan as $bln) {
- $nilaiBulan = ($bulan == $bln) ? $inputnilai : ($kinerjas->get($bln)->nilai ?? 0);
- $nilaiTriwulan += $nilaiBulan;
- }
- $target = Mkorencanatarget::where([
- ['instansi_id', $iddecodei],
- ['unor_id', $iddecodeun],
- ['unitkerja_id', $iddecodeuk],
- ['mkoperspective_id', $iddecodeprs],
- ['mkoindikator_id', $iddecodeind],
- ['mkoiku_id', $iddecodeiku],
- ['tahun', $tahun]
- ])->first();
- $triwulanTargetField = $target->{"tw" . ceil(intval($bulan) / 3)};
- $prosentaseTriwulan = ($nilaiTriwulan / $triwulanTargetField) * 100;
- // #02 - Menentukan bulan-bulan untuk perhitungan akumulasi target sampai bulan yang dipilih
- $lastMonthOfSelectedQuarter = end($bulanTriwulan);
- $bulanSampaiTriwulanIni = range(1, intval($lastMonthOfSelectedQuarter));
- // Format bulan menjadi '01', '02', ..., '12'
- $bulanSampaiTriwulanIni = array_map(function($month) {
- return sprintf('%02d', $month);
- }, $bulanSampaiTriwulanIni);
- // Load kinerja dari Januari hingga bulan terakhir di triwulan yang dipilih
- $kinerjasSampaiTriwulanIni = Kinerjaorganisasi::where('mkoperspective_id', $iddecodeprs)
- ->where('mkoindikator_id', $iddecodeind)
- ->where('mkoiku_id', $iddecodeiku)
- ->where('instansi_id', $iddecodei)
- ->where('unor_id', $iddecodeuk)
- ->where('tahun', $tahun)
- ->whereIn('bulan', $bulanSampaiTriwulanIni)
- ->get()
- ->keyBy('bulan');
- // Menghitung nilai total dari Januari hingga bulan terakhir di triwulan yang dipilih
- $nilaiTotalSampaiTriwulanIni = 0;
- foreach ($bulanSampaiTriwulanIni as $bln) {
- $nilTotalSampaiTriwulanIni = ($bulan == $bln) ? $inputnilai : ($kinerjasSampaiTriwulanIni->get($bln)->nilai ?? 0);
- $nilaiTotalSampaiTriwulanIni += $nilTotalSampaiTriwulanIni;
- }
- // Menghitung prosentase target dari Januari hingga bulan terakhir di triwulan yang dipilih
- $triwulanTargetSampaiTriwulanIni = 0;
- for ($i = 1; $i <= ceil(intval($bulan) / 3); $i++) {
- $triwulanTargetSampaiTriwulanIni += $target->{"tw$i"};
- }
- $prosentaseTargetSampaiTriwulanIni = ($nilaiTotalSampaiTriwulanIni / $triwulanTargetSampaiTriwulanIni) * 100;
- // #03 - Menghitung nilai, target dan prosentasi semester
- $semesterIndex = (intval($bulan) <= 6) ? 'sem1' : 'sem2';
- $semesterTarget = floatval($target->{$semesterIndex} ?? 0);
- $nilaiSemester = 0;
- foreach ($bulanSemester as $bln) {
- $nilaiSemester += ($bulan == $bln) ? $inputnilai : ($kinerjas->get($bln)->nilai ?? 0);
- }
- $prosentaseSemester = $semesterTarget ? ($nilaiSemester / $semesterTarget) * 100 : 0; // Menangani pembagian dengan nol
- // #04 - Menghitung nilai, target dan prosentase sampai semester ini
- // Menentukan bulan-bulan untuk perhitungan akumulasi target sampai semester yang dipilih
- $lastMonthOfSelectedSemester = end($bulanSemester);
- $bulanSampaiSemesterIni = range(1, intval($lastMonthOfSelectedSemester));
- // Format bulan menjadi '01', '02', ..., '12'
- $bulanSampaiSemesterIni = array_map(function($month) {
- return sprintf('%02d', $month);
- }, $bulanSampaiSemesterIni);
- // Load kinerja dari Januari hingga bulan terakhir di semester yang dipilih
- $kinerjasSampaiSemesterIni = Kinerjaorganisasi::where('mkoperspective_id', $iddecodeprs)
- ->where('mkoindikator_id', $iddecodeind)
- ->where('mkoiku_id', $iddecodeiku)
- ->where('instansi_id', $iddecodei)
- ->where('unor_id', $iddecodeuk)
- ->where('tahun', $tahun)
- ->whereIn('bulan', $bulanSampaiSemesterIni)
- ->get()
- ->keyBy('bulan');
- // Menghitung nilai total dari Januari hingga bulan terakhir di semester yang dipilih
- $nilaiTotalSampaiSemesterIni = 0;
- foreach ($bulanSampaiSemesterIni as $bln) {
- $nilaiBulanSampaiSemesterIni = ($bulan == $bln) ? $inputnilai : ($kinerjasSampaiSemesterIni->get($bln)->nilai ?? 0);
- $nilaiTotalSampaiSemesterIni += $nilaiBulanSampaiSemesterIni;
- }
- // Menghitung target dan prosentase sampai semester ini
- $semesterTargetField = $target->{$semesterIndex}; // 'sem1' atau 'sem2' tergantung bulan
- $prosentaseTargetSampaiSemesterIni = ($nilaiTotalSampaiSemesterIni / $semesterTargetField) * 100;
- // #05 - Menghitung nilai total tahunan dan prosentase tahunan
- $nilaiTotalTahunan = 0;
- for ($i = 1; $i <= 12; $i++) {
- $bln = sprintf('%02d', $i);
- $nilaiBulan = ($bulan == $bln) ? $inputnilai : ($kinerjas->get($bln)->nilai ?? 0);
- $nilaiTotalTahunan += $nilaiBulan;
- }
- $targetTahunan = floatval($target->tahunan); // Mengambil target tahunan dari database
- $prosentaseTahunan = ($nilaiTotalTahunan / $targetTahunan) * 100; // Menghitung prosentase terhadap target tahunan
- return response()->json([
- 'nilaiTriwulan' => $nilaiTriwulan,
- 'targetTriwulan' => $triwulanTargetField,
- 'targetTriwulanSampaiTriwulanIni' => $triwulanTargetSampaiTriwulanIni,
- 'prosentaseTriwulan' => round($prosentaseTriwulan, 2),
- 'prosentaseSampaiTriwulanIni' => round($prosentaseTargetSampaiTriwulanIni, 2),
- 'nilaiSemester' => $nilaiSemester,
- 'targetSemester' => $semesterTarget,
- 'prosentaseSemester' => round($prosentaseSemester, 2),
- 'nilaiTotalSampaiSemesterIni' => $nilaiTotalSampaiSemesterIni,
- 'prosentaseTargetSampaiSemesterIni' => round($prosentaseTargetSampaiSemesterIni, 2),
- 'targetTahunan' => $targetTahunan,
- 'prosentaseTahunan' => round($prosentaseTahunan, 2)
- ]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement