%PDF- %PDF-
| Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/helpers/admin/blocks/ |
| Current File : //proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/helpers/admin/blocks/orderstatus.php |
<?php
namespace Bitrix\Sale\Helpers\Admin\Blocks;
use Bitrix\Sale\Helpers\Admin\OrderEdit;
use Bitrix\Sale\Internals\StatusLangTable;
use Bitrix\Sale\Internals\StatusTable;
use Bitrix\Sale\Order;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\TradingPlatform\OrderTable;
use Bitrix\Main\Application;
use Bitrix\Main\SiteTable;
use Bitrix\Main\Config\Option;
Loc::loadMessages(__FILE__);
class OrderStatus
{
public static function getEdit(Order $order, \CUser $user, $showCancel, $showSaveButton)
{
$data = self::prepareData($order);
$orderLocked = \Bitrix\Sale\Order::isLocked($order->getId());
$allowCancel = false;
if($showCancel)
{
$allowedStatusesCancel = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($user->GetID(), array('cancel'));
if (is_array($allowedStatusesCancel))
{
$allowCancel = in_array($order->getField("STATUS_ID"), $allowedStatusesCancel);
}
}
$result = '
<table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table">
<tbody>
<tr>
<td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage("SALE_ORDER_STATUS_CREATED").':</td>
<td class="adm-detail-content-cell-r">
<div>'.
$data["DATE_INSERT"].
' <a href="/bitrix/admin/user_edit.php?lang='.LANGUAGE_ID.'&ID='. $data["CREATOR_USER_ID"].'">'.
htmlspecialcharsbx($data["CREATOR_USER_NAME"]).
'</a>
</div>
</td>
</tr>
<tr>
<td class="adm-detail-content-cell-l">'.Loc::getMessage("SALE_ORDER_STATUS_LAST_MODIF").':</td>
<td class="adm-detail-content-cell-r"><div>'. $data["DATE_UPDATE"].'</div></td>
</tr>
<tr>
<td class="adm-detail-content-cell-l">'.Loc::getMessage("SALE_ORDER_STATUS_SITE").':</td>
<td class="adm-detail-content-cell-r"><div>'.
htmlspecialcharsbx(
\Bitrix\Sale\Helpers\Admin\OrderEdit::getSiteName($order->getSiteId())
).
'</div></td>
</tr>';
if(!empty($data["AFFILIATE_NAME"]))
{
$data['AFFILIATE_NAME'] = htmlspecialcharsbx($data["AFFILIATE_NAME"]);
if(intval($data['AFFILIATE_ID']) > 0)
{
$data["AFFILIATE_NAME"] = '<a href="/bitrix/admin/sale_affiliate_edit.php?lang='.LANGUAGE_ID.'&ID='.$data['AFFILIATE_ID'].'">'.
$data["AFFILIATE_NAME"].
'</a>';
}
$result .= '
<tr>
<td class="adm-detail-content-cell-l">'.Loc::getMessage("SALE_ORDER_STATUS_AFFILIATE").':</td>
<td class="adm-detail-content-cell-r"><div>'.$data["AFFILIATE_NAME"].'</div></td>
</tr>';
}
if(strlen($data['SOURCE_NAME']) > 0)
{
$result .= '<tr>'.
'<td class="adm-detail-content-cell-l">'.Loc::getMessage("SALE_ORDER_STATUS_SOURCE").':</td>'.
'<td class="adm-detail-content-cell-r">'.htmlspecialcharsbx($data['SOURCE_NAME']).'</td>'.
'</tr>';
}
$attr = array(
"class" => "adm-bus-select",
"id" => "STATUS_ID"
);
if($orderLocked)
$attr["disabled"] = "disabled";
$result .= '<tr>
<td class="adm-detail-content-cell-l">'.Loc::getMessage("SALE_ORDER_STATUS").':</td>
<td class="adm-detail-content-cell-r">'.
\Bitrix\Sale\Helpers\Admin\OrderEdit::makeSelectHtml(
"STATUS_ID",
self::getStatusesList($user->GetID(), $data["STATUS_ID"]),
$data["STATUS_ID"],
false,
$attr
);
if($showSaveButton && !$orderLocked)
{
$result .= '
<span id="save_status_button" class="adm-btn" onclick="BX.Sale.Admin.OrderEditPage.onSaveStatusButton(\''.$order->getId().'\',\'STATUS_ID\');">
'.Loc::getMessage("SALE_ORDER_STATUS_SAVE").'
</span>
<span id="save_status_result_ok" class="adm-sale-green-check-mark" style="display:none;" title="'.Loc::getMessage('SALE_ORDER_STATUS_CHANGED_SUCCESS').'"></span>
';
}
$result .= '</td>
</tr>';
if (\Bitrix\Sale\Helpers\Order::isAllowGuestView($order))
{
$result .='<tr><td class="adm-detail-content-cell-l">'.Loc::getMessage("SALE_ORDER_GUEST_VIEW").':</td><td class="adm-detail-content-cell-r">';
$publicLink = \Bitrix\Sale\Helpers\Order::getPublicLink($order);
if (empty($publicLink))
{
$result .= Loc::getMessage("SALE_ORDER_WRONG_GUEST_PATH", array("#LANGUAGE_ID#" => LANGUAGE_ID));
}
else
{
$result .= "<a href='{$publicLink}' target='_blank'>".
Loc::getMessage("SALE_ORDER_GUEST_PATH", array('#ID#' => $order->getId(),"#ACCOUNT_NUMBER#" => $order->getField('ACCOUNT_NUMBER'))).
"</a>";
}
$result .='</td></tr>';
}
if($showCancel && $allowCancel)
$result .= self::getCancelBlockHtml($order, $data, $orderLocked);
$result .= '</tbody>
</table>
';
return $result;
}
protected static function getCancelBlockHtml(Order $order, array $data, $orderLocked = false)
{
$isCanceled = ($order->getField('CANCELED') == "Y" ? true : false);
if($isCanceled)
{
$text = '
<div class="adm-s-select-popup-element-selected" id="sale-adm-status-cancel-blocktext">
<div class="adm-s-select-popup-element-selected-bad">
<span>'.Loc::getMessage("SALE_ORDER_STATUS_CANCELED").'</span>
'.$order->getField('DATE_CANCELED').'
<a href="/bitrix/admin/user_edit.php?lang='.LANGUAGE_ID.'&ID='. $order->getField("EMP_CANCELED_ID").'">'.
htmlspecialcharsbx($data["EMP_CANCELED_NAME"]).
'</a>
</div>
</div>';
}
else
{
$text = '
<div class="adm-s-select-popup-element-selected" style="text-align:center;" id="sale-adm-status-cancel-blocktext">
<a href="javascript:void(0);" onclick="BX.Sale.Admin.OrderEditPage.toggleCancelDialog();">
'.Loc::getMessage("SALE_ORDER_STATUS_CANCELING").'
</a>
</div>';
}
$reasonCanceled = trim($order->getField("REASON_CANCELED"));
if(!\CSaleYMHandler::isOrderFromYandex($order->getId()))
{
$reasonHtml = '
<div class="adm-s-select-popup-modal-title">'.Loc::getMessage("SALE_ORDER_STATUS_COMMENT").'</div>
<textarea style="width:400px;min-height:100px;" name="FORM_REASON_CANCELED" id="FORM_REASON_CANCELED"'.($isCanceled ? ' disabled' : '' ).'>'.(strlen($reasonCanceled) > 0 ? htmlspecialcharsbx($reasonCanceled) : '').'</textarea>
';
}
else
{
$reasonHtml = '
<div class="adm-s-select-popup-modal-title">'.Loc::getMessage("SALE_ORDER_STATUS_CANCELING_REASON").'</div>
<select name="FORM_REASON_CANCELED" style="max-width: 400px;" id="FORM_REASON_CANCELED" class="adm-bus-select"'.($isCanceled ? ' disabled' : '' ).'>';
foreach (\CSaleYMHandler::getOrderSubstatuses() as $statusId => $statusName)
$reasonHtml .= '<option value="'.$statusId.'"'.($statusId == $reasonCanceled ? " selected" : "").'>'.htmlspecialcharsbx($statusName).'</option>';
$reasonHtml .= '</select>';
}
return '
<tr id="sale-adm-status-cancel-row">
<td class="adm-detail-content-cell-l"> </td>
<td class="adm-detail-content-cell-r">
<div class="adm-s-select-popup-box">
<div class="adm-s-select-popup-container">'.
($orderLocked ? '' : '<div class="adm-s-select-popup-element-selected-control" onclick="BX.Sale.Admin.OrderEditPage.toggleCancelDialog();"></div>').
$text.
'</div>
<div class="adm-s-select-popup-modal /*active*/" id="sale-adm-status-cancel-dialog">
<div class="adm-s-select-popup-modal-content">
'.$reasonHtml.'
<div class="adm-s-select-popup-modal-desc">'.Loc::getMessage("SALE_ORDER_STATUS_USER_CAN_VIEW").'</div>
<span class="adm-btn" id="sale-adm-status-cancel-dialog-btn" onclick="BX.Sale.Admin.OrderEditPage.onCancelStatusButton(\''.$order->getId().'\',\''.$data["CANCELED"].'\');">
'.($data["CANCELED"] == "N" ? Loc::getMessage("SALE_ORDER_STATUS_CANCEL") : Loc::getMessage("SALE_ORDER_STATUS_CANCEL_CANCEL")).'
</span>
<span class="adm-s-select-popup-modal-close" onclick="BX.Sale.Admin.OrderEditPage.toggleCancelDialog();">'.Loc::getMessage("SALE_ORDER_STATUS_TOGGLE").'</span>
</div>
</div>
</div>
</td>
</tr>';
}
public static function getUserInfo($userId)
{
static $users = array();
$userId = intval($userId);
if ($userId <= 0)
return array( "ID"=>0, "NAME" => "", "LOGIN"=>"");
if (isset($users[$userId]))
return $users[$userId];
$dbRes = \CUser::GetList(($by="id"), ($byOrder="asc"), array("ID" => $userId), array("FIELDS" => array("ID", "NAME", "LOGIN")));
$user = $dbRes->Fetch();
if ($user)
$users[$userId] = $user;
else
$user = array( "ID"=>0, "NAME" => "", "LOGIN"=>"");
return $user;
}
protected static function prepareData(Order $order)
{
static $result = null;
if($result === null)
{
$creator = static::getUserInfo($order->getField("CREATED_BY"));
if(strlen($order->getField("CREATED_BY")) > 0)
$creatorName = OrderEdit::getUserName($order->getField("CREATED_BY"), $order->getSiteId());
else
$creatorName = "";
if(strlen($order->getField("EMP_CANCELED_ID")) > 0)
$cancelerName = OrderEdit::getUserName($order->getField("EMP_CANCELED_ID"), $order->getSiteId());
else
$cancelerName = "";
$sourceName = "";
if(strlen($order->getField('XML_ID')) > 0)
{
$dbRes = OrderTable::getList(array(
'filter' => array(
'ORDER_ID' => $order->getId()
),
'select' => array('SOURCE_NAME' => 'TRADING_PLATFORM.NAME')
));
if($tpOrder = $dbRes->fetch())
$sourceName = $tpOrder['SOURCE_NAME'];
}
$result = array(
"DATE_INSERT" => $order->getDateInsert()->toString(),
"DATE_UPDATE" => $order->getField('DATE_UPDATE')->toString(),
"CREATOR_USER_NAME" => $creatorName,
"CREATOR_USER_ID" => $creator["ID"],
"STATUS_ID" => $order->getField('STATUS_ID'),
"CANCELED" => $order->getField("CANCELED"),
"EMP_CANCELED_NAME" => $cancelerName,
"SOURCE_NAME" => $sourceName
);
if(intval($order->getField('AFFILIATE_ID')) > 0)
{
$result["AFFILIATE_ID"] = intval($order->getField('AFFILIATE_ID'));
$dbAffiliate = \CSaleAffiliate::GetList(
array(),
array("ID" => $result["AFFILIATE_ID"]),
false,
false,
array("ID", "USER_ID")
);
if($arAffiliate = $dbAffiliate->Fetch())
{
$result["AFFILIATE_ID"] = $arAffiliate["ID"];
$result["AFFILIATE_NAME"] = OrderEdit::getUserName($arAffiliate["USER_ID"], $order->getSiteId());
}
else
{
$result["AFFILIATE_ID"] = 0;
$result["AFFILIATE_NAME"] = "-";
}
}
}
return $result;
}
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;
}
public static function getStatusesList($userId, $orderStatus = false)
{
if($orderStatus === false)
$orderStatus = \Bitrix\Sale\OrderStatus::getInitialStatus();
$result = \Bitrix\Sale\OrderStatus::getAllowedUserStatuses($userId, $orderStatus);
if(empty($result[$orderStatus]))
{
$dbRes = \Bitrix\Sale\Internals\StatusTable::getList(array(
'select' => array('ID', 'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME'),
'filter' => array(
'=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => LANGUAGE_ID,
'=ID' => $orderStatus
)
));
if($status = $dbRes->fetch())
$result = array($orderStatus => $status['NAME']) + $result;
}
return $result;
}
public static function getEditSimple($userId, $fieldName, $status)
{
return '
<table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table ">
<tbody>
<tr>
<td class="adm-detail-content-cell-l" width="40%">'.
Loc::getMessage("SALE_ORDER_STATUS").':'.
'</td>
<td class="adm-detail-content-cell-r">'.
\Bitrix\Sale\Helpers\Admin\OrderEdit::makeSelectHtml(
$fieldName,
self::getStatusesList($userId, $status),
$status,
false,
array(
"class" => "adm-bus-select",
"id" => "STATUS_ID"
)
).
'</td>
</tr>
</tbody>
</table>';
}
}