예제 #1
0
 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');
 }
예제 #2
0
                                                <p><i class="icon icon-4"></i>Стан аукціону: <b>{{ trans('theme.statuses.'.$auction->status) }}</b></p>
                                                <div class="buttons" style="padding-top: 10px">
                                                    <a href="{{action('AuctionsController@getAuctionPageBySlug', ['id' => $auction->id, 'slug' => $auction->slug])}}" class="btn btn-primary">Переглянути лот</a>
                                                    @if($auction->status == 2)<a href="{{ action('BiddersController@getAddBidder', ['id' => $auction->id]) }}" class="btn btn-warning">Подати заявку</a>@endif
                                                    {{-- Проверка, имеет ли аукцион статус "Відбуваються торги" --}}
                                                    @if($auction->status == 3)

                                                        @if(!Auth::check())
                                                            {{-- Если пользователь не авторизован, при нажатии открываем окно для входа --}}
                                                            <a href="#" data-toggle="modal" data-target="#LoginModal" class="btn btn-warning">Зробити ставку</a>
                                                        @else
                                                            <?php 
// Запрос к списку участников (проверка, имеет ли текущий авторизованных пользователь статус Допущен до аукциона)
// Вовзращает: 1 - если текущий пользователь успешно допущен (его заявка одобрена администрацией)
// или 0 - если заявка не допущена или пользователь не подавал её вовсе
$ee = \App\Bidders::where(['user_id' => Auth::user()->id, 'auction_id' => $auction->id, 'status' => 1])->get();
?>

                                                            @if($ee->count() == 1)
                                                                <a href="#" class="btn btn-warning" data-toggle="modal" data-target="#doBet">Зробити ставку</a>
                                                            @endif

                                                        @endif{{-- Auth::check --}}

                                                    @endif{{-- $auction->status == 3 --}}
                                                </div>
                                            </div>
                                            <div class="col-xs-5">
                                                <p class="b"><i class="icon icon-5"></i>Стартова ціна:</p>
                                                <p class="price"><span>{{ number_format($auction->starting_price, 2, ',', ' ') }} грн. </span></p>
                                                <p class="date_start"><span><i class="icon icon-6"></i>Дата аукціону:</span><b>{{ Carbon\Carbon::parse($auction->data_start)->format('d.m.Y в H:i') }}</b></p>
예제 #3
0
 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();
 }
예제 #4
0
 /**
  * Производит добавление участника
  */
 public function postAddBidder(Request $request, $id)
 {
     $messages = array('required' => trans('theme.reg.required'), 'mimes' => trans('theme.reg.mimes'), 'rules_agree.required' => 'Необхідно погодитися з правилами');
     $rules = ['first_name' => 'required', 'last_name' => 'required', 'middle_name' => 'required', 'phone' => 'required', 'bank_name' => 'required', 'account_number' => 'required', 'bank_code' => 'required', 'passport_series' => 'required', 'passport_number' => 'required', 'passport_issue' => 'required', 'passport_issued' => 'required', 'adress_postcode' => 'required', 'adress_region' => 'required', 'adress_city' => 'required', 'adress_full' => 'required', 'rules_agree' => 'required', 'file1' => 'required|mimes:jpeg,bmp,png,pdf,doc,docx', 'file2' => 'required|mimes:jpeg,bmp,png,pdf,doc,docx', 'file3' => 'mimes:jpeg,bmp,png,pdf,doc,docx', 'file4' => 'required|mimes:jpeg,bmp,png,pdf,doc,docx'];
     if ($request->payment_type == 2) {
         $rules = array_add($rules, 'payment_card', 'required');
         $rules = array_add($rules, 'payment_code', 'required');
     }
     if (!Auth::check()) {
         $rules = array_add($rules, 'email', 'required');
     }
     // Если у пользователя нет отказа от ИНН
     if (!$request->has('inn_waiver')) {
         $rules = array_add($rules, 'passport_inn', 'required');
     }
     // Валидатор
     $this->validate($request, $rules, $messages);
     $request->flash();
     $add = new Bidders();
     $add->auction_id = $id;
     // Если пользователь авторизован
     if (Auth::check()) {
         $add->user_id = Auth::user()->id;
     } else {
         $createUser = new User();
         $createUser->first_name = $request->first_name;
         $createUser->last_name = $request->last_name;
         $createUser->middle_name = $request->middle_name;
         $createUser->email = $request->email;
         $createUser->phone = $request->phone;
         $genPass = str_random(8);
         // Случаные 8 символов в качестве пароля
         $createUser->password = bcrypt($genPass);
         $createUser->user_group = 1;
         // По-умолчанию регистрируется как физическое лицо
         $createUser->save();
         $add->user_id = $createUser->id;
         $sendTo = $request->email;
         // Отправка письма об успешной регистрации
         Mail::send('emails.register', array('first_name' => $request->first_name, 'last_name' => $request->last_name, 'email' => $request->email, 'pass' => $genPass), function ($message) use($sendTo) {
             $message->to($sendTo)->subject('Успешная регистрация');
         });
     }
     // Информация о лице
     $add->first_name = $request->first_name;
     $add->last_name = $request->last_name;
     $add->middle_name = $request->middle_name;
     $add->phone = $request->phone;
     $add->dop_phone = $request->dop_phone;
     // Банковские реквизиты
     $add->payment_type = $request->payment_type;
     $add->bank_name = $request->bank_name;
     // Дополнительные поля при оплате картой
     if ($request->payment_type == 2) {
         $add->payment_card = $request->payment_card;
         $add->payment_code = $request->payment_code;
     }
     $add->account_number = $request->account_number;
     $add->bank_code = $request->bank_code;
     // Паспортные данные
     $add->passport_series = $request->passport_series;
     $add->passport_number = $request->passport_number;
     $add->passport_issue = $request->passport_issue;
     $add->passport_issued = $request->passport_issued;
     // Если у пользователя нет отказа от ИНН
     if (!$request->has('inn_waiver')) {
         $add->passport_inn = $request->passport_inn;
     }
     // Адрес
     $add->adress_postcode = $request->adress_postcode;
     $add->adress_region = $request->adress_region;
     $add->adress_city = $request->adress_city;
     $add->adress_full = $request->adress_full;
     $add->status = 0;
     $surl = $this->globalSiteSettings['site_url'];
     // Домен сайта из конфигов
     // Файл 1
     if ($request->hasFile('file1')) {
         $file1 = $request->file('file1');
         $filename = str_random(10) . '.' . $file1->getClientOriginalExtension();
         $imgurl = $surl . '/userfiles/' . $filename;
         $file1->move(public_path() . '/userfiles/', $filename);
         $add->file1 = $imgurl;
     }
     // Файл 2
     if ($request->hasFile('file2')) {
         $file2 = $request->file('file2');
         $filename = str_random(10) . '.' . $file2->getClientOriginalExtension();
         $imgurl = $surl . '/userfiles/' . $filename;
         $file2->move(public_path() . '/userfiles/', $filename);
         $add->file2 = $imgurl;
     }
     // Файл 3
     if ($request->hasFile('file3')) {
         $file3 = $request->file('file3');
         $filename = str_random(10) . '.' . $file3->getClientOriginalExtension();
         $imgurl = $surl . '/userfiles/' . $filename;
         $file3->move(public_path() . '/userfiles/', $filename);
         $add->file3 = $imgurl;
     }
     // Файл 4
     if ($request->hasFile('file4')) {
         $file4 = $request->file('file4');
         $filename = str_random(10) . '.' . $file4->getClientOriginalExtension();
         $imgurl = $surl . '/userfiles/' . $filename;
         $file4->move(public_path() . '/userfiles/', $filename);
         $add->file4 = $imgurl;
     }
     $add->save();
     $auction = Auction::find($id);
     $adminEmail = $this->globalSiteSettings['admin_email'];
     Mail::send('emails.admin-new-bidder', ['lot_title' => $auction->title, 'lot_id' => $auction->id], function ($message) use($adminEmail) {
         $message->to($adminEmail)->subject('Новий учасник');
     });
     if (!Auth::check()) {
         Auth::loginUsingId($createUser->id);
     }
     Session::flash('gAnalyticsReachGoal', 'NEW_BIDDER');
     Session::flash('YaMetrikaReachGoal', 'NEW_BIDDER');
     // Отправка данных о достижении цели в Яндекс Метрику
     return redirect('/auctions')->with('success_bidders_add', 'Ваша заявка успішно додано. Після перевірки даних адміністрацією, вона буде допущена до системи.');
 }
예제 #5
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();
 }