123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <?php
- namespace App\Http\Controllers;
- use App\Championship;
- use App\Member;
- use App\Module;
- use App\Result;
- use PhpParser\Node\Expr\Cast\Object_;
- use Validator;
- use PDF;
- use Illuminate\Http\Request;
- class CertificationsController extends Controller
- {
- public function search(Request $request)
- {
- /*
- * Валидация полей
- */
- $validator = Validator::make(
- $request->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;
- }
- }
|