Example #1
0
 /**
  * @param Order $order
  */
 public static function resetEvents(Order $order = null)
 {
     if ($order !== null) {
         unset(static::$events[$order->getInternalId()]);
     } else {
         static::$events = array();
     }
 }
Example #2
0
 /**
  * @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);
         }
     }
 }
Example #3
0
 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;
 }
Example #4
0
    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;
    }
Example #5
0
 /**
  * @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>';
                }
            }
Example #7
0
 /**
  * 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;
 }
Example #8
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;
 }
Example #9
0
<?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();
        }
    }
Example #10
0
$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'));
Example #11
0
 /**
  * @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;
 }
Example #12
0
/**
 * @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) {
Example #13
0
 /**
  * @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;
 }
Example #14
0
 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;
 }
Example #15
0
 /**
  * <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>
  * &lt;?
  * // Оплатим полностью или хотя бы частично заказ номер 21 со счета пользователя
  * 
  * $arOrder = CSaleOrder::GetByID(21);
  * 
  * $withdrawSum = CSaleUserAccount::Withdraw(
  *         $arOrder["USER_ID"],
  *         $arOrder["PRICE"],
  *         $arOrder["CURRENCY"],
  *         $arOrder["ID"]
  *     );
  * 
  * if ($withdrawSum &gt; 0)
  * {
  *     $arFields = array(
  *             "SUM_PAID" =&gt; $withdrawSum,
  *             "USER_ID" =&gt; $arOrder["USER_ID"]
  *         );
  *     CSaleOrder::Update($arOrder["ID"], $arFields);
  * 
  *     if ($withdrawSum == $arOrder["PRICE"])
  *         CSaleOrder::PayOrder($arOrder["ID"], "Y", False, False);
  * }
  * ?&gt;
  * </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;
 }
Example #16
0
 /**
  * @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;
 }
Example #17
0
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 {
Example #18
0
    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;
 }
Example #20
0
 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());
                 }
             }
         }
     }
 }
Example #21
0
 /**
  * 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();";
 }
Example #22
0
 /**
  * @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;
 }
Example #23
0
    $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) {
Example #24
0
 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;
 }
Example #26
0
 /**
  * @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;
 }
Example #27
0
 /**
  * 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'];
 }
Example #28
0
    /**
     * @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;
    }
Example #29
0
<?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;
    }
Example #30
0
     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 {