if (!empty($filters['plan_date'])) {
$service = new AutoPlannogrammaService();
$dataProvider = new ArrayDataProvider([
- 'allModels' => $service->calculateFullGoalChain($filters),
+ 'allModels' => $service->calculateFullGoalChainWeighted($filters),
'pagination' => ['pageSize' => 100],
]);
}
}
- public function actionControlSpecies()
+ public function actionControlSpeciesOld()
{
$model = new DynamicModel([
'storeId', 'month', 'type',
- $monthSpeciesGoals = $service->calculateFullGoalChain($filters);
+ $monthSpeciesGoals = $service->calculateFullGoalChainWeighted($filters);
$monthSpeciesGoalsMap = [];
foreach ($monthSpeciesGoals as $monthSpeciesGoal) {
$monthSpeciesGoalsMap[$monthSpeciesGoal['store_id']]
}
//var_dump($weeksProductForecast); die();
- return $this->render('control-species', [
+ return $this->render('control-species-old', [
'model' => $model,
'result' => $monthResult,
'weeksData' => $weeksData,
- 'monthCategoryShare' => $monthCategoryShareResult,
+ 'monthCategoryShare' => $monthCategoryShareResult,
'weeksProductForecast' => $weeksProductForecast,
'totals' => $totals,
'storeList' => $storeList,
return $result;
}
- public function calculateFullGoalChain(array $filters): array
+ public function calculateFullGoalChainWeighted(array $filters): array
{
$datePlan = $filters['plan_date'];
$dateFromForCategory = (new \DateTime($datePlan))->modify('-12 months')->format('Y-m-d');
+++ /dev/null
-<?php
-
-use yii\helpers\Html;
-use yii\widgets\ActiveForm;
-use yii\base\DynamicModel;
-use yii_app\records\CityStore;
-use yii_app\records\PricesDynamic;
-use yii_app\records\Products1c;
-
-/* @var $this yii\web\View */
-/* @var $model DynamicModel */
-/* @var $storeList array */
-/* @var $monthsList array */
-/* @var $result array */
-/* @var $totals array */
-/* @var $weeksData array */
-/* @var $weeksShareResult array */
-/* @var $weeksGoalResult array */
-/* @var array $weeksProductForecast */
-/* @var array $monthCategoryShare */
-
-?>
-
-<div class="control-species p-4">
- <h1>Проверка списаний по видам</h1>
-
- <?php $form = ActiveForm::begin(['method' => 'post']); ?>
-
- <?= $form->field($model, 'storeId')
- ->dropDownList($storeList, ['prompt' => 'Выберите магазин'])
- ->label('Магазин') ?>
-
- <?= $form->field($model, 'month')
- ->dropDownList($monthsList, ['prompt' => 'Выберите месяц'])
- ->label('Месяц') ?>
-
- <?= $form->field($model, 'type')
- ->radioList([
- //'sales' => 'Продажи',
- 'writeOffs'=> 'Списания',
- ])
- ->label('Тип данных') ?>
-
-
- <div class="form-group">
- <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
- </div>
-
- <?php ActiveForm::end(); ?>
-
-
- <?php if (!empty($weeksData)): ?>
- <h2>Результаты расчетов списаний видов по неделям</h2>
- <table class="table table-striped table-bordered">
- <thead>
- <tr>
- <th>Категория</th>
- <th>Категория сумма</th>
- <th>Категория доля</th>
- <th>Категория цель</th>
- <th>Подкатегория</th>
- <th>Подкатегория сумма</th>
- <th>Подкатегория доля</th>
- <th>Подкатегория цель</th>
- <th>Вид</th>
- <th>Вид сумма</th>
- <th>Вид доля</th>
- <th>Вид Цель месяца</th>
- <th>Неделя</th>
- <th>Сумма недели</th>
- <th>Доля недели (%)</th>
-
- <th>Цель недели</th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($weeksData as $r): ?>
- <tr>
- <td><?= Html::encode($r['category']) ?> </td>
- <td><?= $monthCategoryShare[$model->storeId][$r['category']]['total_sum_cat'] ?>
- <td><?= Yii::$app->formatter->asPercent($monthCategoryShare[$model->storeId][$r['category']]['share_of_total'], 2) ?></td>
- <td><?= $monthCategoryShare[$model->storeId][$r['category']]['goal'] ?>
- <td><?= Html::encode($r['subcategory']) ?></td>
- <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']]['total_sum'] ?>
- <td><?= Yii::$app->formatter->asPercent($monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']]['percent_of_month'], 2) ?></td>
- <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']]['goal'] ?>
- <td><?= Html::encode($r['species']) ?></td>
- <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']][$r['species']]['total_sum'] ?>
- <td><?= Yii::$app->formatter->asPercent($monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']][$r['species']]['percent_of_month'], 2) ?></td>
- <td><?= $r['monthly_goal'] ?> </td>
- <td><?= $r['week'] ?> неделя - начало <?= \yii_app\services\AutoPlannogrammaService::getIsoWeekStart((int)date('Y'), (int)$r['week']) ?></td>
- <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']][$r['species']][$r['week']]['sumWeek'] ?> </td>
- <td>
- <?php if ($r['percent'] === null): ?>
- —
- <?php else: ?>
- <?= Yii::$app->formatter->asPercent($r['percent'], 1) ?>
- <?php endif; ?>
- </td>
-
- <td><?= $r['weekly_goal'] ?> </td>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
- <?php endif; ?>
- <?php if (!empty($weeksProductForecast)): ?>
- <h2>Прогноз списаний товаров по неделям </h2>
- <table class="table table-bordered table-striped">
- <thead>
- <tr>
- <th>Категория</th>
- <th>Подкатегория</th>
- <th>Вид</th>
- <th>Товар (ID)</th>
- <th>Неделя</th>
- <th>Цель</th>
- <th>Цена</th>
- <th>Прогноз</th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($weeksProductForecast as $row): ?>
- <tr>
- <td><?= Html::encode($row['category']) ?></td>
- <td><?= Html::encode($row['subcategory']) ?></td>
- <td><?= Html::encode($row['species']) ?></td>
- <td>
- <?= Html::encode($row['name']) ?>
- <br><small class="text-muted">(<?= Html::encode($row['product_id']) ?>)</small>
- </td>
- <td><?= Html::encode($row['week']) ?></td>
- <td><?= Html::encode($row['goal']) ?></td>
- <td><?= Html::encode($row['price']) ?></td>
- <td><?= Html::encode($row['forecast']) ?></td>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
- <?php endif; ?>
-</div>
--- /dev/null
+<?php
+
+use yii\helpers\Html;
+use yii\widgets\ActiveForm;
+use yii\base\DynamicModel;
+use yii_app\records\CityStore;
+use yii_app\records\PricesDynamic;
+use yii_app\records\Products1c;
+
+/* @var $this yii\web\View */
+/* @var $model DynamicModel */
+/* @var $storeList array */
+/* @var $monthsList array */
+/* @var $result array */
+/* @var $totals array */
+/* @var $weeksData array */
+/* @var $weeksShareResult array */
+/* @var $weeksGoalResult array */
+/* @var array $weeksProductForecast */
+/* @var array $monthCategoryShare */
+
+?>
+
+<div class="control-species p-4">
+ <h1>Проверка списаний по видам</h1>
+
+ <?php $form = ActiveForm::begin(['method' => 'post']); ?>
+
+ <?= $form->field($model, 'storeId')
+ ->dropDownList($storeList, ['prompt' => 'Выберите магазин'])
+ ->label('Магазин') ?>
+
+ <?= $form->field($model, 'month')
+ ->dropDownList($monthsList, ['prompt' => 'Выберите месяц'])
+ ->label('Месяц') ?>
+
+ <?= $form->field($model, 'type')
+ ->radioList([
+ //'sales' => 'Продажи',
+ 'writeOffs'=> 'Списания',
+ ])
+ ->label('Тип данных') ?>
+
+
+ <div class="form-group">
+ <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
+ </div>
+
+ <?php ActiveForm::end(); ?>
+
+
+ <?php if (!empty($weeksData)): ?>
+ <h2>Результаты расчетов списаний видов по неделям</h2>
+ <table class="table table-striped table-bordered">
+ <thead>
+ <tr>
+ <th>Категория</th>
+ <th>Категория сумма</th>
+ <th>Категория доля</th>
+ <th>Категория цель</th>
+ <th>Подкатегория</th>
+ <th>Подкатегория сумма</th>
+ <th>Подкатегория доля</th>
+ <th>Подкатегория цель</th>
+ <th>Вид</th>
+ <th>Вид сумма</th>
+ <th>Вид доля</th>
+ <th>Вид Цель месяца</th>
+ <th>Неделя</th>
+ <th>Сумма недели</th>
+ <th>Доля недели (%)</th>
+
+ <th>Цель недели</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach ($weeksData as $r): ?>
+ <tr>
+ <td><?= Html::encode($r['category']) ?> </td>
+ <td><?= $monthCategoryShare[$model->storeId][$r['category']]['total_sum_cat'] ?>
+ <td><?= Yii::$app->formatter->asPercent($monthCategoryShare[$model->storeId][$r['category']]['share_of_total'], 2) ?></td>
+ <td><?= $monthCategoryShare[$model->storeId][$r['category']]['goal'] ?>
+ <td><?= Html::encode($r['subcategory']) ?></td>
+ <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']]['total_sum'] ?>
+ <td><?= Yii::$app->formatter->asPercent($monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']]['percent_of_month'], 2) ?></td>
+ <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']]['goal'] ?>
+ <td><?= Html::encode($r['species']) ?></td>
+ <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']][$r['species']]['total_sum'] ?>
+ <td><?= Yii::$app->formatter->asPercent($monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']][$r['species']]['percent_of_month'], 2) ?></td>
+ <td><?= $r['monthly_goal'] ?> </td>
+ <td><?= $r['week'] ?> неделя - начало <?= \yii_app\services\AutoPlannogrammaService::getIsoWeekStart((int)date('Y'), (int)$r['week']) ?></td>
+ <td><?= $monthCategoryShare[$model->storeId][$r['category']][$r['subcategory']][$r['species']][$r['week']]['sumWeek'] ?> </td>
+ <td>
+ <?php if ($r['percent'] === null): ?>
+ —
+ <?php else: ?>
+ <?= Yii::$app->formatter->asPercent($r['percent'], 1) ?>
+ <?php endif; ?>
+ </td>
+
+ <td><?= $r['weekly_goal'] ?> </td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <?php endif; ?>
+ <?php if (!empty($weeksProductForecast)): ?>
+ <h2>Прогноз списаний товаров по неделям </h2>
+ <table class="table table-bordered table-striped">
+ <thead>
+ <tr>
+ <th>Категория</th>
+ <th>Подкатегория</th>
+ <th>Вид</th>
+ <th>Товар (ID)</th>
+ <th>Неделя</th>
+ <th>Цель</th>
+ <th>Цена</th>
+ <th>Прогноз</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach ($weeksProductForecast as $row): ?>
+ <tr>
+ <td><?= Html::encode($row['category']) ?></td>
+ <td><?= Html::encode($row['subcategory']) ?></td>
+ <td><?= Html::encode($row['species']) ?></td>
+ <td>
+ <?= Html::encode($row['name']) ?>
+ <br><small class="text-muted">(<?= Html::encode($row['product_id']) ?>)</small>
+ </td>
+ <td><?= Html::encode($row['week']) ?></td>
+ <td><?= Html::encode($row['goal']) ?></td>
+ <td><?= Html::encode($row['price']) ?></td>
+ <td><?= Html::encode($row['forecast']) ?></td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <?php endif; ?>
+</div>