/** * @param Order $order */ public static function resetEvents(Order $order = null) { if ($order !== null) { unset(static::$events[$order->getInternalId()]); } else { static::$events = array(); } }
/** * @param \Bitrix\Sale\Order $order */ protected function deleteProducts($order) { $basket = $order->getBasket(); $shopInfoblockId = \TAO::getInfoblock('shop')->id(); /** @var \Bitrix\Sale\BasketItem $item */ foreach ($basket->getBasketItems() as $item) { $productId = $item->getProductId(); $data = \CIBlockElement::GetByID($productId)->Fetch(); if ($data && ($data['IBLOCK_ID'] = $shopInfoblockId)) { \CIBlockElement::Delete($productId); } } }
public static function prepareData(Order $order) { $currencyBudget = 0; if ($order->getUserId() > 0) { $res = \CSaleUserAccount::getList(array(), array('USER_ID' => $order->getUserId(), 'CURRENCY' => $order->getCurrency(), 'LOCKED' => 'N'), false, false, array('CURRENT_BUDGET')); $userAccount = $res->Fetch(); $currencyBudget = $userAccount['CURRENT_BUDGET']; } $payable = $order->getPrice() - $order->getSumPaid(); $price = $order->getPrice(); $sumPaid = $order->getSumPaid(); $data = array('PRICE' => $price ? $price : 0, 'SUM_PAID' => $sumPaid ? $sumPaid : 0, 'PAYABLE' => $payable >= 0 ? $payable : 0, 'CURRENCY' => $order->getCurrency(), 'BUYER_BUDGET' => $currencyBudget, 'STATUS_ID' => $order->getField('STATUS_ID')); return $data; }
public static function getView(Order $order, OrderBasket $orderBasket, $selectPayment = null, $selectId = null) { // prepare data $orderId = $order->getId(); $data = $orderBasket->prepareData(); $items = $data['ITEMS']; $documents = array(); $itemNo = 0; /** @var \Bitrix\Sale\Payment $payment */ foreach ($order->getPaymentCollection() as $payment) { $documents[] = $payment; } /** @var \Bitrix\Sale\Shipment $shipment */ foreach ($order->getShipmentCollection() as $shipment) { if (!$shipment->isSystem()) { if (!$shipment->isCanceled() && $shipment->isShipped()) { /** @var \Bitrix\Sale\ShipmentItem $shipmentItem */ foreach ($shipment->getShipmentItemCollection() as $shipmentItem) { $basketItem = $shipmentItem->getBasketItem(); if (isset($items[$basketItem->getBasketCode()])) { $item =& $items[$basketItem->getBasketCode()]; if ($shippedQuantity =& $item['SHIPPED_QUANTITY']) { $shippedQuantity += (double) $shipmentItem->getField('QUANTITY'); } else { $shippedQuantity = (double) $shipmentItem->getField('QUANTITY'); } } } } $documents[] = $shipment; } } unset($item, $shippedQuantity); usort($documents, array(__CLASS__, 'sortDocumentsByDate')); // render view ob_start(); ?> <div class="adm-s-order-table-ddi"> <table class="adm-s-order-table-ddi-table adm-s-bus-ordertable-option" style="width: 100%;"> <thead> <tr> <td class="tac"><?php echo Loc::getMessage('SALE_OANALYSIS_ITEM_NUMBER'); ?> </td> <td><?php echo Loc::getMessage('SALE_OANALYSIS_ITEM_NAME'); ?> </td> <td class="tac"><?php echo Loc::getMessage('SALE_OANALYSIS_ITEM_PROPERTIES'); ?> </td> <td class="tac"><?php echo Loc::getMessage('SALE_OANALYSIS_ITEM_PLANNED'); ?> </td> <td class="tac"><?php echo Loc::getMessage('SALE_OANALYSIS_ITEM_SHIPPED'); ?> </td> <td class="tac"><?php echo Loc::getMessage('SALE_OANALYSIS_ITEM_TO_SHIP'); ?> </td> </tr> </thead> <tbody> <?php foreach ($items as $item) { $properties = '<table style="margin: auto; width: 50%;">'; if (is_array($item['SKU_PROPS'])) { foreach ($item['SKU_PROPS'] as $skuProp) { $properties .= '<tr>'; $properties .= '<td style="text-align: left;">' . htmlspecialcharsbx($skuProp['NAME']) . ' : ' . '</td>'; if (isset($skuProp['VALUE']['PICT']) && $skuProp['VALUE']['PICT']) { $properties .= '<td><span class="color"><img src="' . $skuProp['VALUE']['PICT'] . '" alt=""></span></td>'; } else { $properties .= '<td><span>' . htmlspecialcharsbx($skuProp['VALUE']['NAME']) . '</span></td>'; } $properties .= '</tr>'; } } $properties .= '</table>'; if (!($quantity = (double) $item['QUANTITY'])) { $quantity = 0; } if (!($shippedQuantity = $item['SHIPPED_QUANTITY'])) { $shippedQuantity = 0; } ?> <tr class="bdb-line"> <td class="tac"><?php echo ++$itemNo; ?> </td> <td style="text-align: left;"><a class="fwb" href="<?php echo $item['EDIT_PAGE_URL']; ?> "><?php echo htmlspecialcharsbx($item['NAME']); ?> </a></td> <td class="tac"><?php echo $properties; ?> </td> <td class="tac"><?php echo $quantity . ' ' . $item['MEASURE_TEXT']; ?> </td> <td class="tac"><?php echo $shippedQuantity . ' ' . $item['MEASURE_TEXT']; ?> </td> <td class="tac"><?php echo $quantity - $shippedQuantity . ' ' . $item['MEASURE_TEXT']; ?> </td> </tr> <?php } ?> <tr><td colspan="8" style="padding: 16px; background: #f7fafa; text-align: left;" class="fwb"><?php echo Loc::getMessage('SALE_OANALYSIS_ITEMS_QUANTITY') . ': ' . count($items); ?> </td></tr> </tbody> </table> <div class="adm-bus-table-contaier-white caption border" style="margin-top: 25px;"> <div class="adm-bus-table-caption-white-title"><?php echo Loc::getMessage('SALE_OANALYSIS_DOCUMENTS'); ?> :</div> <div class="adm-bus-orderdocs-threelist-container"> <div class="adm-bus-orderdocs-threelist-block-top<?php echo $selectPayment === null ? ' adm-bus-orderdocs-threelist-block-children-open' : ''; ?> "> <div class="adm-bus-orderdocs-threelist-block-img adm-bus-orderdocs-threelist-block-img-order"></div> <div class="adm-bus-orderdocs-threelist-block-content"> <div class="adm-bus-orderdocs-threelist-block-title"> <a class="adm-bus-orderdocs-threelist-block-title-link fwb" href="/bitrix/admin/sale_order_edit.php?lang=ru&ID=<?php echo $orderId; ?> "> <?php echo Loc::getMessage('SALE_OANALYSIS_ORDER_TITLE', array('#USER_ID#' => $order->getField('USER_ID'), '#ORDER_ID#' => $orderId)); ?> </a> </div> <?php self::renderBottomBlocks($order->getField('DATE_INSERT'), $order->getField('RESPONSIBLE_ID')); ?> </div> <div class="clb"></div> </div> <?php foreach ($documents as $document) { $isPayment = $document instanceof Payment; $documentId = $document->getId(); ?> <div class="adm-bus-orderdocs-threelist-block-children<?php echo $selectPayment === $isPayment && $selectId == $documentId ? ' adm-bus-orderdocs-threelist-block-children-open' : ''; ?> "> <div class="adm-bus-orderdocs-threelist-block-img adm-bus-orderdocs-threelist-block-img-doc_<?php echo $isPayment ? 'payment' : 'shipping'; ?> "></div> <div class="adm-bus-orderdocs-threelist-block-content"> <div class="adm-bus-orderdocs-threelist-block-title"> <?php if ($isPayment) { ?> <?php if ($document->isPaid()) { ?> <span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-paid"><?php echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_PAID'); ?> </span> <?php } elseif ($document->isReturn()) { ?> <span class="adm-bus-orderdocs-docstatus"><?php echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_RETURN'); ?> </span> <?php } ?> <a href="/bitrix/admin/sale_order_payment_edit.php?order_id=<?php echo $orderId; ?> &payment_id=<?php echo $documentId; ?> " class="adm-bus-orderdocs-threelist-block-title-link"> <?php echo Loc::getMessage('SALE_OANALYSIS_PAYMENT_TITLE', array('#SYSTEM_NAME#' => htmlspecialcharsbx($document->getField('PAY_SYSTEM_NAME')), '#PAYMENT_ID#' => $documentId, '#SUM#' => SaleFormatCurrency($document->getField('SUM'), $document->getField('CURRENCY')))); ?> </a> <?php } else { /* shipment*/ ?> <?php if ($document->isShipped()) { ?> <span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-shippingallowed"><?php echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_SHIPPED'); ?> </span> <?php } elseif ($document->isCanceled()) { ?> <span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-canceled"><?php echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_CANCELED'); ?> </span> <?php } elseif ($document->isAllowDelivery()) { ?> <span class="adm-bus-orderdocs-docstatus adm-bus-orderdocs-docstatus-shippingallowed"><?php echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_ALLOWED'); ?> </span> <?php } ?> <a href="/bitrix/admin/sale_order_shipment_edit.php?order_id=<?php echo $orderId; ?> &shipment_id=<?php echo $documentId; ?> " class="adm-bus-orderdocs-threelist-block-title-link<?php echo $document->isCanceled() ? 'adm-bus-orderdocs-threelist-block-title-link-canceled' : ''; ?> "> <?php echo Loc::getMessage('SALE_OANALYSIS_SHIPMENT_TITLE', array('#SHIPMENT_ID#' => $documentId, '#ORDER_ID#' => $orderId)); ?> </a> <?php } ?> </div> <?php self::renderBottomBlocks($document->getField($isPayment ? 'DATE_BILL' : 'DATE_INSERT'), $document->getField('RESPONSIBLE_ID')); ?> </div> <div class="clb"></div> </div> <?php } ?> </div> </div> </div> <?php $result = ob_get_contents(); ob_end_clean(); return $result; }
/** * @param Order $order * @param $payments * @param bool $canSetPaid * @return Result * @throws Main\ArgumentOutOfRangeException * @throws Main\ObjectNotFoundException * @throws UserMessageException */ public static function updateData(Order &$order, $payments, $canSetPaid = false) { global $USER; $result = new Result(); $data['PAYMENT'] = array(); if (!$order) { throw new UserMessageException('Order does not exist'); } foreach ($payments as $payment) { $paymentId = intval($payment['PAYMENT_ID']); $isNew = $paymentId <= 0; $paymentCollection = $order->getPaymentCollection(); /** @var \Bitrix\Sale\Payment $paymentItem */ if ($isNew) { $paymentItem = $paymentCollection->createItem(); } else { $paymentItem = $paymentCollection->getItemById($paymentId); if (!$paymentItem) { throw new UserMessageException('Payment does not exist'); } } self::$defaultFields = $paymentItem->getFieldValues(); $isReturn = isset($payment['IS_RETURN']) && $payment['IS_RETURN'] == 'Y'; /** @var \Bitrix\Sale\PaySystemService $paymentService */ $paymentService = PaySystemService::load($payment['PAY_SYSTEM_ID']); if (!$paymentService) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_PAYMENT_ERROR_PAYSYSTEM'))); } $paymentFields = array('PAY_SYSTEM_ID' => $payment['PAY_SYSTEM_ID'], 'COMPANY_ID' => isset($payment['COMPANY_ID']) ? $payment['COMPANY_ID'] : 0, 'SUM' => $payment['SUM'], 'PAY_VOUCHER_NUM' => $payment['PAY_VOUCHER_NUM'], 'PAY_RETURN_NUM' => $payment['PAY_RETURN_NUM'], 'PAY_RETURN_COMMENT' => $payment['PAY_RETURN_COMMENT'], 'COMMENTS' => $payment['COMMENTS'], 'PAY_SYSTEM_NAME' => $paymentService ? $paymentService->getName() : ''); if ($isNew) { $paymentFields['DATE_BILL'] = new DateTime(); } if (!empty($payment['PAY_RETURN_DATE'])) { try { $paymentFields['PAY_RETURN_DATE'] = new Date($payment['PAY_RETURN_DATE']); } catch (Main\ObjectException $exception) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_PAYMENT_ERROR_RETURN_DATE_FORMAT'))); } } if (!empty($payment['PAY_VOUCHER_DATE'])) { try { $paymentFields['PAY_VOUCHER_DATE'] = new Date($payment['PAY_VOUCHER_DATE']); } catch (Main\ObjectException $exception) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_PAYMENT_ERROR_VOUCHER_DATE_FORMAT'))); } } if (isset($payment['RESPONSIBLE_ID'])) { $paymentFields['RESPONSIBLE_ID'] = !empty($payment['RESPONSIBLE_ID']) ? $payment['RESPONSIBLE_ID'] : $USER->GetID(); if ($payment['RESPONSIBLE_ID'] != $paymentItem->getField('RESPONSIBLE_ID')) { $paymentFields['DATE_RESPONSIBLE_ID'] = new DateTime(); if (!$isNew) { $paymentFields['EMP_RESPONSIBLE_ID'] = $USER->GetID(); } } } if ($result->isSuccess()) { if ($paymentItem->getField('PAID') != $payment['PAID'] && $paymentItem->getField('IS_RETURN') == 'Y') { $setResult = $paymentItem->setReturn('N'); if (!$setResult->isSuccess()) { $result->addErrors($setResult->getErrors()); } } if ($isReturn && $payment['OPERATION_ID'] == 'RETURN') { $setResult = $paymentItem->setReturn('Y'); if (!$setResult->isSuccess()) { $result->addErrors($setResult->getErrors()); } } $setResult = $paymentItem->setFields($paymentFields); if (!$setResult->isSuccess()) { $result->addErrors($setResult->getErrors()); } if (!$canSetPaid) { $setResult = $paymentItem->setPaid($payment['PAID']); if (!$setResult->isSuccess()) { $result->addErrors($setResult->getErrors()); } } if ($payment['ORDER_STATUS_ID']) { $order->setField('STATUS_ID', $payment['ORDER_STATUS_ID']); } } $data['PAYMENT'][] = $paymentItem; } $result->setData($data); return $result; }
?> '); </script> <?php echo GetMessage("SOA_TEMPL_PAY_LINK", array("#LINK#" => $arParams["PATH_TO_PAYMENT"] . "?ORDER_ID=" . $arResult["ORDER_BASKET"]["ORDER_ID"])); ?> <?php } else { $service = \Bitrix\Sale\PaySystem\Manager::getObjectById($arResult['PAY_SYSTEM_ID']); if ($service) { $orderId = $arResult['ORDER_ID']; /** @var \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load($orderId); if ($order === null) { $data = \Bitrix\Sale\Internals\OrderTable::getRow(array('select' => array('ID'), 'filter' => array('ACCOUNT_NUMBER' => $orderId))); $order = \Bitrix\Sale\Order::load($data['ID']); } /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ $paymentCollection = $order->getPaymentCollection(); /** @var \Bitrix\Sale\Payment $payment */ foreach ($paymentCollection as $payment) { if (!$payment->isInner()) { $context = \Bitrix\Main\Application::getInstance()->getContext(); $service->initiatePay($payment, $context->getRequest()); break; } } } else { echo '<span style="color:red;">' . GetMessage("SOA_TEMPL_ORDER_PS_ERROR") . '</span>'; } }
/** * Unlock order. * * @param int $id Order id. * @return Entity\UpdateResult|Result * @throws Main\ArgumentNullException * @throws \Exception */ public static function unlock($id) { global $USER; $result = new Result(); $id = (int) $id; if ($id <= 0) { $result->addError(new ResultError(Loc::getMessage('SALE_ORDER_WRONG_ID'), 'SALE_ORDER_WRONG_ID')); return $result; } if (!($order = Order::load($id))) { $result->addError(new ResultError(Loc::getMessage('SALE_ORDER_ENTITY_NOT_FOUND'), 'SALE_ORDER_ENTITY_NOT_FOUND')); return $result; } $userRights = \CMain::getUserRight("sale", $USER->getUserGroupArray(), "Y", "Y"); if ($userRights >= "W" || $order->getField("LOCKED_BY") == $USER->getID()) { return Internals\OrderTable::update($id, array('DATE_LOCK' => null, 'LOCKED_BY' => null)); } return $result; }
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; }
<?php CCurrencyLang::disableUseHideZero(); $orderId = (int) $GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]; if ($orderId) { /** @var \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load($orderId); if ($order) { /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ $paymentCollection = $order->getPaymentCollection(); if ($paymentCollection) { /** @var \Bitrix\Sale\Payment $payment */ foreach ($paymentCollection as $payment) { if (!$payment->isInner()) { break; } } if ($payment) { $context = \Bitrix\Main\Application::getInstance()->getContext(); $service = \Bitrix\Sale\PaySystem\Manager::getObjectById($payment->getPaymentSystemId()); if ($_REQUEST['pdf'] && $_REQUEST['GET_CONTENT'] == 'Y') { $result = $service->initiatePay($payment, $context->getRequest(), \Bitrix\Sale\PaySystem\BaseServiceHandler::STRING); if ($result->isSuccess()) { return $result->getTemplate(); } } $result = $service->initiatePay($payment, $context->getRequest()); } CCurrencyLang::enableUseHideZero(); } }
$allowedStatusesView = array(); $order = Bitrix\Sale\Order::load($_REQUEST["ID"]); if ($order) { $allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('view')); } if (!$order || !in_array($order->getField("STATUS_ID"), $allowedStatusesView)) { LocalRedirect("/bitrix/admin/sale_order.php?lang=" . LANGUAGE_ID . GetFilterParams("filter_", false)); } $allowedStatusesEdit = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('edit')); if (!in_array($order->getField("STATUS_ID"), $allowedStatusesEdit)) { LocalRedirect("/bitrix/admin/sale_order_view.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . GetFilterParams("filter_")); } $userId = isset($_POST["USER_ID"]) ? intval($_POST["USER_ID"]) : $order->getUserId(); OrderEdit::initCouponsData($userId, $ID, isset($_POST["OLD_USER_ID"]) ? intval($_POST["USER_ID"]) : $userId); if (!$boolLocked) { \Bitrix\Sale\Order::lock($ID); } $isSavingOperation = $_SERVER["REQUEST_METHOD"] == "POST" && (isset($_POST["apply"]) || isset($_POST["save"])); $isRefreshDataAndSaveOperation = $_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["refresh_data_and_save"]) && $_POST["refresh_data_and_save"] == "Y"; $isNeedFieldsRestore = $_SERVER["REQUEST_METHOD"] == "POST" && !$isSavingOperation && !$isRefreshDataAndSaveOperation; //save order params if (($isSavingOperation || $isNeedFieldsRestore || $isRefreshDataAndSaveOperation) && $saleModulePermissions >= "U" && check_bitrix_sessid() && $result->isSuccess()) { if ($isSavingOperation || $isRefreshDataAndSaveOperation) { $order = OrderEdit::editOrderByFormData($_POST, $order, $USER->GetID(), true, $_FILES, $result); } if ($isRefreshDataAndSaveOperation) { /** @var \Bitrix\Sale\Basket $basket */ if (!($basket = $order->getBasket())) { throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found'); } $res = $basket->refreshData(array('PRICE', 'QUANTITY', 'COUPONS'));
/** * @param array $discounts * @return array|null * @throws Main\LoaderException */ public function prepareData(array $inParams = array()) { if ($this->data === null) { $result = array("ITEMS" => array(), "WEIGHT" => 0); $basket = $this->order->getBasket(); if (empty($inParams["DISCOUNTS"])) { $inParams["DISCOUNTS"] = OrderEdit::getDiscountsApplyResult($this->order, true); } $basketDiscount = 0; $basketPrice = 0; $basketPriceBase = 0; if (!$basket) { $result["WEIGHT_FOR_HUMAN"] = roundEx(floatval(0), SALE_WEIGHT_PRECISION); $this->data = $result; return $result; } $result["WEIGHT"] = $basket->getWeight(); $result["WEIGHT_FOR_HUMAN"] = roundEx(floatval($result["WEIGHT"] / $this->weightKoef), SALE_WEIGHT_PRECISION); $items = $basket->getBasketItems(); /** @var \Bitrix\Sale\BasketItem $item */ if (self::$catalogIncluded === null) { self::$catalogIncluded = Main\Loader::includeModule('catalog'); } foreach ($items as $item) { $productId = $item->getProductId(); $params = array(); if ($item->getField("MODULE") == "catalog") { $params = static::getProductDetails($productId, $item->getQuantity(), $this->order->getUserId(), $this->order->getSiteId(), $this->visibleColumns); } elseif (strval($item->getField("MEASURE_CODE")) != '' && self::$catalogIncluded) { $measures = OrderBasket::getCatalogMeasures(); if (isset($measures[$item->getField("MEASURE_CODE")]) && strlen($measures[$item->getField("MEASURE_CODE")]) > 0) { $params["MEASURE_TEXT"] = $measures[$item->getField("MEASURE_CODE")]; } if (strval($params["MEASURE_TEXT"]) == '') { $defaultMeasure = static::getDefaultMeasures(); $params["MEASURE_TEXT"] = $defaultMeasure["SYMBOL_RUS"] != '' ? $defaultMeasure["SYMBOL_RUS"] : $defaultMeasure["SYMBOL_INTL"]; } } if (!isset($params["OFFER_ID"])) { $params["OFFER_ID"] = $productId; } $params["BASKET_CODE"] = $basketCode = $item->getBasketCode(); $params["PRODUCT_PROVIDER_CLASS"] = $item->getProvider(); $id = $params["PRODUCT_ID"]; $params = array_merge($params, $item->getFieldValues(), array("PRODUCT_ID" => $id)); $params["PROPS"] = array(); /** @var \Bitrix\Sale\BasketPropertyItem $property */ foreach ($item->getPropertyCollection() as $property) { $params["PROPS"][] = array("VALUE" => $property->getField("VALUE"), "NAME" => $property->getField("NAME"), "CODE" => $property->getField("CODE"), "SORT" => $property->getField("SORT")); } if (isset($inParams["DISCOUNTS"]["RESULT"]["BASKET"][$basketCode]) && is_array($inParams["DISCOUNTS"]["RESULT"]["BASKET"][$basketCode])) { foreach ($inParams["DISCOUNTS"]["RESULT"]["BASKET"][$basketCode] as $discount) { $params["DISCOUNTS"][$discount["DISCOUNT_ID"]] = $discount; } } if (isset($inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode])) { $params["PRICE_BASE"] = roundEx($inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode]["BASE_PRICE"], SALE_VALUE_PRECISION); $params["PRICE"] = roundEx($inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode]["PRICE"], SALE_VALUE_PRECISION); $basketPriceBase += $params["PRICE_BASE"] * $params["QUANTITY"]; $basketPrice += $params["PRICE"] * $params["QUANTITY"]; if (!$item->isCustomPrice()) { $basketDiscount += $inParams["DISCOUNTS"]["PRICES"]["BASKET"][$basketCode]["DISCOUNT"] * $params["QUANTITY"]; } } else { // TODO: for old orders } $params["CUSTOM_PRICE"] = $item->isCustomPrice() ? "Y" : "N"; //Let's cache provider product data into form field if (Provider::isExistsTrustData($this->order->getSiteId(), 'sale', $item->getProductId())) { $providerData = Provider::getTrustData($this->order->getSiteId(), 'sale', $item->getProductId()); if (is_array($providerData) && !empty($providerData)) { $params["PROVIDER_DATA"] = serialize($providerData); } } if (is_array($params["SET_ITEMS"]) && !empty($params["SET_ITEMS"])) { $params["SET_ITEMS_DATA"] = serialize($params["SET_ITEMS"]); } $result["ITEMS"][$basketCode] = $params; } $result["BASKET_PRICE_BASE"] = roundEx($basketPriceBase, SALE_VALUE_PRECISION); $result["BASKET_PRICE"] = roundEx($basketPrice, SALE_VALUE_PRECISION); $result["DISCOUNT_VALUE"] = roundEx($basketDiscount, SALE_VALUE_PRECISION); $result["ITEMS_ORDER"] = array_keys($result["ITEMS"]); if (!isset($inParams["SKIP_SKU_INFO"]) || $inParams["SKIP_SKU_INFO"] != true) { $result = static::getOffersSkuParams($result); } $this->data = $result; } return $this->data; }
/** * @var CDatabase $DB * @var CMain $APPLICATION */ require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/prolog.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/general/admin_tool.php"; $moduleId = "sale"; Bitrix\Main\Loader::includeModule('sale'); use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); $ID = intval($_GET["ID"]); /** @var \Bitrix\Sale\Order $saleOrder */ if (!isset($saleOrder) || !$saleOrder instanceof \Bitrix\Sale\Order) { $saleOrder = \Bitrix\Sale\Order::load($ID); } $shipmentCollection = $saleOrder->getShipmentCollection(); $paymentCollection = $saleOrder->getPaymentCollection(); $sTableHistory = "table_order_history"; $oSortHistory = new CAdminSorting($sTableHistory); $lAdminHistory = new CAdminList($sTableHistory, $oSortHistory); //FILTER ORDER CHANGE HISTORY $arFilterFieldsHistory = array("filter_user", "filter_date_history", "filter_type"); $lAdminHistory->InitFilter($arFilterFieldsHistory); $by = trim(array_key_exists('by', $_REQUEST) ? $_REQUEST['by'] : ''); if ('' == $by) { $by = 'DATE_CREATE'; } $order = trim(array_key_exists('order', $_REQUEST) ? $_REQUEST['order'] : ''); if ('' == $order) {
/** * @param Sale\Order $order * @return int */ public static function getUserBudgetByOrder(Sale\Order $order) { $budget = static::getUserBudget($order->getUserId(), $order->getCurrency()); if ($userBudgetPool = static::getUserBudgetPool($order->getUserId())) { foreach ($userBudgetPool->get() as $userBudgetDat) { $budget += $userBudgetDat['SUM']; } } return $budget; }
public static function loadForOrder(Order $order) { $objects = array(); $propertyValues = array(); $propertyValuesMap = array(); $properties = array(); if ($order->getId() > 0) { $result = OrderPropsValueTable::getList(array('select' => array('ID', 'NAME', 'VALUE', 'CODE', 'ORDER_PROPS_ID'), 'filter' => array('ORDER_ID' => $order->getId()))); while ($row = $result->fetch()) { $propertyValues[$row['ID']] = $row; $propertyValuesMap[$row['ORDER_PROPS_ID']] = $row['ID']; } } $filter = array(); if ($order->getPersonTypeId() > 0) { $filter[] = array('=PERSON_TYPE_ID' => $order->getPersonTypeId()); } $result = OrderPropsTable::getList(array('select' => array('ID', 'PERSON_TYPE_ID', 'NAME', 'TYPE', 'REQUIRED', 'DEFAULT_VALUE', 'SORT', 'USER_PROPS', 'IS_LOCATION', 'PROPS_GROUP_ID', 'DESCRIPTION', 'IS_EMAIL', 'IS_PROFILE_NAME', 'IS_PAYER', 'IS_LOCATION4TAX', 'IS_FILTERED', 'CODE', 'IS_ZIP', 'IS_PHONE', 'IS_ADDRESS', 'ACTIVE', 'UTIL', 'INPUT_FIELD_LOCATION', 'MULTIPLE', 'SETTINGS'), 'filter' => $filter, 'order' => array('SORT' => 'ASC'))); while ($row = $result->fetch()) { $properties[$row['ID']] = $row; } $result = OrderPropsRelationTable::getList(array('select' => array('PROPERTY_ID', 'ENTITY_ID', 'ENTITY_TYPE'), 'filter' => array('PROPERTY_ID' => array_keys($properties)))); $propRelation = array(); while ($row = $result->fetch()) { if (empty($row)) { continue; } if (!isset($propRelation[$row['PROPERTY_ID']])) { $propRelation[$row['PROPERTY_ID']] = array(); } $propRelation[$row['PROPERTY_ID']][] = $row; } foreach ($properties as $property) { $id = $property['ID']; if (isset($propertyValuesMap[$id])) { $fields = $propertyValues[$propertyValuesMap[$id]]; unset($propertyValues[$propertyValuesMap[$id]]); unset($propertyValuesMap[$id]); } else { if ($property['ACTIVE'] == 'N' || $property['UTIL'] == 'Y') { continue; } $fields = null; } if (isset($propRelation[$id])) { $objects[] = new static($property, $fields, $propRelation[$id]); } else { $objects[] = new static($property, $fields); } } foreach ($propertyValues as $propertyValue) { $objects[] = new static(null, $propertyValue); } return $objects; }
/** * <p>Метод снимает указанную сумму с внутреннего счета пользователя. Если на внутреннем счете не достаточно средств, то снимается максимально доступная сумма (т.е. все доступные средства). Метод динамичный.</p> * * * @param int $userID Код пользователя. </h * * @param double $paySum Снимаемая сумма. * * @param string $payCurrency Валюта снимаемой суммы. * * @param $int Код заказа, если снятие денег относится к заказу. * * @param orderI $D = 0] * * @return double <p>Метод возвращает реально снятую со счета сумму или <i>false</i> в * случае ошибки.</p> <p></p><div class="note"> <b>Замечание:</b> деньги снимаются * только со счета той же валюты, которая передается параметром в * метод. Счета пользователя в другой валюте не затрагиваются.</div> <a * name="examples"></a> * * <h4>Example</h4> * <pre> * <? * // Оплатим полностью или хотя бы частично заказ номер 21 со счета пользователя * * $arOrder = CSaleOrder::GetByID(21); * * $withdrawSum = CSaleUserAccount::Withdraw( * $arOrder["USER_ID"], * $arOrder["PRICE"], * $arOrder["CURRENCY"], * $arOrder["ID"] * ); * * if ($withdrawSum > 0) * { * $arFields = array( * "SUM_PAID" => $withdrawSum, * "USER_ID" => $arOrder["USER_ID"] * ); * CSaleOrder::Update($arOrder["ID"], $arFields); * * if ($withdrawSum == $arOrder["PRICE"]) * CSaleOrder::PayOrder($arOrder["ID"], "Y", False, False); * } * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleuseraccount/csaleuseraccount.withdraw.php * @author Bitrix */ public static function Withdraw($userID, $paySum, $payCurrency, $orderID = 0) { global $DB; $errorCode = ""; $userID = IntVal($userID); if ($userID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTYID"), "EMPTY_USER_ID"); return False; } $paySum = str_replace(",", ".", $paySum); $paySum = DoubleVal($paySum); if ($paySum <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTY_SUM"), "EMPTY_SUM"); return False; } $payCurrency = Trim($payCurrency); if (strlen($payCurrency) <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTY_CUR"), "EMPTY_CURRENCY"); return False; } $orderID = IntVal($orderID); if (!CSaleUserAccount::Lock($userID, $payCurrency)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_ACCOUNT_NOT_LOCKED"), "ACCOUNT_NOT_LOCKED"); return False; } $currentBudget = 0.0; // Check current user account budget $dbUserAccount = CSaleUserAccount::GetList(array(), array("USER_ID" => $userID, "CURRENCY" => $payCurrency)); if ($arUserAccount = $dbUserAccount->Fetch()) { $currentBudget = DoubleVal($arUserAccount["CURRENT_BUDGET"]); if ($orderID > 0) { /** @var \Bitrix\Sale\Order $order */ if ($order = \Bitrix\Sale\Order::load($orderID)) { /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ if (($paymentCollection = $order->getPaymentCollection()) && $paymentCollection->isExistsInnerPayment()) { /** @var \Bitrix\Sale\Payment $payment */ if (($payment = $paymentCollection->getInnerPayment()) && $payment->isPaid()) { return 0; } } } } if ($currentBudget > 0) { $withdrawSum = $paySum; if ($withdrawSum > $currentBudget) { $withdrawSum = $currentBudget; } $arFields = array("CURRENT_BUDGET" => $currentBudget - $withdrawSum); CSaleUserAccount::Update($arUserAccount["ID"], $arFields); $arFields = array("USER_ID" => $userID, "TRANSACT_DATE" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID))), "AMOUNT" => $withdrawSum, "CURRENCY" => $payCurrency, "DEBIT" => "N", "ORDER_ID" => $orderID > 0 ? $orderID : False, "DESCRIPTION" => "ORDER_PAY", "EMPLOYEE_ID" => $GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : False); CSaleUserTransact::Add($arFields); CSaleUserAccount::UnLock($userID, $payCurrency); return $withdrawSum; } } CSaleUserAccount::UnLock($userID, $payCurrency); return False; }
/** * @param array $oldOrder * @return Shipment * @internal */ public static function convertOrderOldToNew(array $oldOrder) { $siteId = isset($oldOrder["SITE_ID"]) ? $oldOrder["SITE_ID"] : SITE_ID; $newOrder = \Bitrix\Sale\Order::create($siteId, null, $oldOrder["CURRENCY"]); $dbPersonType = \CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array("ACTIVE" => "Y", "LID" => $siteId)); if ($arPersonType = $dbPersonType->GetNext()) { $personTypeId = $arPersonType["ID"]; } else { $personTypeId = 1; } $newOrder->setPersonTypeId($personTypeId); $newOrder->setFieldNoDemand("PRICE", $oldOrder["PRICE"]); $basket = \Bitrix\Sale\Basket::create($siteId); $settableFields = array_flip(\Bitrix\Sale\BasketItemBase::getSettableFields()); if (!empty($oldOrder["ITEMS"]) && is_array($oldOrder["ITEMS"])) { foreach ($oldOrder["ITEMS"] as $oldBasketItem) { $newBasketItem = $basket->createItem($oldBasketItem["MODULE"], $oldBasketItem["PRODUCT_ID"]); $oldBasketItem = array_intersect_key($oldBasketItem, $settableFields); $newBasketItem->setFieldsNoDemand($oldBasketItem); } } $props = $newOrder->getPropertyCollection(); if (!empty($oldOrder['PROPERTIES']) && is_array($oldOrder['PROPERTIES'])) { $r = $props->setValuesFromPost($oldOrder, $_FILES); } $newOrder->setBasket($basket); if ($loc = $props->getDeliveryLocation()) { $loc->setValue($oldOrder["LOCATION_TO"]); } if ($loc = $props->getDeliveryLocationZip()) { $loc->setValue($oldOrder["LOCATION_ZIP"]); } /** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */ $shipmentCollection = $newOrder->getShipmentCollection(); $shipment = $shipmentCollection->createItem(); $shipment->setField("CURRENCY", $oldOrder["CURRENCY"]); $shipmentItemCollection = $shipment->getShipmentItemCollection(); foreach ($newOrder->getBasket() as $item) { $shipmentItem = $shipmentItemCollection->createItem($item); $shipmentItem->setQuantity($item->getQuantity()); if (strlen($shipmentItem->getField("DIMENSIONS"))) { $shipmentItem->setField("DIMENSIONS", unserialize($shipmentItem->getField("DIMENSIONS"))); } } if (isset($arOrder["DELIVERY_EXTRA_SERVICES"])) { $shipment->setExtraServices($arOrder["DELIVERY_EXTRA_SERVICES"]); } return $shipment; }
Asset::getInstance()->addCss('/bitrix/themes/.default/sale.css'); /** @var null|\Bitrix\Sale\Order $saleOrder */ $saleOrder = null; $shipment = null; $dataArray = array(); $dataForRecovery = array(); $errors = array(); $request = Application::getInstance()->getContext()->getRequest(); $lang = Application::getInstance()->getContext()->getLanguage(); $orderId = intval($request->get('order_id')); $shipmentId = intval($request->get('shipment_id')); $siteId = Application::getInstance()->getContext()->getSite(); $backUrl = $request->get('backurl'); $save = $_SERVER["REQUEST_METHOD"] == "POST" && (isset($_POST["apply"]) || isset($_POST["save"])); $refresh = $_SERVER["REQUEST_METHOD"] == "POST" && !$save; if ($orderId <= 0 || !($saleOrder = Bitrix\Sale\Order::load($orderId))) { LocalRedirect("/bitrix/admin/sale_order.php?lang=" . $lang . GetFilterParams("filter_", false)); } $shipmentCollection = $saleOrder->getShipmentCollection(); if ($request->get('delete') == 'Y' && check_bitrix_sessid()) { $shipment = $shipmentCollection->getItemById($shipmentId); if ($shipment) { $delResult = $shipment->delete(); if (!$delResult->isSuccess()) { $errors = $delResult->getErrorMessages(); } else { $result = $saleOrder->save(); if ($result->isSuccess()) { if ($backUrl) { LocalRedirect($backUrl); } else {
public static function getScripts(Order $order, $userId) { $langPhrases = array("SALE_ORDER_STATUS_SAVE", "SALE_ORDER_STATUS_CANCEL", "SALE_ORDER_STATUS_CHANGE_ERROR", "SALE_ORDER_STATUS_CANCEL_ERROR", "SALE_ORDER_STATUS_CANCEL_CANCEL", "SALE_ORDER_STATUS_CHANGED_SUCCESS", "SALE_ORDER_STATUS_CANCELED", "SALE_ORDER_STATUS_CANCELING"); $result = ' <script type="text/javascript"> BX.ready(function(){ BX.Sale.Admin.OrderEditPage.registerFieldsUpdaters({ STATUS_ID: { callback: BX.Sale.Admin.OrderEditPage.setStatus, context: this } }); BX.Sale.Admin.OrderEditPage.statusesNames = ' . \CUtil::PhpToJSObject(self::getStatusesList($userId, $order->getField('STATUS_ID'))) . '; BX.Sale.Admin.OrderEditPage.callFieldsUpdaters(' . \CUtil::PhpToJSObject(self::prepareData($order)) . ');'; foreach ($langPhrases as $phrase) { $result .= ' BX.message({' . $phrase . ': "' . \CUtil::JSEscape(Loc::getMessage($phrase)) . '"});'; } $result .= '}); </script>'; return $result; }
/** * @internal * @param Sale\Order $order * @return array */ public static function convertOrderToArray(Sale\Order $order) { $fields = $order->getFieldValues(); //getWeight $fields = array_merge($fields, array('ORDER_WEIGHT' => 0, 'BASKET_ITEMS' => array(), 'ORDER_PROP' => array(), 'DISCOUNT_LIST' => array(), 'TAX_LIST' => array(), 'VAT_RATE' => $order->getVatRate(), 'VAT_SUM' => $order->getVatSum())); /** @var Sale\Basket $basket */ if ($basket = $order->getBasket()) { /** @var Sale\BasketItem $basketItem */ foreach ($basket as $basketItem) { $fields['BASKET_ITEMS'][] = BasketCompatibility::convertBasketItemToArray($basketItem); } } /** @var Sale\PropertyValueCollection $basket */ if ($propertyCollection = $order->getPropertyCollection()) { /** @var Sale\PropertyValue $property */ foreach ($propertyCollection as $property) { // $propertyValue = $property->getValue(); $fields['ORDER_PROP'][$property->getPropertyId()] = $property->getValue(); } } if ($propProfileName = $propertyCollection->getProfileName()) { $fields['PROFILE_NAME'] = $propProfileName->getValue(); } if ($propPayerName = $propertyCollection->getPayerName()) { $fields['PAYER_NAME'] = $propPayerName->getValue(); } if ($propUserEmail = $propertyCollection->getUserEmail()) { $fields['USER_EMAIL'] = $propUserEmail->getValue(); } if ($propDeliveryLocationZip = $propertyCollection->getDeliveryLocationZip()) { $fields['DELIVERY_LOCATION_ZIP'] = $propDeliveryLocationZip->getValue(); } if ($propDeliveryLocation = $propertyCollection->getDeliveryLocation()) { $fields['DELIVERY_LOCATION'] = $propDeliveryLocation->getValue(); } if ($propTaxLocation = $propertyCollection->getTaxLocation()) { $fields['TAX_LOCATION'] = $propTaxLocation->getValue(); } /** @var Sale\ShipmentCollection $shipmentCollection */ if ($shipmentCollection = $order->getShipmentCollection()) { $fields['ORDER_WEIGHT'] = $shipmentCollection->getWeight(); } $fields['DISCOUNT_LIST'] = DiscountCompatibility::getOldDiscountResult(); /** @var Sale\Tax $tax */ if ($tax = $order->getTax()) { $fields['TAX_LIST'] = $tax->getTaxList(); } return $fields; }
protected function updatePaySystemInfoAction() { if ($this->request["orderId"]) { $orderId = $this->request["orderId"]; } else { throw new UserMessageException("Incorrect order ID!"); } if ($this->request["paymentId"]) { $paymentId = $this->request["paymentId"]; } else { throw new UserMessageException("Incorrect payment ID!"); } /** @var \Bitrix\Sale\Order $order */ $order = Sale\Order::load($orderId); if ($order) { /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ $paymentCollection = $order->getPaymentCollection(); /** @var \Bitrix\Sale\Payment $payment */ $payment = $paymentCollection->getItemById($paymentId); if ($payment) { $psResultFile = ''; $psParams = Admin\Blocks\OrderPayment::getPaySystemParams($payment->getPaymentSystemId(), $order->getPersonTypeId()); $psActionPath = $_SERVER["DOCUMENT_ROOT"] . $psParams["ACTION_FILE"]; $psActionPath = str_replace("\\", "/", $psActionPath); while (substr($psActionPath, strlen($psActionPath) - 1, 1) == "/") { $psActionPath = substr($psActionPath, 0, strlen($psActionPath) - 1); } if (file_exists($psActionPath) && is_dir($psActionPath)) { if (file_exists($psActionPath . "/result.php") && is_file($psActionPath . "/result.php")) { $psResultFile = $psActionPath . "/result.php"; } } elseif (strlen($psParams["RESULT_FILE"]) > 0) { if (file_exists($_SERVER["DOCUMENT_ROOT"] . $psParams["RESULT_FILE"]) && is_file($_SERVER["DOCUMENT_ROOT"] . $psParams["RESULT_FILE"])) { $psResultFile = $_SERVER["DOCUMENT_ROOT"] . $psParams["RESULT_FILE"]; } } if (strlen($psResultFile) > 0) { \CSalePaySystemAction::InitParamArrays($order->getFieldValues(), $orderId, $psParams["PARAMS"], array(), $payment->getFieldValues()); try { if (!(include $psResultFile)) { $this->addResultError(GetMessage("SALE_OA_ERROR_PAY_SYSTEM_INFO")); } } catch (SystemException $e) { $this->addResultError($e->getMessage()); } } } } }
/** * The agent function. Moves reserved quantity back to the quantity field for each product * for orders which were placed earlier than specific date * * @return agent name string */ public static function ClearProductReservedQuantity() { global $DB, $USER; if (!is_object($USER)) { $USER = new CUser(); } $days_ago = (int) COption::GetOptionString("sale", "product_reserve_clear_period"); if ($days_ago > 0) { $shipmentList = array(); $date = new \Bitrix\Main\Type\DateTime(); $filter = array('filter' => array("<=DATE_INSERT" => $date->add('-' . $days_ago . ' day'), "=SHIPMENT.RESERVED" => "Y", "=SHIPMENT.DEDUCTED" => "N", "=SHIPMENT.MARKED" => "N", "=SHIPMENT.ALLOW_DELIVERY" => "N", "=PAYED" => "N", "=CANCELED" => "N"), 'select' => array("ID", "SHIPMENT_ID" => "SHIPMENT.ID", "SHIPMENT_RESERVED" => "SHIPMENT.RESERVED", "SHIPMENT_DEDUCTED" => "SHIPMENT.DEDUCTED", "DATE_INSERT", "PAYED", "CANCELED", "MARKED")); $res = \Bitrix\Sale\Internals\OrderTable::getList($filter); while ($data = $res->fetch()) { if (!array_key_exists($data['ID'], $shipmentList)) { $shipmentList[$data['ID']] = array(); } if (in_array($data['SHIPMENT_ID'], $shipmentList[$data['ID']])) { continue; } $shipmentList[$data['ID']][] = $data['SHIPMENT_ID']; } if (!empty($shipmentList)) { foreach ($shipmentList as $orderId => $shipmentData) { /** @var Sale\Order $order */ $order = Sale\Order::load($orderId); $orderSaved = false; $errors = array(); try { /** @var Sale\ShipmentCollection $shipmentCollection */ if ($shipmentCollection = $order->getShipmentCollection()) { foreach ($shipmentData as $shipmentId) { /** @var Sale\Shipment $shipment */ if ($shipment = $shipmentCollection->getItemById($shipmentId)) { $r = $shipment->tryUnreserve(); if (!$r->isSuccess()) { if (!$shipment->isMarked()) { $shipment->setField('MARKED', 'Y'); if (is_array($r->getErrorMessages())) { $oldErrorText = $shipment->getField('REASON_MARKED'); foreach ($r->getErrorMessages() as $error) { $oldErrorText .= (strval($oldErrorText) != '' ? "\n" : "") . $error; } $shipment->setField('REASON_MARKED', $oldErrorText); } } } } } } $r = $order->save(); if ($r->isSuccess()) { $orderSaved = true; } else { $errors = $r->getErrorMessages(); } } catch (Exception $e) { $errors[] = $e->getMessage(); } if (!$orderSaved) { if (!empty($errors)) { $oldErrorText = $order->getField('REASON_MARKED'); foreach ($errors as $error) { $oldErrorText .= (strval($oldErrorText) != '' ? "\n" : "") . $error; } Sale\Internals\OrderTable::update($order->getId(), array("MARKED" => "Y", "REASON_MARKED" => $oldErrorText)); } } } } } return "CSaleOrder::ClearProductReservedQuantity();"; }
/** * @param Order $order * @return Result * @throws NotSupportedException */ private static function applyShipment(Order $order) { $result = new Result(); /** @var ShipmentCollection $shipmentCollection */ $shipmentCollection = $order->getShipmentCollection(); /** @var Shipment $shipment */ foreach ($shipmentCollection as $shipment) { /** @var Result $r */ $r = static::shipShipment($shipment); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } return $result; }
$key = CSalePaySystemAction::GetParamValue("API_PASSWORD"); if (isset($_SERVER['HTTP_X_API_SIGNATURE']) && strlen($key) > 0) { $key = CSalePaySystemAction::GetParamValue("API_PASSWORD"); $params = $_POST; ksort($params); $check = base64_encode(sha1($key, implode("|", array_values($params)))); if ($check != $_SERVER['HTTP_X_API_SIGNATURE']) { qiwiWalletXmlResponse(QIWI_WALLET_ERROR_CODE_AUTH); } } else { qiwiWalletXmlResponse(QIWI_WALLET_ERROR_CODE_AUTH); } } list($orderId, $paymentId) = explode(':', $_POST['bill_id']); /** @var \Bitrix\Sale\Order $order */ $order = Order::load($orderId); if ($order) { $arOrder = $order->getFieldValues(); $payment = $order->getPaymentCollection()->getItemById($paymentId); $paidInfo = array("PS_STATUS" => $_POST['status'] == "paid" ? "Y" : "N", "PS_STATUS_CODE" => substr($_POST['status'], 0, 5), "PS_STATUS_MESSAGE" => Loc::getMessage("SALE_QWH_STATUS_MESSAGE_" . strtoupper($_POST['status'])), "PS_RESPONSE_DATE" => \Bitrix\Main\Type\DateTime::createFromTimestamp(time()), "PS_SUM" => (double) $_POST['amount'], "PS_CURRENCY" => $_POST['ccy'], "PS_STATUS_DESCRIPTION" => ""); if ((int) $_POST['error']) { $paidInfo['PS_STATUS_DESCRIPTION'] = "Error: " . Loc::getMessage("SALE_QWH_ERROR_CODE_" . $_POST['error']); $payment->setFields($paidInfo); qiwiWalletXmlResponse(QIWI_WALLET_ERROR_CODE_OTHER); } foreach ($_POST as $key => $value) { $paidInfo['PS_STATUS_DESCRIPTION'] .= "{$key}:{$value}, "; } $payment->setFields($paidInfo); $changeStatusPay = CSalePaySystemAction::GetParamValue("CHANGE_STATUS_PAY") == "Y"; if ($_POST['status'] == "paid" && $changeStatusPay) {
protected function saveTrackingNumberAction() { $trackingNumber = ''; if ($this->request["orderId"]) { $orderId = $this->request["orderId"]; } else { throw new UserMessageException("Incorrect order ID!"); } if ($this->request["shipmentId"]) { $shipmentId = $this->request["shipmentId"]; } else { throw new UserMessageException("Incorrect shipment ID!"); } if ($this->request['trackingNumber']) { $trackingNumber = $this->request['trackingNumber']; } /** @var \Bitrix\Sale\Order $order */ $order = Sale\Order::load($orderId); if ($order) { /** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */ $shipmentCollection = $order->getShipmentCollection(); /** @var \Bitrix\Sale\Payment $payment */ $shipment = $shipmentCollection->getItemById($shipmentId); if ($shipment) { $result = $shipment->setField('TRACKING_NUMBER', $trackingNumber); if ($result->isSuccess()) { $result = $order->save(); if (!$result->isSuccess()) { $messages = join(', ', $result->getErrorMessages()); $this->addResultError($messages); } } } } }
/** * @param array $list * @return Sale\Result * @throws \Bitrix\Main\ArgumentNullException */ public static function setBasketFields(array $list) { $result = new Sale\Result(); $order = null; $basket = null; $basketItem = null; $orderId = null; foreach ($list as $basketId => $fields) { $basketItemResult = static::loadEntityFromBasket($basketId); if ($basketItemResult->isSuccess()) { $basketItemResultList = $basketItemResult->getData(); if (isset($basketItemResultList['BASKET'])) { /** @var Sale\Basket $basket */ $basket = $basketItemResultList['BASKET']; } if (isset($basketItemResultList['BASKET_ITEM'])) { /** @var Sale\BasketItem $basketItem */ $basketItem = $basketItemResultList['BASKET_ITEM']; } if (isset($basketItemResultList['ORDER'])) { /** @var Sale\Order $order */ $order = $basketItemResultList['ORDER']; } } if ($basketItem === null) { $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_BASKET_COMPATIBLE_BASKET_ITEM_NOT_FOUND'), 'BASKET_ITEM_NOT_FOUND')); return $result; } if ($orderId === null && isset($fields['ORDER_ID']) && intval($fields['ORDER_ID']) > 0) { $orderId = (int) $fields['ORDER_ID']; } if (isset($fields['ORDER_ID'])) { unset($fields['ORDER_ID']); } $basketItem->setFields($fields); if ($order === null && intval($orderId) > 0) { /** @var Sale\Order $order */ $order = Sale\Order::load($orderId); } } if ($order === null) { return $result; } if ($order !== null && $basket !== null) { $r = static::appendBasketToOrder($order, $basket->getOrderableItems()); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } /** @var Sale\Result $r */ $r = $order->save(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } return $result; }
/** * @param Order $order * @param array $shipments * @return Result * @throws SystemException */ public static function updateData(Order &$order, array $shipments) { global $USER; $result = new Result(); $data = array(); $basketResult = null; if (!$order) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_SHIPMENT_ERROR_ORDER_NOT_FOUND'))); return $result; } $shipmentCollection = $order->getShipmentCollection(); $isStartField = $shipmentCollection->isStartField(); foreach ($shipments as $item) { $shipmentId = intval($item['SHIPMENT_ID']); $isNew = $shipmentId <= 0; if ($isNew) { self::$shipment = $shipmentCollection->createItem(); } else { self::$shipment = $shipmentCollection->getItemById($shipmentId); if (!self::$shipment) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_SHIPMENT_ERROR_SHIPMENT_NOT_FOUND'))); continue; } } self::$defaultFields = self::$shipment->getFieldValues(); /** @var \Bitrix\Sale\BasketItem $product */ $countItems = count(self::$shipment->getShipmentItemCollection()); $systemShipment = $shipmentCollection->getSystemShipment(); $systemShipmentItemCollection = $systemShipment->getShipmentItemCollection(); $products = array(); if (!isset($item['PRODUCT']) && self::$shipment->getId() <= 0) { $basket = $order->getBasket(); if ($basket) { $basketItems = $basket->getBasketItems(); foreach ($basketItems as $product) { $systemShipmentItem = $systemShipmentItemCollection->getItemByBasketCode($product->getBasketCode()); if ($product->isBundleChild() || !$systemShipmentItem || $systemShipmentItem->getQuantity() <= 0) { continue; } $products[] = array('AMOUNT' => $product->getQuantity(), 'BASKET_CODE' => $product->getBasketCode()); } } } else { $products = $item['PRODUCT']; } if ($item['DEDUCTED'] == 'Y') { $basketResult = OrderBasketShipment::updateData($order, self::$shipment, $products); if (!$basketResult->isSuccess()) { $result->addErrors($basketResult->getErrors()); } } $extraServices = $item['EXTRA_SERVICES'] ? $item['EXTRA_SERVICES'] : array(); $shipmentFields = array('COMPANY_ID' => isset($item['COMPANY_ID']) && $item['COMPANY_ID'] > 0 ? $item['COMPANY_ID'] : 0, 'DEDUCTED' => $item['DEDUCTED'], 'DELIVERY_DOC_NUM' => $item['DELIVERY_DOC_NUM'], 'TRACKING_NUMBER' => $item['TRACKING_NUMBER'], 'CURRENCY' => $order->getCurrency(), 'COMMENTS' => $item['COMMENTS'], 'STATUS_ID' => $isNew ? DeliveryStatus::getInitialStatus() : $item['STATUS_ID']); if ($item['DELIVERY_DOC_DATE']) { try { $shipmentFields['DELIVERY_DOC_DATE'] = new Date($item['DELIVERY_DOC_DATE']); } catch (Main\ObjectException $exception) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_SHIPMENT_ERROR_UNCORRECT_FORM_DATE'))); } } $shipmentFields['DELIVERY_ID'] = $item['PROFILE'] > 0 ? $item['PROFILE'] : $item['DELIVERY_ID']; try { $service = Services\Manager::getService($shipmentFields['DELIVERY_ID']); if ($service->getParentService()) { $shipmentFields['DELIVERY_NAME'] = $service->getParentService()->getName() . ':' . $service->getName(); } else { $shipmentFields['DELIVERY_NAME'] = $service->getName(); } } catch (Main\ArgumentNullException $e) { $result->addError(new EntityError(Loc::getMessage('SALE_ORDER_SHIPMENT_ERROR_NO_DELIVERY_SERVICE'))); } $responsibleId = self::$shipment->getField('RESPONSIBLE_ID'); if ($item['RESPONSIBLE_ID'] != $responsibleId || empty($responsibleId)) { if (isset($item['RESPONSIBLE_ID'])) { $shipmentFields['RESPONSIBLE_ID'] = $item['RESPONSIBLE_ID']; } else { $shipmentFields['RESPONSIBLE_ID'] = $order->getField('RESPONSIBLE_ID'); } if (!empty($shipmentFields['RESPONSIBLE_ID'])) { $shipmentFields['EMP_RESPONSIBLE_ID'] = $USER->getID(); $shipmentFields['DATE_RESPONSIBLE_ID'] = new DateTime(); } } if ($extraServices) { self::$shipment->setExtraServices($extraServices); } $setFieldsResult = self::$shipment->setFields($shipmentFields); if (!$setFieldsResult->isSuccess()) { $result->addErrors($setFieldsResult->getErrors()); } self::$shipment->setStoreId($item['DELIVERY_STORE_ID']); if ($item['DEDUCTED'] == 'N') { $basketResult = OrderBasketShipment::updateData($order, self::$shipment, $products); if (!$basketResult->isSuccess()) { $result->addErrors($basketResult->getErrors()); } } try { $priceDeliveryInfo = array(); if ($item['CUSTOM_PRICE_DELIVERY'] != 'Y') { $totalPrice = self::getDeliveryPrice(self::$shipment); } else { $totalPrice = (double) str_replace(',', '.', $item['BASE_PRICE_DELIVERY']); } } catch (\Exception $e) { $totalPrice = 0; } $priceDeliveryInfo['CUSTOM_PRICE_DELIVERY'] = $item['CUSTOM_PRICE_DELIVERY']; $priceDeliveryInfo['BASE_PRICE_DELIVERY'] = $totalPrice; self::$shipment->setFields($priceDeliveryInfo); self::$shipment->setField('ALLOW_DELIVERY', $item['ALLOW_DELIVERY']); $data['SHIPMENT'][] = self::$shipment; } if ($isStartField) { $hasMeaningfulFields = $shipmentCollection->hasMeaningfulField(); /** @var Result $r */ $r = $shipmentCollection->doFinalAction($hasMeaningfulFields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } $result->setData($data); return $result; }
/** * Function gets pay system info from database, no cache is used here * @return void */ protected function obtainDataPaySystem() { if (empty($this->dbResult["ID"])) { return; } foreach ($this->dbResult['PAYMENT'] as &$payment) { if (intval($payment["PAY_SYSTEM_ID"])) { $payment["PAY_SYSTEM"] = \Bitrix\Sale\PaySystem\Manager::getById($payment["PAY_SYSTEM_ID"]); $payment["PAY_SYSTEM"]['NAME'] = htmlspecialcharsbx($payment["PAY_SYSTEM"]['NAME']); } if ($payment["PAID"] != "Y" && $this->dbResult["CANCELED"] != "Y") { $payment['BUFFERED_OUTPUT'] = ''; $payment['ERROR'] = ''; $service = new \Bitrix\Sale\PaySystem\Service($payment["PAY_SYSTEM"]); if ($service) { $payment["CAN_REPAY"] = "Y"; if ($service->getField("NEW_WINDOW") == "Y") { $payment["PAY_SYSTEM"]["PSA_ACTION_FILE"] = htmlspecialcharsbx($this->arParams["PATH_TO_PAYMENT"]) . '?ORDER_ID=' . urlencode(urlencode($this->dbResult["ACCOUNT_NUMBER"])) . '&PAYMENT_ID=' . $payment['ID']; } else { CSalePaySystemAction::InitParamArrays($this->dbResult, $this->requestData["ID"], '', array(), $payment); // for compatibility $actionFile = $service->getField('ACTION_FILE'); $map = CSalePaySystemAction::getOldToNewHandlersMap(); $oldHandler = array_search($actionFile, $map); if ($oldHandler !== false && !$service->isCustom()) { $actionFile = $oldHandler; } $pathToAction = Main\Application::getDocumentRoot() . $actionFile; $pathToAction = str_replace("\\", "/", $pathToAction); while (substr($pathToAction, strlen($pathToAction) - 1, 1) == "/") { $pathToAction = substr($pathToAction, 0, strlen($pathToAction) - 1); } if (file_exists($pathToAction)) { if (is_dir($pathToAction) && file_exists($pathToAction . "/payment.php")) { $pathToAction .= "/payment.php"; } $payment["PAY_SYSTEM"]["PSA_ACTION_FILE"] = $pathToAction; } $encoding = $service->getField("ENCODING"); if (strlen($encoding) > 0) { define("BX_SALE_ENCODING", $encoding); AddEventHandler("main", "OnEndBufferContent", array($this, "changeBodyEncoding")); } /** @var \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load($this->dbResult["ID"]); if ($order) { /** @var \Bitrix\Sale\PaymentCollection $paymentCollection */ $paymentCollection = $order->getPaymentCollection(); if ($paymentCollection) { /** @var \Bitrix\Sale\Payment $paymentItem */ $paymentItem = $paymentCollection->getItemById($payment['ID']); if ($paymentItem) { $initResult = $service->initiatePay($paymentItem, null, \Bitrix\Sale\PaySystem\BaseServiceHandler::STRING); if ($initResult->isSuccess()) { $payment['BUFFERED_OUTPUT'] = $initResult->getTemplate(); } else { $payment['ERROR'] = implode('\\n', $initResult->getErrorMessages()); } } } } } $payment["PAY_SYSTEM"]["PSA_NEW_WINDOW"] = $payment["PAY_SYSTEM"]["NEW_WINDOW"]; } } } unset($payment); // for compatibility $this->dbResult['PAY_SYSTEM'] = $this->dbResult['PAYMENT'][0]['PAY_SYSTEM']; $this->dbResult['CAN_REPAY'] = $this->dbResult['PAYMENT'][0]['CAN_REPAY']; }
/** * @param Order $order * @return string HTML */ public static function getView(Order $order, $orderBasket) { $currency = $order->getCurrency(); $orderProps = $order->getPropertyCollection(); if ($email = $orderProps->getUserEmail()) { $email = $email->getViewHtml(); } if ($phone = $orderProps->getPhone()) { $phone = $phone->getViewHtml(); } if ($name = $orderProps->getPayerName()) { $name = $name->getViewHtml(); } $totalPrices = OrderEdit::getTotalPrices($order, $orderBasket, false); $result = ' <div class="adm-bus-orderinfoblock adm-detail-tabs-block-pin" id="sale-order-edit-block-order-info"> <div class="adm-bus-orderinfoblock-container"> <div class="adm-bus-orderinfoblock-title">' . Loc::getMessage("SALE_ORDER_INFO", array("#ID#" => $order->getId(), "#NUM#" => strlen($order->getField("ACCOUNT_NUMBER")) > 0 ? $order->getField("ACCOUNT_NUMBER") : $order->getId(), "#DATE#" => $order->getDateInsert()->toString())) . " [" . $order->getSiteId() . "]" . '<div class="adm-bus-orderinfoblock-status success" id="order_info_order_status_name">' . $order->getField('STATUS_ID') . '</div> <!-- TODO --> </div> <div class="adm-bus-orderinfoblock-content"> <div class="adm-bus-orderinfoblock-content-block-customer"> <ul class="adm-bus-orderinfoblock-content-customer-info"> <li> <span class="adm-bus-orderinfoblock-content-customer-info-param">' . Loc::getMessage("SALE_ORDER_INFO_FIO") . ':</span> <span class="adm-bus-orderinfoblock-content-customer-info-value" id="order_info_buyer_name">' . $name . '</span> </li> <li> <span class="adm-bus-orderinfoblock-content-customer-info-param">E-Mail:</span> <span class="adm-bus-orderinfoblock-content-customer-info-value" id="order_info_buyer_email">' . $email . '</span> </li> <li> <span class="adm-bus-orderinfoblock-content-customer-info-param">' . Loc::getMessage("SALE_ORDER_INFO_PHONE") . ':</span> <span class="adm-bus-orderinfoblock-content-customer-info-value" id="order_info_buyer_phone">' . $phone . '</span> </li> </ul> </div> <div class="adm-bus-orderinfoblock-content-block-order"> <ul class="adm-bus-orderinfoblock-content-order-info"> <li> <span class="adm-bus-orderinfoblock-content-order-info-param">' . Loc::getMessage("SALE_ORDER_INFO_PRICE") . '</span> <span class="adm-bus-orderinfoblock-content-order-info-value" id="order_info_price_basket">' . SaleFormatCurrency(floatval($totalPrices["PRICE_BASKET"]), $currency) . '</span> </li> <li class="adm-bus-orderinfoblock-content-redtext"> <span class="adm-bus-orderinfoblock-content-order-info-param">' . Loc::getMessage("SALE_ORDER_INFO_DISCOUNT_PRICE") . '</span> <span class="adm-bus-orderinfoblock-content-order-info-value" id="order_info_price_basket_discount">' . SaleFormatCurrency(floatval($totalPrices["PRICE_BASKET_DISCOUNTED"]), $currency) . '</span> </li> <li> <span class="adm-bus-orderinfoblock-content-order-info-param">' . Loc::getMessage("SALE_ORDER_INFO_DELIVERY_PRICE") . '</span> <span class="adm-bus-orderinfoblock-content-order-info-value" id="order_info_delivery_price">' . SaleFormatCurrency(floatval($order->getDeliveryPrice()), $currency) . '</span> </li> </ul> <ul class="adm-bus-orderinfoblock-content-order-info-result"> <li> <span class="adm-bus-orderinfoblock-content-order-info-param">' . Loc::getMessage("SALE_ORDER_INFO_ALL_PRICE") . '</span> <span class="adm-bus-orderinfoblock-content-order-info-value" id="order_info_buyer_price">' . SaleFormatCurrency(floatval($order->getPrice()), $currency) . '</span> </li> </ul> </div> <div class="adm-bus-orderinfoblock-content-block-last"> ' . Loc::getMessage("SALE_ORDER_INFO_PAYED") . ': ' . SaleFormatCurrency(floatval($order->getSumPaid()), $currency) . '<ul class="adm-bus-orderinfoblock-content-last">'; $updatersContent = ""; foreach (self::getPaymentsInfo($order) as $payment) { $result .= '<a href="#payment_' . $payment["ID"] . '" style="text-decoration: none;"> <li id="sale-admin-order-icon-payment-' . $payment["ID"] . '" class="adm-bus-orderinfoblock-content-last-icon ' . ($payment["IS_PAYED"] ? 'green' : 'red') . '" '; if (strval($payment["LOGOTIP_PATH"]) != '') { $result .= 'style="background-image: url(' . $payment["LOGOTIP_PATH"] . ');" '; } $result .= 'title="' . htmlspecialcharsbx($payment["NAME"]) . '"' . '><span></span></li></a>'; if (strlen($updatersContent) > 0) { $updatersContent .= ",\n"; } $updatersContent .= "\tPAYMENT_PAID_" . $payment["ID"] . ": function(paid) { BX.Sale.Admin.OrderInfo.setIconLamp('payment', '" . $payment["ID"] . "', (paid == 'Y' ? 'green' : 'red')); }"; } $result .= '</ul> ' . Loc::getMessage("SALE_ORDER_INFO_SHIPMENT") . ' <ul class="adm-bus-orderinfoblock-content-last">'; foreach (self::getShipmentsInfo($order) as $shipment) { $result .= '<a href="#shipment_' . $shipment["ID"] . '" style="text-decoration: none;"> <li id="sale-admin-order-icon-shipment-' . $shipment["ID"] . '" class="adm-bus-orderinfoblock-content-last-icon ' . ($shipment["DEDUCTED"] == "Y" ? 'green' : 'red') . '" '; if (strval($shipment["LOGOTIP_PATH"]) != '') { $result .= 'style="background-image: url(' . $shipment["LOGOTIP_PATH"] . ');" '; } $result .= 'title="' . htmlspecialcharsbx($shipment["NAME"]) . '"' . '><span></span></li></a>'; if (strlen($updatersContent) > 0) { $updatersContent .= ",\n"; } $updatersContent .= "\tSHIPMENT_STATUS_" . $shipment["ID"] . ": function(shipmentStatus) { BX.Sale.Admin.OrderInfo.setIconLamp('shipment', '" . $shipment["ID"] . "', (shipmentStatus == 'DF' ? 'green' : 'red')); }"; } $result .= '</ul> </div> </div> <div id="sale-order-edit-block-order-info-pin" onclick="BX.Sale.Admin.OrderEditPage.toggleFix(this.id, \'sale-order-edit-block-order-info\');" class="adm-detail-pin-btn-tabs" style="top: 9px;right: 5px;"></div> </div> </div>'; $orderEditOpts = \CUserOptions::GetOption("sale_admin", "sale_order_edit", array()); $isFixed = isset($orderEditOpts["fix_sale-order-edit-block-order-info"]) && $orderEditOpts["fix_sale-order-edit-block-order-info"] == "Y" ? true : false; if ($isFixed) { $result .= ' <script type="text/javascript"> BX.ready(function(){ setTimeout(function(){BX.Sale.Admin.OrderEditPage.toggleFix("sale-order-edit-block-order-info-pin", "sale-order-edit-block-order-info");},1); }); </script>'; } if (strlen($updatersContent) > 0) { $result .= ' <script type="text/javascript"> BX.ready(function(){ BX.Sale.Admin.OrderEditPage.registerFieldsUpdaters({ ' . $updatersContent . ' }); }); </script>'; } return $result; }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } use Bitrix\Sale\Order; include GetLangFileName(dirname(__FILE__) . "/", "/payment.php"); $inv_id = IntVal($_REQUEST["InvId"]); $paymentId = intval($_REQUEST["shp_payment_id"]); if ($inv_id > 0 && $paymentId > 0) { $bCorrectPayment = True; $out_summ = trim($_REQUEST["OutSum"]); $crc = trim($_REQUEST["SignatureValue"]); /** @var \Bitrix\Sale\Order $order */ $order = Order::load($inv_id); if (!$order) { $bCorrectPayment = false; } $arOrder = $order->getFieldValues(); $payment = $order->getPaymentcollection()->getItemById($paymentId); if (!$payment) { $bCorrectPayment = false; } if ($bCorrectPayment) { CSalePaySystemAction::InitParamArrays($arOrder, $inv_id, '', array(), $payment->getFieldValues()); } $changePayStatus = trim(CSalePaySystemAction::GetParamValue("CHANGE_STATUS_PAY")); $mrh_pass2 = CSalePaySystemAction::GetParamValue("ShopPassword2"); if (strlen($mrh_pass2) <= 0) { $bCorrectPayment = False; }
echo "<p><h3>" . GetMessage("PPL_T1") . "</h3></p>"; echo "<b>" . GetMessage("PPL_T2") . "</b><br>\n"; echo "<li>" . GetMessage("PPL_T3") . ": {$firstname} {$lastname}</li>\n"; echo "<li>" . GetMessage("PPL_T4") . ": {$itemname}</li>\n"; echo "<li>" . GetMessage("PPL_T5") . ": {$amount}</li>\n"; } elseif (strcmp($res, "VERIFIED") == 0) { $strPS_STATUS_MESSAGE = ""; $strPS_STATUS_MESSAGE .= GetMessage("PPL_T3") . ": " . $_POST["first_name"] . " " . $_POST["last_name"] . "; "; $strPS_STATUS_MESSAGE .= "Email: " . $_POST["payer_email"] . "; "; $strPS_STATUS_MESSAGE .= GetMessage("PPL_T4") . ": " . $_POST["item_name"] . "; "; $strPS_STATUS_MESSAGE .= GetMessage("PPL_T5") . ": " . $_POST["mc_gross"] . "; "; $strPS_STATUS_DESCRIPTION = ""; $strPS_STATUS_DESCRIPTION .= "Payment status - " . $_POST["payment_status"] . "; "; $strPS_STATUS_DESCRIPTION .= "Payment sate - " . $_POST["payment_date"] . "; "; /** @var \Bitrix\Sale\Order $order */ $order = Order::load($_POST["custom"]); $payment = $order->getPaymentCollection()->getItemById($_POST["item_number"]); $arOrder = $order->getFieldValues(); $arFields = array("PS_STATUS" => "Y", "PS_STATUS_CODE" => "-", "PS_STATUS_DESCRIPTION" => $strPS_STATUS_DESCRIPTION, "PS_STATUS_MESSAGE" => $strPS_STATUS_MESSAGE, "PS_SUM" => $_POST["mc_gross"], "PS_CURRENCY" => $_POST["mc_currency"], "PS_RESPONSE_DATE" => new \Bitrix\Main\Type\DateTime(), "USER_ID" => $arOrder["USER_ID"]); $arFields["PAY_VOUCHER_NUM"] = $tx; $arFields["PAY_VOUCHER_DATE"] = new \Bitrix\Main\Type\Date(); if (intval($payment->getField('SUM')) == IntVal($_POST["mc_gross"]) && ToLower($_POST["receiver_email"]) == ToLower(CSalePaySystemAction::GetParamValue("BUSINESS")) && $_POST["payment_status"] == "Completed" && strlen($payment->getField("PAY_VOUCHER_NUM")) <= 0 && $payment->getField("PAY_VOUCHER_NUM") != $tx) { $result = $payment->setField('PAID', 'Y'); } if (strlen($payment->getField("PAY_VOUCHER_NUM")) <= 0 || $payment->getField("PAY_VOUCHER_NUM") != $tx) { $result = $payment->setFields($arFields); if ($result->isSuccess()) { $order->save(); } } } else {