- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/delivery/tracking/manager.php
- Класс: BitrixSaleDeliveryTrackingManager
- Вызов: Manager::sendStatusChangedMail
protected function sendStatusChangedMail($params)
{
if(empty($params))
return true;
/** @var StatusChangeEventParam[] $paramsByShipmentId */
$paramsByShipmentId = array();
foreach($params as $status)
$paramsByShipmentId[$status->shipmentId] = $status;
$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
/** @var SaleOrder $orderClass */
$orderClass = $registry->getOrderClassName();
$res = ShipmentTable::getList(array(
'filter' => array(
'=ID' => array_keys($paramsByShipmentId)
),
'select' => array(
'DELIVERY_NAME',
'SITE_ID' => 'ORDER.LID',
'SITE_NAME' => 'SITE.NAME',
'SHIPMENT_NO' => 'ID',
'SHIPMENT_DATE' => 'DATE_INSERT',
'ORDER_NO' => 'ORDER.ACCOUNT_NUMBER',
'ORDER_DATE' => 'ORDER.DATE_INSERT',
'USER_NAME' => 'ORDER.USER.NAME',
'USER_LAST_NAME' => 'ORDER.USER.LAST_NAME',
'EMAIL' => 'ORDER.USER.EMAIL'
),
'runtime' => array(
'SITE' => array(
'data_type' => 'BitrixMainSiteTable',
'reference' => array(
'ref.LID' => 'this.ORDER.LID',
),
'join_type' => 'left'
),
)
));
$event = new CEvent;
while($data = $res->fetch())
{
$userEmail = '';
$userName = '';
$order = $orderClass::load($paramsByShipmentId[$data['SHIPMENT_NO']]->orderId);
/** @var PropertyValueCollection $propertyCollection */
if ($propertyCollection = $order->getPropertyCollection())
{
if ($propUserEmail = $propertyCollection->getUserEmail())
$userEmail = $propUserEmail->getValue();
if ($propPayerName = $propertyCollection->getPayerName())
$userName = $propPayerName->getValue();
}
if(empty($userEmail))
$userEmail = $data['EMAIL'];
if(empty($userName))
$userName = $data["USER_NAME"].(($data["USER_NAME"] == '' || $data["USER_LAST_NAME"] == '') ? "" : " ").$data["USER_LAST_NAME"];
$siteFields = CEvent::GetSiteFieldsArray($data['SITE_ID']);
$fields = array(
'SITE_NAME' => $data['SITE_NAME'],
'ORDER_NO' => $data['ORDER_NO'],
'ORDER_DATE' => $data['ORDER_DATE']->toString(),
'ORDER_USER' => $userName,
'SHIPMENT_NO' => $data['SHIPMENT_NO'],
'SHIPMENT_DATE' => $data['SHIPMENT_DATE']->toString(),
'EMAIL' => $userEmail,
'STATUS_NAME' => self::getStatusName($paramsByShipmentId[$data['SHIPMENT_NO']]->status),
'STATUS_DESCRIPTION' => $paramsByShipmentId[$data['SHIPMENT_NO']]->description,
'TRACKING_NUMBER' => $paramsByShipmentId[$data['SHIPMENT_NO']]->trackingNumber,
'DELIVERY_NAME' => $data['DELIVERY_NAME'],
"ORDER_ACCOUNT_NUMBER_ENCODE" => urlencode(urlencode($data['ORDER_NO'])),
"SALE_EMAIL" => Option::get("sale", "order_email", "order@".$_SERVER["SERVER_NAME"]),
);
$fields['ORDER_DETAIL_URL'] = Loc::getMessage(
'SALE_DTM_ORDER_DETAIL_URL',
array(
'#A1#' => '',
'#A2#' => ''
)
).'.';
$trackingUrl = self::getTrackingUrl(
$paramsByShipmentId[$data['SHIPMENT_NO']]->deliveryId,
$paramsByShipmentId[$data['SHIPMENT_NO']]->trackingNumber
);
$deliveryTrackingUrl = '';
if($trackingUrl <> '')
{
$deliveryTrackingUrl = Loc::getMessage(
'SALE_DTM_SHIPMENT_STATUS_TRACKING_URL',
array(
'#A1#' => '',
'#A2#' => ''
)
).".
";
}
$fields['DELIVERY_TRACKING_URL'] = $deliveryTrackingUrl;
$event->Send("SALE_ORDER_SHIPMENT_STATUS_CHANGED", $data['SITE_ID'], $fields, "N");
}
return true;
}