From: Alexander Smirnov Date: Fri, 16 Aug 2024 09:48:21 +0000 (+0300) Subject: [ERP-140] Обнулены пустые клетки факта X-Git-Tag: 1.4~5^2~26 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=ac7b1757c1d319f5ae7b026fa79fd51822c79b03;p=erp24_rep%2Fyii-erp24%2F.git [ERP-140] Обнулены пустые клетки факта --- diff --git a/erp24/actions/motivation/TestFactAction.php b/erp24/actions/motivation/TestFactAction.php index d4a07310..23e626b1 100644 --- a/erp24/actions/motivation/TestFactAction.php +++ b/erp24/actions/motivation/TestFactAction.php @@ -71,6 +71,8 @@ class TestFactAction extends Action MotivationService::calculateMonthSoftwareLicenseErpSystem($model->year, $model->month); MotivationService::calculateMonthCeoAndSaleOfWebsiteGoods($model->year, $model->month); + + MotivationService::initMonth1cFields($model->year, $model->month); } return $this->controller->render('test-fact', compact('model', 'years', 'months')); diff --git a/erp24/records/MotivationCostsItem.php b/erp24/records/MotivationCostsItem.php index 1f9de0be..eb2ae694 100644 --- a/erp24/records/MotivationCostsItem.php +++ b/erp24/records/MotivationCostsItem.php @@ -39,6 +39,15 @@ class MotivationCostsItem extends ActiveRecord } } + public static function writeOffsToMotivationItemArray() { + return [ + WriteOffsErp::WRITE_OFFS_TYPE_BRAK => self::ITEM_WRITE_OFF_OF_ILLIQUID_GOODS_SPOILAGE_EXPIRATION_OF_SHELF_LIFE, + WriteOffsErp::WRITE_OFFS_TYPE_DELIVERY_BRAK => self::ITEM_DEFECTIVE_DELIVERY, + WriteOffsErp::WRITE_OFFS_TYPE_DUE_TO_EQUIPMENT_FAILURE_BRAK => self::ITEM_DEFECT_DUE_TO_EQUIPMENT_FAILURE, + WriteOffsErp::WRITE_OFFS_TYPE_RESORTING_DOES_NOT_COUNT_TOWARDS_COST => self::ITEM_REGRADING, + ]; + } + /** * {@inheritdoc} */ diff --git a/erp24/scripts/tasks/task_32_motivation_fact.php b/erp24/scripts/tasks/task_32_motivation_fact.php index fb35da4d..3d641799 100644 --- a/erp24/scripts/tasks/task_32_motivation_fact.php +++ b/erp24/scripts/tasks/task_32_motivation_fact.php @@ -74,6 +74,8 @@ try { MotivationService::calculateMonthSoftwareLicenseErpSystem($year, $month); MotivationService::calculateMonthCeoAndSaleOfWebsiteGoods($year, $month); + + MotivationService::initMonth1cFields($year, $month); ////////////////////////////////////////////// diff --git a/erp24/services/MotivationService.php b/erp24/services/MotivationService.php index 7a951952..bb4e349d 100644 --- a/erp24/services/MotivationService.php +++ b/erp24/services/MotivationService.php @@ -693,13 +693,13 @@ class MotivationService // Установить значение в зависимости от типа switch ($value_type) { case 'float': - $motivationValue->value_float = $value; + $motivationValue->value_float = $value ?? 0; break; case 'int': - $motivationValue->value_int = $value; + $motivationValue->value_int = $value ?? 0; break; case 'string': - $motivationValue->value_string = $value; + $motivationValue->value_string = $value ?? ''; break; default: throw new \InvalidArgumentException("Неправильное значение типа: $value_type"); @@ -874,41 +874,38 @@ class MotivationService $storeIds = ArrayHelper::getColumn(CityStore::find()->where(['visible' => '1'])->all(), 'id'); foreach ($storeIds as $store_id) { if (isset($motivations[$store_id])) { - if (isset($salesOffline[$store_id])) { - $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOffline->code); - - $motivationValueOffline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, - 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOffline->code])->one(); - if (!$motivationValueOffline) { - $motivationValueOffline = new MotivationValue; - $motivationValueOffline->motivation_id = $motivations[$store_id]->id; - $motivationValueOffline->motivation_group_id = $motivationValueGroupFact->id; - $motivationValueOffline->value_id = $motivationCostsItemOffline->code; - $motivationValueOffline->value_type = $motivationCostsItemOffline->data_type; - } - $motivationValueOffline->value_float = $salesOffline[$store_id]['total'] + $correction; - $motivationValueOffline->save(); - if ($motivationValueOffline->getErrors()) { - throw new \Exception(Json::encode($motivationValueOffline->getErrors())); - } + $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOffline->code); + + $motivationValueOffline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, + 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOffline->code])->one(); + if (!$motivationValueOffline) { + $motivationValueOffline = new MotivationValue; + $motivationValueOffline->motivation_id = $motivations[$store_id]->id; + $motivationValueOffline->motivation_group_id = $motivationValueGroupFact->id; + $motivationValueOffline->value_id = $motivationCostsItemOffline->code; + $motivationValueOffline->value_type = $motivationCostsItemOffline->data_type; } - if (isset($salesOnline[$store_id])) { - $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOnline->code); - - $motivationValueOnline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, - 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOnline->code])->one(); - if (!$motivationValueOnline) { - $motivationValueOnline = new MotivationValue; - $motivationValueOnline->motivation_id = $motivations[$store_id]->id; - $motivationValueOnline->motivation_group_id = $motivationValueGroupFact->id; - $motivationValueOnline->value_id = $motivationCostsItemOnline->code; - $motivationValueOnline->value_type = $motivationCostsItemOnline->data_type; - } - $motivationValueOnline->value_float = $salesOnline[$store_id]['total'] + $correction; - $motivationValueOnline->save(); - if ($motivationValueOnline->getErrors()) { - throw new \Exception(Json::encode($motivationValueOnline->getErrors())); - } + $motivationValueOffline->value_float = ($salesOffline[$store_id]['total'] ?? 0) + $correction; + $motivationValueOffline->save(); + if ($motivationValueOffline->getErrors()) { + throw new \Exception(Json::encode($motivationValueOffline->getErrors())); + } + + $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOnline->code); + + $motivationValueOnline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, + 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOnline->code])->one(); + if (!$motivationValueOnline) { + $motivationValueOnline = new MotivationValue; + $motivationValueOnline->motivation_id = $motivations[$store_id]->id; + $motivationValueOnline->motivation_group_id = $motivationValueGroupFact->id; + $motivationValueOnline->value_id = $motivationCostsItemOnline->code; + $motivationValueOnline->value_type = $motivationCostsItemOnline->data_type; + } + $motivationValueOnline->value_float = ($salesOnline[$store_id]['total'] ?? 0) + $correction; + $motivationValueOnline->save(); + if ($motivationValueOnline->getErrors()) { + throw new \Exception(Json::encode($motivationValueOnline->getErrors())); } } } @@ -1001,41 +998,38 @@ class MotivationService $storeIds = ArrayHelper::getColumn(CityStore::find()->where(['visible' => '1'])->all(), 'id'); foreach ($storeIds as $store_id) { if (isset($motivations[$store_id])) { - if (isset($salesProduct[$store_id])) { - $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServices->code); - - $motivationValueService = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, - 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServices->code])->one(); - if (!$motivationValueService) { - $motivationValueService = new MotivationValue; - $motivationValueService->motivation_id = $motivations[$store_id]->id; - $motivationValueService->motivation_group_id = $motivationValueGroupFact->id; - $motivationValueService->value_id = $motivationCostsItemServices->code; - $motivationValueService->value_type = $motivationCostsItemServices->data_type; - } - $motivationValueService->value_float = $salesProduct[$store_id]['total'] + $correction; - $motivationValueService->save(); - if ($motivationValueService->getErrors()) { - throw new \Exception(Json::encode($motivationValueService->getErrors())); - } + $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServices->code); + + $motivationValueService = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, + 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServices->code])->one(); + if (!$motivationValueService) { + $motivationValueService = new MotivationValue; + $motivationValueService->motivation_id = $motivations[$store_id]->id; + $motivationValueService->motivation_group_id = $motivationValueGroupFact->id; + $motivationValueService->value_id = $motivationCostsItemServices->code; + $motivationValueService->value_type = $motivationCostsItemServices->data_type; } - if (isset($salesProductDelivery[$store_id])) { - $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServicesDelivery->code); - - $motivationValueServiceDelivery = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, - 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServicesDelivery->code])->one(); - if (!$motivationValueServiceDelivery) { - $motivationValueServiceDelivery = new MotivationValue; - $motivationValueServiceDelivery->motivation_id = $motivations[$store_id]->id; - $motivationValueServiceDelivery->motivation_group_id = $motivationValueGroupFact->id; - $motivationValueServiceDelivery->value_id = $motivationCostsItemServicesDelivery->code; - $motivationValueServiceDelivery->value_type = $motivationCostsItemServicesDelivery->data_type; - } - $motivationValueServiceDelivery->value_float = $salesProductDelivery[$store_id]['total'] + $correction; - $motivationValueServiceDelivery->save(); - if ($motivationValueServiceDelivery->getErrors()) { - throw new \Exception(Json::encode($motivationValueServiceDelivery->getErrors())); - } + $motivationValueService->value_float = ($salesProduct[$store_id]['total'] ?? 0) + $correction; + $motivationValueService->save(); + if ($motivationValueService->getErrors()) { + throw new \Exception(Json::encode($motivationValueService->getErrors())); + } + + $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServicesDelivery->code); + + $motivationValueServiceDelivery = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id, + 'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServicesDelivery->code])->one(); + if (!$motivationValueServiceDelivery) { + $motivationValueServiceDelivery = new MotivationValue; + $motivationValueServiceDelivery->motivation_id = $motivations[$store_id]->id; + $motivationValueServiceDelivery->motivation_group_id = $motivationValueGroupFact->id; + $motivationValueServiceDelivery->value_id = $motivationCostsItemServicesDelivery->code; + $motivationValueServiceDelivery->value_type = $motivationCostsItemServicesDelivery->data_type; + } + $motivationValueServiceDelivery->value_float = ($salesProductDelivery[$store_id]['total'] ?? 0) + $correction; + $motivationValueServiceDelivery->save(); + if ($motivationValueServiceDelivery->getErrors()) { + throw new \Exception(Json::encode($motivationValueServiceDelivery->getErrors())); } } } @@ -1059,11 +1053,8 @@ class MotivationService ->groupBy(['type']) ->indexBy('type') ->asArray()->all(); - foreach ($writeOffs as $key => $data) { - $motivationItemType = MotivationCostsItem::writeOffsToMotivationItemMap($key); - if (empty($motivationItemType)) { - continue; - } + foreach (MotivationCostsItem::writeOffsToMotivationItemArray() as $key => $motivationItemType) { + $data = $writeOffs[$key] ?? []; $motivationCostsItem = MotivationCostsItem::find()->where(['name' => $motivationItemType])->one(); /** @var $motivationCostsItem MotivationCostsItem */ @@ -1078,7 +1069,7 @@ class MotivationService $motivationValue->value_id = $motivationCostsItem->code; $motivationValue->value_type = $motivationCostsItem->data_type; } - $motivationValue->value_float = $data['total'] + $correction; + $motivationValue->value_float = ($data['total'] ?? 0) + $correction; $motivationValue->save(); if ($motivationValue->getErrors()) { throw new \Exception(Json::encode($motivationValue->getErrors())); @@ -1201,4 +1192,18 @@ class MotivationService 6, 33, "float", $correction); } } + + public static function initMonth1cFields($year, $month) { + $motivations = Motivation::find() + ->where(['year' => $year, 'month' => $month]) + ->all(); + + $valueIdIndices = [12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30]; + + foreach ($motivations as $motivation) { + foreach ($valueIdIndices as $index) { + self::saveOrUpdateMotivationValue($motivation->id, 6, $index, "float", 0); + } + } + } }