public function __construct(array $initParams)
 {
     if (!isset($initParams["PARENT_ID"])) {
         throw new ArgumentNullException('initParams["PARENT_ID"]');
     }
     $this->parentAutomatic = Manager::getService($initParams["PARENT_ID"]);
     if (!$this->parentAutomatic || !$this->parentAutomatic instanceof Automatic) {
         throw new SystemException("Can't initialize AutomaticProfile's id: " . $initParams["ID"] . " parent Automatic parent_id: " . $initParams["PARENT_ID"]);
     }
     $this->parentSid = $this->parentAutomatic->getSid();
     if (strlen($this->parentSid) <= 0) {
         throw new SystemException("Can't determine AutomaticProfile's SID. profile id: " . $initParams["ID"] . " parent Automatic id: " . $initParams["PARENT_ID"]);
     }
     $this->parentHandlerInitParams = $this->parentAutomatic->getHandlerInitParams($this->parentSid);
     if ($this->parentHandlerInitParams === false) {
         throw new SystemException("Can't get init services params of Automatic delivery service with sid: " . $this->parentSid);
     }
     parent::__construct($initParams);
     if (isset($this->config["MAIN"]["PROFILE_ID"])) {
         $this->profileId = $this->config["MAIN"]["PROFILE_ID"];
     }
     if (strlen($this->profileId) > 0 && !array_key_exists($this->profileId, $this->parentHandlerInitParams["PROFILES"])) {
         throw new SystemException("Profile \"" . $this->profileId . "\" is not part of Automatic delivery service with sid: " . $this->parentSid);
     }
     $this->inheritParams();
 }
 /**
  * @param Sale\Order $order
  * @param Sale\Basket $basket
  *
  * @return Sale\Result
  * @throws Main\ArgumentNullException
  * @throws Main\ArgumentTypeException
  * @throws Main\NotSupportedException
  */
 protected static function appendBasketToOrder(Sale\Order $order, Sale\Basket $basket)
 {
     $result = new Sale\Result();
     $orderBasketCollection = $order->getBasket();
     $shipmentCollection = $order->getShipmentCollection();
     $systemShipment = $shipmentCollection->getSystemShipment();
     $systemShipmentItemCollection = $systemShipment->getShipmentItemCollection();
     /** @var Sale\BasketItem $basketItem */
     foreach ($basket as $basketItem) {
         $basketProperty = array();
         if ($basketPropertyCollection = $basketItem->getPropertyCollection()) {
             $basketProperty = $basketPropertyCollection->getPropertyValues();
         }
         if ($orderBasketItem = $orderBasketCollection->getExistsItem($basketItem->getField('MODULE'), $basketItem->getField('PRODUCT_ID'), $basketProperty)) {
             $fields = $basketItem->getFieldValues();
             $orderBasketItem->setFields(static::clearFields($fields));
         } else {
             /** @var Sale\BasketItem $orderBasketItem */
             $orderBasketCollection->addItem($basketItem);
             $basketItem->setCollection($orderBasketCollection);
             $systemShipmentItemCollection->resetCollection($orderBasketCollection);
         }
     }
     /** @var Sale\BasketItem $basketItem */
     foreach ($basket as $basketItem) {
         if ($systemShipment->getDeliveryId() > 0) {
             /** @var Sale\Shipment $shipment */
             $shipment = OrderCompatibility::getShipmentByDeliveryId($shipmentCollection, $systemShipment->getDeliveryId());
             if (!$shipment) {
                 if ($service = Sale\Delivery\Services\Manager::getService($systemShipment->getDeliveryId())) {
                     /** @var Sale\Shipment $shipment */
                     $shipment = $shipmentCollection->createItem($service);
                 }
             }
             if ($shipment) {
                 $shipmentItemCollection = $shipment->getShipmentItemCollection();
                 if (!($shipmentItem = $shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode()))) {
                     $shipmentItem = $shipmentItemCollection->createItem($basketItem);
                 }
                 /** @var Sale\Result $r */
                 $r = $shipmentItem->setQuantity($basketItem->getQuantity());
                 if (!$r->isSuccess()) {
                     $result->addErrors($r->getErrors());
                 }
             }
         }
     }
     return $result;
 }
 /**
  * @param Sale\ShipmentCollection $shipmentCollection
  *
  * @return Sale\Shipment
  * @throws Main\ArgumentNullException
  */
 public static function createShipmentFromShipmentSystem(Sale\ShipmentCollection $shipmentCollection)
 {
     $shipment = null;
     /** @var Sale\Shipment $systemShipment */
     $systemShipment = $shipmentCollection->getSystemShipment();
     if ($systemShipment->getDeliveryId() > 0) {
         /** @var Sale\Shipment $shipment */
         $shipment = static::getShipmentByDeliveryId($shipmentCollection, $systemShipment->getDeliveryId());
         if (!$shipment) {
             if ($service = Sale\Delivery\Services\Manager::getService($systemShipment->getDeliveryId())) {
                 /** @var Sale\Shipment $shipment */
                 $shipment = $shipmentCollection->createItem($service);
                 $shipment->setField('DELIVERY_NAME', $service->getName());
             }
         }
     }
     return $shipment;
 }
Exemple #4
0
 /**
  * @return Delivery\Services\Base|DeliveryService
  * @throws Main\ArgumentNullException
  * @throws Main\SystemException
  */
 protected function loadDeliveryService()
 {
     if ($deliveryId = $this->getDeliveryId()) {
         $this->deliveryService = Delivery\Services\Manager::getService($deliveryId);
     }
     return $this->deliveryService;
 }
}
if (isset($fields["DELIVERY_ID"])) {
    $DELIVERY_ID = $fields["DELIVERY_ID"];
} elseif (isset($_REQUEST["DELIVERY_ID"])) {
    $DELIVERY_ID = $_REQUEST["DELIVERY_ID"];
} else {
    $DELIVERY_ID = 0;
}
$DELIVERY_ID = intval($DELIVERY_ID);
if ($DELIVERY_ID <= 0) {
    $strError .= Loc::getMessage("SALE_ESDE_ERROR_ID");
}
$currencyLang = "";
$deliveryService = null;
if ($DELIVERY_ID > 0) {
    $deliveryService = \Bitrix\Sale\Delivery\Services\Manager::getService($DELIVERY_ID);
    if ($deliveryService && \Bitrix\Main\Loader::includeModule('currency')) {
        $curFormat = \CCurrencyLang::getCurrencyFormat($deliveryService->getCurrency());
        $currencyLang = trim(str_replace("#", '', $curFormat["FORMAT_STRING"]));
    } else {
        $currencyLang = $deliveryService->getCurrency();
    }
}
if ($deliveryService && $ID <= 0 && isset($_GET["ES_CODE"]) && strlen($_GET["ES_CODE"]) > 0) {
    $embeddedList = $deliveryService->getEmbeddedExtraServicesList();
    if (isset($embeddedList[$_GET["ES_CODE"]])) {
        $fields = $embeddedList[$_GET["ES_CODE"]];
        $fields["CODE"] = $_GET["ES_CODE"];
        $fields["ID"] = strval(mktime());
    }
}
    $ID = 0;
    unset($fields["ID"]);
} elseif ($_REQUEST["action"] == "profile_delete") {
    $idProf = isset($_REQUEST["ID_PROF"]) ? intval($_REQUEST["ID_PROF"]) : 0;
    if ($idProf > 0) {
        $res = \Bitrix\Sale\Delivery\Services\Table::delete($idProf);
        if (!$res->isSuccess()) {
            $strError .= implode("<br>\n", $res->getErrorMessages()) . "<br>";
        }
    } else {
        $strError .= Loc::getMessage("SALE_DSE_PROFILE_DEL_ERROR", array("#ID#" => $idProf)) . "<br>";
    }
}
/* Ask parent service witch class_names for children are allowed */
if (intval($fields["PARENT_ID"]) > 0) {
    $parentService = Services\Manager::getService($fields["PARENT_ID"]);
    $classNamesList = $parentService->getChildrenClassNames();
} else {
    $classNamesList = Services\Manager::getHandlersClassNames();
    $classesToExclude = array('\\Bitrix\\Sale\\Delivery\\Services\\AutomaticProfile', '\\Bitrix\\Sale\\Delivery\\Services\\Group');
    foreach ($classesToExclude as $class) {
        $key = array_search($class, $classNamesList);
        if ($key !== false) {
            unset($classNamesList[$key]);
        }
    }
}
/* if we have only one class - let's fix it */
if (empty($fields["CLASS_NAME"]) && count($classNamesList) == 1) {
    $fields["CLASS_NAME"] = current($classNamesList);
}
Exemple #7
0
 /**
  * @param \Bitrix\Sale\Shipment $shipment
  * @return float|int
  * @throws Main\ArgumentNullException
  * @throws SystemException
  */
 public static function getDeliveryPrice(\Bitrix\Sale\Shipment $shipment)
 {
     $totalPrice = 0;
     if ($shipment->getDeliveryId()) {
         $service = Services\Manager::getService($shipment->getDeliveryId());
         if ($service) {
             $extraServices = $shipment->getExtraServices();
             $extraServicesManager = $service->getExtraServices();
             $extraServicesManager->setValues($extraServices);
             $result = $service->calculate($shipment);
             $totalPrice = $result->getPrice();
         }
     }
     return $totalPrice;
 }
Exemple #8
0
 protected function changeDeliveryServiceAction()
 {
     $result = array();
     $profiles = array();
     $index = $this->request['index'];
     $formData = isset($this->request["formData"]) ? $this->request["formData"] : array();
     $formData['ID'] = $formData['order_id'];
     $deliveryId = intval($formData['SHIPMENT'][$index]['DELIVERY_ID']);
     if ($deliveryId <= 0) {
         return;
     }
     $order = $this->getOrder($formData);
     /** @var  \Bitrix\Sale\Delivery\Services\Base $service */
     $service = Sale\Delivery\Services\Manager::getService($deliveryId);
     if ($service->canHasProfiles()) {
         $profiles = Admin\Blocks\OrderShipment::getDeliveryServiceProfiles($deliveryId);
         if (!isset($formData['SHIPMENT'][$index]['PROFILE'])) {
             reset($profiles);
             $initProfile = current($profiles);
             $formData['SHIPMENT'][$index]['PROFILE'] = $initProfile['ID'];
             $this->request["formData"]['SHIPMENT'][$index]['PROFILE'] = $initProfile['ID'];
         }
     }
     $res = Admin\Blocks\OrderShipment::updateData($order, $formData['SHIPMENT']);
     $data = $res->getData();
     $shipment = array_shift($data['SHIPMENT']);
     if ($service->canHasProfiles()) {
         $profiles = Admin\Blocks\OrderShipment::checkProfilesRestriction($profiles, $shipment);
         $result["PROFILES"] = Admin\Blocks\OrderShipment::getProfileEditControl($profiles, $index, $shipment->getDeliveryId());
         foreach ($profiles as $profile) {
             if ($formData['SHIPMENT'][$index]['PROFILE'] == $profile['ID'] && !$profile['RESTRICTED']) {
                 $result['DELIVERY_ERROR'] = Loc::getMessage('SALE_OA_ERROR_DELIVERY_SERVICE');
                 break;
             }
         }
     }
     $deliveryService = Admin\Blocks\OrderShipment::getDeliveryServiceList($shipment);
     foreach ($deliveryService as $i => $dlService) {
         if ($dlService['ID'] <= 0) {
             continue;
         }
         if (!Sale\Delivery\Services\Manager::checkServiceRestriction($dlService['ID'], $shipment, '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite')) {
             unset($deliveryService[$i]);
         }
     }
     $deliveryServiceTree = Admin\Blocks\OrderShipment::makeDeliveryServiceTree($deliveryService);
     $result['DELIVERY_SERVICE_LIST'] = Admin\Blocks\OrderShipment::getTemplate($deliveryServiceTree);
     foreach ($deliveryService as $delivery) {
         if ($deliveryId == $delivery['ID'] && $delivery['RESTRICTED']) {
             $result['DELIVERY_ERROR'] = Loc::getMessage('SALE_OA_ERROR_DELIVERY_SERVICE');
             break;
         }
     }
     $storeMap = Admin\Blocks\OrderShipment::getMap($shipment->getDeliveryId(), $index);
     if ($storeMap) {
         $result['MAP'] = $storeMap;
     }
     $extraServiceManager = new \Bitrix\Sale\Delivery\ExtraServices\Manager($deliveryId);
     $extraServiceManager->setOperationCurrency($order->getCurrency());
     $deliveryExtraService = $shipment->getExtraServices();
     if ($deliveryExtraService) {
         $extraServiceManager->setValues($deliveryExtraService);
     }
     $extraService = $extraServiceManager->getItems();
     if ($extraService) {
         $result["EXTRA_SERVICES"] = Admin\Blocks\OrderShipment::getExtraServiceEditControl($extraService, $index);
     }
     $deliveryPrice = Admin\Blocks\OrderShipment::getDeliveryPrice($shipment);
     if ($shipment->getField('CUSTOM_PRICE_DELIVERY') == 'Y') {
         $result["CUSTOM_PRICE"] = $deliveryPrice;
     } else {
         $this->request['formData']['SHIPMENT'][$index]['PRICE_DELIVERY'] = $deliveryPrice;
     }
     $this->addResultData("SHIPMENT_DATA", $result);
     $this->formDataChanged = true;
 }
Exemple #9
0
$arParams["LOCATION_TO"] = intval($arParams["LOCATION_TO"]);
$arParams["LOCATION_FROM"] = intval($arParams["LOCATION_FROM"]);
if ($arParams["LOCATION_FROM"] <= 0) {
    $arParams["LOCATION_FROM"] = COption::GetOptionString('sale', 'location');
}
$arParams["STEP"] = intval($arParams["STEP"]);
if ($arParams["STEP"] <= 0) {
    $arParams["AJAX_CALL"] = 'N';
}
if (is_set($arParams["START_VALUE"])) {
    $arParams["START_VALUE"] = doubleval($arParams["START_VALUE"]);
}
if ($arParams["AJAX_CALL"] == "Y") {
    $shipment = CSaleDelivery::convertOrderOldToNew(array("WEIGHT" => $arParams["ORDER_WEIGHT"], "PRICE" => $arParams["ORDER_PRICE"], "LOCATION_TO" => $arParams["LOCATION_TO"], "LOCATION_ZIP" => $arParams['LOCATION_ZIP'], "ITEMS" => $arParams["ITEMS"], "CURRENCY" => $arParams["CURRENCY"]));
    /** @var \Bitrix\Sale\Delivery\Services\Base  $deliveryObj */
    $deliveryObj = \Bitrix\Sale\Delivery\Services\Manager::getService($arParams["DELIVERY_ID"]);
    if (!$deliveryObj) {
        ShowError(GetMessage("SALE_DELIVERY_HANDLER_NOT_INSTALL"));
        return;
    }
    $calcResult = $deliveryObj->calculate($shipment);
    $result = array("VALUE" => $calcResult->getPrice(), "TRANSIT" => $calcResult->getPeriodDescription(), "RESULT" => $calcResult->isSuccess() ? "OK" : "ERROR");
    $result["TEXT"] = $calcResult->isSuccess() ? $calcResult->getDescription() : implode("<br>\n", $calcResult->getErrorMessages());
    if ($calcResult->isNextStep()) {
        $result["RESULT"] = "NEXT_STEP";
    }
    if ($calcResult->isSuccess() && strlen($calcResult->getDescription()) > 0) {
        $result["RESULT"] = "NOTE";
    }
    if (intval($calcResult->getPacksCount()) > 0) {
        $result["PACKS_COUNT"] = $calcResult->getPacksCount();
Exemple #10
0
 /**
  * @param $deliveryId
  * @return Base|null
  * @throws ArgumentNullException
  * @throws SystemException
  * @throws \Bitrix\Main\ArgumentException
  */
 public function getTrackingObjectByDeliveryId($deliveryId)
 {
     if (intval($deliveryId) <= 0) {
         throw new ArgumentNullException('deliveryId');
     }
     $result = null;
     $deliveryService = Services\Manager::getService($deliveryId);
     if (!$deliveryService) {
         return null;
     }
     $class = $deliveryService->getTrackingClass();
     if (strlen($class) > 0) {
         $result = $this->createTrackingObject($class, $deliveryService->getTrackingParams());
     }
     return $result;
 }