all(), [ "q" => ['required'], ] ); /* * Проверяем результаты валидации */ if ($validator->fails()) return response() ->json(["status" => false, "errors" => $validator->messages()]) ->setStatusCode(400, "Error fields"); $members = Member::where('name', 'like', "%$request->q%")->get(); $certifications = []; foreach ($members as $member) { $champ = Championship::find($member->championship); if ($champ->status !== 3) continue; $certifications[] = [ "champ_id" => $member->championship, "member_id" => $member->id, "title" => $champ->title, "type" => "certificate", "name" => $member->name ]; $results = $this->getMemberResult($member->championship); $position = 1; foreach ($results as $result) { if ($position > 3) break; if ($result['member_id'] === $member->id) { $certifications[] = [ "champ_id" => $member->championship, "member_id" => $member->id, "title" => $champ->title, "type" => "diploma", "name" => $member->name, "position" => $position ]; } $position = $position + 1; } } return $certifications; } public function downloadDiploma(Request $request) { $member = Member::find($request->member); $champ = Championship::find($member->championship); $results = $this->getMemberResult($member->championship); $position = 1; $certificate = NULL; foreach ($results as $result) { if ($position > 3) break; if ($result['member_id'] === $member->id) { $certificate = [ "champ_id" => $member->championship, "member_id" => $member->id, "title" => $champ->title, "city" => $champ->cities->title, "before_date" => $champ->from_date, "after_date" => $champ->to_date, "month" => $champ->months->title, "year" => $champ->year, "competence" => $champ->competences->title, "type" => "diploma", "name" => $member->name, "position" => $position ]; } $position = $position + 1; } $certificate = (object)$certificate; //return $certificate; $pdf = PDF::loadView('diploma', compact('certificate')); return $pdf->download('С' . $champ->id . 'M' . $member->id . 'D' . '.pdf'); } public function downloadCertificate(Request $request) { $member = Member::find($request->member); $champ = Championship::find($member->championship); $certificate = NULL; $certificate = [ "champ_id" => $member->championship, "member_id" => $member->id, "title" => $champ->title, "city" => $champ->cities->title, "before_date" => $champ->from_date, "after_date" => $champ->to_date, "month" => $champ->months->title, "year" => $champ->year, "competence" => $champ->competences->title, "name" => $member->name ]; $certificate = (object)$certificate; $pdf = PDF::loadView('certificate', compact('certificate')); return $pdf->download('С' . $champ->id . 'M' . $member->id . 'С' . '.pdf'); } private function getMemberResult($champ_id) { $i = 0; /* * Список участников с результатами */ $membersResults = []; $members = Member::where('championship', $champ_id)->get(); /* * Загрузка всех модулей чемпионата */ $modules = Module::where('championship', $champ_id)->get(); /* * Перебираем всех участников и подсчитываем * баллы */ foreach ($members as $member) { /* * Массив для хранения результатов * каждого модуля для участника */ $modulesResults = []; /* * Переменная для подсчета общего кол-ва * очков участника */ $allScore = 0; /* * Перебираем все модули */ foreach ($modules as $module) { /* * Загружаем все критерии модуля */ $criteria = Result::where('module_id', $module->id) ->where('member_id', $member->id) ->get(); /* * Перемнная для хранения очков набранных * в данном модуле */ $modulePoints = 0; /* * Перебираем критерии и складываем баллы */ foreach ($criteria as $criterion) { /* * Складываем баллы в переменную $modulePoints */ $modulePoints = $modulePoints + $criterion->points * 1; } /* * Складываем баллы в переменную с общим кол-вом * очков за все модули */ $allScore = $allScore + $modulePoints; /* * Добавляем результаты и название модуля в массив $modulesResults */ $modulesResults[] = [ "title" => $module->title, "points" => round($modulePoints, 2) ]; } /* * Добавляем пользователя в массив с результати * участников */ $membersResults[] = [ "member_id" => $member->id, "name" => $member->name, "university" => $member->university, "modules" => $modulesResults, "all_score" => round($allScore, 2) ]; $i = $i + 1; } /* * Сортируем массив по ключу all_score (от лучшего результата к худшему) */ $membersResults = collect($membersResults) ->sortBy('all_score') ->reverse() ->toArray(); /* * Возвращаем массив с результатами */ return $membersResults; } }