Ejemplo n.º 1
0
 /**
  * @param Shipment $shipment
  * @return Result
  * @throws NotSupportedException
  */
 public static function deliverShipment(Shipment $shipment)
 {
     global $APPLICATION;
     $result = new Result();
     $needDeliver = $shipment->needDeliver();
     if ($needDeliver === null || $needDeliver === false && $shipment->getId() <= 0) {
         return $result;
     }
     $resultList = array();
     $shipmentItemCollection = $shipment->getShipmentItemCollection();
     $basketList = static::getBasketFromShipmentItemCollection($shipmentItemCollection);
     $basketProviderMap = static::createProviderBasketMap($basketList, array('ORDER_ID', 'USER_ID', 'QUANTITY', 'PAID'));
     $basketProviderList = static::redistributeToProviders($basketProviderMap);
     if (!empty($basketProviderList)) {
         foreach ($basketProviderList as $provider => $providerBasketItemList) {
             if ($provider instanceof Provider) {
                 throw new NotSupportedException('provider not supported');
             } elseif ($provider && array_key_exists("IBXSaleProductProvider", class_implements($provider))) {
                 foreach ($providerBasketItemList as $providerBasketItem) {
                     if ($providerBasketItem['BASKET_ITEM']->isBundleParent()) {
                         continue;
                     }
                     if (!$providerBasketItem['BASKET_ITEM']->isEmptyItem()) {
                         $data = array("PRODUCT_ID" => $providerBasketItem["PRODUCT_ID"], "USER_ID" => $providerBasketItem["USER_ID"], "PAID" => $providerBasketItem["PAID"], "ORDER_ID" => $providerBasketItem["ORDER_ID"], "BASKET_ID" => $providerBasketItem['BASKET_ID']);
                         $APPLICATION->ResetException();
                         $resultProductData = $provider::DeliverProduct($data);
                         if ($ex = $APPLICATION->GetException()) {
                             $result->addError(new ResultError($ex->GetString(), $ex->GetID()));
                         }
                         if (!empty($resultProductData) && is_array($resultProductData)) {
                             $resultProductData['ORDER_ID'] = $providerBasketItem['ORDER_ID'];
                         }
                     } else {
                         $resultProductData = true;
                     }
                     $resultList[$providerBasketItem['BASKET_CODE']] = $resultProductData;
                 }
             } else {
                 foreach ($providerBasketItemList as $providerBasketItem) {
                     $resultProductData = \CSaleBasket::ExecuteCallbackFunction($providerBasketItem['CALLBACK_FUNC'], $providerBasketItem['MODULE'], $providerBasketItem['PRODUCT_ID'], $providerBasketItem['USER_ID'], $providerBasketItem["PAID"], $providerBasketItem['ORDER_ID'], $providerBasketItem["QUANTITY"]);
                     $basketCode = $providerBasketItem['BASKET_ITEM']->getBasketCode();
                     if (!empty($resultProductData) && is_array($resultProductData)) {
                         $resultProductData['ORDER_ID'] = $providerBasketItem['ORDER_ID'];
                     }
                     $resultList[$basketCode] = $resultProductData;
                 }
             }
         }
         if (!empty($resultList) && is_array($resultList)) {
             foreach ($resultList as $basketCode => $resultData) {
                 if ($resultData && !empty($resultData) && is_array($resultData)) {
                     $resultData["REMAINING_ATTEMPTS"] = defined("SALE_PROC_REC_ATTEMPTS") ? SALE_PROC_REC_ATTEMPTS : 3;
                     $resultData["SUCCESS_PAYMENT"] = "Y";
                     // TODO: recurringID
                     /*
                     if ($recurringID > 0)
                     	\CSaleRecurring::Update($recurringID, $resultData);
                     else
                     	\CSaleRecurring::Add($resultData);
                     */
                 }
                 /*
                 elseif ($recurringID > 0)
                 {
                 	\CSaleRecurring::Delete($recurringID);
                 }
                 */
             }
         }
     }
     if (!empty($resultList)) {
         $result->setData($resultList);
     }
     return $result;
 }