Example #1
0
 /**
  * Handle the event.
  *
  * @param  advertisePurchased  $event
  * @return void
  */
 public function handle(advertisePurchased $event)
 {
     $payment = $event->payment;
     $advertise = $payment->itemable;
     $payment->update(['status' => 1]);
     Advertise::where('user_id', $advertise->user_id)->where('package', $advertise->package)->update(['status' => 1]);
     Addon::advertise()->first()->buy();
 }
Example #2
0
 private function advertiseAvailableList()
 {
     $advertises = Advertise::where('expired_at', '>', Carbon::now())->active()->get();
     $reservation_dates = [];
     $columns = Config::get('addonAdvertise.columns');
     for ($i = 1; $i <= 15; $i++) {
         $capacity = $columns;
         $start_date = Carbon::now()->addDays($i - 1);
         $expire_date = Carbon::now()->addDays($i);
         $selected_advertises = $advertises->filter(function ($advertise) use($start_date, $expire_date) {
             return $advertise->expired_at > $start_date and $advertise->expired_at < $expire_date;
         });
         foreach ($selected_advertises as $selected_advertise) {
             $weight = Config::get('addonAdvertise.attributes')[1]['values'][$selected_advertise->type]['weight'];
             $capacity = $capacity - $weight;
         }
         if ($capacity - Config::get('addonAdvertise.attributes')[1]['values'][1]['weight'] >= 0) {
             $gold_availability = 1;
         } else {
             $gold_availability = 0;
         }
         if ($capacity - Config::get('addonAdvertise.attributes')[1]['values'][2]['weight'] >= 0) {
             $silver_availability = 1;
         } else {
             $silver_availability = 0;
         }
         if ($capacity - Config::get('addonAdvertise.attributes')[1]['values'][3]['weight'] >= 0) {
             $bronze_availability = 1;
         } else {
             $bronze_availability = 0;
         }
         $selected_advertises = $selected_advertises->all();
         $expire_date = jDate::forge($expire_date)->format('Y/m/d H:i');
         $start_date = jDate::forge($start_date)->format('Y/m/d H:i');
         $reservation_dates[$i] = compact('start_date', 'expire_date', 'gold_availability', 'silver_availability', 'bronze_availability', 'selected_advertises');
     }
     return $reservation_dates;
 }
Example #3
0
 public function index()
 {
     $advertises = Advertise::where('expired_at', '>=', Carbon::now())->where('expired_at', '<=', Carbon::now()->addDays(1))->active()->groupBy('user_id')->get();
     $advertises_list = Advertise::where('expired_at', '>=', Carbon::now())->where('expired_at', '<=', Carbon::now()->addDays(1))->active()->groupBy('user_id')->get();
     $result = [];
     while (count($advertises) > 0) {
         $gold = 0;
         $silver = 0;
         $bronze = 0;
         $cumulative = [];
         $cumulant = 0;
         foreach ($advertises as $advertise) {
             if ($advertise->type == 1) {
                 $gold++;
             } elseif ($advertise->type == 2) {
                 $silver++;
             } elseif ($advertise->type == 3) {
                 $bronze++;
             }
         }
         foreach ($advertises as $key => $advertise) {
             if ($advertise->type == 1) {
                 $coff = 4;
             } elseif ($advertise->type == 2) {
                 $coff = 2;
             } elseif ($advertise->type == 3) {
                 $coff = 1;
             }
             $probability = $coff / (4 * $gold + 2 * $silver + $bronze);
             $advertise->probability = $probability;
             $cumulant += $probability;
             $cumulative[] = ['user_id' => $advertise->user_id, 'cumulant' => $cumulant];
         }
         $rand = rand(0, 10000) / 10000;
         $cumulative[-1] = 0;
         for ($i = 0; $i < count($cumulative); $i++) {
             if ($rand > $cumulative[$i - 1]['cumulant'] and $rand <= $cumulative[$i]['cumulant']) {
                 $result[] = ['user_id' => $cumulative[$i]['user_id']];
                 $user_id = $cumulative[$i]['user_id'];
                 $advertise_id = $advertises->search(function ($item, $key) use($user_id) {
                     return $item->user_id = $user_id;
                 });
                 $advertises->forget($advertise_id);
                 break;
             }
         }
     }
     $sorted_advertises = new \Illuminate\Database\Eloquent\Collection();
     foreach ($result as $item) {
         $sorted_advertises->add($advertises_list->where('user_id', $item['user_id'])->first());
     }
     //        dd($sorted_advertises);
     //        $users = [];
     //        $users [] = ['id'=>1, 'name'=>'emad', 'type'=>1];
     //        $users [] = ['id'=>2, 'name'=>'jafar', 'type'=>3];
     //        $users [] = ['id'=>3, 'name'=>'ekarim', 'type'=>3];
     //        $users [] = ['id'=>4, 'name'=>'ahmad', 'type'=>2];
     //        $users [] = ['id'=>5, 'name'=>'gholam', 'type'=>2];
     //        $users [] = ['id'=>6, 'name'=>'kazem', 'type'=>3];
     //        $users [] = ['id'=>7, 'name'=>'saeed', 'type'=>3];
     //        $users [] = ['id'=>8, 'name'=>'sepehr', 'type'=>3];
     //        $users [] = ['id'=>9, 'name'=>'karamali', 'type'=>2];
     //        $users [] = ['id'=>10, 'name'=>'abas', 'type'=>3];
     //        $users [] = ['id'=>11, 'name'=>'kambiz', 'type'=>2];
     //        $users [] = ['id'=>12, 'name'=>'asghar', 'type'=>1];
     //        $users [] = ['id'=>13, 'name'=>'homayoon', 'type'=>3];
     //        $users [] = ['id'=>14, 'name'=>'iraj', 'type'=>2];
     //        $users [] = ['id'=>15, 'name'=>'mojtaba', 'type'=>3];
     //        $users [] = ['id'=>16, 'name'=>'javid', 'type'=>1];
     //
     //
     //        $result=[];
     //
     //        while(count($users) > 0){
     //
     //            $gold = 0;
     //            $silver = 0;
     //            $bronze = 0;
     //            $cumulative = [];
     //            $cumulant = 0;
     //
     //            foreach($users as $user){
     //                if($user['type'] == 1){
     //                    $gold++;
     //                }elseif($user['type'] == 2){
     //                    $silver++;
     //                }elseif($user['type'] == 3){
     //                    $bronze++;
     //                }
     //            }
     //
     //            foreach($users as $key=>$user){
     //                if($user['type'] == 1){
     //                    $coff = 4;
     //                }elseif($user['type'] == 2){
     //                    $coff = 2;
     //                }elseif($user['type'] == 3){
     //                    $coff = 1;
     //                }
     //                $probability = ($coff)/(4*$gold+2*$silver+$bronze);
     //                $users[$key]['probability'] = $probability;
     //                $cumulant+=$probability;
     //                $cumulative[] = ['user_id'=> $user['id'], 'cumulant'=>$cumulant];
     //            }
     //
     //            $rand = rand(0,1000)/1000;
     //            $cumulative[-1] = 0;
     //            for($i=0; $i<count($cumulative) ; $i++){
     //                if($rand > $cumulative[$i-1]['cumulant'] and $rand <= $cumulative[$i]['cumulant']){
     //                    $result [] = [$cumulative[$i]['user_id']];
     //                    array_forget($users, $i);
     //                    $users = array_values($users);
     //                    break;
     //                }
     //            }
     //
     //        }
     //
     //        dd([$result, $users]);
     return view('index.index', compact('sorted_advertises'));
 }