$errorMsgs = array(); Loc::loadMessages(__FILE__); Bitrix\Main\Loader::includeModule('sale'); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); $arUserGroups = $USER->GetUserGroupArray(); if ($saleModulePermissions == "D") { $APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED")); } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/lib/helpers/admin/orderedit.php"; $allowedStatusesView = array(); //load order if (!empty($_REQUEST["ID"]) && intval($_REQUEST["ID"]) > 0) { $saleOrder = Bitrix\Sale\Order::load($_REQUEST["ID"]); } if ($saleOrder) { $allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('view')); } if (!$saleOrder || !in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesView)) { LocalRedirect("/bitrix/admin/sale_order.php?lang=" . LANGUAGE_ID . GetFilterParams("filter_", false)); } $ID = intval($_REQUEST["ID"]); /** @var Bitrix\Sale\Order $saleOrder */ Admin\OrderEdit::initCouponsData($saleOrder->getUserId(), $ID); CUtil::InitJSCore(); $APPLICATION->SetTitle(Loc::getMessage("SALE_OVIEW_TITLE", array("#ID#" => $saleOrder->getId(), "#NUM#" => strlen($saleOrder->getField('ACCOUNT_NUMBER')) > 0 ? $saleOrder->getField('ACCOUNT_NUMBER') : $saleOrder->getId(), "#DATE#" => $saleOrder->getDateInsert()->toString()))); \Bitrix\Main\Page\Asset::getInstance()->addJs("/bitrix/js/sale/admin/order_edit.js"); ob_start(); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/admin/order_history.php"; $historyContent = ob_get_contents(); ob_end_clean(); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
foreach ($statusIds as $statusId) { if ($statusName = Loc::getMessage("SALE_STATUS_{$statusId}")) { $statusLanguages[$statusId] []= array( 'LID' => $langID, 'NAME' => $statusName, 'DESCRIPTION' => Loc::getMessage("SALE_STATUS_{$statusId}_DESCR"), ); } } } OrderStatus::install(array( 'ID' => $orderPaidStatus, 'SORT' => 150, 'NOTIFY' => 'Y', 'LANG' => $statusLanguages[$orderPaidStatus], )); CSaleStatus::CreateMailTemplate($orderPaidStatus); DeliveryStatus::install(array( 'ID' => $deliveryAssembleStatus, 'SORT' => 310, 'NOTIFY' => 'Y', 'LANG' => $statusLanguages[$deliveryAssembleStatus], )); DeliveryStatus::install(array( 'ID' => $deliveryGoodsStatus, 'SORT' => 320, 'NOTIFY' => 'Y',
/** * @param null $oldPaid * @return Result * @throws Main\ObjectNotFoundException */ protected function onAfterSyncPaid($oldPaid = null) { global $USER; $result = new Result(); /** @var PaymentCollection $paymentCollection */ if (!($paymentCollection = $this->getPaymentCollection())) { throw new Main\ObjectNotFoundException('Entity "PaymentCollection" not found'); } /** @var ShipmentCollection $shipmentCollection */ if (!($shipmentCollection = $this->getShipmentCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found'); } $oldPaidBool = null; if ($oldPaid !== null) { $oldPaidBool = $oldPaid == "Y"; } if ($oldPaid == "N" && $this->isPaid()) { $orderStatus = Config\Option::get('sale', 'status_on_paid', ''); if (strval($orderStatus) != '') { if ($USER && $USER->isAuthorized()) { $statusesList = OrderStatus::getAllowedUserStatuses($USER->getID(), $this->getField('STATUS_ID')); $statusesList = array_keys($statusesList); } else { $statusesList = OrderStatus::getAllStatuses(); } if ($this->getField('STATUS_ID') != $orderStatus && in_array($orderStatus, $statusesList)) { $this->setField('STATUS_ID', $orderStatus); } } } if ($oldPaid !== null && $this->isPaid() != $oldPaidBool) { Internals\EventsPool::addEvent($this, EventActions::EVENT_ON_ORDER_PAID, array('ENTITY' => $this)); Internals\EventsPool::addEvent($this, EventActions::EVENT_ON_ORDER_PAID_SEND_MAIL, array('ENTITY' => $this)); } if (Configuration::getProductReservationCondition() == Configuration::RESERVE_ON_PAY) { if ($paymentCollection->hasPaidPayment()) { $r = $shipmentCollection->tryReserve(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } else { $r = $shipmentCollection->tryUnreserve(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } elseif (Configuration::getProductReservationCondition() == Configuration::RESERVE_ON_FULL_PAY) { if ($oldPaid == "N" && $this->isPaid()) { $r = $shipmentCollection->tryReserve(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } elseif ($oldPaid == "Y" && !$this->isPaid()) { $r = $shipmentCollection->tryUnreserve(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } if (Configuration::needAllowDeliveryOnPay()) { if ($oldPaid == "N" && $this->isPaid()) { $r = $shipmentCollection->allowDelivery(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } elseif ($oldPaid == "Y" && !$this->isPaid()) { $r = $shipmentCollection->disallowDelivery(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } return $result; }
while ($row = $result->Fetch()) { if ($row['GROUP_ID'] > 2) { $saleGroupIds[] = $row['GROUP_ID']; } } if ($saleGroupIds) { $result = GroupTable::getList(array('select' => array('ID', 'NAME'), 'filter' => array('=ID' => $saleGroupIds), 'order' => array('C_SORT' => 'ASC', 'ID' => 'ASC'))); while ($row = $result->fetch()) { $groups[$row['ID']] = $row['NAME']; } } // A D D / U P D A T E ///////////////////////////////////////////////////////////////////////////////////////////////// if ($_SERVER['REQUEST_METHOD'] == 'POST' && !$readOnly && check_bitrix_sessid() && ($_POST['save'] || $_POST['apply'])) { $errors = array(); $statusType = $_REQUEST['TYPE'] == 'O' ? 'O' : 'D'; $lockedStatusList = array("O" => array(\Bitrix\Sale\OrderStatus::getInitialStatus(), \Bitrix\Sale\OrderStatus::getFinalStatus()), "D" => array(\Bitrix\Sale\DeliveryStatus::getInitialStatus(), \Bitrix\Sale\DeliveryStatus::getFinalStatus())); if ($statusId) { foreach ($lockedStatusList as $lockStatusType => $lockStatusIdList) { foreach ($lockStatusIdList as $lockStatusId) { if ($lockStatusId == $statusId && $statusType != $lockStatusType) { $errors[] = Loc::getMessage('SALE_STATUS_WRONG_TYPE', array('#STATUS_ID#' => htmlspecialcharsEx($statusId), '#STATUS_TYPE#' => Loc::getMessage('SSEN_TYPE_' . $statusType))); break; } } } } // prepare & check status $status = array('TYPE' => $statusType, 'SORT' => ($statusSort = intval($_POST['SORT'])) ? $statusSort : 100, 'NOTIFY' => $_POST['NOTIFY'] ? 'Y' : 'N'); $isNew = true; $result = new \Bitrix\Main\Entity\Result(); if ($statusId) {
protected function updatePaymentStatusAction() { global $USER; if (!isset($this->request['orderId']) || intval($this->request['orderId']) <= 0) { throw new ArgumentNullException("orderId"); } if (!isset($this->request['paymentId']) || intval($this->request['paymentId']) <= 0) { throw new ArgumentNullException("paymentId"); } $fields = array(); $orderStatusId = ''; /** @var \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load($this->request['orderId']); /** @var \Bitrix\Sale\Payment $payment */ $payment = $order->getPaymentCollection()->getItemById($this->request['paymentId']); if ($this->request['method'] == 'save') { if ($payment->getField('IS_RETURN') == 'Y') { $res = $payment->setReturn('N'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } } else { $res = $payment->setPaid('Y'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } } foreach ($this->request['data'] as $key => $value) { $newKey = substr($key, 0, strripos($key, '_')); if (strpos($newKey, 'PAY_VOUCHER') !== false) { $fields[$newKey] = $value; } if ($newKey == 'ORDER_STATUS_ID') { $orderStatusId = $value; } } $fields['PAY_VOUCHER_DATE'] = new \Bitrix\Main\Type\Date($fields['PAY_VOUCHER_DATE']); } else { foreach ($this->request['data'] as $key => $value) { $newKey = substr($key, 0, strripos($key, '_')); if (strpos($newKey, 'PAY_RETURN') !== false) { $fields[$newKey] = $value; } } if (isset($fields['PAY_RETURN_OPERATION_ID']) && $fields['PAY_RETURN_OPERATION_ID'] == 'RETURN') { $res = $payment->setReturn('Y'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } unset($fields['PAY_RETURN_OPERATION_ID']); } else { $res = $payment->setPaid('N'); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); } } $fields['PAY_RETURN_DATE'] = new \Bitrix\Main\Type\Date($fields['PAY_RETURN_DATE']); } $saveResult = $payment->setFields($fields); if ($saveResult->isSuccess()) { if (!empty($orderStatusId)) { if ($USER && $USER->isAuthorized()) { $statusesList = Sale\OrderStatus::getAllowedUserStatuses($USER->getID(), $order->getField('STATUS_ID')); } else { $statusesList = Sale\OrderStatus::getAllStatuses(); } if ($order->getField('STATUS_ID') != $orderStatusId && array_key_exists($orderStatusId, $statusesList)) { $res = $order->setField('STATUS_ID', $orderStatusId); if (!$res->isSuccess()) { $this->addResultError(join("\n", $res->getErrorMessages())); return; } } } $result = $order->save(); if ($result->isSuccess()) { $preparedData = \Bitrix\Sale\Helpers\Admin\Blocks\OrderFinanceInfo::prepareData($order); $preparedData["PAYMENT_PAID_" . $payment->getId()] = $payment->isPaid() ? "Y" : "N"; $this->addResultData("RESULT", $preparedData); } else { $this->addResultError(join("\n", $result->getErrorMessages())); } } else { $this->addResultError(join("\n", $saveResult->getErrorMessages())); } }
if ($arOneUser = $userIterator->fetch()) { $strLockUser = CUser::FormatName($strNameFormat, $arOneUser); $strLockUserInfo = '<a href="/bitrix/admin/user_edit.php?lang=' . LANGUAGE_ID . '&ID=' . $intLockUserID . '">' . $strLockUser . '</a>'; } unset($arOneUser, $userIterator); $result->addError(new \Bitrix\Main\Entity\EntityError(GetMessage('SOE_ORDER_LOCKED2', array('#ID#' => $strLockUserInfo, '#DATE#' => $strLockTime)))); } $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);
public static function getStatusesList($userId, $orderStatus = false) { if ($orderStatus === false) { $orderStatus = \Bitrix\Sale\OrderStatus::getInitialStatus(); } return \Bitrix\Sale\OrderStatus::getAllowedUserStatuses($userId, $orderStatus); }
LocalRedirect("sale_order.php?lang=" . LANG . GetFilterParams("filter_", false)); } $db_order = CSaleOrder::GetList(array("ID" => "DESC"), array("ID" => $ID)); if (!$db_order->ExtractFields("str_")) { LocalRedirect("sale_order.php?lang=" . LANG . GetFilterParams("filter_", false)); } $APPLICATION->SetTitle(GetMessage("SALE_PRINT_RECORD", array("#ID#" => $ID))); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; global $USER; $bUserCanViewOrder = false; $bUserCanEditOrder = false; $allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesGroupCanDoOperations($USER->GetUserGroupArray(), array('view')); if (in_array($str_STATUS_ID, $allowedStatusesView)) { $bUserCanViewOrder = true; } $allowedStatusesUpdate = \Bitrix\Sale\OrderStatus::getStatusesGroupCanDoOperations($USER->GetUserGroupArray(), array('update')); if (in_array($str_STATUS_ID, $allowedStatusesUpdate)) { $bUserCanEditOrder = true; } $errorMessage = ""; if ($_SERVER["REQUEST_METHOD"] == "POST" && strlen($Print) > 0 && check_bitrix_sessid() && $bUserCanViewOrder) { if (count($REPORT_ID) > 0) { $db_basket = CSaleBasket::GetList(array('ID' => 'ASC'), array("ORDER_ID" => $ID)); $productCountInBasket = $db_basket->SelectedRowsCount(); $showAll = "N"; if ($productCountInBasket == count($BASKET_IDS)) { $showAll = "Y"; } if ($showAll == "N") { $sBasket = ""; $sQuantity = "";
?> <input type="text" name="filter_price_to" value="<?php echo floatval($filter_price_to) > 0 ? floatval($filter_price_to) : ""; ?> " size="3"> </td> </tr> <tr> <td valign="top"><?php echo Loc::getMessage("SALE_F_STATUS"); ?> :<br /><img src="/bitrix/images/sale/mouse.gif" width="44" height="21" border="0" alt=""></td> <td valign="top"> <select name="filter_status[]" multiple size="3"> <?php $statusesList = \Bitrix\Sale\OrderStatus::getAllowedUserStatuses($USER->GetID(), \Bitrix\Sale\OrderStatus::getInitialStatus()); foreach ($statusesList as $statusCode => $statusName) { ?> <option value="<?php echo htmlspecialcharsbx($statusCode); ?> "<?php if (is_array($filter_status) && in_array($statusCode, $filter_status)) { echo " selected"; } ?> >[<?php echo htmlspecialcharsbx($statusCode); ?> ] <?php echo htmlspecialcharsEx($statusName);
foreach ($payments as $payment) { echo Blocks\OrderPayment::getEdit($payment, ++$index, $_POST['PAYMENT'][$index]); } echo Blocks\OrderPayment::createButtonAddPayment('edit'); break; case 'relprops': echo Blocks\OrderBuyer::getPropsEdit($order); break; case "financeinfo": echo Blocks\OrderFinanceInfo::getView($order); break; case "additional": echo Blocks\OrderAdditional::getEdit($order, $formId . "_form", 'ORDER'); break; case "statusorder": echo Blocks\OrderStatus::getEditSimple($USER->GetID(), 'STATUS_ID', \Bitrix\Sale\OrderStatus::getInitialStatus()); break; } $tabControl->DraggableBlockEnd(); } ?> </div> </td></tr> <?php $tabControl->EndTab(); $tabControl->Buttons(array("back_url" => "/bitrix/admin/sale_order_create.php?lang=" . LANGUAGE_ID . "&SITE_ID=" . $siteId . GetFilterParams("filter_"))); $tabControl->End(); ?> <div style="display: none;"> <?php echo $orderBasket->getSettingsDialogContent();
/** * Get additional data for cache * * @return array */ protected function getAdditionalRefereneces() { if (!$this->isSale) { return array(); } return array('ORDER_STATUS' => Sale\OrderStatus::getAllStatuses()); }
public static function getStatusesList($userId) { return \Bitrix\Sale\OrderStatus::getAllowedUserStatuses($userId, \Bitrix\Sale\OrderStatus::getInitialStatus()); }
if ($value["TYPE"] == "STRING" && !preg_match("/^\\d+\$/", $tmp)) { $filterName = "%PROPERTY_VAL_BY_CODE_" . $key; } else { $filterName = "PROPERTY_VAL_BY_CODE_" . $key; } $filterOrderProps[$filterName] = $tmp; $filterOrderPropValue[$key] = $tmp; } } } if ($saleModulePermissions < "W") { if (strlen($filter_lang) <= 0 && count($arAccessibleSites) > 0) { $arFilter["=LID"] = $arAccessibleSites; } } $allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('view')); if ($saleModulePermissions < "W") { if (!$arFilter["=STATUS_ID"]) { $arFilter["=STATUS_ID"] = array(); } $intersected = array_intersect($arFilter["=STATUS_ID"], $allowedStatusesView); if (!empty($arFilter["=STATUS_ID"])) { if (empty($intersected)) { $arFilter[]["=STATUS_ID"] = $arFilter["=STATUS_ID"]; $arFilter[]["=STATUS_ID"] = $allowedStatusesView; unset($arFilter["=STATUS_ID"], $arFilter["=STATUS_ID"]); } else { $arFilter["=STATUS_ID"] = $intersected; } } else { $arFilter["=STATUS_ID"] = $allowedStatusesView;
/** * @param Order $order * @param array $formData * @param int $userId * * @return \Bitrix\Sale\Result */ protected static function fillSimpleFields(Order $order, array $formData, $userId = 0) { $result = new \Bitrix\Sale\Result(); if (isset($formData["ORDER"]["RESPONSIBLE_ID"])) { /** @var \Bitrix\Sale\Result $r */ $r = $order->setField("RESPONSIBLE_ID", $formData["ORDER"]["RESPONSIBLE_ID"]); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } if (isset($formData["PERSON_TYPE_ID"]) && intval($formData["PERSON_TYPE_ID"]) > 0) { /** @var \Bitrix\Sale\Result $r */ $r = $order->setPersonTypeId(intval($formData['PERSON_TYPE_ID'])); } else { /** @var \Bitrix\Sale\Result $r */ $r = $order->setPersonTypeId(Blocks\OrderBuyer::getDefaultPersonType($order->getSiteId())); } if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } if (isset($formData["ORDER"]["COMMENTS"])) { /** @var \Bitrix\Sale\Result $r */ $r = $order->setField("COMMENTS", $formData["ORDER"]["COMMENTS"]); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } if (isset($formData["USER_DESCRIPTION"])) { /** @var \Bitrix\Sale\Result $r */ $r = $order->setField("USER_DESCRIPTION", $formData["USER_DESCRIPTION"]); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } if (isset($formData["RESPONSIBLE_ID"])) { /** @var \Bitrix\Sale\Result $r */ $r = $order->setField("RESPONSIBLE_ID", $formData["RESPONSIBLE_ID"]); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } if (isset($formData["STATUS_ID"]) && strlen($formData["STATUS_ID"]) > 0) { $statusesList = \Bitrix\Sale\OrderStatus::getAllowedUserStatuses($userId, \Bitrix\Sale\OrderStatus::getInitialStatus()); if (array_key_exists($formData["STATUS_ID"], $statusesList)) { /** @var \Bitrix\Sale\Result $r */ $r = $order->setField("STATUS_ID", $formData["STATUS_ID"]); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } return $result; }
<input type="text" name="filter_price_to" value="<?php echo floatval($filter_price_to) > 0 ? floatval($filter_price_to) : ""; ?> " size="3"> </td> </tr> <tr> <td valign="top"><?php echo Loc::getMessage("SALE_F_STATUS"); ?> :<br /><img src="/bitrix/images/sale/mouse.gif" width="44" height="21" border="0" alt=""></td> <td valign="top"> <select name="filter_status[]" multiple size="3"> <?php $statusesList = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('view')); $allStatusNames = \Bitrix\Sale\OrderStatus::getAllStatusesNames(); foreach ($statusesList as $statusCode) { if (!($statusName = $allStatusNames[$statusCode])) { continue; } ?> <option value="<?php echo htmlspecialcharsbx($statusCode); ?> "<?php if (is_array($filter_status) && in_array($statusCode, $filter_status)) { echo " selected"; } ?> >[<?php echo htmlspecialcharsbx($statusCode);
/** * @param Order $order * @param array $formData * @param int $userId * @return Order * @throws \Bitrix\Main\ArgumentOutOfRangeException */ protected static function fillSimpleFields(Order $order, array $formData, $userId = 0) { if (isset($formData["ORDER"]["RESPONSIBLE_ID"])) { $order->setField("RESPONSIBLE_ID", $formData["ORDER"]["RESPONSIBLE_ID"]); } if (isset($formData["PERSON_TYPE_ID"]) && $formData["PERSON_TYPE_ID"] > 0) { $order->setPersonTypeId($formData['PERSON_TYPE_ID']); } if (isset($formData["ORDER"]["COMMENTS"])) { $order->setField("COMMENTS", $formData["ORDER"]["COMMENTS"]); } if (isset($formData["USER_DESCRIPTION"])) { $order->setField("USER_DESCRIPTION", $formData["USER_DESCRIPTION"]); } if (isset($formData["RESPONSIBLE_ID"])) { $order->setField("RESPONSIBLE_ID", $formData["RESPONSIBLE_ID"]); } if (isset($formData["STATUS_ID"]) && strlen($formData["STATUS_ID"]) > 0) { $statusesList = \Bitrix\Sale\OrderStatus::getAllowedUserStatuses($userId, \Bitrix\Sale\OrderStatus::getInitialStatus()); if (array_key_exists($formData["STATUS_ID"], $statusesList)) { $order->setField("STATUS_ID", $formData["STATUS_ID"]); } } return $order; }