protected function cancelOrderAction() { global $USER; $orderId = isset($this->request['orderId']) ? intval($this->request['orderId']) : 0; $canceled = isset($this->request['canceled']) ? $this->request['canceled'] : "N"; $comment = isset($this->request['comment']) ? trim($this->request['comment']) : ""; $errors = array(); if (!\CSaleOrder::CanUserCancelOrder($orderId, $USER->GetUserGroupArray(), $this->userId)) { throw new UserMessageException("Insufficient rights to cancel order"); } /** @var \Bitrix\Sale\Order $saleOrder*/ if (!($saleOrder = \Bitrix\Sale\Order::load($orderId))) { throw new UserMessageException("Can't load order with id: " . $orderId); } $state = $saleOrder->getField("CANCELED"); if ($state != $canceled) { throw new UserMessageException($state == "Y" ? "Order already canceled." : "Order not canceled yet."); } /** @var \Bitrix\Sale\Result $res */ $res = $saleOrder->setField("CANCELED", $canceled == "Y" ? "N" : "Y"); if (!$res->isSuccess()) { $errors = array_merge($errors, $res->getErrorMessages()); } $saleOrder->setField("REASON_CANCELED", $canceled == "N" ? $comment : ""); if (!($res = $saleOrder->save())) { $errors = array_merge($errors, $res->getErrorMessages()); } $canceled = $saleOrder->getField("CANCELED"); $this->addResultData("CANCELED", $canceled); if ($canceled == "Y") { $userInfo = Admin\Blocks\OrderStatus::getUserInfo($saleOrder->getField("EMP_CANCELED_ID")); $this->addResultData("DATE_CANCELED", $saleOrder->getField("DATE_CANCELED")->toString()); $this->addResultData("EMP_CANCELED_ID", $saleOrder->getField("EMP_CANCELED_ID")); $this->addResultData("EMP_CANCELED_NAME", $userInfo["NAME"] . " (" . $userInfo["LOGIN"] . ")"); } if (!empty($errors)) { throw new UserMessageException(implode("<br>\n", $errors)); } }