public function index()
 {
     $countDiagnostic = count(auth()->user()->diagnostics);
     $countDiseases = Disease::count();
     $countSymptom = Symptom::count();
     $diagnostics = Diagnostic::with('disease')->where('user_id', auth()->user()->id)->orderBy('created_at', 'desc')->take(5)->get();
     return view('user.home')->with('countSymptom', $countSymptom)->with('countDiseases', $countDiseases)->with('countDiagnostic', $countDiagnostic)->with('diagnostics', $diagnostics);
 }
 public function home()
 {
     $countDiseases = Disease::count();
     $countSymptom = Symptom::count();
     $countDiagnostic = Diagnostic::count();
     $lastRegistered = User::orderBy('created_at', 'desc')->take(9)->get();
     return view('admin.home')->with('countDiagnostic', $countDiagnostic)->with('countSymptom', $countSymptom)->with('countDiseases', $countDiseases)->with('lastRegistered', $lastRegistered);
 }
 public function search(SearchRequest $request)
 {
     if (!$request->has('search')) {
         return redirect()->route('admin::diagnosticos::index');
     }
     $diagnostics = Diagnostic::search($request->search)->with('disease', 'user')->get();
     return view('admin.diagnostic.result')->with('diagnostics', $diagnostics);
 }
 public function user_diseases()
 {
     $data = [];
     $diagnostics = Diagnostic::where('user_id', auth()->user()->id)->get();
     $groupDiagnostics = $diagnostics->groupBy('disease_id');
     $groupDiagnostics->each(function ($value, $key) use(&$data) {
         $disease = Disease::findOrFail($key);
         $data[] = ['label' => $disease->name, 'value' => count($value)];
     });
     return response()->json($data);
 }
 public function show($hashed = null)
 {
     if (is_null($hashed)) {
         return view('user.diagnostic.show');
     }
     $id = $this->decode($hashed);
     $diagnostico = Diagnostic::findOrFail($id);
     if ($diagnostico->user_id != auth()->id()) {
         return redirect()->back();
     }
     return view('user.diagnostic.show')->with('diagnostico', $diagnostico);
 }
 /**
  * Función que calcula la evolución de diagnósticos por enfermedad, anualmente
  * se usa -1 porque Morris toma valores desde un array con index 0
  */
 public function anual_state_diagnostics($state_id)
 {
     $names = $indexs = [];
     $diseases = Disease::all();
     $diagnostics = Diagnostic::whereHas('user', function ($query) use($state_id) {
         $query->where('state_id', $state_id);
     })->with('user')->get();
     // llenamos un arreglo de indices y otro de nombres para la grafica
     $diseases->each(function ($disease) use(&$names, &$indexs) {
         $indexs[] = $disease->id - 1;
         $names[$disease->id - 1] = $disease->name;
     });
     $months = array_months();
     $today = Carbon::create(null, null, 1);
     $newDate = $today->copy();
     // Por cada mes mostramos cuantos diagnosticos se realizaron
     foreach ($months as $keyMonth => $value) {
         if ($keyMonth != 1) {
             $newDate->subDay();
             $newDate->startOfMonth();
         }
         foreach ($diseases as $disease) {
             $aux[$disease->id - 1] = 0;
         }
         foreach ($diagnostics as $diagnostic) {
             if ($diagnostic->created_at->month == $newDate->month && $diagnostic->created_at->year == $newDate->year) {
                 $aux[$diagnostic->disease_id - 1]++;
             }
         }
         $arrayMonth = ['month' => $value];
         // aca no se utiliza merge, para que no reindexe la union de arrays
         $result[] = $arrayMonth + $aux;
     }
     return response()->json(['names' => $names, 'indexs' => $indexs, 'result' => $result]);
 }