Exemplo n.º 1
0
 /**
  * @param $id
  * @return Sale\Result
  * @throws \Bitrix\Main\ArgumentException
  * @throws \Bitrix\Main\ArgumentNullException
  * @throws \Bitrix\Main\ObjectNotFoundException
  */
 public static function delete($id)
 {
     $result = new Sale\Result();
     $item = null;
     $basket = null;
     $order = null;
     $res = BasketTable::getList(array('filter' => array('ID' => $id), 'select' => array('ID', 'ORDER_ID', 'SET_PARENT_ID', 'TYPE', 'FUSER_ID', 'LID')));
     if (!($itemDat = $res->fetch())) {
         $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_BASKET_COMPATIBLE_BASKET_ITEM_NOT_FOUND'), 'BASKET_ITEM_NOT_FOUND'));
         return $result;
     }
     if (intval($itemDat['ORDER_ID']) > 0) {
         /** @var Sale\Order $order */
         if ($order = Sale\Order::load(intval($itemDat['ORDER_ID']))) {
             if ($basket = $order->getBasket()) {
                 /** @var Sale\BasketItem $item */
                 $item = $basket->getItemById($id);
             }
         }
     } else {
         if (!array_key_exists('FUSER_ID', $itemDat) || intval($itemDat['FUSER_ID']) <= 0) {
             $itemDat['FUSER_ID'] = Sale\Fuser::getId();
         }
         /** @var Sale\Basket $basket */
         if ($basket = Sale\Basket::loadItemsForFUser($itemDat["FUSER_ID"], $itemDat['LID'])) {
             /** @var Sale\BasketItem $item */
             $item = $basket->getItemById($id);
         }
     }
     if ($basket === null) {
         $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_BASKET_COMPATIBLE_BASKET_COLLECTION_NOT_FOUND'), 'BASKET_COLLECTION_NOT_FOUND'));
         return $result;
     }
     if ($item === null) {
         $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_BASKET_COMPATIBLE_BASKET_ITEM_PROPS_NOT_FOUND'), 'BASKET_ITEM_PROPS_NOT_FOUND'));
         return $result;
     }
     /** @var Sale\Result $r */
     $r = $item->delete();
     if (!$r->isSuccess()) {
         $result->addErrors($r->getErrors());
     }
     if ($order !== null) {
         if (!$result->isSuccess()) {
             return $result;
         }
         /** @var Sale\Result $r */
         $r = $order->save();
     } else {
         if (!$result->isSuccess()) {
             return $result;
         }
         /** @var Sale\Result $r */
         $r = $basket->save();
     }
     if (!$r->isSuccess()) {
         $result->addErrors($r->getErrors());
     }
     return $result;
 }
Exemplo n.º 2
0
 /**
  * @param bool $skipCreate
  * @return int|void
  */
 public function getFUserId($skipCreate = false)
 {
     if ($this->fUserId === null) {
         $this->fUserId = Fuser::getId($skipCreate);
     }
     return $this->fUserId;
 }
Exemplo n.º 3
0
 /**
  * @internal
  * @param string $action
  * @param array $fields
  *
  * @return Sale\Result
  * @throws Main\ArgumentNullException
  * @throws Main\ObjectNotFoundException
  */
 public static function modifyOrder($action, array $fields)
 {
     $result = new Sale\Result();
     try {
         $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true;
         /** @var Sale\Compatible\OrderCompatibility $orderCompatibility */
         $orderCompatibility = Sale\Compatible\OrderCompatibility::create($fields);
         /** @var Sale\Order $order */
         $order = $orderCompatibility->getOrder();
         $oldPrice = $order->getPrice();
         //			$isStartField = $order->isStartField();
         /** @var Sale\Basket $basket */
         $basket = $order->getBasket();
         if (!$basket && $action == static::ORDER_COMPAT_ACTION_SAVE) {
             $fUserId = null;
             $userId = $order->getUserId();
             if ($userId > 0) {
                 $fUserId = Sale\Fuser::getIdByUserId($userId);
             } else {
                 if (!empty($fields['BASKET_ITEMS']) && is_array($fields['BASKET_ITEMS'])) {
                     foreach ($fields['BASKET_ITEMS'] as $basketItemData) {
                         if (!empty($basketItemData['FUSER_ID']) && intval($basketItemData['FUSER_ID']) > 0) {
                             $fUserId = intval($basketItemData['FUSER_ID']);
                             break;
                         }
                     }
                 }
             }
             if (intval($fUserId) <= 0 && !$adminSection) {
                 $fUserId = Sale\Fuser::getId();
             }
             if (intval($fUserId) <= 0) {
                 $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_COMPATIBLE_ORDER_FUSERID_NOT_FOUND'), "SALE_COMPATIBLE_ORDER_FUSERID_NOT_FOUND"));
                 return $result;
             }
             if (!$adminSection) {
                 $siteId = !empty($fields["SITE_ID"]) ? $fields["SITE_ID"] : (!empty($fields["LID"]) ? $fields['LID'] : null);
                 /** @var Sale\Basket $allBasket */
                 $allBasket = Sale\Basket::loadItemsForFUser($fUserId, $siteId);
                 if ($allBasket) {
                     $basket = $allBasket->getOrderableItems();
                 }
             }
             if (!$basket) {
                 $basket = Sale\Basket::create($order->getSiteId());
                 $basket->setFUserId($fUserId);
             }
         }
         $isStartField = $order->isStartField(true);
         if ($basket) {
             $basketCompatibility = BasketCompatibility::create($orderCompatibility);
             //				$orderCompatibility->resetOrderPrice($basket, $fields);
             /** @var Sale\Result $r */
             $r = $basketCompatibility->fillBasket($basket, $fields);
             if (!$r->isSuccess()) {
                 $result->addErrors($r->getErrors());
                 return $result;
             }
             if ($action == static::ORDER_COMPAT_ACTION_SAVE && $order->getId() == 0 && count($basket) > 0) {
                 $order->setMathActionOnly(true);
                 $order->setBasket($basket);
                 $order->setMathActionOnly(false);
             }
             if ($orderCompatibility->isExistPrice() && $oldPrice == $order->getPrice()) {
                 $order->setFieldNoDemand('PRICE', $orderCompatibility->externalPrice);
             }
         }
         /** @var Sale\Result $r */
         $r = $orderCompatibility->fillTaxFromRequest($order->getTax(), $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
         if ($isStartField) {
             $hasMeaningfulFields = $order->hasMeaningfulField();
             /** @var Sale\Result $r */
             $r = $order->doFinalAction($hasMeaningfulFields);
             if (!$r->isSuccess()) {
                 $result->addErrors($r->getErrors());
                 return $result;
             }
         }
         /** @var Sale\Result $r */
         $r = $orderCompatibility->fillShipmentCollectionFromRequest($order->getShipmentCollection(), $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
         $order->setMathActionOnly(false);
         /** @var Sale\Result $r */
         $r = $orderCompatibility->fillPaymentCollectionFromRequest($fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
         /** @var Sale\Result $r */
         $r = Sale\Compatible\OrderCompatibility::fillOrderFromRequest($order, $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
     } catch (Sale\UserMessageException $e) {
         $result->addError(new Sale\ResultError($e->getMessage(), $e->getCode()));
         return $result;
     }
     static::transformationLocation($order);
     /** @var Sale\Result $r */
     $r = $order->save();
     if ($r->isSuccess()) {
         if ($orderData = $r->getData()) {
             $result->setData($orderData);
         }
         if ($orderId = $r->getId()) {
             $result->setId($orderId);
         }
         /** @var Sale\Result $r */
         $r = $orderCompatibility->saveRawFields($order, static::ENTITY_ORDER);
     }
     if (!$r->isSuccess()) {
         $result->addErrors($r->getErrors());
     } else {
         $oldFields = static::convertDateFieldsToOldFormat($order->getFieldValues());
         $oldFields = $oldFields + $orderCompatibility->rawFields;
         /** @var Sale\PaymentCollection $paymentCollection */
         if ($paymentCollection = $order->getPaymentCollection()) {
             /** @var Sale\Payment $payment */
             foreach ($paymentCollection as $payment) {
                 /** @var Sale\Result $r */
                 $r = $orderCompatibility->saveRawFields($payment, static::ENTITY_PAYMENT);
                 if (!$r->isSuccess()) {
                     $result->addErrors($r->getErrors());
                 }
             }
         }
         $result->setData(array('OLD_FIELDS' => $oldFields));
     }
     return $result;
 }
Exemplo n.º 4
0
 public function processOrder($orderEbay)
 {
     Ebay::log(Logger::LOG_LEVEL_DEBUG, "EBAY_DATA_PROCESSOR_ORDER_PROCESSING", $orderEbay["ExtendedOrderID"], print_r($orderEbay, true), $this->siteId);
     /*
      * only in this case order is completely ready for shipping
      */
     if ($orderEbay["OrderStatus"] != "Completed" || !isset($orderEbay["CheckoutStatus"]["eBayPaymentStatus"]) || $orderEbay["CheckoutStatus"]["eBayPaymentStatus"] != "NoPaymentFailure") {
         Ebay::log(Logger::LOG_LEVEL_INFO, "EBAY_DATA_PROCESSOR_ORDER_SKIPPED", $orderEbay["ExtendedOrderID"], Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_SKIPPED", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"])), $this->siteId);
         return array();
     }
     $ebay = \Bitrix\Sale\TradingPlatform\Ebay\Ebay::getInstance();
     $settings = $ebay->getSettings();
     if (!isset($settings[$this->siteId]["ORDER_PROPS"]) || !is_array($settings[$this->siteId]["ORDER_PROPS"])) {
         throw new SystemException("Can't get order props map");
     }
     $propsMap = $settings[$this->siteId]["ORDER_PROPS"];
     /*
     if(strtolower(SITE_CHARSET) != 'utf-8')
     	$orderEbay = \Bitrix\Main\Text\Encoding::convertEncodingArray($orderEbay, 'UTF-8', SITE_CHARSET);
     */
     $dbRes = OrderTable::getList(array("filter" => array("TRADING_PLATFORM_ID" => $ebay->getId(), "EXTERNAL_ORDER_ID" => $orderEbay["ExtendedOrderID"])));
     if ($orderCorrespondence = $dbRes->fetch()) {
         Ebay::log(Logger::LOG_LEVEL_INFO, "EBAY_DATA_PROCESSOR_ORDER_ALREADY_EXIST", $orderEbay["ExtendedOrderID"], Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_SKIPPED_EXIST", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"])), $this->siteId);
         return array();
     }
     /** @var \Bitrix\Sale\Order $order */
     $order = \Bitrix\Sale\Order::create($this->siteId);
     $order->setPersonTypeId($settings[$this->siteId]["PERSON_TYPE"]);
     $propsCollection = $order->getPropertyCollection();
     /** @var \Bitrix\Sale\PropertyValueCollection $propCollection */
     if (intval($propsMap["FIO"]) > 0) {
         $prop = $propsCollection->getItemByOrderPropertyId($propsMap["FIO"]);
         $prop->setValue($orderEbay["ShippingAddress"]["Name"]);
     }
     if (intval($propsMap["CITY"]) > 0) {
         $prop = $propsCollection->getItemByOrderPropertyId($propsMap["CITY"]);
         $prop->setValue($orderEbay["ShippingAddress"]["CityName"]);
     }
     if (intval($propsMap["PHONE"]) > 0) {
         $prop = $propsCollection->getItemByOrderPropertyId($propsMap["PHONE"]);
         $prop->setValue($orderEbay["ShippingAddress"]["Phone"]);
     }
     if (intval($propsMap["ZIP"]) > 0) {
         $prop = $propsCollection->getItemByOrderPropertyId($propsMap["ZIP"]);
         $prop->setValue($orderEbay["ShippingAddress"]["PostalCode"]);
     }
     if (intval($propsMap["ADDRESS"]) > 0) {
         $prop = $propsCollection->getItemByOrderPropertyId($propsMap["ADDRESS"]);
         $prop->setValue($orderEbay["ShippingAddress"]["CountryName"] . " " . $orderEbay["ShippingAddress"]["CityName"] . " " . $orderEbay["ShippingAddress"]["Street1"] . " " . (!empty($orderEbay["ShippingAddress"]["Street2"]) ? $orderEbay["ShippingAddress"]["Street2"] . " " : ""));
     }
     $basket = null;
     $bitrixOrderId = 0;
     $userId = 0;
     $orderLineItemsIds = array();
     $transactionsArray = $this->normalizeTransactionsArray($orderEbay["TransactionArray"]);
     foreach ($transactionsArray as $transaction) {
         //if we have more than one transaction let's create user from the first
         if ($userId <= 0) {
             if (intval($propsMap["EMAIL"]) > 0 && !empty($transaction["Buyer"]["Email"])) {
                 $prop = $propsCollection->getItemByOrderPropertyId($propsMap["EMAIL"]);
                 $prop->setValue($transaction["Buyer"]["Email"]);
                 $userId = $this->createUser($transaction["Buyer"]["Email"], array("NAME" => $transaction["Buyer"]["UserFirstName"], "LAST_NAME" => $transaction["Buyer"]["UserLastName"]));
             }
             if ($userId <= 0) {
                 $userId = \CSaleUser::GetAnonymousUserID();
             }
         }
         if (intval($userId > 0)) {
             $order->setFieldNoDemand("USER_ID", $userId);
         }
         $fUserId = null;
         if ($order->getUserId() > 0) {
             $fUserId = Fuser::getIdByUserId($order->getUserId());
         }
         /** @var \Bitrix\Sale\Basket $basket */
         if (!$basket) {
             $basket = \Bitrix\Sale\Basket::create($this->siteId);
             $basket->setFUserId($fUserId);
         }
         $items = array();
         $isVariation = false;
         if (!empty($transaction["Item"])) {
             $items = Xml2Array::normalize($transaction["Item"]);
         } elseif (!empty($transaction["Variation"])) {
             $items = Xml2Array::normalize($transaction["Variation"]);
             $isVariation = true;
         }
         if (empty($items)) {
             Ebay::log(Logger::LOG_LEVEL_INFO, "EBAY_DATA_PROCESSOR_ORDER_PROCESSING_TRANSACTION_ITEM_NOT_FOUND", $transaction["OrderLineItemID"], print_r($transaction, true), $this->siteId);
             continue;
         }
         foreach ($items as $transactionItem) {
             $ebaySku = $isVariation ? $this->getSkuVariation($transactionItem["SKU"]) : $this->getSku($transactionItem["SKU"]);
             if (strlen($ebaySku) <= 0) {
                 Ebay::log(Logger::LOG_LEVEL_INFO, "EBAY_DATA_PROCESSOR_ORDER_PROCESSING_TRANSACTION_ITEM_SKU_NOT_FOUND", $transaction["OrderLineItemID"], print_r($transaction, true), $this->siteId);
                 continue;
             }
             $item = $basket->createItem('catalog', $ebaySku);
             $item->setField("PRODUCT_PROVIDER_CLASS", "CCatalogProductProvider");
             $itemData = array("CUSTOM_PRICE" => "Y", "PRICE" => floatval($transaction["TransactionPrice"]), "QUANTITY" => floatval($transaction["QuantityPurchased"]), "NAME" => !empty($transactionItem["VariationTitle"]) ? $transactionItem["VariationTitle"] : $transactionItem["Title"], "CURRENCY" => SiteCurrencyTable::getSiteCurrency($this->siteId));
             $data = Provider::getProductData($basket);
             if (!empty($data[$item->getBasketCode()])) {
                 $itemData = array_merge($data[$item->getBasketCode()], $itemData);
             } else {
                 $item->delete();
                 $item = $basket->createItem('', $ebaySku);
             }
             $res = $item->setFields($itemData);
             if ($res->isSuccess()) {
                 $orderLineItemsIds[] = $transaction["OrderLineItemID"];
             } else {
                 foreach ($res->getErrors() as $error) {
                     Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_TRANSACTION_ITEM_CREATE_ERROR", $transaction["OrderLineItemID"], $error->getMessage(), $this->siteId);
                 }
             }
         }
     }
     $res = $order->setBasket($basket);
     if (!$res->isSuccess()) {
         foreach ($res->getErrors() as $error) {
             Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_CREATE_ERROR_SET_BASKET", $orderEbay["ExtendedOrderID"], $error->getMessage(), $this->siteId);
         }
     }
     //payments
     if (intval($settings[$this->siteId]["MAPS"]["PAYMENT"]["PayPal"]) > 0) {
         $payments = $order->getPaymentCollection();
         /** @var \Bitrix\Sale\Payment $payment */
         if ($payments->count() > 0) {
             foreach ($payments as $payment) {
                 if ($payment->isPaid()) {
                     $payment->setPaid("N");
                 }
                 $payment->delete();
             }
         }
         $payment = $payments->createItem();
         $payment->setField('PAY_SYSTEM_ID', $settings[$this->siteId]["MAPS"]["PAYMENT"]["PayPal"]);
         $payment->setField('PAY_SYSTEM_NAME', "PayPal via Ebay");
         if ($orderEbay["CheckoutStatus"]["eBayPaymentStatus"] == "NoPaymentFailure" && $orderEbay["MonetaryDetails"]["Payments"]["Payment"]["PaymentStatus"] && $orderEbay["MonetaryDetails"]["Payments"]["Payment"]["PaymentAmount"] == $orderEbay["Total"]) {
             $payment->setField("SUM", $orderEbay["AmountPaid"]);
             $payment->setPaid("Y");
         }
     }
     //shipment
     if (intval($settings[$this->siteId]["MAPS"]["SHIPMENT"][$orderEbay["ShippingServiceSelected"]["ShippingService"]]) > 0) {
         $shipments = $order->getShipmentCollection();
         /** @var \Bitrix\Sale\Shipment $shipment */
         if ($shipments->count() > 0) {
             foreach ($shipments as $shipment) {
                 if (!$shipment->isSystem()) {
                     $shipment->delete();
                 }
             }
         }
         $shipment = $shipments->createItem();
         $shipment->setField('DELIVERY_ID', $settings[$this->siteId]["MAPS"]["SHIPMENT"][$orderEbay["ShippingServiceSelected"]["ShippingService"]]);
         $shipment->setField('CUSTOM_PRICE_DELIVERY', "Y");
         $shipment->setField('BASE_PRICE_DELIVERY', $orderEbay["ShippingServiceSelected"]["ShippingServiceCost"]);
         $basket = $order->getBasket();
         if ($basket) {
             $shipmentItemCollection = $shipment->getShipmentItemCollection();
             $basketItems = $basket->getBasketItems();
             foreach ($basketItems as $basketItem) {
                 $shipmentItem = $shipmentItemCollection->createItem($basketItem);
                 $shipmentItem->setQuantity($basketItem->getField('QUANTITY'));
             }
         }
         // todo: delivery price changed. Probably bug.
         $shipment->setField('BASE_PRICE_DELIVERY', $orderEbay["ShippingServiceSelected"]["ShippingServiceCost"]);
     } else {
         Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_SHIPPING_ERROR", $orderEbay["ExtendedOrderID"], Loc::getMessage("SALE_TP_EBAY_FDPO_NOT_MAPPED_SHIPPING", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"], "#EBAY_SHIPPING#" => $orderEbay["ShippingServiceSelected"]["ShippingService"])), $this->siteId);
         return 0;
     }
     // order status
     if (strlen($settings[$this->siteId]["STATUS_MAP"][$orderEbay["OrderStatus"]]) > 0) {
         switch ($settings[$this->siteId]["STATUS_MAP"][$orderEbay["OrderStatus"]]) {
             /* flags */
             case "CANCELED":
                 if (!$order->setField("CANCELED", "Y")) {
                     Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_CANCELING_ERROR", $orderEbay["ExtendedOrderID"], Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_CANCEL_ERROR", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"])), $this->siteId);
                 }
                 break;
             case "PAYED":
                 $payments = $order->getPaymentCollection();
                 foreach ($payments as $payment) {
                     $payment->setPaid("Y");
                 }
                 break;
             case "ALLOW_DELIVERY":
                 // we suggest that only one shipment exists
                 $shipments = $order->getShipmentCollection();
                 foreach ($shipments as $shipment) {
                     if (!$shipment->isSystem()) {
                         if (!$shipment->allowDelivery()) {
                             Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_ALLOW_DELIVERY_ERROR", $orderEbay["ExtendedOrderID"], Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_ALLOW_DELIVERY_ERROR", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"])), $this->siteId);
                         }
                     }
                 }
                 break;
             case "DEDUCTED":
                 $shipments = $order->getShipmentCollection();
                 foreach ($shipments as $shipment) {
                     if (!$shipment->isSystem()) {
                         if (!$shipment->setField('DEDUCTED', 'Y')) {
                             Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_DEDUCTIOING_ERROR", $orderEbay["ExtendedOrderID"], Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_DEDUCT_ERROR", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"])), $this->siteId);
                         }
                     }
                 }
                 break;
                 /* statuses */
             /* statuses */
             default:
                 $res = $order->setField("STATUS_ID", $settings[$this->siteId]["STATUS_MAP"][$orderEbay["OrderStatus"]]);
                 /** @var \Bitrix\Sale\Result $res */
                 if (!$res->isSuccess()) {
                     Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_CHANGE_STATUS_ERROR", $orderEbay["OrderLineItemID"], Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_SET_STATUS_ERROR", array("#ORDER_ID#" => $orderEbay["ExtendedOrderID"], "#STATUS#" => $orderEbay["OrderStatus"])), $this->siteId);
                 }
         }
     }
     $order->setField("PRICE", $orderEbay["Total"]);
     $order->setField("XML_ID", Ebay::TRADING_PLATFORM_CODE . "_" . $orderEbay["ExtendedOrderID"]);
     $res = $order->save();
     if (!$res->isSuccess()) {
         foreach ($res->getErrors() as $error) {
             Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_SAVE_ERROR", $orderEbay["ExtendedOrderID"], print_r($error->getMessage(), true), $this->siteId);
         }
     } else {
         $bitrixOrderId = $order->getId();
         Ebay::log(Logger::LOG_LEVEL_INFO, "EBAY_DATA_PROCESSOR_ORDER_CREATED", $bitrixOrderId, Loc::getMessage("SALE_TP_EBAY_FDPO_ORDER_SAVED", array("#ORDER_ID#" => $bitrixOrderId)), $this->siteId);
         \CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER_ID" => $bitrixOrderId));
         $res = OrderTable::add(array("ORDER_ID" => $bitrixOrderId, "TRADING_PLATFORM_ID" => $ebay->getId(), "EXTERNAL_ORDER_ID" => $orderEbay["ExtendedOrderID"], "PARAMS" => array("ORDER_LINES" => $orderLineItemsIds, "ORDER_ID" => $orderEbay["OrderID"])));
         if (!$res->isSuccess()) {
             foreach ($res->getErrors() as $error) {
                 Ebay::log(Logger::LOG_LEVEL_ERROR, "EBAY_DATA_PROCESSOR_ORDER_DELIVERY_SAVE_ERROR", $orderEbay["ExtendedOrderID"], $error->getMessage(), $this->siteId);
             }
         }
     }
     // send confirmation
     if ($bitrixOrderId > 0 && !empty($orderLineItemsIds)) {
         $ebayFeed = \Bitrix\Sale\TradingPlatform\Ebay\Feed\Manager::createFeed("ORDER_ACK", $this->siteId);
         $sourceData = array();
         foreach ($orderLineItemsIds as $id) {
             $sourceData[] = array("ORDER_ID" => $orderEbay["OrderID"], "ORDER_LINE_ITEM_ID" => $id);
         }
         $ebayFeed->setSourceData(array($sourceData));
         $ebayFeed->processData();
     }
     return $bitrixOrderId;
 }
Exemplo n.º 5
0
 /**
  * @param $days
  * @param $speed
  *
  * @return string
  */
 public static function deleteOldAgent($days, $speed = 0)
 {
     if (!isset($GLOBALS["USER"]) || !is_object($GLOBALS["USER"])) {
         $tmpUser = True;
         $GLOBALS["USER"] = new \CUser();
     }
     static::deleteOld($days);
     Fuser::deleteOld($days);
     global $pPERIOD;
     if (intval($speed) > 0) {
         $pPERIOD = $speed;
     } else {
         $pPERIOD = 3 * 60 * 60;
     }
     if (isset($tmpUser)) {
         unset($GLOBALS["USER"]);
     }
     return "\\Bitrix\\Sale\\Basket::deleteOldAgent(" . intval(Main\Config\Option::get("sale", "delete_after", "30")) . ", " . IntVal($speed) . ");";
 }
Exemplo n.º 6
0
 /**
  * @internal
  * @param string $action
  * @param array $fields
  *
  * @return Sale\Result
  * @throws Main\ArgumentNullException
  * @throws Main\ObjectNotFoundException
  */
 public static function modifyOrder($action, array $fields)
 {
     $result = new Sale\Result();
     try {
         $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true;
         /** @var Sale\Compatible\OrderCompatibility $orderCompatibility */
         $orderCompatibility = Sale\Compatible\OrderCompatibility::create($fields);
         /** @var Sale\Order $order */
         $order = $orderCompatibility->getOrder();
         $oldPrice = $order->getPrice();
         //			$isStartField = $order->isStartField();
         /** @var Sale\Basket $basket */
         $basket = $order->getBasket();
         if (!$basket && $action == static::ORDER_COMPAT_ACTION_SAVE) {
             $fUserId = Sale\Fuser::getIdByUserId($order->getUserId());
             if (!$adminSection) {
                 $siteId = !empty($fields["SITE_ID"]) ? $fields["SITE_ID"] : (!empty($fields["LID"]) ? $fields['LID'] : null);
                 $basket = Sale\Basket::loadItemsForFUser($fUserId, $siteId);
             }
             if (!$basket) {
                 $basket = Sale\Basket::create($order->getSiteId(), $fUserId);
             }
         }
         if ($basket) {
             $basketCompatibility = BasketCompatibility::create($orderCompatibility);
             //				$orderCompatibility->resetOrderPrice($basket, $fields);
             /** @var Sale\Result $r */
             $r = $basketCompatibility->fillBasket($basket, $fields);
             if (!$r->isSuccess()) {
                 $result->addErrors($r->getErrors());
                 return $result;
             }
             if ($action == static::ORDER_COMPAT_ACTION_SAVE && $order->getId() == 0 && count($basket->getOrderableItems()) > 0) {
                 $order->setMathActionOnly(true);
                 $order->setBasket($basket->getOrderableItems());
                 $order->setMathActionOnly(false);
             }
             if ($orderCompatibility->isExistPrice() && $oldPrice == $order->getPrice()) {
                 $order->setFieldNoDemand('PRICE', $orderCompatibility->externalPrice);
             }
         }
         /** @var Sale\Result $r */
         $r = Sale\Compatible\OrderCompatibility::fillTaxFromRequest($order->getTax(), $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
         /** @var Sale\Result $r */
         $r = OrderCompatibility::fillShipmentCollectionFromRequest($order->getShipmentCollection(), $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
         $order->setMathActionOnly(false);
         /** @var Sale\Result $r */
         $r = Sale\Compatible\OrderCompatibility::fillPaymentCollectionFromRequest($order->getPaymentCollection(), $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
         /** @var Sale\Result $r */
         $r = Sale\Compatible\OrderCompatibility::fillOrderFromRequest($order, $fields);
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
     } catch (Sale\UserMessageException $e) {
         $result->addError(new Sale\ResultError($e->getMessage(), $e->getCode()));
         return $result;
     }
     static::transformationLocation($order);
     /** @var Sale\Result $r */
     $r = $order->save();
     if ($r->isSuccess()) {
         if ($orderData = $r->getData()) {
             $result->setData($orderData);
         }
         if ($orderId = $r->getId()) {
             $result->setId($orderId);
         }
         /** @var Sale\Result $r */
         $r = $orderCompatibility->saveRawFields();
     }
     if (!$r->isSuccess()) {
         $result->addErrors($r->getErrors());
     } else {
         $oldFields = static::convertDateFieldsToOldFormat($order->getFieldValues());
         $oldFields = $oldFields + $orderCompatibility->rawFields;
         $result->setData(array('OLD_FIELDS' => $oldFields));
     }
     return $result;
 }
Exemplo n.º 7
0
 /**
  * @param \Bitrix\Main\Event $event
  *
  * @return \Bitrix\Main\EventResult
  */
 public function onSaleBasketItemDeleted(\Bitrix\Main\Event $event)
 {
     $originalValues = $event->getParameter('VALUES');
     if ($originalValues['FUSER_ID'] != \Bitrix\Sale\Fuser::getId(true)) {
         return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, null, 'sale');
     }
     $allBasket = \Bitrix\Sale\Basket::loadItemsForFUser($originalValues['FUSER_ID'], SITE_ID);
     if ($allBasket) {
         $_SESSION["SALE_BASKET_PRICE"][SITE_ID] = static::getActualBasketPrice($allBasket);
     }
     return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, null, 'sale');
 }
Exemplo n.º 8
0
 /**
  * @param array $formData
  * @param $creatorUserId
  * @param bool $createUserIfNeed
  * @param array $files
  * @param Result &$opResult
  * @return Order|static
  * @throws ArgumentNullException
  * @throws SystemException
  */
 public static function createOrderFromForm(array $formData, $creatorUserId, $createUserIfNeed = true, array $files = array(), Result &$opResult)
 {
     if (!isset($formData["SITE_ID"]) || strlen($formData["SITE_ID"]) <= 0) {
         throw new ArgumentNullException('formData["SITE_ID"]');
     }
     $order = Order::create($formData["SITE_ID"]);
     /** @var \Bitrix\Sale\Result $res */
     $res = self::fillSimpleFields($order, $formData, $creatorUserId);
     if (!$res->isSuccess()) {
         $opResult->addErrors($res->getErrors());
     }
     $propCollection = $order->getPropertyCollection();
     $res = $propCollection->setValuesFromPost($formData, $files);
     if (!$res->isSuccess()) {
         $opResult->addErrors($res->getErrors());
     }
     //creates new user if need
     $order->setFieldNoDemand("USER_ID", self::getUserId($order, $formData, $createUserIfNeed, $opResult));
     $fUserId = null;
     if ($order->getUserId() > 0) {
         $fUserId = Fuser::getIdByUserId($order->getUserId());
     }
     //init basket
     if (isset($formData["PRODUCT"]) && is_array($formData["PRODUCT"])) {
         $basket = \Bitrix\Sale\Basket::create($formData["SITE_ID"]);
         $basket->setFUserId($fUserId);
         sortByColumn($formData["PRODUCT"], array("BASE_PRICE" => SORT_DESC, "PRICE" => SORT_DESC));
         foreach ($formData["PRODUCT"] as $basketCode => $productData) {
             if ($productData["IS_SET_ITEM"] == "Y") {
                 continue;
             }
             if (!isset($productData["PROPS"]) || !is_array($productData["PROPS"])) {
                 $productData["PROPS"] = array();
             }
             $item = $basket->getExistsItem($productData["MODULE"], $productData["OFFER_ID"], $productData["PROPS"]);
             if ($item == null && $basketCode != "new") {
                 $item = $basket->getItemByBasketCode($basketCode);
             }
             if ($item && $item->isBundleChild()) {
                 $item = null;
             }
             if ($item) {
                 //Let's extract cached provider product data from field
                 if (!empty($productData["PROVIDER_DATA"])) {
                     $providerData = unserialize($productData["PROVIDER_DATA"]);
                     if (is_array($providerData) && !empty($providerData)) {
                         self::setProviderTrustData($item, $order, $providerData);
                     }
                 }
                 if (!empty($productData["SET_ITEMS_DATA"])) {
                     $productData["SET_ITEMS"] = unserialize($productData["SET_ITEMS_DATA"]);
                 }
                 $res = $item->setField("QUANTITY", $item->getField("QUANTITY") + $productData["QUANTITY"]);
                 if (!$res->isSuccess()) {
                     $opResult->addErrors($res->getErrors());
                 }
             } else {
                 $setBasketCode = $basketCode != "new" ? $basketCode : null;
                 $item = $basket->createItem($productData["MODULE"], $productData["OFFER_ID"], $setBasketCode);
                 if ($basketCode != $productData["BASKET_CODE"]) {
                     $productData["BASKET_CODE"] = $item->getBasketCode();
                 }
                 $needDataUpdate = false;
                 if ($basketCode == "new") {
                     $opResult->setData(array("NEW_ITEM_BASKET_CODE" => $productData["BASKET_CODE"]));
                     $needDataUpdate = true;
                 }
                 $fbRes = self::fillBasketItem($item, $productData, $order, $basket, $needDataUpdate);
                 if (!$fbRes->isSuccess()) {
                     $opResult->addErrors($fbRes->getErrors());
                 }
                 if (isset($productData["PROPS"]) && !empty($productData["PROPS"]) && is_array($productData["PROPS"])) {
                     /** @var \Bitrix\Sale\BasketPropertiesCollection $property */
                     $property = $item->getPropertyCollection();
                     $property->setProperty($productData["PROPS"]);
                 }
             }
         }
         $res = $order->setBasket($basket);
         if (!$res->isSuccess()) {
             $opResult->addErrors($res->getErrors());
         }
         if (isset($formData["DISCOUNTS"]) && is_array($formData["DISCOUNTS"])) {
             $order->getDiscount()->setApplyResult($formData["DISCOUNTS"]);
         }
     } else {
         $opResult->addError(new EntityError(Loc::getMessage("SALE_ORDEREDIT_ERROR_NO_PRODUCTS")));
     }
     return $order;
 }
Exemplo n.º 9
0
            $basket->usePrepayment = isset($_POST["use_prepayment"]) && $_POST["use_prepayment"] == "Y" ? "Y" : "N";
            $res = $basket->recalculateBasket($_POST);
            foreach ($res as $key => $value) {
                $arRes[$key] = $value;
            }
            $arRes["BASKET_DATA"] = $basket->getBasketItems();
            $arRes["BASKET_DATA"]["GRID"]["HEADERS"] = $basket->getCustomColumns();
            $arRes["COLUMNS"] = $strColumns;
            $arRes["CODE"] = "SUCCESS";
            if (!empty($_POST["coupon"]) && $arRes['VALID_COUPON'] === true) {
                if (!empty($arRes['BASKET_DATA']['FULL_DISCOUNT_LIST'])) {
                    global $USER;
                    $userId = $USER instanceof CAllUser ? $USER->getId() : null;
                    $giftManager = \Bitrix\Sale\Discount\Gift\Manager::getInstance()->setUserId($userId);
                    \Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();
                    $collections = $giftManager->getCollectionsByBasket(\Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID), $arRes['BASKET_DATA']['FULL_DISCOUNT_LIST'], $arRes['BASKET_DATA']['APPLIED_DISCOUNT_LIST']);
                    \Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();
                    if (count($collections)) {
                        $arRes['BASKET_DATA']['NEED_TO_RELOAD_FOR_GETTING_GIFTS'] = true;
                    }
                }
            }
        }
    }
}
unset($arRes['BASKET_DATA']['APPLIED_DISCOUNT_LIST'], $arRes['BASKET_DATA']['FULL_DISCOUNT_LIST']);
$arRes["PARAMS"]["QUANTITY_FLOAT"] = isset($_POST["quantity_float"]) && $_POST["quantity_float"] == "Y" ? "Y" : "N";
$APPLICATION->RestartBuffer();
header('Content-Type: application/json; charset=' . LANG_CHARSET);
echo CUtil::PhpToJSObject($arRes);
die;