From 8976df4fd034f5729e0845d47449a019e855f473 Mon Sep 17 00:00:00 2001 From: marina Date: Fri, 6 Dec 2024 19:55:48 +0300 Subject: [PATCH] =?utf8?q?ERP-259=20=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?utf8?q?=D1=82=D0=BA=D0=B0=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B3=D0=BE?= =?utf8?q?=20=D1=88=D0=B0=D0=B3=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?utf8?q?=D0=B0=D1=87=D0=B8=20=D1=81=D0=BC=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/records/EqualizationRemains.php | 85 ++++++++++++++++----------- 1 file changed, 50 insertions(+), 35 deletions(-) diff --git a/erp24/records/EqualizationRemains.php b/erp24/records/EqualizationRemains.php index 7f109b21..f9c4a807 100644 --- a/erp24/records/EqualizationRemains.php +++ b/erp24/records/EqualizationRemains.php @@ -134,21 +134,27 @@ class EqualizationRemains extends \yii\db\ActiveRecord EqualizationRemains::deleteAll(['shift_id' => $shiftTransfer->id]); $plus = ShiftRemains::find() - ->andWhere(['shift_transfer_id' => $shiftTransfer->id]) + ->where(['shift_transfer_id' => $shiftTransfer->id]) ->andWhere(['!=', 'fact_and_1c_diff', 0]) ->andWhere(['>', 'fact_and_1c_diff', 0]) ->orderBy('retail_price') ->all(); - $minus = ArrayHelper::map(ShiftRemains::find() - ->andWhere(['shift_transfer_id' => $shiftTransfer->id]) - ->andWhere(['!=', 'fact_and_1c_diff', 0]) - ->andWhere(['<', 'fact_and_1c_diff', 0]) - ->select(['product_guid', 'fact_and_1c_diff', 'retail_price', 'self_cost']) - ->asArray() - ->all(), 'product_guid', function ($item) { - return ['fact_and_1c_diff' => $item['fact_and_1c_diff'], 'retail_price' => $item['retail_price'], 'self_cost' => $item['self_cost']]; - }); + $minus = ArrayHelper::map( + ShiftRemains::find() + ->where(['shift_transfer_id' => $shiftTransfer->id]) + ->andWhere(['!=', 'fact_and_1c_diff', 0]) + ->andWhere(['<', 'fact_and_1c_diff', 0]) + ->select(['product_guid', 'fact_and_1c_diff', 'retail_price', 'self_cost']) + ->asArray() + ->all(), + 'product_guid', + fn($item) => [ + 'fact_and_1c_diff' => $item['fact_and_1c_diff'], + 'retail_price' => $item['retail_price'], + 'self_cost' => $item['self_cost'] + ] + ); foreach ($plus as $p) { $replacement = Product1cReplacement::find() @@ -158,17 +164,30 @@ class EqualizationRemains extends \yii\db\ActiveRecord $quanity = $p->fact_and_1c_diff; - foreach ($minus as $key => $item) { + $intersect = array_intersect_key($minus, array_flip($replacement)); - $count = $count ?? $item['fact_and_1c_diff']; + if (empty($intersect)) { + continue; + } - if (self::find() - ->select(['shift_id', 'product_replacement_id']) - ->andWhere(['shift_id' => $shiftTransfer->id]) - ->andWhere(['product_replacement_id' => $key]) + foreach ($intersect as $key => $item) { + $eqRemains = self::find() + ->select(['SUM(product_count)']) + ->where(['shift_id' => $shiftTransfer->id, 'product_id' => $key]) ->groupBy(['shift_id', 'product_replacement_id']) - ->having(['SUM(product_replacement_count)' => abs($item['fact_and_1c_diff'])]) - ->exists()) { + ->scalar(); + + $diff = $eqRemains + ? min($quanity, abs($item['fact_and_1c_diff']) - $eqRemains) + : min($quanity, abs($item['fact_and_1c_diff'])); + + if (self::find() + ->select(['SUM(product_count)']) + ->where(['shift_id' => $shiftTransfer->id]) + ->andWhere(['product_id' => $key]) + ->groupBy(['shift_id', 'product_id']) + ->having(['SUM(product_count)' => abs($item['fact_and_1c_diff'])]) + ->scalar() == abs($item['fact_and_1c_diff'])) { break; } @@ -179,30 +198,26 @@ class EqualizationRemains extends \yii\db\ActiveRecord $model = new EqualizationRemains(); $model->setAttributes([ 'shift_id' => $shiftTransfer->id, - 'product_id' => $p->product_guid, - 'product_count' => min($quanity, abs($item['fact_and_1c_diff'])), - 'product_price' => $p->retail_price, - 'product_self_cost' => $p->self_cost, - 'product_replacement_id' => $key, - 'product_replacement_count' => min($quanity, abs($item['fact_and_1c_diff'])), - 'product_replacement_price' => $item['retail_price'], - 'product_replacement_self_cost' => $item['self_cost'], - 'balance' => min($quanity, abs($item['fact_and_1c_diff'])) * ($p->retail_price - $item['retail_price']), - 'balance_self_cost' => min($quanity, abs($item['fact_and_1c_diff'])) * ($p->self_cost - $item['self_cost']) + 'product_id' => $key, + 'product_count' => $diff, + 'product_price' => $item['retail_price'], + 'product_self_cost' => $item['self_cost'], + 'product_replacement_id' => $p->product_guid, + 'product_replacement_count' => $diff, + 'product_replacement_price' => $p->retail_price, + 'product_replacement_self_cost' => $p->self_cost, + 'balance' => $diff * ($p->retail_price - $item['retail_price']), + 'balance_self_cost' => $diff * ($p->self_cost - $item['self_cost']) ]); if ($model->validate()) { $model->save(); + $quanity -= $diff; - $quanity = $quanity - min($quanity, abs($item['fact_and_1c_diff'])); - $count += min($quanity, abs($item['fact_and_1c_diff'])); -// - if ($count == 0) { - unset($minus[$key]); - unset($count); + if ($quanity <= 0) { break; } - } elseif ($model->getErrors()) { + } else { var_dump($model->errors); die(); } -- 2.39.5