From a2637358147787ccc7482e27ac0b74831f181c90 Mon Sep 17 00:00:00 2001 From: marina Date: Wed, 26 Mar 2025 09:42:38 +0300 Subject: [PATCH] =?utf8?q?ERP-389=20ERP-391=20=D0=A0=D0=B5=D0=B0=D0=BB?= =?utf8?q?=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B2?= =?utf8?q?=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C=20=D0=BE=D1=82?= =?utf8?q?=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D1=8F=20=D0=BF=D1=80?= =?utf8?q?=D0=BE=D0=B3=D0=BD=D0=BE=D0=B7=D0=B0=20=D0=9E=D0=A1=20=D0=9C?= =?utf8?q?=D0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/controllers/BouquetController.php | 24 ++++++++++++++++ erp24/records/BouquetCompositionProducts.php | 30 ++++++++++++++++---- erp24/views/bouquet/_product_list.php | 8 +++--- erp24/web/js/bouquet/bouquet.js | 23 +++++++++++++++ 4 files changed, 76 insertions(+), 9 deletions(-) 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); + } + }); }); } }); -- 2.39.5