$query, 'sort' => ['attributes' => ['username','credit','orders']], 'pagination' => [ 'pageSize' => 20, ], ]); $dataProvider->sort->attributes['username'] = [ 'asc' => ['user.lastname' => SORT_ASC, 'user.name' => SORT_ASC], 'desc' => ['user.lastname' => SORT_DESC, 'user.name' => SORT_DESC], ]; $dataProvider->sort->attributes['credit'] = [ 'asc' => ['user_producer.credit' => SORT_ASC], 'desc' => ['user_producer.credit' => SORT_DESC], ]; $this->load($params); if (!$this->validate()) { return $dataProvider; } $active = (isset($this->inactive) && $this->inactive) ? 0 : 1 ; $query->innerJoin('user_producer','user.id = user_producer.id_user AND user_producer.active = '.$active.' AND user_producer.id_producer = :id_producer', [':id_producer' => Producer::getId()]) ; if(isset($this->id_point_sale) && $this->id_point_sale) { $pointSale = PointSale::findOne(['id' => $this->id_point_sale]) ; if($pointSale->restricted_access) { $query->innerJoin('user_point_sale','user.id = user_point_sale.id_user AND user_point_sale.id_point_sale = :id_point_sale',[':id_point_sale' => $this->id_point_sale]) ; } else { $query->innerJoin( 'order', 'user.id = order.id_user AND order.id_point_sale = :id_point_sale', [':id_point_sale' => $this->id_point_sale] )->groupBy('user.id') ; } } if(isset($this->inactive) && $this->inactive) { $query->innerJoin( 'order', 'user.id = order.id_user' ) ->groupBy('user.id'); } $query->andFilterWhere([ 'or', ['like', 'user.lastname', $this->username], ['like', 'user.name', $this->username] ]); return $dataProvider; } }