From 889aaacbf900d756199d7352dd389ad03054c88e Mon Sep 17 00:00:00 2001 From: marina Date: Wed, 7 May 2025 08:39:30 +0300 Subject: [PATCH] =?utf8?q?ERP-413=20=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?utf8?q?=D1=82=D0=BA=D0=B0=20=D0=9E=D0=A1=20=D0=9F=D0=BB=D0=B0=D0=BD?= =?utf8?q?=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20(=D0=BC=D0=B5=D1=81?= =?utf8?q?=D1=8F=D1=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../AutoPlannogrammaController.php | 248 +++++++++++++++++- erp24/services/AutoPlannogrammaService.php | 44 ++-- erp24/views/auto-plannogramma/1.php | 26 +- erp24/views/auto-plannogramma/2.php | 26 +- erp24/views/auto-plannogramma/3.php | 91 +++++++ erp24/views/auto-plannogramma/4.php | 93 +++++++ erp24/views/auto-plannogramma/5.php | 105 ++++++++ erp24/views/auto-plannogramma/6.php | 104 ++++++++ 8 files changed, 654 insertions(+), 83 deletions(-) create mode 100644 erp24/views/auto-plannogramma/3.php create mode 100644 erp24/views/auto-plannogramma/4.php create mode 100644 erp24/views/auto-plannogramma/5.php create mode 100644 erp24/views/auto-plannogramma/6.php diff --git a/erp24/controllers/AutoPlannogrammaController.php b/erp24/controllers/AutoPlannogrammaController.php index 0f5d6dee..26ee35b9 100644 --- a/erp24/controllers/AutoPlannogrammaController.php +++ b/erp24/controllers/AutoPlannogrammaController.php @@ -212,13 +212,11 @@ class AutoPlannogrammaController extends BaseController $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'), ]; -//var_dump($filters);die(); + $dataProvider = new ArrayDataProvider([ 'allModels' => [], 'pagination' => ['pageSize' => 100], @@ -227,19 +225,13 @@ class AutoPlannogrammaController extends BaseController if (!empty($filters['plan_date'])) { $service = new AutoPlannogrammaService(); - $data = $service->getMonthCategoryShareOrWriteOff($filters['plan_date'], $filters); + $data = $service->getMonthCategoryShareOrWriteOff($filters['plan_date'], $filters, null, $filters['type']); $flatData = []; - foreach ($data as $storeId => $categories) { foreach ($categories as $row) { $flatData[] = [ 'store_id' => (string)$storeId, // фильтрация по ID, а не имени - 'store_name' => CityStore::findOne($storeId)->name ?? null, 'category' => $row['category'] ?? null, - 'subcategory' => $row['subcategory'] ?? null, - 'product_name' => $row['product_name'] ?? null, - 'plan_date' => $filters['plan_date'], // или $row['plan_date'], если есть - 'type' => $row['type'] ?? null, 'total_sum' => $row['total_sum'] ?? null, 'share_of_total' => $row['share_of_total'] ?? null, ]; @@ -258,7 +250,6 @@ class AutoPlannogrammaController extends BaseController return true; }); - $dataProvider = new ArrayDataProvider([ 'allModels' => array_values($flatData), 'pagination' => ['pageSize' => 100], @@ -277,8 +268,6 @@ class AutoPlannogrammaController extends BaseController $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'), @@ -297,8 +286,21 @@ class AutoPlannogrammaController extends BaseController $data = $service->getMonthCategoryGoal($monthCategoryShare, $filters['plan_date'], $filters);; + $flatData = array_filter($data, 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' => $data, + 'allModels' => $flatData, 'pagination' => ['pageSize' => 100], ]); } @@ -307,4 +309,222 @@ class AutoPlannogrammaController extends BaseController 'filters' => $filters, ]); } + + public function action3() + { + $request = Yii::$app->request; + + $filters = [ + 'category' => $request->get('category'), + 'subcategory' => $request->get('subcategory'), + '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->getMonthSubcategoryShareOrWriteOff($filters['plan_date'], $filters, null, $filters['type']); + + $flatData = array_filter($data, 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('3', [ + 'dataProvider' => $dataProvider, + 'filters' => $filters, + ]); + } + + public function action4() + { + $request = Yii::$app->request; + + $filters = [ + 'category' => $request->get('category'), + 'subcategory' => $request->get('subcategory'), + '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( + date('Y-m-d', strtotime($filters['plan_date'] . ' -12 months')), + $filters + ); + $monthCategoryGoal = $service->getMonthCategoryGoal($monthCategoryShare, $filters['plan_date'], $filters); + + $monthSubcategoryShare = $service->getMonthSubcategoryShareOrWriteOff( + date('Y-m-d', strtotime($filters['plan_date'] . ' -3 months')), + $filters + ); + $data = $service->getMonthSubcategoryGoal($monthSubcategoryShare, $monthCategoryGoal); + + $flatData = array_filter($data, 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('4', [ + 'dataProvider' => $dataProvider, + 'filters' => $filters, + ]); + } + + public function action5() + { + $request = Yii::$app->request; + + $filters = [ + 'category' => $request->get('category'), + 'subcategory' => $request->get('subcategory'), + 'species' => $request->get('species'), + '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->getMonthSpeciesShareOrWriteOff( + date('Y-m-d', strtotime($filters['plan_date'] . ' -3 months')), + $filters, + null, + $filters['type'] + ); + + + $flatData = array_filter($data, 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('5', [ + 'dataProvider' => $dataProvider, + 'filters' => $filters, + ]); + } + + public function action6() + { + $request = Yii::$app->request; + + $filters = [ + 'category' => $request->get('category'), + 'subcategory' => $request->get('subcategory'), + 'species' => $request->get('species'), + '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( + date('Y-m-d', strtotime($filters['plan_date'] . ' -12 months')), + $filters + ); + $monthCategoryGoal = $service->getMonthCategoryGoal($monthCategoryShare, $filters['plan_date'], $filters); + + $monthSubcategoryShare = $service->getMonthSubcategoryShareOrWriteOff( + date('Y-m-d', strtotime($filters['plan_date'] . ' -3 months')), + $filters + ); + $monthSubcategoryGoal = $service->getMonthSubcategoryGoal($monthSubcategoryShare, $monthCategoryGoal); + + $monthSpeciesShare = $service->getMonthSpeciesShareOrWriteOff( + date('Y-m-d', strtotime($filters['plan_date'] . ' -3 months')), + $filters + ); + $data = $service->getMonthSpeciesGoalDirty($monthSpeciesShare, $monthSubcategoryGoal); + + $flatData = array_filter($data, 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('6', [ + 'dataProvider' => $dataProvider, + 'filters' => $filters, + ]); + } } diff --git a/erp24/services/AutoPlannogrammaService.php b/erp24/services/AutoPlannogrammaService.php index 188a2eb1..6a546880 100644 --- a/erp24/services/AutoPlannogrammaService.php +++ b/erp24/services/AutoPlannogrammaService.php @@ -17,20 +17,22 @@ class AutoPlannogrammaService public function getStoreTotals(array $storeIds, string $dateFrom, ?array $productFilter = null, string $type = 'sales', ?string $dateTo = null): array { + $query = (new Query()) ->select([ 'store_id' => 'ex.entity_id', 'total_sum' => new Expression( $type === 'writeOffs' - ? 'SUM(CAST(item ->> \'summ\' AS NUMERIC))' + ? 'SUM(wp.summ)' : 'SUM(sp.summ)' ) ]) - ->from(['w' => $type === 'writeOffs' ? 'write_offs' : 'sales']); + ->from(['w' => $type == 'writeOffs' ? 'write_offs' : 'sales']); + + if ($type == 'writeOffs') { + $query->leftJoin('export_import_table ex', 'ex.export_val = w.store_id') + ->leftJoin('write_offs_products wp', 'wp.write_offs_id = w.id'); - if ($type === 'writeOffs') { - $query->leftJoin('export_import_table ex', 'ex.export_val = w.store_id') - ->join('JOIN', new Expression('LATERAL jsonb_array_elements(w.items::jsonb) AS item'), 'true'); } else { $query->leftJoin('sales_products sp', 'sp.check_id = w.id') ->leftJoin('export_import_table ex', 'ex.export_val = w.store_id_1c'); @@ -41,7 +43,7 @@ class AutoPlannogrammaService if ($productFilter !== null) { if ($type === 'writeOffs') { - $query->andWhere(['item ->> \'product_id\'' => $productFilter]); + $query->andWhere(['w.product_id'=> $productFilter]); } else { $query->andWhere(['sp.product_id' => $productFilter]); } @@ -76,22 +78,22 @@ class AutoPlannogrammaService 'store_id' => 'ex.entity_id', 'category' => 'p1c.category', 'total_sum' => new Expression( - $type === 'writeOffs' ? 'SUM(CAST(item ->> \'summ\' AS NUMERIC))' : 'SUM(sp.summ)' + $type === 'writeOffs' ? 'SUM(wp.summ)' : 'SUM(sp.summ)' ), ]) ->from($type === 'writeOffs' ? ['w' => 'write_offs'] : ['s' => 'sales']); if ($type === 'writeOffs') { $query->join('LEFT JOIN', 'export_import_table ex', 'ex.export_val = w.store_id') - ->join('JOIN', new Expression('LATERAL jsonb_array_elements(w.items::jsonb) AS item'), 'true') - ->leftJoin('products_1c_nomenclature p1c', 'p1c.id = item ->> \'product_id\'') + ->leftJoin('write_offs_products wp', 'wp.write_offs_id = w.id') + ->leftJoin('products_1c_nomenclature p1c', 'p1c.id = wp.product_id') ->where(['>=', 'w.date', $dateFrom]) ->andWhere(['ex.entity_id' => $storeIds]) ->andWhere(['<>', 'p1c.category', '']) ->groupBy(['ex.entity_id', 'p1c.category']); if ($productFilter !== null) { - $query->andWhere(['item ->> \'product_id\'' => $productFilter]); + $query->andWhere(['wp.product_id' => $productFilter]); } } else { $query->leftJoin('sales_products sp', 'sp.check_id = s.id') @@ -106,7 +108,6 @@ class AutoPlannogrammaService $query->andWhere(['sp.product_id' => $productFilter]); } } - $rows = $query->all(); $result = []; @@ -117,9 +118,9 @@ class AutoPlannogrammaService 'category' => $row['category'], 'total_sum' => $row['total_sum'], 'share_of_total' => round($row['total_sum'] / $total, 4), + 'type' => $type, ]; } - return $result; } @@ -171,22 +172,22 @@ class AutoPlannogrammaService 'subcategory' => 'p1c.subcategory', 'category' => 'p1c.category', 'total_sum' => new Expression( - $type === 'writeOffs' ? 'SUM(CAST(item ->> \'summ\' AS NUMERIC))' : 'SUM(sp.summ)' + $type === 'writeOffs' ? 'SUM(wp.summ)' : 'SUM(sp.summ)' ), ]); if ($type === 'writeOffs') { $query->from(['w' => 'write_offs']) ->join('LEFT JOIN', 'export_import_table ex', 'ex.export_val = w.store_id') - ->join('JOIN', new Expression('LATERAL jsonb_array_elements(w.items::jsonb) AS item'), 'true') - ->leftJoin('products_1c_nomenclature p1c', 'p1c.id = item ->> \'product_id\'') + ->leftJoin('write_offs_products wp', 'wp.write_offs_id = w.id') + ->leftJoin('products_1c_nomenclature p1c', 'p1c.id = wp.product_id') ->where(['>=', 'w.date', $dateFrom]) ->andWhere(['ex.entity_id' => $storeIds]) ->andWhere(['<>', 'p1c.subcategory', '']) ->groupBy(['ex.entity_id', 'p1c.subcategory', 'p1c.category']); if ($productFilter !== null) { - $query->andWhere(['item ->> \'product_id\'' => $productFilter]); + $query->andWhere(['wp.product_id' => $productFilter]); } } else { $query->from(['s' => 'sales']) @@ -263,15 +264,15 @@ class AutoPlannogrammaService 'category' => 'p1c.category', 'subcategory' => 'p1c.subcategory', 'total_sum' => new Expression( - $type === 'writeOffs' ? 'SUM(CAST(item ->> \'summ\' AS NUMERIC))' : 'SUM(sp.summ)' + $type === 'writeOffs' ? 'SUM(wp.summ)' : 'SUM(sp.summ)' ), ]); if ($type === 'writeOffs') { $query->from(['w' => 'write_offs']) ->join('LEFT JOIN', 'export_import_table ex', 'ex.export_val = w.store_id') - ->join('JOIN', new Expression('LATERAL jsonb_array_elements(w.items::jsonb) AS item'), 'true') - ->leftJoin('products_1c_nomenclature p1c', 'p1c.id = item ->> \'product_id\'') + ->leftJoin('write_offs_products wp', 'wp.write_offs_id = w.id') + ->leftJoin('products_1c_nomenclature p1c', 'p1c.id = wp.product_id') ->where(['>=', 'w.date', $dateFrom]) ->andWhere(['ex.entity_id' => $storeIds]) ->andWhere(['<>', 'p1c.name', '']) @@ -316,8 +317,6 @@ class AutoPlannogrammaService public function getMonthSpeciesGoalDirty(array $speciesShare, array $subcategoryGoals): array { - $storeNamesMap = ArrayHelper::map($this->getVisibleStores(), 'id', 'name'); - $indexedGoals = []; foreach ($subcategoryGoals as $goal) { $indexedGoals[$goal['store_id']][$goal['category']][$goal['subcategory']] = $goal['goal']; @@ -330,9 +329,8 @@ class AutoPlannogrammaService $result[] = [ 'category' => $species['category'], 'subcategory' => $species['subcategory'], - 'product_name' => $species['species'], + 'species' => $species['species'], 'store_id' => $species['store_id'], - 'store_name' => $storeNamesMap[$species['store_id']] ?? 'Неизвестный магазин', // Добавляем название магазина 'goal' => round($species['percent_of_month'] * $goal, 2), ]; } diff --git a/erp24/views/auto-plannogramma/1.php b/erp24/views/auto-plannogramma/1.php index fc4b0603..120fc959 100644 --- a/erp24/views/auto-plannogramma/1.php +++ b/erp24/views/auto-plannogramma/1.php @@ -23,28 +23,6 @@ 'pluginOptions' => ['allowClear' => true], ])->label('Категория') ?> -
- 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('Подкатегория') ?> -
-
- 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('Товар') ?> -
field(new \yii\base\DynamicModel(['store_id' => $filters['store_id'] ?? '']), 'store_id')->widget(Select2::class, [ 'data' => ArrayHelper::map( @@ -93,7 +71,9 @@ $dataProvider, 'columns' => [ - ['attribute' => 'store_id', 'label' => 'Магазин'], + ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) { + return CityStore::findOne($data['store_id'])->name ?? null; + }], ['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 index c9699129..28d4460e 100644 --- a/erp24/views/auto-plannogramma/2.php +++ b/erp24/views/auto-plannogramma/2.php @@ -23,28 +23,6 @@ 'pluginOptions' => ['allowClear' => true], ])->label('Категория') ?>
-
- 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('Подкатегория') ?> -
-
- 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('Товар') ?> -
field(new \yii\base\DynamicModel(['store_id' => $filters['store_id'] ?? '']), 'store_id')->widget(Select2::class, [ 'data' => ArrayHelper::map( @@ -93,7 +71,9 @@ $dataProvider, 'columns' => [ - ['attribute' => 'store_name', 'label' => 'Магазин'], + ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) { + return CityStore::findOne($data['store_id'])->name ?? null; + }], ['attribute' => 'category', 'label' => 'Категория'], ['attribute' => 'goal', 'label' => 'Сумма план'], ], diff --git a/erp24/views/auto-plannogramma/3.php b/erp24/views/auto-plannogramma/3.php new file mode 100644 index 00000000..7d2fcb2f --- /dev/null +++ b/erp24/views/auto-plannogramma/3.php @@ -0,0 +1,91 @@ +
+ 'get']); ?> +
+
+ 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('Категория') ?> +
+
+ 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('Подкатегория') ?> +
+
+ 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('Магазин') ?> +
+
+ 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('Плановая дата') ?> +
+
+ field(new \yii\base\DynamicModel(['type' => $filters['type'] ?? '']), 'type')->widget(Select2::class, [ + 'data' => [ + 'writeOffs' => 'Списания', + 'sales' => 'Продажи' + ], + 'options' => ['placeholder' => 'Тип', 'name' => 'type'], + 'pluginOptions' => ['allowClear' => true], + ])->label('По дефолту продажи!') ?> +
+
+ 'btn btn-primary']) ?> +
+
+ 'btn btn-default']) ?> +
+
+ + +
+ + $dataProvider, + 'columns' => [ + ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) { + return CityStore::findOne($data['store_id'])->name ?? null; + }], + ['attribute' => 'category', 'label' => 'Категория'], + ['attribute' => 'subcategory', 'label' => 'Подкатегория'], + ['attribute' => 'total_sum', 'label' => 'Сумма', 'format' => ['decimal', 2]], + ['attribute' => 'percent_of_month', 'label' => 'Доля', 'format' => ['decimal', 2]], + ], +]); ?> diff --git a/erp24/views/auto-plannogramma/4.php b/erp24/views/auto-plannogramma/4.php new file mode 100644 index 00000000..1e6f7aaf --- /dev/null +++ b/erp24/views/auto-plannogramma/4.php @@ -0,0 +1,93 @@ + +
+ 'get']); ?> +
+
+ 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('Категория') ?> +
+
+ 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('Подкатегория') ?> +
+
+ 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('Магазин') ?> +
+
+ 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('Плановая дата') ?> +
+
+ field(new \yii\base\DynamicModel(['type' => $filters['type'] ?? '']), 'type')->widget(Select2::class, [ + 'data' => [ + 'writeOffs' => 'Списания', + 'sales' => 'Продажи' + ], + 'options' => ['placeholder' => 'Тип', 'name' => 'type'], + 'pluginOptions' => ['allowClear' => true], + ])->label('По дефолту продажи!') ?> +
+
+ 'btn btn-primary']) ?> +
+
+ 'btn btn-default']) ?> +
+
+ + +
+ + $dataProvider, + 'columns' => [ + ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) { + return CityStore::findOne($data['store_id'])->name ?? null; + }], + ['attribute' => 'category', 'label' => 'Категория'], + ['attribute' => 'subcategory', 'label' => 'Подкатегория'], + ['attribute' => 'goal', 'label' => 'Сумма План', 'format' => ['decimal', 2]], + ], +]); ?> + diff --git a/erp24/views/auto-plannogramma/5.php b/erp24/views/auto-plannogramma/5.php new file mode 100644 index 00000000..3ab8cf4e --- /dev/null +++ b/erp24/views/auto-plannogramma/5.php @@ -0,0 +1,105 @@ + +
+ 'get']); ?> +
+
+ 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('Категория') ?> +
+
+ 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('Подкатегория') ?> +
+
+ field(new \yii\base\DynamicModel(['species' => $filters['species'] ?? '']), 'species')->widget(Select2::class, [ + 'data' => ArrayHelper::map( + Products1cNomenclature::find()->select('name')->distinct()->asArray()->all(), + 'name', + 'name' + ), + 'options' => ['placeholder' => 'Название товара', 'name' => 'species'], + 'pluginOptions' => ['allowClear' => true], + ])->label('Товар') ?> +
+
+ 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('Магазин') ?> +
+
+ 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('Плановая дата') ?> +
+
+ field(new \yii\base\DynamicModel(['type' => $filters['type'] ?? '']), 'type')->widget(Select2::class, [ + 'data' => [ + 'writeOffs' => 'Списания', + 'sales' => 'Продажи' + ], + 'options' => ['placeholder' => 'Тип', 'name' => 'type'], + 'pluginOptions' => ['allowClear' => true], + ])->label('По дефолту продажи!') ?> +
+
+ 'btn btn-primary']) ?> +
+
+ 'btn btn-default']) ?> +
+
+ + +
+ + $dataProvider, + 'columns' => [ + ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) { + return CityStore::findOne($data['store_id'])->name ?? null; + }], + ['attribute' => 'category', 'label' => 'Категория'], + ['attribute' => 'subcategory', 'label' => 'Подкатегория'], + ['attribute' => 'species', 'label' => 'Тип'], + ['attribute' => 'total_sum', 'label' => 'Сумма', 'format' => ['decimal', 2]], + ['attribute' => 'percent_of_month', 'label' => 'Доля', 'format' => ['percent', 2]], + ], +]); ?> diff --git a/erp24/views/auto-plannogramma/6.php b/erp24/views/auto-plannogramma/6.php new file mode 100644 index 00000000..b63cad83 --- /dev/null +++ b/erp24/views/auto-plannogramma/6.php @@ -0,0 +1,104 @@ + +
+ 'get']); ?> +
+
+ 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('Категория') ?> +
+
+ 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('Подкатегория') ?> +
+
+ field(new \yii\base\DynamicModel(['species' => $filters['species'] ?? '']), 'species')->widget(Select2::class, [ + 'data' => ArrayHelper::map( + Products1cNomenclature::find()->select('name')->distinct()->asArray()->all(), + 'name', + 'name' + ), + 'options' => ['placeholder' => 'Название товара', 'name' => 'species'], + 'pluginOptions' => ['allowClear' => true], + ])->label('Товар') ?> +
+
+ 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('Магазин') ?> +
+
+ 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('Плановая дата') ?> +
+
+ field(new \yii\base\DynamicModel(['type' => $filters['type'] ?? '']), 'type')->widget(Select2::class, [ + 'data' => [ + 'writeOffs' => 'Списания', + 'sales' => 'Продажи' + ], + 'options' => ['placeholder' => 'Тип', 'name' => 'type'], + 'pluginOptions' => ['allowClear' => true], + ])->label('По дефолту продажи!') ?> +
+
+ 'btn btn-primary']) ?> +
+
+ 'btn btn-default']) ?> +
+
+ + +
+ + $dataProvider, + 'columns' => [ + ['attribute' => 'store_id', 'label' => 'Магазин', 'value' => function ($data) { + return CityStore::findOne($data['store_id'])->name ?? null; + }], + ['attribute' => 'category', 'label' => 'Категория'], + ['attribute' => 'subcategory', 'label' => 'Подкатегория'], + ['attribute' => 'species', 'label' => 'Тип'], + ['attribute' => 'goal', 'label' => 'Сумма План', 'format' => ['decimal', 2]], + ], +]); ?> -- 2.39.5