From: marina Date: Wed, 26 Mar 2025 06:42:38 +0000 (+0300) Subject: ERP-389 ERP-391 Реализовать зависимость от наличия прогноза ОС МБ X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=a2637358147787ccc7482e27ac0b74831f181c90;p=erp24_rep%2Fyii-erp24%2F.git ERP-389 ERP-391 Реализовать зависимость от наличия прогноза ОС МБ --- diff --git a/erp24/controllers/BouquetController.php b/erp24/controllers/BouquetController.php index a3c31f76..ef192fbd 100644 --- a/erp24/controllers/BouquetController.php +++ b/erp24/controllers/BouquetController.php @@ -207,4 +207,28 @@ class BouquetController extends Controller return $this->redirect(Yii::$app->request->referrer); } + + public function actionGetProductListData() + { + Yii::$app->response->format = Response::FORMAT_JSON; + $request = Yii::$app->request; + + $bouquet_id = (int) $request->get('id'); + $month = (int) $request->get('month'); + $year = (int) $request->get('year'); + + $products = BouquetCompositionProducts::find()->where(['bouquet_id' => $bouquet_id])->all(); + + $data = []; + + foreach ($products as $product) { + $data[] = [ + 'product_guid' => $product->product_guid, + 'buildPercentage' => $product->getBuildPercentage($year, $month), + 'averageNumberOfPieces' => $product->getAverageNumberOfPieces($year, $month), + ]; + } + + return $data; + } } \ No newline at end of file diff --git a/erp24/records/BouquetCompositionProducts.php b/erp24/records/BouquetCompositionProducts.php index 17a280e8..25f2dc06 100644 --- a/erp24/records/BouquetCompositionProducts.php +++ b/erp24/records/BouquetCompositionProducts.php @@ -228,24 +228,44 @@ class BouquetCompositionProducts extends ActiveRecord return round($medianProfitability, 2); } - public function getBuildPercentage(): float + public function getBuildPercentage(int $year = null, int $month = null): float { - $totalAssemblies = BouquetCompositionProducts::find()->count(); + $year = $year ?? date('Y'); + $month = $month ?? date('m'); + $periodBouquets = BouquetForecast::find() + ->andWhere(['year' => $year, 'month' => $month]) + ->select('bouquet_id') + ->distinct() + ->column(); + + $totalAssemblies = BouquetCompositionProducts::find() + ->count(); + $assembliesWithProduct = BouquetCompositionProducts::find() - ->where(['product_guid' => $this->product_guid]) + ->andWhere(['product_guid' => $this->product_guid]) + ->andWhere(['bouquet_id' => $periodBouquets]) ->count(); return $totalAssemblies ? round(($assembliesWithProduct / $totalAssemblies) * 100, 2) : 0; } - public function getAverageNumberOfPieces(): float + public function getAverageNumberOfPieces(int $year = null, int $month = null): float { + $year = $year ?? date('Y'); + $month = $month ?? date('m'); + $periodBouquets = BouquetForecast::find() + ->andWhere(['year' => $year, 'month' => $month]) + ->select('bouquet_id') + ->distinct() + ->column(); + $totalCount = BouquetCompositionProducts::find() ->where(['product_guid' => $this->product_guid]) ->sum('count'); $assembliesWithProduct = BouquetCompositionProducts::find() - ->where(['product_guid' => $this->product_guid]) + ->andWhere(['product_guid' => $this->product_guid]) + ->andWhere(['bouquet_id' => $periodBouquets]) ->count(); return $assembliesWithProduct ? round($totalCount / $assembliesWithProduct, 2) : 0; diff --git a/erp24/views/bouquet/_product_list.php b/erp24/views/bouquet/_product_list.php index d044e165..5a7bcb86 100644 --- a/erp24/views/bouquet/_product_list.php +++ b/erp24/views/bouquet/_product_list.php @@ -7,7 +7,7 @@
ср.шт. в сборке
-
+
-
+
product->name) ?>
count) ?>
getWriteOffPercentage()) ?>
getProfitability())?>
-
getBuildPercentage()) ?>%
-
getAverageNumberOfPieces()) ?>
+
getBuildPercentage()) ?>%
+
getAverageNumberOfPieces()) ?>
diff --git a/erp24/web/js/bouquet/bouquet.js b/erp24/web/js/bouquet/bouquet.js index 4d74d0ac..b1dec1d3 100644 --- a/erp24/web/js/bouquet/bouquet.js +++ b/erp24/web/js/bouquet/bouquet.js @@ -51,6 +51,29 @@ $(document).ready(function () { console.error("Ошибка загрузки данных:", status, error); } }); + + $.ajax({ + url: '/bouquet/get-product-list-data', + type: 'GET', + data: { year: year, month: month, id: id }, + dataType: 'json', + success: function (response) { + if (response) { + console.log(response); + + response.forEach(item => { + let row = $(`.d-flex[data-product-guid="${item.product_guid}"]`); + if (row.length) { + row.find('.build-percentage').text(item.buildPercentage + '%'); + row.find('.average-pieces').text(item.averageNumberOfPieces); + } + }); + } + }, + error: function (xhr, status, error) { + console.error("Ошибка загрузки данных:", status, error); + } + }); }); } });