]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-412
authormarina <m.zozirova@gmail.com>
Wed, 30 Apr 2025 12:37:27 +0000 (15:37 +0300)
committermarina <m.zozirova@gmail.com>
Wed, 30 Apr 2025 12:37:27 +0000 (15:37 +0300)
erp24/controllers/AutoPlannogrammaController.php
erp24/services/AutoPlannogrammaService.php
erp24/views/auto-plannogramma/1.php [new file with mode: 0644]
erp24/views/auto-plannogramma/2.php [new file with mode: 0644]

index 3550bd6bb9b2f67d5ddff18708dca4328ef985ec..e0a23811f7de9d6a27c4f3b5f564a7cf793687a3 100644 (file)
@@ -74,12 +74,12 @@ class AutoPlannogrammaController extends BaseController
         $request = Yii::$app->request;
 
         $filters = [
-            'category'      => $request->get('category'),
-            'subcategory'   => $request->get('subcategory'),
-            'product_name'  => $request->get('product_name'),
-            'store_id'      => $request->get('store_id'),
-            'plan_date'     => $request->get('plan_date'),
-            'type'          => $request->get('type'),
+            'category' => $request->get('category'),
+            'subcategory' => $request->get('subcategory'),
+            'product_name' => $request->get('product_name'),
+            'store_id' => $request->get('store_id'),
+            'plan_date' => $request->get('plan_date'),
+            'type' => $request->get('type'),
         ];
 
         $dataProvider = new ArrayDataProvider([
@@ -97,7 +97,7 @@ class AutoPlannogrammaController extends BaseController
 
         return $this->render('calculating', [
             'dataProvider' => $dataProvider,
-            'filters'      => $filters,
+            'filters' => $filters,
         ]);
     }
 
@@ -202,7 +202,89 @@ class AutoPlannogrammaController extends BaseController
 
         return $this->render('control', [
             'dataProvider' => $dataProvider,
-            'filters'      => $filters,
+            'filters' => $filters,
+        ]);
+    }
+
+    public function action1()
+    {
+        $request = Yii::$app->request;
+
+        $filters = [
+            'category' => $request->get('category'),
+            'subcategory' => $request->get('subcategory'),
+            'product_name' => $request->get('product_name'),
+            'store_id' => $request->get('store_id'),
+            'plan_date' => $request->get('plan_date'),
+            'type' => $request->get('type'),
+        ];
+
+        $dataProvider = new ArrayDataProvider([
+            'allModels' => [],
+            'pagination' => ['pageSize' => 100],
+        ]);
+
+
+        if (!empty($filters['plan_date'])) {
+            $service = new AutoPlannogrammaService();
+
+            $data = $service->getMonthCategoryShareOrWriteOff($filters['plan_date'], $filters);
+
+            foreach ($data as $storeId => $categories) {
+                foreach ($categories as $row) {
+                    $flatData[] = [
+                        'store_id' => CityStore::findOne($storeId)->name ?? null,
+                        'category' => $row['category'],
+                        'total_sum' => $row['total_sum'],
+                        'share_of_total' => $row['share_of_total'],
+                    ];
+                }
+            }
+            $dataProvider = new ArrayDataProvider([
+                'allModels' => $flatData,
+                'pagination' => ['pageSize' => 100],
+            ]);
+        }
+        return $this->render('1', [
+            'dataProvider' => $dataProvider,
+            'filters' => $filters,
+        ]);
+    }
+
+    public function action2()
+    {
+        $request = Yii::$app->request;
+
+        $filters = [
+            'category' => $request->get('category'),
+            'subcategory' => $request->get('subcategory'),
+            'product_name' => $request->get('product_name'),
+            'store_id' => $request->get('store_id'),
+            'plan_date' => $request->get('plan_date'),
+            'type' => $request->get('type'),
+        ];
+
+        $dataProvider = new ArrayDataProvider([
+            'allModels' => [],
+            'pagination' => ['pageSize' => 100],
+        ]);
+
+
+        if (!empty($filters['plan_date'])) {
+            $service = new AutoPlannogrammaService();
+
+            $monthCategoryShare = $service->getMonthCategoryShareOrWriteOff($filters['plan_date'], $filters);;
+            $data = $service->getMonthCategoryGoal($monthCategoryShare, $filters['plan_date'], $filters);;
+
+
+            $dataProvider = new ArrayDataProvider([
+                'allModels' => $data,
+                'pagination' => ['pageSize' => 100],
+            ]);
+        }
+        return $this->render('2', [
+            'dataProvider' => $dataProvider,
+            'filters' => $filters,
         ]);
     }
 }
index 87b29e6c19174754d704f2c3883e44b757cb7657..188a2eb12776e8e4e531f989e3e300907e42675d 100644 (file)
@@ -144,6 +144,7 @@ class AutoPlannogrammaService
                 $result[] = [
                     'category' => $item['category'],
                     'store_id' => $storeId,
+                    'store_name' => CityStore::findOne($storeId)->name ?? null,
                     'goal' => round($item['share_of_total'] * ($filters['type'] == 'writeOffs' ? $plan['write_offs_plan'] : $plan['total_sales_plan']), 2),
                 ];
             }
diff --git a/erp24/views/auto-plannogramma/1.php b/erp24/views/auto-plannogramma/1.php
new file mode 100644 (file)
index 0000000..fc4b060
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+?>
+<div class="filter-form" 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;
+
+    $form = ActiveForm::begin(['method' => 'get']); ?>
+    <div class="row p-3">
+        <div class="col-md">
+            <?= $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">
+            <?= $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(['product_name' => $filters['product_name'] ?? '']), 'product_name')->widget(Select2::class, [
+                'data' => ArrayHelper::map(
+                    Products1cNomenclature::find()->select('name')->distinct()->asArray()->all(),
+                    'name',
+                    'name'
+                ),
+                'options' => ['placeholder' => 'Название товара', 'name' => 'product_name'],
+                '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(['plan_date' => $filters['plan_date'] ?? '']), 'plan_date')->widget(DatePicker::class, [
+                'pluginOptions' => [
+                    'autoclose' => true,
+                    'format' => 'dd-mm-yyyy',
+                ],
+                'options' => [
+                    'class' => 'form-control',
+                    'placeholder' => 'Плановая дата',
+                    'name' => 'plan_date',
+                ],
+            ])->label('Плановая дата') ?>
+        </div>
+        <div class="col-md">
+            <?= $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-planogramma/test-sales'], ['class' => 'btn btn-default']) ?>
+        </div>
+    </div>
+
+    <?php ActiveForm::end(); ?>
+</div>
+
+<?= GridView::widget([
+    'dataProvider' => $dataProvider,
+    'columns' => [
+        ['attribute' => 'store_id', 'label' => 'Магазин'],
+        ['attribute' => 'category', 'label' => 'Категория'],
+        ['attribute' => 'total_sum', 'label' => 'Сумма', 'format' => ['decimal', 2]],
+        ['attribute' => 'share_of_total', 'label' => 'Доля', 'format' => ['percent', 2]],
+    ],
+]); ?>
diff --git a/erp24/views/auto-plannogramma/2.php b/erp24/views/auto-plannogramma/2.php
new file mode 100644 (file)
index 0000000..c969912
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+?>
+<div class="filter-form" 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;
+
+    $form = ActiveForm::begin(['method' => 'get']); ?>
+    <div class="row p-3">
+        <div class="col-md">
+            <?= $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">
+            <?= $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(['product_name' => $filters['product_name'] ?? '']), 'product_name')->widget(Select2::class, [
+                'data' => ArrayHelper::map(
+                    Products1cNomenclature::find()->select('name')->distinct()->asArray()->all(),
+                    'name',
+                    'name'
+                ),
+                'options' => ['placeholder' => 'Название товара', 'name' => 'product_name'],
+                '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(['plan_date' => $filters['plan_date'] ?? '']), 'plan_date')->widget(DatePicker::class, [
+                'pluginOptions' => [
+                    'autoclose' => true,
+                    'format' => 'dd-mm-yyyy',
+                ],
+                'options' => [
+                    'class' => 'form-control',
+                    'placeholder' => 'Плановая дата',
+                    'name' => 'plan_date',
+                ],
+            ])->label('Плановая дата') ?>
+        </div>
+        <div class="col-md">
+            <?= $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-planogramma/test-sales'], ['class' => 'btn btn-default']) ?>
+        </div>
+    </div>
+
+    <?php ActiveForm::end(); ?>
+</div>
+
+<?= GridView::widget([
+    'dataProvider' => $dataProvider,
+    'columns' => [
+        ['attribute' => 'store_name', 'label' => 'Магазин'],
+        ['attribute' => 'category', 'label' => 'Категория'],
+        ['attribute' => 'goal', 'label' => 'Сумма план'],
+    ],
+    ]); ?>