示例#1
0
 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));
     }
 }