public function specialtyCoverageStats($mrId) { $totalVisits = []; $actualVisits = []; $specialtyCoverage = []; $specialty = NULL; $counter = 0; $allSpecialties = Customer::select('specialty')->where('mr_id', $mrId)->get()->toArray(); $allCustomersSpecialties = Customer::whereIn('specialty', $allSpecialties)->get()->toArray(); // Get all medical rep customers specialties foreach ($allCustomersSpecialties as $singleCustomer) { $allSpecialtyClasses[$singleCustomer['specialty']] = Customer::select('class')->where('specialty', $singleCustomer['specialty'])->get()->toArray(); } // Get all customer classes based on specialty foreach ($allSpecialtyClasses as $specialty => $specialtyClasses) { // Calculate total visits based on classes and specialty foreach ($specialtyClasses as $singleSpecialtyClass) { if (isset($totalVisits[$specialty])) { $totalVisits[$specialty] += VisitClass::where('name', $singleSpecialtyClass)->first()->visits_count; } else { $totalVisits[$specialty] = VisitClass::where('name', $singleSpecialtyClass)->first()->visits_count; } } } // Get all doctors visited $doctorsVisited = Report::select('doctor_id')->where('month', date('M-Y'))->where('mr_id', $mrId)->get()->toArray(); foreach ($doctorsVisited as $singleDoctor) { // calculate actual visits $specialty = Customer::select('specialty')->findOrFail($singleDoctor)->first()->specialty; if (isset($actualVisits[$specialty])) { $actualVisits[$specialty] += 1; } else { $actualVisits[$specialty] = 1; } } foreach ($allCustomersSpecialties as $singleCustomerSpecialty) { $specialty = $singleCustomerSpecialty['specialty']; $specialtyCoverage[$specialty] = 0; if (isset($specialtyCoverage[$specialty]) && isset($actualVisits[$specialty]) && isset($totalVisits[$specialty])) { $specialtyCoverage[$specialty] = number_format($actualVisits[$specialty] / $totalVisits[$specialty] * 100, 2); } } foreach ($specialtyCoverage as $specialty => $percentage) { if (isset($specialtyCoverage[$specialty])) { $stats[$counter]['label'] = $specialty; $stats[$counter]['data'] = $percentage; } $counter++; } return $stats; }