示例#1
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Scorecard::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'competition_id' => $this->competition_id, 'golfer_id' => $this->golfer_id, 'tees' => $this->tees]);
     $query->andFilterWhere(['like', 'note', $this->note]);
     return $dataProvider;
 }
示例#2
0
 public function apply($competition)
 {
     $params = $this->getParameters();
     $this->bestOf = isset($params['bestOf']) ? intval($params['bestOf']) : null;
     $children_competitions = $competition->getCompetitions()->andWhere(['status' => Competition::STATUS_CLOSED])->select('id');
     Yii::trace('children comp=' . print_r($children_competitions->asArray()->all(), true));
     foreach ($competition->getScorecards()->andWhere(['status' => Scorecard::STATUS_OPEN])->each() as $scorecard) {
         Yii::trace('scorecard=' . $scorecard->id);
         $registrations = Registration::find()->andWhere(['competition_id' => $children_competitions])->andWhere(['golfer_id' => $scorecard->registration->golfer_id]);
         $children_scorecards = Scorecard::find()->andWhere(['registration_id' => $registrations->select('id')])->andWhere(['status' => Scorecard::STATUS_RETURNED]);
         if (intval($this->bestOf) > 0) {
             $children_scorecards->orderBy([$this->source_type => $this->source_direction])->limit($this->bestOf);
         }
         $count_children = clone $children_scorecards;
         $sum_children = $children_scorecards->sum($this->source_type);
         $scorecard->{$this->destination_type} = $sum_children;
         $scorecard->rounds = $count_children->count();
         $scorecard->save();
     }
     Yii::trace('bestOf=' . $this->bestOf);
 }