public function execute($competition)
 {
     $flight_size = $competition->flight_size ? $competition->flight_size : Competition::FLIGHT_SIZE_DEFAULT;
     $flight_interval = $competition->flight_time ? $competition->flight_time : Competition::FLIGHT_TIME_DEFAULT;
     $flight_time = strtotime("-" . $flight_interval . " minutes", strtotime($competition->start_date));
     Yii::trace('Flight size=' . $flight_size, 'BuildFlightChrono::execute');
     $count = $flight_size;
     $position = 1;
     $registrations = $competition->getRegistrations()->andWhere(['status' => Registration::STATUS_REGISTERED])->orderBy('created_at');
     foreach ($registrations->each() as $registration) {
         if ($count >= $flight_size) {
             $flight_time = strtotime("+" . $flight_interval . " minutes", strtotime($flight_time));
             $count = 0;
             $flight = new Flight();
             $flight->position = $position++;
             $flight->start_time = $flight_time;
             $flight->start_hole = $competition->start_hole;
             $flight->save();
             $flight->refresh();
         }
         Yii::trace('doing=' . $registration->id . '=' . $flight->id . ' at=' . $flight_time, 'BuildFlightChrono::execute');
         $registration->flight_id = $flight->id;
         $registration->save();
         $count++;
     }
 }
 public static function addFlights($competition, $registrations)
 {
     $flight_size = $competition->flight_size ? $competition->flight_size : Competition::FLIGHT_SIZE_DEFAULT;
     $position = Flight::find()->andWhere(['competition_id' => $competition->id])->max('position');
     if (!intval($position) > 0) {
         $position = 0;
     }
     $position++;
     $count = $flight_size;
     // we collect the teams for which we don't have a registration yet
     $team_ids = [];
     foreach ($registrations->each() as $registration) {
         $team_ids[$registration->team_id] = $registration->team_id;
     }
     foreach (Team::find()->andWhere(['id' => $team_ids])->each() as $team) {
         if ($count >= $flight_size) {
             $count = 0;
             $flight = new Flight();
             $flight->position = $position++;
             $flight->save();
             $flight->refresh();
         }
         foreach ($team->getRegistrations()->each() as $registration) {
             $registration->flight_id = $flight->id;
             $registration->save();
         }
         $count++;
     }
 }
 public static function addFlights($competition, $registrations)
 {
     $flight_size = $competition->flight_size ? $competition->flight_size : Competition::FLIGHT_SIZE_DEFAULT;
     $position = Flight::find()->andWhere(['competition_id' => $competition->id])->max('position');
     if (!intval($position) > 0) {
         $position = 0;
     }
     $position++;
     $count = $flight_size;
     foreach ($registrations->each() as $registration) {
         if ($count >= $flight_size) {
             $count = 0;
             $flight = new Flight();
             $flight->position = $position++;
             $flight->save();
         }
         $registration->flight_id = $flight->id;
         $registration->save();
         $count++;
     }
 }
 /**
  * Build flight and place registration in it. Create flight if necessary.
  * @return flight_id updated or created
  */
 private function makeFlight($flight_str, $competition)
 {
     $competition_date = substr($competition->start_date, 0, 10);
     $flight_arr = explode('-', $flight_str->id);
     // flight-123
     $flight = Flight::findOne($flight_arr[1]);
     if (!$flight) {
         // need to create it
         $flight = new Flight();
     } else {
         // remove existings
         $flight->cleanRegistrations();
     }
     $flight->position = $flight_str->position;
     Yii::trace($competition_date . ' ' . $flight_str->start_time . ':00', 'FlightController::makeFlight');
     $flight->start_time = $competition_date . ' ' . $flight_str->start_time . ':00';
     $flight->save();
     // add currents
     if ($competition->isTeamCompetition()) {
         foreach ($flight_str->registrations as $registration_str) {
             $registration_arr = explode('-', $registration_str);
             // registration-456
             $team = Team::findOne($registration_arr[1]);
             if ($team) {
                 foreach ($team->getRegistrations()->each() as $registration) {
                     $registration->flight_id = $flight->id;
                     $registration->save();
                 }
             }
         }
     } else {
         foreach ($flight_str->registrations as $registration_str) {
             $registration_arr = explode('-', $registration_str);
             // registration-456
             $registration = Registration::findOne($registration_arr[1]);
             if ($registration) {
                 $registration->flight_id = $flight->id;
                 $registration->save();
             }
         }
     }
     return $flight->id;
 }