]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
поиск по имени букета
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 22 Sep 2025 19:49:24 +0000 (22:49 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 22 Sep 2025 19:49:24 +0000 (22:49 +0300)
erp24/controllers/MatrixBouquetActualityController.php
erp24/records/BouquetCompositionSearch.php [new file with mode: 0644]
erp24/records/MatrixBouquetActuality.php
erp24/records/MatrixBouquetActualitySearch.php
erp24/views/matrix-bouquet-actuality/index.php

index 605e0f7a4aa64cf42819c3f41642c03d03e38ab8..51cacd04b6f22dac8761f989437622715bef0751 100644 (file)
@@ -9,6 +9,7 @@ use yii\web\BadRequestHttpException;
 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;
@@ -60,6 +61,8 @@ class MatrixBouquetActualityController extends Controller
         $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);
@@ -82,6 +85,9 @@ class MatrixBouquetActualityController extends Controller
         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 = [];
@@ -199,6 +205,9 @@ class MatrixBouquetActualityController extends Controller
         } 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]);
             }]);
@@ -259,6 +268,7 @@ class MatrixBouquetActualityController extends Controller
 
         return $this->render('index', [
             'filter'       => $filter,
+            'searchModel'  => $searchModel,
             'dataProvider' => $dataProvider,
             'groups'       => $groupsList,
             'subgroups'    => $subgroups,
diff --git a/erp24/records/BouquetCompositionSearch.php b/erp24/records/BouquetCompositionSearch.php
new file mode 100644 (file)
index 0000000..e0d062f
--- /dev/null
@@ -0,0 +1,51 @@
+<?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
index a98168050d10f6c71aa7bce89e0dfcae0d3a36bf..0e936600aff3e3f644cb1d34c44f56b93342f08c 100644 (file)
@@ -27,7 +27,7 @@ class MatrixBouquetActuality extends \yii\db\ActiveRecord
      */
     public static function tableName()
     {
-        return 'matrix_bouquet_actuality';
+        return 'erp24.matrix_bouquet_actuality';
     }
 
     /**
@@ -65,4 +65,8 @@ class MatrixBouquetActuality extends \yii\db\ActiveRecord
         ];
     }
 
+    public function getBouquet() {
+        return $this->hasOne(BouquetComposition::class, ['id' => 'bouquet_id']);
+    }
+
 }
index 48bdcef0933c94b613513e016ee0d1a26ae5abed..38a464fdc4cc55a9741907849f0ef26addcc2273 100644 (file)
@@ -11,6 +11,7 @@ use yii_app\records\MatrixBouquetActuality;
  */
 class MatrixBouquetActualitySearch extends MatrixBouquetActuality
 {
+    public $bouquet_name;
     /**
      * {@inheritdoc}
      */
@@ -18,7 +19,7 @@ class MatrixBouquetActualitySearch extends MatrixBouquetActuality
     {
         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'],
         ];
     }
 
@@ -41,7 +42,8 @@ class MatrixBouquetActualitySearch extends MatrixBouquetActuality
      */
     public function search($params, $formName = null)
     {
-        $query = MatrixBouquetActuality::find();
+        $query = MatrixBouquetActuality::find()
+            ->joinWith(['bouquet']);;
 
         // add conditions that should always apply here
 
@@ -71,6 +73,7 @@ class MatrixBouquetActualitySearch extends MatrixBouquetActuality
         ]);
 
         $query->andFilterWhere(['ilike', 'guid', $this->guid]);
+        $query->andFilterWhere(['ilike', 'bouquet.name', $this->bouquet_name]);
 
         return $dataProvider;
     }
index 3ab30ba2fa415171ecea3847333274ec69e43f68..2827100e16683c1863f9f89780a17b8a0ae265fd 100644 (file)
@@ -195,6 +195,7 @@ foreach ($subgroups as $sg) {
     </div>
     <?= GridView::widget([
         'dataProvider' => $dataProvider,
+        'filterModel' => $searchModel,
         'responsive' => false,
         'hover' => true,
         'floatHeader' => false,
@@ -210,6 +211,10 @@ foreach ($subgroups as $sg) {
                 '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;