public static function execOldEventWithNewParams(Bitrix\Main\Event $params) { /** @var \Bitrix\Sale\Shipment $shipment*/ if (!($shipment = $params->getParameter("SHIPMENT"))) { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, null, 'sale'); } /** @var \Bitrix\Sale\Delivery\Services\Base $deliverySrv */ if (!($deliverySrv = $shipment->getDelivery())) { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, null, 'sale'); } if (get_class($deliverySrv) != 'Bitrix\\Sale\\Delivery\\Services\\AutomaticProfile') { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, null, 'sale'); } if (!($code = $deliverySrv->getCode())) { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, null, 'sale'); } $sidAndProfile = \CSaleDeliveryHelper::getDeliverySIDAndProfile($code); /** @var \Bitrix\Sale\Delivery\CalculationResult $result*/ if (!($result = $params->getParameter("RESULT"))) { throw new \Bitrix\Main\ArgumentNullException("params[RESULT]"); } if (!($collection = $shipment->getCollection())) { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, null, 'sale'); } /** @var \Bitrix\Sale\Order $order */ if (!($order = $collection->getOrder())) { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, null, 'sale'); } $oldOrder = \Bitrix\Sale\Compatible\OrderCompatibility::convertOrderToArray($order); $oldResult = array("VALUE" => $result->getPrice(), "TRANSIT" => $result->getPeriodDescription(), "TEXT" => $result->isSuccess() ? $result->getDescription() : implode("<br>\n", $result->getErrorMessages()), "RESULT" => $result->isSuccess() ? "OK" : "ERROR"); if ($result->isNextStep()) { $oldResult["RESULT"] = "NEXT_STEP"; } if ($result->isSuccess() && strlen($result->getDescription()) > 0) { $oldResult["RESULT"] = "NOTE"; } if (intval($result->getPacksCount()) > 0) { $oldResult["PACKS_COUNT"] = $result->getPacksCount(); } if ($result->isNextStep() && strlen($result->getTmpData()) > 0) { $oldResult["TEMP"] = CUtil::JSEscape($result->getTmpData()); } $oldResult = self::__executeCalculateEvents($sidAndProfile["SID"], $sidAndProfile["PROFILE"], $oldOrder, $oldResult); $result->setDeliveryPrice($oldResult["VALUE"]); if ($oldResult["RESULT"] == "ERROR") { $result->addError(new \Bitrix\Main\Entity\EntityError($oldResult["TEXT"])); } elseif ($oldResult["RESULT"] == "NEXT_STEP") { $result->setAsNextStep(); } if (isset($oldResult["TRANSIT"])) { $result->setPeriodDescription($oldResult["TRANSIT"]); } if (isset($oldResult["TEXT"])) { $result->setDescription($oldResult["TEXT"]); } if (isset($oldResult["PACKS_COUNT"])) { $result->setPacksCount($oldResult["PACKS_COUNT"]); } if (isset($oldResult["TEMP"])) { $result->setTmpData($oldResult["TEMP"]); } return $result; }