function executeAction($deliveryId, $actionId, $arOrder) { $result = array(); $arDId = CSaleDeliveryHelper::getDeliverySIDAndProfile($deliveryId); if (!defined('SALE_DH_INITIALIZED')) CSaleDeliveryHandler::Initialize(); $rsDeliveryHandler = CSaleDeliveryHandler::GetBySID($arDId["SID"]); if ($arHandler = $rsDeliveryHandler->Fetch()) { if (isset($arHandler["EXECUTEACTION"]) && is_callable($arHandler["EXECUTEACTION"])) { $result = call_user_func($arHandler["EXECUTEACTION"], $actionId, $arDId["PROFILE"], $arOrder, $arHandler["CONFIG"]["CONFIG"]); } } return $result; }
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; }
/** * UpdatePaySystem * * @param int $ID Pay system id. * @param array $arFields delivery idenificators. * * @return bool true if success or false otherwise. */ public static function UpdatePaySystem($ID, $arFields) { $ID = trim($ID); $arUpdateFields = array("PAYSYSTEM_ID" => $ID); if (strlen($ID) <= 0 || !is_array($arFields) || empty($arFields)) { return false; } if ($arFields[0] == "") { unset($arFields[0]); } self::Delete($arUpdateFields); $arRecords = array(); foreach ($arFields as $deliveryId) { $delivery = CSaleDeliveryHelper::getDeliverySIDAndProfile($deliveryId); if (!isset($delivery["SID"])) { continue; } $arUpdateFields["DELIVERY_ID"] = $delivery["SID"]; if (isset($delivery["PROFILE"])) { $arUpdateFields["DELIVERY_PROFILE_ID"] = $delivery["PROFILE"]; } else { $arUpdateFields["DELIVERY_PROFILE_ID"] = null; } self::Add($arUpdateFields); $arRecords[] = $arUpdateFields; } return true; }