From 011b4ff36236fc3da64a1fa12caaa070690a3b59 Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Thu, 16 Oct 2025 16:51:18 +0300 Subject: [PATCH] =?utf8?q?ERP-477=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BA=D0=BB?= =?utf8?q?=D1=8E=D1=87=D0=B8=D1=82=D1=8C=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87?= =?utf8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B5=D0=B1=D0=B5=D1=81=D1=82?= =?utf8?q?=D0=BE=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=D0=B7=20?= =?utf8?q?=D0=B4=D1=80=D1=83=D0=B3=D0=BE=D0=B3=D0=BE=20=D0=B8=D1=81=D1=82?= =?utf8?q?=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/api2/controllers/DataController.php | 4 ++-- erp24/commands/SelfCostController.php | 8 +++---- erp24/controllers/ShiftTransferController.php | 22 ++++++++++++------- erp24/records/EqualizationRemains.php | 10 +++++++-- ...ata_to_monitvation_from_motivation_buh.php | 12 +++++----- ....php => SelfCostProductDynamicService.php} | 18 +++++++++++++-- 6 files changed, 50 insertions(+), 24 deletions(-) rename erp24/services/{SelfCostProductDinamicService.php => SelfCostProductDynamicService.php} (95%) diff --git a/erp24/api2/controllers/DataController.php b/erp24/api2/controllers/DataController.php index 742f5dfc..d6228367 100644 --- a/erp24/api2/controllers/DataController.php +++ b/erp24/api2/controllers/DataController.php @@ -66,7 +66,7 @@ use yii_app\services\InfoLogService; use yii_app\services\LogService; use yii_app\services\MarketplaceService; use yii_app\services\TelegramService; -use yii_app\services\SelfCostProductDinamicService; +use yii_app\services\SelfCostProductDynamicService; class DataController extends BaseController { @@ -1153,7 +1153,7 @@ class DataController extends BaseController if (!empty($values)) { $this->setSelfCostUpdate($values); - SelfCostProductDinamicService::UpdateResult($values); + SelfCostProductDynamicService::UpdateResult($values); } } diff --git a/erp24/commands/SelfCostController.php b/erp24/commands/SelfCostController.php index 06a8ca08..34d780a5 100644 --- a/erp24/commands/SelfCostController.php +++ b/erp24/commands/SelfCostController.php @@ -10,7 +10,7 @@ namespace yii_app\commands; use yii\console\Controller; use yii\console\ExitCode; use yii_app\records\SelfCostProduct; -use yii_app\services\SelfCostProductDinamicService; +use yii_app\services\SelfCostProductDynamicService; class SelfCostController extends Controller @@ -55,9 +55,9 @@ class SelfCostController extends Controller ->asArray() ->all(); // var_dump($selfCostProduct); - $resultRow = SelfCostProductDinamicService::PrepareResult($selfCostProduct); + $resultRow = SelfCostProductDynamicService::PrepareResult($selfCostProduct); // print_r($resultRow); - SelfCostProductDinamicService::SaveResult($resultRow); + SelfCostProductDynamicService::SaveResult($resultRow); // echo " Line " . __LINE__ . "\n"; @@ -84,7 +84,7 @@ class SelfCostController extends Controller { echo "Start merging duplicates " . date('Y-m-d H:i:s') . "\n"; - SelfCostProductDinamicService::MergeDuplicates(); + SelfCostProductDynamicService::MergeDuplicates(); echo "Duplicates merged successfully " . date('Y-m-d H:i:s') . "\n"; return ExitCode::OK; diff --git a/erp24/controllers/ShiftTransferController.php b/erp24/controllers/ShiftTransferController.php index d8d0d92e..1a2b7e26 100644 --- a/erp24/controllers/ShiftTransferController.php +++ b/erp24/controllers/ShiftTransferController.php @@ -21,9 +21,7 @@ use yii_app\records\Product1cReplacement; use yii_app\records\Products1c; use yii_app\records\ProductsClass; use yii_app\records\ReplacementInvoice; -use yii_app\records\ReplacementInvoiceProducts; -use yii_app\records\SelfCostProduct; -use yii_app\records\Shift; +use yii_app\records\SelfCostProductDynamic; use yii_app\records\ShiftRemains; use yii_app\records\ShiftTransfer; use yii_app\records\StoreBalance; @@ -31,6 +29,7 @@ use yii_app\records\WaybillIncoming; use yii_app\records\WaybillWriteOffs; use yii_app\records\WriteOffsErp; use yii_app\services\TaskService; +use yii_app\services\SelfCostProductDynamicService; class ShiftTransferController extends Controller { @@ -97,8 +96,15 @@ class ShiftTransferController extends Controller } $price = ArrayHelper::map(Prices::find()->select(['product_id', 'price'])->where(['product_id' => array_keys($products)])->all(), 'product_id', 'price'); $storeEIT = ExportImportTable::find()->select(['entity_id'])->where(['entity' => 'city_store', 'export_val' => $storeGuid, 'export_id' => 1])->one(); - $selfCost = ArrayHelper::map(SelfCostProduct::find()->select(['product_guid', 'price'])->where(['product_guid' => - array_keys($products), 'store_id' => $storeEIT->entity_id /*, 'date' => date('Y-m-d', strtotime($shiftDate))*/])->orderBy(['date' => SORT_ASC])->all(), 'product_guid', 'price'); + $selfCost = ArrayHelper::map( + SelfCostProductDynamic::find() + ->select(['product_guid', 'price']) + ->where(['product_guid' => array_keys($products), 'store_id' => $storeEIT->entity_id]) + ->andWhere(new Expression(":d BETWEEN date_from AND date_to", [':d' => date('Y-m-d', strtotime($shiftDate))])) + ->orderBy(['date_from' => SORT_DESC]) + ->all(), + 'product_guid', 'price' + ); // $a = [['a' => 1, 'b' => 2, 'c' => 3], ['a' => 1, 'b' => 5, 'c' => 4], ['a' => 1, 'b' => 7, 'c' => 5],]; // var_dump(ArrayHelper::map($a, 'a', 'b')); die; // result: array(1) { [1]=> int(7) } @@ -268,7 +274,7 @@ class ShiftTransferController extends Controller $storeEIT = ExportImportTable::find()->select(['entity_id'])->where(['entity' => 'city_store', 'export_val' => $storeGuid, 'export_id' => 1])->one(); - $selfCost = SelfCostProduct::find()->select(['price'])->where(['product_guid' => $productGuid, 'store_id' => $storeEIT->entity_id])->orderBy(['date' => SORT_DESC])->one(); + $selfCost = SelfCostProductDynamicService::getPrice($productGuid, $storeEIT->entity_id, date('Y-m-d')); $balance = Balances::find()->select(['quantity'])->where(['store_id' => $storeGuid, 'product_id' => $productGuid])->one(); @@ -371,7 +377,7 @@ class ShiftTransferController extends Controller $shiftTransfer = ShiftTransfer::findOne($shiftTransferId); $shiftRemains = ShiftRemains::findOne(['shift_transfer_id' => $shiftTransferId, 'product_guid' => $productGuid]); $storeId = array_flip(array_map('strval', CityStore::getAllActiveGuidId()))[$shiftTransfer->store_guid]; - $productSelfCost = SelfCostProduct::findOne(['product_guid' => $productGuid, 'date' => $shiftTransfer->date, 'store_id' => $storeId]); + $productSelfCost = SelfCostProductDynamicService::getPrice($productGuid, $storeId, $shiftTransfer->date); $productReplacement = ArrayHelper::map( Products1c::find() @@ -418,7 +424,7 @@ class ShiftTransferController extends Controller $productPrice = Prices::findOne(['product_id' => $productGuid]); $shiftTransfer = ShiftTransfer::findOne($shiftTransferId); $storeId = array_flip(array_map('strval', CityStore::getAllActiveGuidId()))[$shiftTransfer->store_guid]; - $productSelfCost = SelfCostProduct::findOne(['product_guid' => $productGuid, 'date' => $shiftTransfer->date, 'store_id' => $storeId]); + $productSelfCost = SelfCostProductDynamicService::getPrice($productGuid, $storeId, $shiftTransfer->date); $count = ShiftRemains::findOne(['shift_transfer_id' => $shiftTransferId, 'product_guid' => $productGuid]); if (!$productPrice) { diff --git a/erp24/records/EqualizationRemains.php b/erp24/records/EqualizationRemains.php index 8ecaa3f4..67feb371 100644 --- a/erp24/records/EqualizationRemains.php +++ b/erp24/records/EqualizationRemains.php @@ -273,7 +273,10 @@ class EqualizationRemains extends \yii\db\ActiveRecord */ public function getProductPriceSelfCost() { - return $this->hasOne(SelfCostProduct::class, ['product_guid' => 'product_id', 'date' => $this->shiftRemains->shiftTransfer->date]); + return $this->hasOne(SelfCostProductDynamic::class, ['product_guid' => 'product_id']) + ->andOnCondition(":d BETWEEN date_from AND date_to", [ + ':d' => date('Y-m-d', strtotime($this->shiftRemains->shiftTransfer->date)) + ]); } /** @@ -281,7 +284,10 @@ class EqualizationRemains extends \yii\db\ActiveRecord */ public function getProductReplacementPriceSelfCost() { - return $this->hasOne(SelfCostProduct::class, ['product_guid' => 'product_replacement_id', 'date' => $this->shiftRemains->shiftTransfer->date]); + return $this->hasOne(SelfCostProductDynamic::class, ['product_guid' => 'product_replacement_id']) + ->andOnCondition(":d BETWEEN date_from AND date_to", [ + ':d' => date('Y-m-d', strtotime($this->shiftRemains->shiftTransfer->date)) + ]); } diff --git a/erp24/scripts/tasks/task_33_insert_data_to_monitvation_from_motivation_buh.php b/erp24/scripts/tasks/task_33_insert_data_to_monitvation_from_motivation_buh.php index 32d32555..da167f11 100644 --- a/erp24/scripts/tasks/task_33_insert_data_to_monitvation_from_motivation_buh.php +++ b/erp24/scripts/tasks/task_33_insert_data_to_monitvation_from_motivation_buh.php @@ -14,7 +14,7 @@ use yii_app\records\MotivationBuhValue; use yii_app\records\MotivationCostsItem; use yii_app\records\MotivationValue; use yii_app\records\SchedulerTaskLog; -use yii_app\records\SelfCostProduct; +use yii_app\services\SelfCostProductDynamicService; use yii_app\records\WriteOffs; use yii_app\records\WriteOffsProducts; @@ -224,11 +224,11 @@ try { continue; } - $price = SelfCostProduct::find() - ->andWhere(['product_guid' => $offProduct->product_id]) - ->andWhere(['store_id' => array_search($writeOff->store_id, $stores)]) - ->andWhere(['date' => date('Y-m-d', strtotime($writeOff->date))]) - ->one(); + $price = SelfCostProductDynamicService::getPrice( + $offProduct->product_id, + array_search($writeOff->store_id, $stores), + $writeOff->date + ); if (empty($price)) { $price = $offProduct; diff --git a/erp24/services/SelfCostProductDinamicService.php b/erp24/services/SelfCostProductDynamicService.php similarity index 95% rename from erp24/services/SelfCostProductDinamicService.php rename to erp24/services/SelfCostProductDynamicService.php index 9bd5aead..11dee64a 100644 --- a/erp24/services/SelfCostProductDinamicService.php +++ b/erp24/services/SelfCostProductDynamicService.php @@ -2,9 +2,10 @@ namespace yii_app\services; +use yii\db\Expression; use yii_app\records\SelfCostProductDynamic; -class SelfCostProductDinamicService +class SelfCostProductDynamicService { public static function PrepareResult($selfCostProduct):array @@ -295,5 +296,18 @@ class SelfCostProductDinamicService } - + /** + * Возвращает запись себестоимости по продукту/магазину на указанную дату. + */ + public static function getPrice($productGuid, $storeId, $date) + { + $dateStr = is_int($date) ? date('Y-m-d', $date) : date('Y-m-d', strtotime($date)); + + return SelfCostProductDynamic::find() + ->andWhere(['product_guid' => $productGuid]) + ->andWhere(['store_id' => $storeId]) + ->andWhere(new Expression(":d BETWEEN date_from AND date_to", [':d' => $dateStr])) + ->orderBy(['date_from' => SORT_DESC]) + ->one(); + } } -- 2.39.5