public static function preparePreregistrationReqData($arOrder, $profileId, $arConfig) { $result = array(); $result["sender"] = array("inn" => $arConfig["INN"]["VALUE"], "city" => static::getFilialAndCity($arConfig["CITY_DELIVERY"]["VALUE"]), "title" => $arConfig["NAME"]["VALUE"], "phone" => $arConfig["PHONE"]["VALUE"]); $inn = ""; $city = ""; $title = ""; $phone = ""; $address = ""; if (isset($extraParams["location"])) { $city = $extraParams["location"]; } $dbOrderProps = \CSaleOrderPropsValue::GetOrderProps($arOrder["ID"]); while ($arOrderProps = $dbOrderProps->Fetch()) { if ($arOrderProps["CODE"] == "COMPANY" || $arOrderProps["CODE"] == "FIO") { $title = $arOrderProps["VALUE"]; } if ($arOrderProps["CODE"] == "INN") { $inn = $arOrderProps["VALUE"]; } if ($arOrderProps["CODE"] == "PHONE") { $phone = $arOrderProps["VALUE"]; } if ($arOrderProps["CODE"] == "LOCATION") { $location = $arOrderProps["VALUE"]; $locDelivery = Adapter::mapLocation($location); // todo: if more than one $city = static::getFilialAndCity(key($locDelivery)); } if ($arOrderProps["CODE"] == "ADDRESS") { $address = $arOrderProps["VALUE"]; } } $arPacks = \CSaleDeliveryHelper::getBoxesFromConfig($profileId, $arConfig); $arPackagesParams = \CSaleDeliveryHelper::getRequiredPacks($arOrder["ITEMS"], $arPacks, 0); $result["cargos"] = array(array("common" => array("positionsCount" => count($arPackagesParams), "decription" => GetMessage("SALE_DH_PECOM_DESCRIPTION_GOODS"), "orderNumber" => $arOrder["ACCOUNT_NUMBER"], "paymentForm" => $arConfig["PAYMENT_FORM"]["VALUE"], "accompanyingDocuments" => false), "receiver" => array("inn" => $inn, "city" => $city, "title" => $title, "phone" => $phone, "addressStock" => $address), "services" => array("transporting" => array("payer" => array("type" => 1)), "hardPacking" => array("enabled" => \CDeliveryPecom::isConfCheckedVal($arConfig, 'SERVICE_OTHER_RIGID_PACKING'), "payer" => array("type" => \CDeliveryPecom::getConfValue($arConfig, 'SERVICE_OTHER_RIGID_PAYER'))), "palletTransporting" => array("enabled" => !\CDeliveryPecom::isConfCheckedVal($arConfig, 'SERVICE_OTHER_RIGID_PACKING') && \CDeliveryPecom::isConfCheckedVal($arConfig, 'SERVICE_OTHER_PALLETE'), "payer" => array("type" => \CDeliveryPecom::getConfValue($arConfig, 'SERVICE_OTHER_PALLETE_PAYER'))), "insurance" => array("enabled" => \CDeliveryPecom::isConfCheckedVal($arConfig, 'SERVICE_OTHER_INSURANCE'), "payer" => array("type" => \CDeliveryPecom::getConfValue($arConfig, 'SERVICE_OTHER_INSURANCE_PAYER')), "cost" => intval($arOrder["PRICE"])), "sealing" => array("enabled" => \CDeliveryPecom::isConfCheckedVal($arConfig, 'SERVICE_OTHER_PLOMBIR_ENABLE'), "payer" => array("type" => \CDeliveryPecom::getConfValue($arConfig, 'SERVICE_OTHER_PLOMBIR_PAYER'))), "strapping" => array("enabled" => false), "documentsReturning" => array("enabled" => false), "delivery" => array("enabled" => \CDeliveryPecom::isConfCheckedVal($arConfig, 'SERVICE_DELIVERY_ENABLED'), "payer" => array("type" => \CDeliveryPecom::getConfValue($arConfig, 'SERVICE_OTHER_DELIVERY_PAYER')))))); return $result; }
protected function createCalcParams() { if (!isset($this->arOrder["WEIGHT"])) { throw new \Exception(GetMessage("SALE_DH_PECOM_EXCPT_WEIGHT")); } $locationTo = ""; $arLocation = Adapter::mapLocation($this->arOrder["LOCATION_TO"]); if (empty($arLocation)) { throw new \Exception(GetMessage("SALE_DH_PECOM_EXCPT_EMPTY_LOCATION")); } if (count($arLocation) > 1 && isset($this->arOrder["EXTRA_PARAMS"]["location"])) { $locationTo = $this->arOrder["EXTRA_PARAMS"]["location"]; } elseif (count($arLocation) > 1 && !isset($this->arOrder["EXTRA_PARAMS"]["location"])) { throw new \Exception(GetMessage("SALE_DH_PECOM_EXCPT_MANY_LOCATIONS")); } if (count($arLocation) == 1) { $locationTo = key($arLocation); } if (!isset($this->arOrder["ITEMS"]) || !is_array($this->arOrder["ITEMS"]) || empty($this->arOrder["ITEMS"])) { throw new \Exception(GetMessage("SALE_DH_PECOM_EXCPT_EMPTY_ITEMS")); } $measureCoeff = 1000; $itemsStr = ""; $loadingRange = true; $rigidPacking = \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_OTHER_RIGID_PACKING'); $arPacks = \CSaleDeliveryHelper::getBoxesFromConfig($this->profileId, $this->arConfig); $arPackagesParams = \CSaleDeliveryHelper::getRequiredPacks($this->arOrder["ITEMS"], $arPacks, 0); $this->packsCount = count($arPackagesParams); for ($i = $this->packsCount - 1; $i >= 0; $i--) { $item = $arPackagesParams[$i]; $width = round(floatval($item["DIMENSIONS"]["WIDTH"]) / $measureCoeff, 2); $lenght = round(floatval($item["DIMENSIONS"]["LENGTH"]) / $measureCoeff, 2); $height = round(floatval($item["DIMENSIONS"]["HEIGHT"]) / $measureCoeff, 2); $volume = floatval($item["VOLUME"] / pow($measureCoeff, 3)); if ($width > \CDeliveryPecom::$EXTRA_DIMENSIONS_SIZE || $lenght > \CDeliveryPecom::$EXTRA_DIMENSIONS_SIZE || $height > \CDeliveryPecom::$EXTRA_DIMENSIONS_SIZE || $item["WEIGHT"] > \CDeliveryPecom::$EXTRA_DEMENSIONS_WEIGHT) { $loadingRange = false; } $itemsStr .= 'places[' . $i . '][]=' . strval($width) . '&places[' . $i . '][]=' . strval($lenght) . '&places[' . $i . '][]=' . strval($height) . '&places[' . $i . '][]=' . strval($volume) . '&places[' . $i . '][]=' . strval($item["WEIGHT"] / 1000) . '&places[' . $i . '][]=' . ($loadingRange ? '1' : '0') . '&places[' . $i . '][]=' . ($rigidPacking && \CDeliveryPecom::getConfValue($this->arConfig, 'SERVICE_OTHER_RIGID_PAYER') == \CDeliveryPecom::$PAYER_BUYER ? '1' : '0'); } if (\CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_OTHER_PLOMBIR_ENABLE') && \CDeliveryPecom::getConfValue($this->arConfig, 'SERVICE_OTHER_PLOMBIR_PAYER') == \CDeliveryPecom::$PAYER_BUYER) { $plombir = strval(intval(\CDeliveryPecom::getConfValue($this->arConfig, 'SERVICE_OTHER_PLOMBIR_COUNT'))); } else { $plombir = "0"; } if (\CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_OTHER_INSURANCE') && \CDeliveryPecom::getConfValue($this->arConfig, 'SERVICE_OTHER_INSURANCE_PAYER') == \CDeliveryPecom::$PAYER_BUYER) { $insurance = strval($this->arOrder["PRICE"]); } else { $insurance = "0"; } $result = $itemsStr . '&take[town]=' . $this->arConfig["CITY_DELIVERY"]["VALUE"] . '&take[tent]=' . (\CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_TAKE_ENABLED') && \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_TAKE_TENT_ENABLED') ? '1' : '0') . '&take[gidro]=' . (\CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_TAKE_ENABLED') && \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_TAKE_HYDRO_ENABLED') ? '1' : '0') . '&take[speed]=0' . '&take[moscow]=0' . '&deliver[town]=' . $locationTo . '&deliver[tent]=' . (\CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_DELIVERY_ENABLED') && \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_DELIVERY_TENT_ENABLED') ? '1' : '0') . '&delideliver[gidro]=' . (\CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_DELIVERY_ENABLED') && \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_DELIVERY_HYDRO_ENABLED') ? '1' : '0') . '&deliver[speed]=0' . '&deliver[moscow]=0' . '&plombir=' . $plombir . '&strah=' . $insurance . '&ashan=0'; return $result; }
protected static function getCompatibleProfiles($sid, $compatibilityFunc, array $config, Shipment $shipment) { if (strlen($sid) <= 0) { throw new ArgumentNullException("sid"); } static $result = array(); if (isset($result[$sid])) { return $result[$sid]; } $oldOrder = self::convertNewOrderToOld($shipment); if (!empty($oldOrder["ITEMS"]) && is_array($oldOrder["ITEMS"])) { $maxDimensions = array(); foreach ($oldOrder["ITEMS"] as $item) { if (is_string($item["DIMENSIONS"])) { $item["DIMENSIONS"] = unserialize($item["DIMENSIONS"]); } if (!is_array($item["DIMENSIONS"]) || empty($item["DIMENSIONS"])) { continue; } $maxDimensions = \CSaleDeliveryHelper::getMaxDimensions(array($item["DIMENSIONS"]["WIDTH"], $item["DIMENSIONS"]["HEIGHT"], $item["DIMENSIONS"]["LENGTH"]), $maxDimensions); } if (!empty($maxDimensions)) { $oldOrder["MAX_DIMENSIONS"] = $maxDimensions; } } $result[$sid] = call_user_func($compatibilityFunc, $oldOrder, $config["CONFIG"]); return $result[$sid]; }
private static function getConfValue(&$arConfig, $key) { return CSaleDeliveryHelper::getConfValue($arConfig[$key]); }
public static function DoLoadDelivery($location, $locationZip, $weight, $price, $currency, $siteId = null, $arShoppingCart = array()) { $location = intval($location); if ($location <= 0) return null; if ($siteId == null) $siteId = SITE_ID; $arResult = array(); $arMaxDimensions = array(); foreach ($arShoppingCart as $arBasketItem) { if (!is_array($arBasketItem["DIMENSIONS"])) { $arDim = unserialize($arBasketItem["~DIMENSIONS"]); $arBasketItem["DIMENSIONS"] = $arDim; unset($arBasketItem["~DIMENSIONS"]); } else $arDim = $arBasketItem["DIMENSIONS"]; if (is_array($arDim)) { $arMaxDimensions = CSaleDeliveryHelper::getMaxDimensions( array($arDim["WIDTH"], $arDim["HEIGHT"], $arDim["LENGTH"]), $arMaxDimensions ); } } $arFilter = array( "COMPABILITY" => array( "WEIGHT" => $weight, "PRICE" => $price, "LOCATION_FROM" => COption::GetOptionString('sale', 'location', false, $siteId), "LOCATION_TO" => $location, "LOCATION_ZIP" => $locationZip, "MAX_DIMENSIONS" => $arMaxDimensions, "ITEMS" => $arShoppingCart ), "SITE_ID" => $siteId, ); $dbDeliveryServices = CSaleDeliveryHandler::GetList(array("SORT" => "ASC"), $arFilter); while ($arDeliveryService = $dbDeliveryServices->GetNext()) { if (!is_array($arDeliveryService) || !is_array($arDeliveryService["PROFILES"])) continue; foreach ($arDeliveryService["PROFILES"] as $profileId => $arDeliveryProfile) { if ($arDeliveryProfile["ACTIVE"] != "Y") continue; if (!array_key_exists($arDeliveryService["SID"], $arResult)) { $arResult[$arDeliveryService["SID"]] = array( "SID" => $arDeliveryService["SID"], "TITLE" => $arDeliveryService["NAME"], "DESCRIPTION" => $arDeliveryService["~DESCRIPTION"], "PROFILES" => array(), ); } $arResult[$arDeliveryService["SID"]]["PROFILES"][$profileId] = array( "ID" => $arDeliveryService["SID"].":".$profileId, "SID" => $profileId, "TITLE" => $arDeliveryProfile["TITLE"], "DESCRIPTION" => $arDeliveryProfile["~DESCRIPTION"], "FIELD_NAME" => "DELIVERY_ID", ); $arDeliveryPriceTmp = CSaleDeliveryHandler::CalculateFull( $arDeliveryService["SID"], $profileId, array( "PRICE" => $price, "WEIGHT" => $weight, "LOCATION_FROM" => COption::GetOptionString('sale', 'location', false, $siteId), "LOCATION_TO" => $location, "LOCATION_ZIP" => $locationZip, "ITEMS" => $arShoppingCart ), $currency ); if ($arDeliveryPriceTmp["RESULT"] != "ERROR") { $arResult[$arDeliveryService["SID"]]["PROFILES"][$profileId]["DELIVERY_PRICE"] = roundEx($arDeliveryPriceTmp["VALUE"], SALE_VALUE_PRECISION); $arResult[$arDeliveryService["SID"]]["PROFILES"][$profileId]["CURRENCY"] = $currency; } } } $dbDelivery = CSaleDelivery::GetList( array("SORT" => "ASC", "NAME" => "ASC"), array( "LID" => $siteId, "+<=WEIGHT_FROM" => $weight, "+>=WEIGHT_TO" => $weight, "+<=ORDER_PRICE_FROM" => $price, "+>=ORDER_PRICE_TO" => $price, "ACTIVE" => "Y", "LOCATION" => $location, ) ); while ($arDelivery = $dbDelivery->GetNext()) { $arDeliveryDescription = CSaleDelivery::GetByID($arDelivery["ID"]); $arDelivery["DESCRIPTION"] = $arDeliveryDescription["DESCRIPTION"]; $arDelivery["FIELD_NAME"] = "DELIVERY_ID"; if (intval($arDelivery["PERIOD_FROM"]) > 0 || intval($arDelivery["PERIOD_TO"]) > 0) { $arDelivery["PERIOD_TEXT"] = GetMessage("SALE_DELIV_PERIOD"); if (intval($arDelivery["PERIOD_FROM"]) > 0) $arDelivery["PERIOD_TEXT"] .= " ".GetMessage("SOA_FROM")." ".intval($arDelivery["PERIOD_FROM"]); if (intval($arDelivery["PERIOD_TO"]) > 0) $arDelivery["PERIOD_TEXT"] .= " ".GetMessage("SOA_TO")." ".intval($arDelivery["PERIOD_TO"]); if ($arDelivery["PERIOD_TYPE"] == "H") $arDelivery["PERIOD_TEXT"] .= " ".GetMessage("SOA_HOUR")." "; elseif ($arDelivery["PERIOD_TYPE"] == "M") $arDelivery["PERIOD_TEXT"] .= " ".GetMessage("SOA_MONTH")." "; else $arDelivery["PERIOD_TEXT"] .= " ".GetMessage("SOA_DAY")." "; } $arResult[] = $arDelivery; } return $arResult; }
"LOCATION_TO" => $locationData, "LOCATION_ZIP" => $locationZip, "ITEMS" => $arBasketItems ); $depList = \Bitrix\Sale\Delivery\OrderDeliveryTable::getList(array( 'filter'=>array('=ORDER_ID' => $ID), )); if($dep = $depList->fetch()) { $arDeliveryOrder["EXTRA_PARAMS"] = unserialize($dep["PARAMS"]); } $arPacks = CSaleDeliveryHelper::getBoxesFromConfig($profileId, $arDeliveryData["CONFIG"]["CONFIG"]); $arDeliveryResult = CSaleDeliveryHandler::CalculateFull($arDeliveryData["SID"], $profileId, $arDeliveryOrder, $arOrder["CURRENCY"], $LID); $delDiscountDiff = roundEx($arDeliveryResult["VALUE"] - $arOrder["PRICE_DELIVERY"], SALE_VALUE_PRECISION); $tabControl->BeginCustomField("ORDER_DELIVERY_ADDITIONAL_INFO", ""); if (!empty($arPacks)): $arBox = array_shift(array_values($arPacks)); ?> <tr> <td width="40%"></td> <td width="60%"> <a class="dashed-link" href="javascript:void(0);" onclick="fToggleDeliveryInfo();"><?php echo GetMessage("SOD_SHOW_DELIVERY_ADDITIONAL_INFO"); ?> </a></td>
public static function getAdminHtml($fieldId, $arField, $fieldName, $formName) { $arField["VALUE"] = CSaleDeliveryHelper::getConfValue($arField); $resultHtml = ''; $name = htmlspecialcharsbx($fieldName . (strlen($fieldId) > 0 ? '[' . $fieldId . ']' : '')); if (isset($arField['PRE_TEXT'])) { $resultHtml = $arField['PRE_TEXT'] . ' '; } if (isset($arField['BLOCK_HIDEABLE'])) { $resultHtml .= '<a href="javascript:void(0);" style="border-bottom: 1px dashed; text-decoration: none;">'; } switch ($arField["TYPE"]) { case "TEXT_RO": //read only text $resultHtml .= htmlspecialcharsbx($arField["VALUE"]); break; case "CHECKBOX": $resultHtml .= '<input ' . 'type="checkbox" ' . 'name="' . $name . '" ' . 'value="Y" ' . ($arField["VALUE"] == "Y" ? "checked=\"checked\"" : ""); if (isset($arField['HIDE_BY_NAMES']) && is_array($arField['HIDE_BY_NAMES'])) { $resultHtml .= 'onclick="hideFormElementsByNames(this, ' . CUtil::PhpToJSObject($arField['HIDE_BY_NAMES']) . ');"'; } $resultHtml .= '/>'; if (isset($arField['HIDE_BY_NAMES']) && is_array($arField['HIDE_BY_NAMES'])) { $resultHtml .= ' <script language="JavaScript"> BX.ready( function(){ var cbObj = document.forms["' . $formName . '"]["' . $name . '"]; if(cbObj) hideFormElementsByNames(cbObj, ' . CUtil::PhpToJSObject($arField['HIDE_BY_NAMES']) . '); } ); </script>'; } break; case "RADIO": foreach ($arField["VALUES"] as $value => $title) { $resultHtml .= '<input type="radio" id="hc_' . htmlspecialcharsbx($fieldId) . '_' . htmlspecialcharsEx($value) . '"' . 'name="' . $name . '" ' . 'value="' . htmlspecialcharsEx($value) . '"' . ($value == $arField["VALUE"] ? " checked=\"checked\"" : "") . ' />' . '<label for="hc_' . htmlspecialcharsbx($fieldId) . '_' . htmlspecialcharsEx($value) . '">' . htmlspecialcharsEx($title) . '</label><br />'; } break; case "PASSWORD": $resultHtml .= '<input ' . 'type="password" ' . 'name="' . $name . '" ' . 'value="' . htmlspecialcharsbx($arField["VALUE"]) . '" />'; break; case "DROPDOWN": $resultHtml .= '<select name="' . $name . '" '; if (isset($arField['ONCHANGE'])) { $resultHtml .= ' onchange = "' . $arField['ONCHANGE'] . '"'; } $resultHtml .= '>'; foreach ($arField["VALUES"] as $value => $title) { $resultHtml .= '<option ' . 'value="' . htmlspecialcharsEx($value) . '"' . ($value == $arField["VALUE"] ? " selected=\"selected\"" : "") . '>' . htmlspecialcharsEx($title) . '</option>'; } $resultHtml .= '</select>'; break; case "MULTISELECT": $resultHtml .= '<select name="' . $name . '" multiple="multiple">'; foreach ($arField["VALUES"] as $value => $title) { $resultHtml .= '<option ' . 'value="' . htmlspecialcharsEx($value) . '"' . (in_array($value, $arField["VALUE"]) ? " selected=\"selected\"" : "") . '>' . htmlspecialcharsEx($title) . '</option>'; } $resultHtml .= '</select>'; break; case "SECTION": case "TEXT_CENTERED": case "MULTI_CONTROL_STRING": $resultHtml .= htmlspecialcharsbx($arField["TITLE"]); break; case "CUSTOM": $resultHtml .= $arField["VALUE"]; break; default: $resultHtml .= '<input type="text"' . 'name="' . $name . '" ' . 'value="' . htmlspecialcharsbx($arField["VALUE"]) . '" ' . (isset($arField["SIZE"]) ? 'size="' . $arField["SIZE"] . '"' : '') . '/>'; } if (isset($arField['BLOCK_HIDEABLE'])) { $resultHtml .= '</a>'; } if (isset($arField['POST_TEXT'])) { $resultHtml .= ' ' . $arField['POST_TEXT']; } return $resultHtml; }
$arResult["MAX_DIMENSIONS"] = $arResult["ITEMS_DIMENSIONS"] = array(); CSaleBasket::UpdateBasketPrices(CSaleBasket::GetBasketUserID(), SITE_ID); /* Check Values Begin */ $arSelFields = array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "DIMENSIONS", "TYPE", "SET_PARENT_ID", "DETAIL_PAGE_URL"); $dbBasketItems = CSaleBasket::GetList(array("ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, $arSelFields); while ($arItem = $dbBasketItems->GetNext()) { if ($arItem["DELAY"] == "N" && $arItem["CAN_BUY"] == "Y") { $arItem["PRICE"] = roundEx($arItem["PRICE"], SALE_VALUE_PRECISION); $arItem["QUANTITY"] = DoubleVal($arItem["QUANTITY"]); $arItem["WEIGHT"] = DoubleVal($arItem["WEIGHT"]); $arItem["VAT_RATE"] = DoubleVal($arItem["VAT_RATE"]); $arDim = unserialize($arItem["~DIMENSIONS"]); if (is_array($arDim)) { $arItem["DIMENSIONS"] = $arDim; unset($arItem["~DIMENSIONS"]); $arResult["MAX_DIMENSIONS"] = CSaleDeliveryHelper::getMaxDimensions(array($arDim["WIDTH"], $arDim["HEIGHT"], $arDim["LENGTH"]), $arResult["MAX_DIMENSIONS"]); $arResult["ITEMS_DIMENSIONS"][] = $arDim; } if ($arItem["VAT_RATE"] > 0 && !CSaleBasketHelper::isSetItem($arItem)) { $arResult["bUsingVat"] = "Y"; if ($arItem["VAT_RATE"] > $arResult["VAT_RATE"]) { $arResult["VAT_RATE"] = $arItem["VAT_RATE"]; } //$arItem["VAT_VALUE"] = roundEx((($arItem["PRICE"] / ($arItem["VAT_RATE"] +1)) * $arItem["VAT_RATE"]), SALE_VALUE_PRECISION); $arItem["VAT_VALUE"] = $arItem["PRICE"] / ($arItem["VAT_RATE"] + 1) * $arItem["VAT_RATE"]; $arResult["VAT_SUM"] += roundEx($arItem["VAT_VALUE"] * $arItem["QUANTITY"], SALE_VALUE_PRECISION); } $arItem["PRICE_FORMATED"] = SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); $arItem["WEIGHT_FORMATED"] = roundEx(DoubleVal($arItem["WEIGHT"] / $arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION) . " " . $arResult["WEIGHT_UNIT"]; if ($arItem["DISCOUNT_PRICE"] > 0) { $arItem["DISCOUNT_PRICE_PERCENT"] = $arItem["DISCOUNT_PRICE"] * 100 / ($arItem["DISCOUNT_PRICE"] + $arItem["PRICE"]);
{ $lAdmin->AddGroupError(GetMessage("SOA_ERROR_STATUS_ALREADY", Array("#ID#" => $ID, "#STATUS#" => $arStatus["NAME"])), $ID); } } else { $lAdmin->AddGroupError(GetMessage("SOA_PERMS_STATUS_GROUP", Array("#ID#" => $ID, "#STATUS#" => $arStatus["NAME"])), $ID); } } } elseif(substr($_REQUEST['action'], 0, strlen("delivery_action_")) == "delivery_action_") { $actionId = substr($_REQUEST['action'], strlen("delivery_action_")); if(strlen($actionId) > 0) { $arResult = CSaleDeliveryHelper::execHandlerAction($ID, $actionId); if($arResult["RESULT"] == "OK") { $lAdmin->AddActionSuccessMessage(GetMessage("SALE_F_DELIVERY_REQUEST_ORDERN")." ".$ID.". ".GetMessage("SALE_F_DELIVERY_REQUEST_SUCCESS").".", $ID); } else { $msg = GetMessage("SALE_F_DELIVERY_REQUEST_ORDERN")." ".$ID.". ".GetMessage("SALE_F_DELIVERY_REQUEST_ERROR")."."; if(isset($arResult["TEXT"])) $msg .= " ( ".$arResult["TEXT"]." ) "; $lAdmin->AddGroupError($msg, $ID); } }
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; }
function CheckFields($arData) { global $APPLICATION; $numberFieldsProf = array("RESTRICTIONS_WEIGHT", "RESTRICTIONS_SUM", "TAX_RATE", "RESTRICTIONS_MAX_SIZE", "RESTRICTIONS_DIMENSIONS_SUM"); if(isset($arData["PROFILES"]) && is_array($arData["PROFILES"])) { foreach ($arData["PROFILES"] as $profileId => $arProfile) { foreach ($numberFieldsProf as $fName) { if (isset($arProfile[$fName])) { if(!is_array($arProfile[$fName])) $arProfile[$fName] = array($arProfile[$fName]); foreach ($arProfile[$fName] as $fValue) { if($result = CSaleDeliveryHelper::getFormatError($fValue, 'NUMBER', GetMessage("SALE_DH_CF_ERROR_P_".$fName))) { $APPLICATION->ThrowException($result, $fName); return false; } } } } } } if(isset($arData['TAX_RATE']) && $result = CSaleDeliveryHelper::getFormatError($arData['TAX_RATE'], 'NUMBER', GetMessage('SALE_DH_CF_ERROR_TAX_RATE'))) { $APPLICATION->ThrowException($result, 'TAX_RATE'); return false; } if(isset($arData['SORT']) && $result = CSaleDeliveryHelper::getFormatError($arData['SORT'], 'NUMBER', GetMessage('SALE_DH_CF_ERROR_SORT'))) { $APPLICATION->ThrowException($result, 'SORT'); return false; } return true; }
/** * 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; }
private function basket_items() { CModule::IncludeModule("iblock"); CModule::IncludeModule("sale"); CSaleBasket::UpdateBasketPrices(CSaleBasket::GetBasketUserID(), SITE_ID); /* Check Values Begin */ $arSelFields = array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "NAME", "CURRENCY", "CATALOG_XML_ID", "VAT_RATE", "NOTES", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "DIMENSIONS", "TYPE", "SET_PARENT_ID", "DETAIL_PAGE_URL" ); $dbBasketItems = CSaleBasket::GetList( array("ID" => "ASC"), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, $arSelFields ); while ($arItem = $dbBasketItems->GetNext()) { if ($arItem["DELAY"] == "N" && $arItem["CAN_BUY"] == "Y") { $arItem["PRICE"] = roundEx($arItem["PRICE"], SALE_VALUE_PRECISION); $arItem["QUANTITY"] = DoubleVal($arItem["QUANTITY"]); $arItem["WEIGHT"] = DoubleVal($arItem["WEIGHT"]); $arItem["VAT_RATE"] = DoubleVal($arItem["VAT_RATE"]); $arDim = unserialize($arItem["~DIMENSIONS"]); if(is_array($arDim)) { $arItem["DIMENSIONS"] = $arDim; unset($arItem["~DIMENSIONS"]); $arResult["MAX_DIMENSIONS"] = CSaleDeliveryHelper::getMaxDimensions( array( $arDim["WIDTH"], $arDim["HEIGHT"], $arDim["LENGTH"] ), $arResult["MAX_DIMENSIONS"]); $arResult["ITEMS_DIMENSIONS"][] = $arDim; } if($arItem["VAT_RATE"] > 0 && !CSaleBasketHelper::isSetItem($arItem)) { $arResult["bUsingVat"] = "Y"; if($arItem["VAT_RATE"] > $arResult["VAT_RATE"]) $arResult["VAT_RATE"] = $arItem["VAT_RATE"]; //$arItem["VAT_VALUE"] = roundEx((($arItem["PRICE"] / ($arItem["VAT_RATE"] +1)) * $arItem["VAT_RATE"]), SALE_VALUE_PRECISION); $arItem["VAT_VALUE"] = (($arItem["PRICE"] / ($arItem["VAT_RATE"] +1)) * $arItem["VAT_RATE"]); $arResult["VAT_SUM"] += roundEx($arItem["VAT_VALUE"] * $arItem["QUANTITY"], SALE_VALUE_PRECISION); } $arItem["PRICE_FORMATED"] = SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); $arItem["WEIGHT_FORMATED"] = roundEx(DoubleVal($arItem["WEIGHT"]/$arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"]; if($arItem["DISCOUNT_PRICE"] > 0) { $arItem["DISCOUNT_PRICE_PERCENT"] = $arItem["DISCOUNT_PRICE"]*100 / ($arItem["DISCOUNT_PRICE"] + $arItem["PRICE"]); $arItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arItem["DISCOUNT_PRICE_PERCENT"], 0)."%"; } $arItem["PROPS"] = Array(); $dbProp = CSaleBasket::GetPropsList(Array("SORT" => "ASC", "ID" => "ASC"), Array("BASKET_ID" => $arItem["ID"], "!CODE" => array("CATALOG.XML_ID", "PRODUCT.XML_ID"))); while($arProp = $dbProp -> GetNext()) { if (array_key_exists('BASKET_ID', $arProp)) { unset($arProp['BASKET_ID']); } if (array_key_exists('~BASKET_ID', $arProp)) { unset($arProp['~BASKET_ID']); } $arProp = array_filter($arProp, array("CSaleBasketHelper", "filterFields")); $arItem["PROPS"][] = $arProp; } if (!CSaleBasketHelper::isSetItem($arItem)) { $DISCOUNT_PRICE_ALL += $arItem["DISCOUNT_PRICE"] * $arItem["QUANTITY"]; $arItem["DISCOUNT_PRICE"] = roundEx($arItem["DISCOUNT_PRICE"], SALE_VALUE_PRECISION); $arResult["ORDER_PRICE"] += $arItem["PRICE"] * $arItem["QUANTITY"]; } $arResult["ORDER_WEIGHT"] += $arItem["WEIGHT"] * $arItem["QUANTITY"]; if (CSaleBasketHelper::isSetItem($arItem)) $arSetParentWeight[$arItem["SET_PARENT_ID"]] += $arItem["WEIGHT"] * $arItem['QUANTITY']; //get product section $db_groups = CIBlockElement::GetElementGroups($arItem["PRODUCT_ID"], true); while($ar_group = $db_groups->Fetch()) $arItem["IBLOCK_SECTION_ID"][] = $ar_group["ID"]; if(!$arItem["IBLOCK_SECTION_ID"]){ $arItem["PARENT"] = CCatalogSku::GetProductInfo( $arItem["PRODUCT_ID"] ); $db_groups = CIBlockElement::GetElementGroups($arItem["PARENT"]["ID"], true); while($ar_group = $db_groups->Fetch()) $arItem["IBLOCK_SECTION_ID"][] = $ar_group["ID"]; } if($arItem["IBLOCK_SECTION_ID"]){ foreach($arItem["IBLOCK_SECTION_ID"] as $section){ $res_1 = CIBlockSection::GetByID($section); if($ar_res_1 = $res_1->GetNext()){ $arItem["SECTION_NAME"][] = $ar_res_1["NAME"]; } } } $arResult["BASKET_ITEMS"][] = $arItem; } $arResult["PRICE_WITHOUT_DISCOUNT"] = SaleFormatCurrency($arResult["ORDER_PRICE"] + $DISCOUNT_PRICE_ALL, $allCurrency); // count weight for set parent products foreach ($arResult["BASKET_ITEMS"] as &$arItem) { if (CSaleBasketHelper::isSetParent($arItem)) { $arItem["WEIGHT"] = $arSetParentWeight[$arItem["ID"]] / $arItem["QUANTITY"]; $arItem["WEIGHT_FORMATED"] = roundEx(doubleval($arItem["WEIGHT"] / $arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"]; } } $arResult["ORDER_WEIGHT_FORMATED"] = roundEx(DoubleVal($arResult["ORDER_WEIGHT"]/$arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"]; $arResult["ORDER_PRICE_FORMATED"] = SaleFormatCurrency($arResult["ORDER_PRICE"], $arResult["BASE_LANG_CURRENCY"]); $arResult["VAT_SUM_FORMATED"] = SaleFormatCurrency($arResult["VAT_SUM"], $arResult["BASE_LANG_CURRENCY"]); $arElementId[] = $arItem["PRODUCT_ID"]; if ($bUseCatalog) { $arParent = CCatalogSku::GetProductInfo($arItem["PRODUCT_ID"]); if ($arParent) { $arElementId[] = $arParent["ID"]; $arSku2Parent[$arItem["PRODUCT_ID"]] = $arParent["ID"]; } } unset($arItem); } return $arResult["BASKET_ITEMS"]; }
$arHandlersData["ALL"]["LID"] = false; } foreach ($arHandlersData as $siteID => $arHandler) { foreach ($arHandlersData[$siteID]["PROFILES"] as $profile_id => $arProfile) { if (is_array($arProfile["RESTRICTIONS_SUM"])) { $currency = array_shift($arProfile["RESTRICTIONS_SUM"]); foreach ($arProfile["RESTRICTIONS_SUM"] as $key => $value) { $arProfile["RESTRICTIONS_SUM"][$key] = CCurrencyRates::ConvertCurrency($value, $currency, $arHandlersData[$siteID]["BASE_CURRENCY"]); } $arHandlersData[$siteID]["PROFILES"][$profile_id] = $arProfile; } } $arConfig = array(); foreach ($arHandlersData[$siteID]["CONFIG"]["CONFIG"] as $configID => $arHandlerConfig) { if (isset($arHandlerConfig["CHECK_FORMAT"])) { $formatError = CSaleDeliveryHelper::getFormatError($arHandlerConfig["VALUE"], $arHandlerConfig["CHECK_FORMAT"], $arHandlerConfig["TITLE"]); if (!is_null($formatError)) { $errorsList .= $formatError; } } $arConfig[$configID] = $arHandlerConfig["VALUE"]; } $arHandlersData[$siteID]["CONFIG"] = $arConfig; //$arHandlersData[$siteID]["HANDLER"] = $handlerPath; } //add logotip $arPicture = array(); if (array_key_exists("LOGOTIP", $_FILES) && $_FILES["LOGOTIP"]["error"] == 0) { $arPicture = $_FILES["LOGOTIP"]; } if ($_POST["LOGOTIP_del"] == "Y") {
public function isProfileCompatible($profileId, $config, Shipment $shipment) { $compabilityFunc = $this->getCompability(); if ($compabilityFunc === false) { return true; } $oldOrder = self::convertNewOrderToOld($shipment); if (!empty($oldOrder["ITEMS"]) && is_array($oldOrder["ITEMS"])) { $maxDimensions = array(); foreach ($oldOrder["ITEMS"] as $item) { if (is_string($item["DIMENSIONS"])) { $item["DIMENSIONS"] = unserialize($item["DIMENSIONS"]); } if (!is_array($item["DIMENSIONS"]) || empty($item["DIMENSIONS"])) { continue; } $maxDimensions = \CSaleDeliveryHelper::getMaxDimensions(array($item["DIMENSIONS"]["WIDTH"], $item["DIMENSIONS"]["HEIGHT"], $item["DIMENSIONS"]["LENGTH"]), $maxDimensions); } if (!empty($maxDimensions)) { $oldOrder["MAX_DIMENSIONS"] = $maxDimensions; } } $res = call_user_func($compabilityFunc, $oldOrder, $config["CONFIG"]); return is_array($res) && in_array($profileId, $res); }