]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Вывод 7 шага
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 19 May 2025 15:57:20 +0000 (18:57 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 19 May 2025 15:57:20 +0000 (18:57 +0300)
erp24/controllers/AutoPlannogrammaController.php
erp24/views/auto-plannogramma/7.php [new file with mode: 0644]

index 38f87910b65646a138f825133bbea0965625c4a3..bfe7c25afd77d26ec9a69fd0a53bae1601bcf931 100644 (file)
@@ -8,7 +8,9 @@ use yii\db\Expression;
 use yii\db\Query;
 use yii\helpers\ArrayHelper;
 use yii_app\records\CityStore;
+use yii_app\records\MatrixBouquetForecast;
 use yii_app\services\AutoPlannogrammaService;
+use yii_app\services\StorePlanService;
 
 class AutoPlannogrammaController extends BaseController
 {
@@ -536,4 +538,66 @@ class AutoPlannogrammaController extends BaseController
             'filters' => $filters,
         ]);
     }
+
+    public function action7()
+    {
+        $request = Yii::$app->request;
+
+        $filters = [
+            'category' => $request->get('category'),
+            'subcategory' => $request->get('subcategory'),
+            'species' => $request->get('species'),
+            'store_id' => $request->get('store_id'),
+            'year' => $request->get('year'),
+            'month' => $request->get('month'),
+            'type' => $request->get('type'),
+        ];
+
+        $dataProvider = new ArrayDataProvider([
+            'allModels' => [],
+            'pagination' => ['pageSize' => 100],
+        ]);
+
+        $bouquetSpeciesForecast = [];
+        // Обработка даты на год и месяц
+        if (!empty($filters['year']) && !empty($filters['month'])) {
+            $matrixForecast = MatrixBouquetForecast::find()
+                ->where(['year' => $filters['year'], 'month' => $filters['month']])
+                ->asArray()
+                ->all();
+            $matrixGroups = array_unique(ArrayHelper::getColumn($matrixForecast, 'group'));
+            $bouquetForecast = StorePlanService::getBouquetSpiecesMonthGoalFromForecast($filters['month'], $filters['year'], $filters['store_id'], $matrixGroups);
+            $speciesData = $bouquetForecast['final'];
+            foreach ($speciesData as $store_id  => $species) {
+                foreach ($species as $specieInd => $row) {
+                    $bouquetSpeciesForecast[] = [
+                        'store_id' => $store_id,
+                        'species' => $specieInd,
+                        'goal' => $row
+                        ];
+                }
+            }
+            //var_dump($matrixGroups); die();
+            $flatData = array_filter($bouquetSpeciesForecast, function ($row) use ($filters) {
+                foreach ($filters as $key => $value) {
+                    if (empty($value)) continue;
+                    if (!isset($row[$key])) continue;
+
+                    if (stripos((string)$row[$key], (string)$value) === false) {
+                        return false;
+                    }
+                }
+                return true;
+            });
+
+            $dataProvider = new ArrayDataProvider([
+                'allModels' => $flatData,
+                'pagination' => ['pageSize' => 100],
+            ]);
+        }
+        return $this->render('7', [
+            'dataProvider' => $dataProvider,
+            'filters' => $filters,
+        ]);
+    }
 }
diff --git a/erp24/views/auto-plannogramma/7.php b/erp24/views/auto-plannogramma/7.php
new file mode 100644 (file)
index 0000000..c4774db
--- /dev/null
@@ -0,0 +1,105 @@
+<div class="filter-form p-4" style="margin-bottom: 20px;">
+    <?php use kartik\date\DatePicker;
+    use kartik\grid\GridView;
+    use kartik\select2\Select2;
+    use yii\helpers\ArrayHelper;
+    use yii\helpers\Html;
+    use yii\widgets\ActiveForm;
+    use yii_app\records\CityStore;
+    use yii_app\records\Products1cNomenclature;?>
+
+    <h1 class="ms-3 mb-4"><?= Html::encode("Расчет цели месяца для букетов (month_bouquet_goal)") ?></h1>
+    <?php
+    $form = ActiveForm::begin(['method' => 'get']); ?>
+    <div class="row p-3">
+        <div class="col-md d-none">
+            <?= $form->field(new \yii\base\DynamicModel(['category' => $filters['category'] ?? '']), 'category')->widget(Select2::class, [
+                'data' => ArrayHelper::map(
+                    Products1cNomenclature::find()->select('category')->distinct()->asArray()->all(),
+                    'category',
+                    'category'
+                ),
+                'options' => ['placeholder' => 'Категория', 'name' => 'category'],
+                'pluginOptions' => ['allowClear' => true],
+            ])->label('Категория') ?>
+        </div>
+        <div class="col-md d-none">
+            <?= $form->field(new \yii\base\DynamicModel(['subcategory' => $filters['subcategory'] ?? '']), 'subcategory')->widget(Select2::class, [
+                'data' => ArrayHelper::map(
+                    Products1cNomenclature::find()->select('subcategory')->distinct()->asArray()->all(),
+                    'subcategory',
+                    'subcategory'
+                ),
+                'options' => ['placeholder' => 'Подкатегория', 'name' => 'subcategory'],
+                'pluginOptions' => ['allowClear' => true],
+            ])->label('Подкатегория') ?>
+        </div>
+        <div class="col-md ">
+            <?= $form->field(new \yii\base\DynamicModel(['species' => $filters['species'] ?? '']), 'species')->widget(Select2::class, [
+                'data' => ArrayHelper::map(
+                    Products1cNomenclature::find()->select('species')->distinct()->asArray()->all(),
+                    'species',
+                    'species'
+                ),
+                'options' => ['placeholder' => 'Тип товара', 'name' => 'species'],
+                'pluginOptions' => ['allowClear' => true],
+            ])->label('Товар') ?>
+        </div>
+        <div class="col-md">
+            <?= $form->field(new \yii\base\DynamicModel(['store_id' => $filters['store_id'] ?? '']), 'store_id')->widget(Select2::class, [
+                'data' => ArrayHelper::map(
+                    CityStore::findAll(['visible' => CityStore::IS_VISIBLE]),
+                    'id',
+                    'name'
+                ),
+                'options' => ['placeholder' => 'Магазин', 'name' => 'store_id'],
+                'pluginOptions' => ['allowClear' => true],
+            ])->label('Магазин') ?>
+        </div>
+        <div class="col-md">
+            <?= $form->field(new \yii\base\DynamicModel(['month' => $filters['month'] ?? '']), 'month')->dropDownList(\yii_app\helpers\DateHelper::MONTH_NUMBER_NAMES, [
+                'prompt' => 'Месяц',
+                'name' => 'month',
+            ])->label('Плановый месяц') ?>
+        </div>
+
+        <div class="col-md">
+            <?= $form->field(new \yii\base\DynamicModel(['year' => $filters['year'] ?? '']), 'year')->dropDownList(['2025' => 2025, '2026' => 2026], [
+                'prompt' => 'Год',
+                'name' => 'year',
+            ])->label('Плановый год') ?>
+        </div>
+        <div class="col-md d-none">
+            <?= $form->field(new \yii\base\DynamicModel(['type' => $filters['type'] ?? '']), 'type')->widget(Select2::class, [
+                'data' => [
+                    'writeOffs' => 'Списания',
+                    'sales' => 'Продажи'
+                ],
+                'options' => ['placeholder' => 'Тип', 'name' => 'type'],
+                'pluginOptions' => ['allowClear' => true],
+            ])->label('По дефолту продажи!') ?>
+        </div>
+        <div class="col-md">
+            <?= Html::submitButton('Фильтровать', ['class' => 'btn btn-primary']) ?>
+        </div>
+        <div class="col-md">
+            <?= Html::a('Сбросить', ['auto-plannogramma/7'], ['class' => 'btn btn-default']) ?>
+        </div>
+    </div>
+
+    <?php ActiveForm::end(); ?>
+
+
+<?= GridView::widget([
+    'dataProvider' => $dataProvider,
+    'columns' => [
+        ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) {
+            return CityStore::findOne($data['store_id'])->name ?? null;
+        }],
+        ['attribute' => 'species', 'label' => 'Категория'],
+        ['attribute' => 'goal', 'label' => 'Сумма', 'format' => ['decimal', 2]],
+
+    ],
+]); ?>
+
+</div>
\ No newline at end of file