use yii\web\Response;
use yii_app\records\AdminGroup;
use yii_app\records\BouquetComposition;
+use yii_app\records\BouquetCompositionSearch;
use yii_app\records\BouquetCompositionMatrixTypeHistory;
use yii_app\records\MatrixBouquetActuality;
use yii_app\records\MatrixBouquetActualitySearch;
$filter->addRule(['onlyActive', 'onlyInactive'], 'boolean');
$filter->load(Yii::$app->request->get());
+ $searchModel = new BouquetCompositionSearch();
+ $searchModel->load(Yii::$app->request->get());
if (Yii::$app->request->isPost && $post = Yii::$app->request->post('actuality', [])) {
$this->processBatchActuality($post);
if ($filtersUsed) {
$query = BouquetComposition::find()->alias('bc');
$query->joinWith(['priceRel pr'])->addSelect(['bc.*', 'pr.price AS price']);
+ if (!empty($searchModel->bouquet_name)) {
+ $query->andWhere(['ilike', 'bc.name', $searchModel->bouquet_name]);
+ }
if (!empty($filter->group_id) || !empty($filter->subgroup_id)) {
$typeIds = [];
} else {
$query = BouquetComposition::find()->alias('bc');
$query->joinWith(['priceRel pr'])->addSelect(['bc.*', 'pr.price AS price']);
+ if (!empty($searchModel->bouquet_name)) {
+ $query->andWhere(['ilike', 'bc.name', $searchModel->bouquet_name]);
+ }
$query->with(['actualities' => function ($q) {
$q->orderBy(['date_from' => SORT_ASC]);
}]);
return $this->render('index', [
'filter' => $filter,
+ 'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'groups' => $groupsList,
'subgroups' => $subgroups,
--- /dev/null
+<?php
+
+namespace yii_app\records;
+
+use yii\base\Model;
+use yii\data\ActiveDataProvider;
+
+class BouquetCompositionSearch extends BouquetComposition
+{
+ public $bouquet_name;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function rules(): array
+ {
+ return [
+ [['bouquet_name'], 'safe'],
+ ];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function scenarios()
+ {
+ return Model::scenarios();
+ }
+
+ /**
+ * Эта модель теперь используется только для фильтрации по имени в GridView
+ * Основная фильтрация остается в контроллере
+ */
+ public function search($params)
+ {
+
+ $query = BouquetComposition::find()->alias('bc');
+
+ $dataProvider = new ActiveDataProvider([
+ 'query' => $query,
+ ]);
+
+ $this->load($params);
+
+ if (!$this->validate()) {
+ return $dataProvider;
+ }
+
+ return $dataProvider;
+ }
+}
\ No newline at end of file
*/
public static function tableName()
{
- return 'matrix_bouquet_actuality';
+ return 'erp24.matrix_bouquet_actuality';
}
/**
];
}
+ public function getBouquet() {
+ return $this->hasOne(BouquetComposition::class, ['id' => 'bouquet_id']);
+ }
+
}
*/
class MatrixBouquetActualitySearch extends MatrixBouquetActuality
{
+ public $bouquet_name;
/**
* {@inheritdoc}
*/
{
return [
[['id', 'bouquet_id', 'is_archive', 'created_by', 'updated_by'], 'integer'],
- [['guid', 'date_from', 'date_to', 'created_at', 'updated_at'], 'safe'],
+ [['guid', 'bouquet_name', 'date_from', 'date_to', 'created_at', 'updated_at'], 'safe'],
];
}
*/
public function search($params, $formName = null)
{
- $query = MatrixBouquetActuality::find();
+ $query = MatrixBouquetActuality::find()
+ ->joinWith(['bouquet']);;
// add conditions that should always apply here
]);
$query->andFilterWhere(['ilike', 'guid', $this->guid]);
+ $query->andFilterWhere(['ilike', 'bouquet.name', $this->bouquet_name]);
return $dataProvider;
}
</div>
<?= GridView::widget([
'dataProvider' => $dataProvider,
+ 'filterModel' => $searchModel,
'responsive' => false,
'hover' => true,
'floatHeader' => false,
'label' => 'Наименование',
'format' => 'raw',
'contentOptions' => ['style'=>'min-width:150px;'],
+ 'filter' => \yii\helpers\Html::activeTextInput($searchModel, 'bouquet_name', [
+ 'class' => 'form-control',
+ 'placeholder' => 'Поиск по имени'
+ ]),
'value' => function ($row, $key, $index) {
$product = $row['product'];
$price = $row['price'] ?? null;