From 3fde75565df913f964e55188625a68151ba41ec5 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Thu, 31 Jul 2025 12:14:19 +0300 Subject: [PATCH] =?utf8?q?=D0=90=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D1=8C=D0=BD?= =?utf8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=B2=20=D0=BF=D0=BB=D0=B0=D0=BD?= =?utf8?q?=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/StorePlanService.php | 52 +++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/erp24/services/StorePlanService.php b/erp24/services/StorePlanService.php index bf9a12c3..094eb47f 100755 --- a/erp24/services/StorePlanService.php +++ b/erp24/services/StorePlanService.php @@ -20,6 +20,7 @@ use yii_app\records\PricesDynamic; use yii_app\records\Products1c; use yii_app\records\Products1cAdditionalCharacteristics; use yii_app\records\Products1cNomenclature; +use yii_app\records\Products1cNomenclatureActuality; use yii_app\records\Sales; use yii_app\records\SalesProducts; use yii_app\records\StorePlan; @@ -323,7 +324,7 @@ class StorePlanService * * @return array */ - private static function getSalesHistory($storeId, $periods, $category = null, $subcategory = null, $species = null) + public static function getSalesHistory($storeId, $periods, $category = null, $subcategory = null, $species = null) { $salesHistory = []; @@ -338,7 +339,7 @@ class StorePlanService $query = Sales::find()->alias('s') ->select([ 'p1c.id as product_guid', - 'COUNT(*) as sales_count', + 'SUM(sp.quantity) as sales_count', 'p1c.category', 'p1c.subcategory', 'p1c.species', @@ -350,7 +351,7 @@ class StorePlanService ->andWhere(['between', 's.date', $dateStart, $dateEnd]) ->andWhere(['order_id' => ['', '0']]) ->andWhere(['p1.components' => '']) - ->andWhere(['not in', 'p1c.category', ['', 'букет', 'сборка', 'сервис']]) + ->andWhere(['not in', 'p1c.category', ['', 'сервис']]) ->andFilterWhere(['p1c.category' => $category]) ->andFilterWhere(['p1c.subcategory' => $subcategory]) ->andFilterWhere(['p1c.species' => $species]) @@ -380,6 +381,22 @@ class StorePlanService } } + foreach ($salesHistory as &$history) { + foreach ($periods as $periodKey => $periodData) { + if (!isset($history['data'][$periodKey])) { + $history['data'][$periodKey] = []; + } + + foreach (array_keys($periodData['weeks']) as $weekIndex) { + if (!isset($history['data'][$periodKey][$weekIndex])) { + $history['data'][$periodKey][$weekIndex] = 0; + } + } + ksort($history['data'][$periodKey]); + } + } + unset($history); + return $salesHistory; } @@ -401,7 +418,36 @@ class StorePlanService $productsWithHistory = []; $productsWithoutHistory = []; + $guids = array_keys($salesHistory); + $actualities = Products1cNomenclatureActuality::find() + ->where(['guid' => $guids, 'active' => 1]) + ->indexBy('guid') + ->all(); + foreach ($salesHistory as $guid => $info) { + if (!isset($actualities[$guid])) { + continue; + } + $act = $actualities[$guid]; + $actFrom = new \DateTime($act->date_from); + $actTo = $act->date_end + ? new \DateTime($act->date_end) + : (new \DateTime())->modify('+1 years'); + + $isInsideActivity = true; + foreach ($periods as $periodKey => $periodData) { + $pStart = \DateTime::createFromFormat('Y-m', $periodKey); + $pStart->modify('first day of this month')->setTime(0, 0, 0); + $pEnd = (clone $pStart)->modify('last day of this month')->setTime(23, 59, 59); + + if ($pStart < $actFrom || $pEnd > $actTo) { + $isInsideActivity = false; + break; + } + } + if (!$isInsideActivity) { + continue; + } $monthsData = $info['data']; $metaFields = [ 'store_id' => $info['store_id'], -- 2.39.5