Example #1
0
 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;
 }
Example #2
0
 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;
 }
Example #3
0
 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];
 }
Example #4
0
 private static function getConfValue(&$arConfig, $key)
 {
     return CSaleDeliveryHelper::getConfValue($arConfig[$key]);
 }
Example #5
0
	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;
	}
Example #6
0
						"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>
Example #7
0
    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;
    }
Example #8
0
 $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"]);
Example #9
0
								{
									$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);
							}
						}
Example #10
0
 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;
 }
Example #11
0
	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;
 }
Example #13
0
    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") {
Example #15
0
 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);
 }