From 65a9fe5cb87fdbae1fdb17e2546f7251c402af69 Mon Sep 17 00:00:00 2001 From: Alexander Smirnov Date: Tue, 3 Sep 2024 13:22:24 +0300 Subject: [PATCH] =?utf8?q?[ERP-140]=20=D0=91=D1=80=D0=B0=D0=BA=20=D1=84?= =?utf8?q?=D0=B0=D0=BA=D1=82=20=D0=B7=D0=B0=20=D0=BC=D0=B5=D1=81=D1=8F?= =?utf8?q?=D1=86=20=D1=80=D0=B0=D1=81=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0?= =?utf8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D1=81=20=D1=81=D0=B5=D0=B1=D0=B5?= =?utf8?q?=D1=81=D1=82=D0=BE=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/MotivationService.php | 44 +++++++++++++++------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/erp24/services/MotivationService.php b/erp24/services/MotivationService.php index 301b7cfd..ef1abf89 100644 --- a/erp24/services/MotivationService.php +++ b/erp24/services/MotivationService.php @@ -1332,40 +1332,44 @@ class MotivationService $monthEnd = date("Y-m-t 23:59:59", strtotime($year . '-' . $month . '-1')); $motivations = Motivation::find()->where(['year' => $year, 'month' => $month])->indexBy('store_id')->all(); - $motivationValueGroup = MotivationValueGroup::find()->where(['alias' => 'fact'])->one(); $exportImportTables = ExportImportTable::find()->select(['export_val', 'entity_id'])->where(['entity' => 'city_store', 'entity_id' => array_keys($motivations), 'export_id' => 1])->indexBy('entity_id')->all(); /** @var $exportImportTables ExportImportTable[] */ foreach ($exportImportTables as $store_id => $store_guid) { if (isset($motivations[$store_id])) { - $writeOffs = WriteOffs::find()->select(['sum(summ) as total', 'type']) + $writeOffs = WriteOffs::find()->alias('wo')->select(['wo.type', 'wo.date', 'wop.product_id', 'wop.quantity']) + ->rightJoin('write_offs_products wop', 'wop.write_offs_id = wo.id') + ->where(['between', 'wo.date', $monthStart, $monthEnd]) + ->andWhere(['wo.store_id' => $store_guid]) + ->asArray()->all(); + + $selfCostProduct = SelfCostProduct::find()->select(['price', 'product_guid', 'date']) ->where(['between', 'date', $monthStart, $monthEnd]) - ->andWhere(['store_id' => $store_guid]) - ->groupBy(['type']) - ->indexBy('type') + ->andWhere(['store_id' => $store_id]) ->asArray()->all(); + + $selfCostProductMap = []; + foreach ($selfCostProduct as $scp) { + $selfCostProductMap[$scp['date']][$scp['product_guid']] = floatval($scp['price']); + } + foreach (MotivationCostsItem::writeOffsToMotivationItemArray() as $key => $motivationItemType) { - $data = $writeOffs[$key] ?? []; + $sum = 0; + foreach($writeOffs as $data) { + if (($data['type'] ?? '') == $key) { + $sum += ($selfCostProductMap[date("Y-m-d", strtotime($data['date']))][$data['product_id']] ?? 0) + * ($data['quantity'] ?? 0); + } + } + $motivationCostsItem = MotivationCostsItem::find()->where(['name' => $motivationItemType])->one(); /** @var $motivationCostsItem MotivationCostsItem */ $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItem->code); - $motivationValue = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, - 'motivation_group_id' => $motivationValueGroup->id, 'value_id' => $motivationCostsItem->code])->one(); - if (!$motivationValue) { - $motivationValue = new MotivationValue; - $motivationValue->motivation_id = $motivations[$store_id]->id; - $motivationValue->motivation_group_id = $motivationValueGroup->id; - $motivationValue->value_id = $motivationCostsItem->code; - $motivationValue->value_type = $motivationCostsItem->data_type; - } - $motivationValue->value_float = ($data['total'] ?? 0) + $correction; - $motivationValue->save(); - if ($motivationValue->getErrors()) { - throw new \Exception(Json::encode($motivationValue->getErrors())); - } + self::saveOrUpdateMotivationValue($motivations[$store_id]->id, 'fact', + $motivationCostsItem->code, 'float', $sum + $correction); } } } -- 2.39.5