From: Vladimir Fomichev Date: Wed, 10 Sep 2025 12:10:53 +0000 (+0300) Subject: Сохранение интервалов X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=31bddf00fad1de9253476f534dcb238b2a5c4bda;p=erp24_rep%2Fyii-erp24%2F.git Сохранение интервалов --- diff --git a/erp24/controllers/MatrixBouquetActualityController.php b/erp24/controllers/MatrixBouquetActualityController.php index 1e189f9d..ebc5696d 100644 --- a/erp24/controllers/MatrixBouquetActualityController.php +++ b/erp24/controllers/MatrixBouquetActualityController.php @@ -324,19 +324,18 @@ class MatrixBouquetActualityController extends Controller $bouquetId = $row['bouquet_id']; - $fromAdj = (clone $fromDate)->modify('-1 second')->format('Y-m-d H:i:s'); - $toAdj = (clone $toDate)->modify('+1 second')->format('Y-m-d H:i:s'); + $toAdj = (clone $toDate)->modify('+1 second')->format('Y-m-d H:i:s'); - /** @var MatrixBouquetActuality[] $hits */ - $hits = MatrixBouquetActuality::find() + /** @var MatrixBouquetActuality[] $actualities */ + $actualities = MatrixBouquetActuality::find() ->where(['bouquet_id' => $bouquetId]) ->andWhere('date_to >= :fromAdj', [':fromAdj' => $fromAdj]) - ->andWhere('date_from <= :toAdj', [':toAdj' => $toAdj]) + ->andWhere('date_from <= :toAdj', [':toAdj' => $toAdj]) ->orderBy(['date_from' => SORT_ASC]) ->all(); - if (empty($hits)) { + if (empty($actualities)) { $new = new MatrixBouquetActuality([ 'guid' => $guid, 'bouquet_id' => $bouquetId, @@ -352,16 +351,9 @@ class MatrixBouquetActualityController extends Controller continue; } - $minFrom = $from; - $maxTo = $to; - foreach ($hits as $h) { - if ($h->date_from < $minFrom) { $minFrom = $h->date_from; } - if ($h->date_to > $maxTo) { $maxTo = $h->date_to; } - } - - $master = array_shift($hits); - $master->date_from = $minFrom; - $master->date_to = $maxTo; + $master = array_shift($actualities); + $master->date_from = $from; + $master->date_to = $to; $master->updated_at = $now; $master->updated_by = $userId; @@ -369,48 +361,9 @@ class MatrixBouquetActualityController extends Controller Yii::error("Ошибка обновления GUID={$guid}: " . json_encode($master->getErrors(), JSON_UNESCAPED_UNICODE)); } - foreach ($hits as $dup) { - $dup->delete(); - } - - while (true) { - $leftBound = (new \DateTime($master->date_from))->modify('-1 second')->format('Y-m-d H:i:s'); - $rightBound = (new \DateTime($master->date_to))->modify('+1 second')->format('Y-m-d H:i:s'); - - /** @var MatrixBouquetActuality[] $neighbors */ - $neighbors = MatrixBouquetActuality::find() - ->where(['guid' => $guid]) - ->andWhere(['<>', 'id', $master->id]) - ->andWhere('date_to >= :leftBound', [':leftBound' => $leftBound]) - ->andWhere('date_from <= :rightBound', [':rightBound' => $rightBound]) - ->orderBy(['date_from' => SORT_ASC]) - ->all(); - - if (empty($neighbors)) { - break; - } - - foreach ($neighbors as $nei) { - if ($nei->date_from < $master->date_from) - { - $master->date_from = $nei->date_from; - } - if ($nei->date_to > $master->date_to) - { - $master->date_to = $nei->date_to; - } - } - $master->updated_at = $now; - $master->updated_by = $userId; - - if (!$master->save()) { - Yii::error("Ошибка повторного обновления GUID={$guid}: " . json_encode($master->getErrors(), JSON_UNESCAPED_UNICODE)); - break; - } - - foreach ($neighbors as $nei) { - $nei->delete(); - } + foreach ($actualities as $actuality) { + /** @var MatrixBouquetActuality $actuality */ + $actuality->delete(); } } }