public function getAddBet($id)
 {
     // Проверка, является ли текущий пользователь участником
     $haveAccess = Bidders::where(['user_id' => Auth::user()->id, 'auction_id' => $id, 'status' => 1])->get();
     // Экземпляр лота
     $auction = Auction::find($id);
     // Список ставок
     $thisBids = Bets::where('auction_id', '=', $id)->orderBy('created_at', 'desc')->get();
     // Если пользователь не является участником - редиректим на главную страницу
     if ($haveAccess->count() == 0) {
         return redirect('/auctions');
     } else {
         // Если данный пользователь является последним, кто сделал ставку и пытается сделать ее еще раз - редиректим назад и показываем ошибку
         if ($thisBids->count() > 0 && $thisBids->first()->user_id == Auth::user()->id) {
             return redirect()->back()->with('bit_error', 'Ви вже зробили ставку!');
         }
         // Если пользователь не делал ставок, но имеет доступ
         $bet = new Bets();
         // Создаем экземпляр ставки
         $bet->auction_id = $id;
         // Указываем id аукциона
         $bet->user_id = Auth::user()->id;
         // Указываем id пользователя
         // Если это первая ставка - складываем стартовую цену и цену за шаг
         if ($thisBids->count() == 0) {
             $bet->bet = $auction->starting_price + $auction->bid_price;
         } else {
             // Добавляем цену за шаг к последнему ценовому предложению
             $bet->bet = $thisBids->first()->bet + $auction->bid_price;
         }
         // Продлеваем аукцион еще на 15 минут
         $auction->date_end = Carbon::parse($auction->date_end)->addMinutes(15);
         $auction->save();
         $bet->save();
     }
     // В случае успеха - редиректим назад и передаем flash переменную
     return redirect()->back()->with('bit_success', '1');
 }
 public function getDeleteLot($id)
 {
     // Удаляем файлы
     $deleteFiles = App\Uploads::where('auction_id', $id)->get();
     if ($deleteFiles->count() > 0) {
         setlocale(LC_ALL, 'ru_RU.utf8');
         foreach ($deleteFiles as $b) {
             //dd($b);
             //
             //$e = substr(strrchr($fname,'.'),1);
             //$n = preg_replace('/.[^.]*$/', '', $fname);
             if ($b->type == 'image') {
                 $extension = substr(strrchr($b->name, '.'), 1);
                 $cutName = preg_replace('/.[^.]*$/', '', $b->name);
                 Storage::disk('upload_images')->delete($b->name);
                 Storage::disk('upload_images')->delete($cutName . '-sm.' . $extension);
             } elseif ($b->type == 'doc') {
                 $fname = pathinfo($b->link);
                 Storage::disk('upload_docs')->delete($fname['basename']);
             }
             $b->delete();
         }
     }
     // Удаляем аукцион
     $delete = Auction::find($id);
     $delete->delete();
     // Удаляем участников аукциона
     $deleteBidders = App\Bidders::where('auction_id', $id)->get();
     if ($deleteBidders->count() > 0) {
         foreach ($deleteBidders as $b) {
             $b->delete();
         }
     }
     // Удаляем ставки
     $deleteBets = App\Bets::where('auction_id', $id)->get();
     if ($deleteBets->count() > 0) {
         foreach ($deleteBets as $b) {
             $b->delete();
         }
     }
     // Сбрасываем закешированные данные виджета "Останні надходження"
     if (Cache::has('last_lots')) {
         Cache::forget('last_lots');
     }
     return redirect()->back();
 }
 /**
  * Возвращает ценовые предложения (AJAX)
  */
 public function ajaxGetBets(Request $request, $id)
 {
     $response = Bets::where('auction_id', '=', $id)->orderBy('created_at', 'desc')->get();
     return view('auction.lots.inc.auction-bidders-ajax', ['bets' => $response, 'currency' => $request->currency]);
 }
Esempio n. 4
0
 /**
  * Define the application's command schedule.
  *
  * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
  * @return void
  */
 protected function schedule(Schedule $schedule)
 {
     $schedule->command('inspire')->hourly();
     $schedule->call(function () {
         // Ищем аукционы, дата завершения которых подошла к концу
         $auctionsEnd = Auction::where('date_end', '=', Carbon::parse(Carbon::now())->format('Y-m-d H:i'))->where('status', '=', 3)->with('bidders')->get();
         // Если такие аукционы есть
         if ($auctionsEnd->count() > 0) {
             foreach ($auctionsEnd as $auction) {
                 // Данные пользователя создавшего аукцион
                 $user = User::find($auction->user);
                 // Определяем победителя по наибольшей ставке
                 $win = Bets::where('auction_id', '=', $auction->id)->orderBy('created_at', 'desc')->first();
                 // Помещаем аукцион в Архив
                 $auction->in_archive = 1;
                 /*
                  * Если победитель есть
                  */
                 if ($win) {
                     // Загружаем информацию о победителе
                     $win_user = User::find($win->user_id);
                     // Присваиваем участнику статус "Победитель"
                     $win_status = Bidders::where('auction_id', '=', $auction->id)->where('user_id', '=', $win->user_id)->first();
                     $win_status->status = 2;
                     $win_status->save();
                     // Смена статуса на "Торги відбулися"
                     $auction->status = 7;
                     $auction->final_price = $win->bet;
                     // Окончательная цена
                     $auction->save();
                     // Отправка письма создателю аукциона
                     Mail::queue('emails.auction-end', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'middle_name' => $user->middle_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_cyr' => $auction->currency, 'auction_status' => 7, 'win_first_name' => $win_user->first_name, 'win_last_name' => $win_user->last_name, 'win_middle_name' => $win_user->middle_name, 'win_email' => $win_user->email, 'win_phone' => $win_user->phone, 'win_cost' => $win->bet], function ($message) use($user) {
                         $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Аукціон завершено');
                     });
                     // Отправка письма победителю аукциона
                     Mail::queue('emails.auction-end-winner', ['first_name' => $win_user->first_name, 'last_name' => $win_user->last_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_cyr' => $auction->currency, 'auction_status' => 7, 'win_cost' => $win->bet], function ($message) use($win_user) {
                         $message->to($win_user->email, $win_user->first_name . ' ' . $win_user->last_name)->subject('Аукціон завершено');
                     });
                     // Отправка письма администратору
                     $adminEmail = Config::get('app.admin_email');
                     Mail::queue('emails.auction-end-admin', ['auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_status' => 7, 'auction_cyr' => $auction->currency, 'win_first_name' => $win_user->first_name, 'win_last_name' => $win_user->last_name, 'win_middle_name' => $win_user->middle_name, 'win_email' => $win_user->email, 'win_phone' => $win_user->phone, 'win_cost' => $win->bet], function ($message) use($adminEmail) {
                         $message->to($adminEmail)->subject('Аукціон завершено');
                     });
                 } else {
                     $auction->status = 8;
                     // Смена статуса на "Торги не відбулися"
                     $auction->save();
                     // Отправка письма создателю аукциона
                     Mail::queue('emails.auction-end', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'middle_name' => $user->middle_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_status' => 8], function ($message) use($user) {
                         $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Аукціон завершено');
                     });
                     // Отправка письма администратору
                     $adminEmail = Config::get('app.admin_email');
                     Mail::queue('emails.auction-end-admin', ['auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_status' => 8], function ($message) use($adminEmail) {
                         $message->to($adminEmail)->subject('Аукціон завершено');
                     });
                 }
             }
         }
     })->everyMinute();
     $schedule->call(function () {
         // Ищем аукционы, которые должны начаться
         $auctions = Auction::where('data_start', '=', Carbon::parse(Carbon::now())->format('Y-m-d H:i'))->where('status', '=', 2)->with('bidders')->get();
         // Если количество аукционов больше нуля, выполняем скрипт
         if ($auctions->count() > 0) {
             foreach ($auctions as $auction) {
                 $user = User::find($auction->user);
                 // Информация о создателе аукциона
                 // Если к началу аукциона есть участники - выполняем
                 if ($auction->bidders->count() > 0) {
                     $array[$auction->id] = [];
                     $bid = [];
                     $auction->status = 3;
                     $auction->save();
                     foreach ($auction->bidders as $bidder) {
                         // Если статус участника "Допущено"
                         if ($bidder->status == 1) {
                             $array[$auction->id] = array_add($array[$auction->id], 'id', $auction->id);
                             $array[$auction->id] = array_add($array[$auction->id], 'title', $auction->title);
                             array_push($bid, $bidder->user_id);
                         }
                     }
                     $array[$auction->id] = array_add($array[$auction->id], 'bidders', $bid);
                     // Получаем доступ к информации о каждом участнике
                     $users[$auction->id] = User::find($array[$auction->id]['bidders']);
                     foreach ($users[$auction->id] as $user) {
                         Mail::queue('emails.auctionstart', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title], function ($message) use($user) {
                             $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Розпочато аукціон');
                         });
                     }
                 } else {
                     $auction->status = 8;
                     // Смена статуса на "Торги не відбулися"
                     $auction->in_archive = 1;
                     // Помещаем аукцион в Архив
                     $auction->save();
                     // Отправка письма создателю аукциона
                     Mail::queue('emails.auction-end', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'middle_name' => $user->middle_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_status' => 8], function ($message) use($user) {
                         $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Аукціон завершено');
                     });
                     // Отправка письма администратору
                     $adminEmail = Config::get('app.admin_email');
                     Mail::queue('emails.auction-end-admin', ['auction_id' => $auction->id, 'auction_title' => $auction->title, 'auction_status' => 8], function ($message) use($adminEmail) {
                         $message->to($adminEmail)->subject('Аукціон завершено');
                     });
                 }
             }
         }
     })->everyMinute();
     $schedule->call(function () {
         // Ищем аукционы, которые должны начаться через 10 минут
         $auctions = Auction::where('data_start', '=', Carbon::parse(Carbon::now())->addMinutes(10)->format('Y-m-d H:i'))->where('status', '=', 2)->with('bidders')->get();
         // Если количество аукционов больше нуля, выполняем скрипт
         if ($auctions->count() > 0) {
             foreach ($auctions as $auction) {
                 // Если к началу аукциона есть участники - выполняем
                 if ($auction->bidders->count() > 0) {
                     $array[$auction->id] = [];
                     $bid = [];
                     foreach ($auction->bidders as $bidder) {
                         // Если статус участника "Допущено"
                         if ($bidder->status == 1) {
                             $array[$auction->id] = array_add($array[$auction->id], 'id', $auction->id);
                             $array[$auction->id] = array_add($array[$auction->id], 'title', $auction->title);
                             array_push($bid, $bidder->user_id);
                         }
                     }
                     $array[$auction->id] = array_add($array[$auction->id], 'bidders', $bid);
                     // Получаем доступ к информации о каждом участнике
                     $users[$auction->id] = User::find($array[$auction->id]['bidders']);
                     foreach ($users[$auction->id] as $user) {
                         Mail::queue('emails.auctionstart10', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title], function ($message) use($user) {
                             $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Аукціон розпочнеться через 10 хвилин');
                         });
                     }
                     $user = User::find($auction->user);
                     // Информация о создателе аукциона
                     // Отправка письму о начале через 10 минут создателю аукциона
                     Mail::queue('emails.auctionstart10creator', ['first_name' => $user->first_name, 'last_name' => $user->last_name, 'auction_id' => $auction->id, 'auction_title' => $auction->title], function ($message) use($user) {
                         $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Ваш аукціон розпочнеться через 10 хвилин');
                     });
                 }
             }
         }
     })->everyMinute();
     /*
      * Ежедневная проверка курса доллара и евро
      * В случае несовпадения курса банка с курсом на сайте - курс изменяется
      */
     $schedule->call(function () {
         $currentUSD = \App\Settings::where(['name' => 'usd_cyr'])->first();
         // Текущий курс доллара
         $currentEUR = \App\Settings::where(['name' => 'eur_cyr'])->first();
         // Текущий курс евро
         $currentUSDval = $currentUSD->value;
         $currentEURval = $currentEUR->value;
         $get_currency = 'https://api.privatbank.ua/p24api/pubinfo?exchange&json&coursid=11';
         $currency = file_get_contents($get_currency);
         $currency = json_decode($currency);
         $newCurrencyUSD = number_format($currency[0]->sale, 2, '.', ' ');
         // Новый курс доллара
         $newCurrencyEUR = number_format($currency[1]->sale, 2, '.', ' ');
         // Новый курс евро
         if ($currentUSDval != $newCurrencyUSD) {
             $currentUSD->value = $newCurrencyUSD;
             $currentUSD->save();
         }
         if ($currentEURval != $newCurrencyEUR) {
             $currentEUR->value = $newCurrencyEUR;
             $currentEUR->save();
         }
     })->daily();
 }