Выводим выручку по заказам
Скидка, еще одна, плюс бесплатная доставка, а не переборщили ли мы и насколько выгодный получился заказ? Выводим в списке заказа информацию о прибыли (стоимость заказа минус закупочная цена всех товаров).
Как сделать?
Важно! Код для нового ядра. Если у Вас битрикс младше 15 версии, скорее всего код не будет работать.
Создаем новое служебное свойство заказа с кодом PROFIT и выводим его в списке заказов через "Настройки внешнего вида списка"
И добавляем обработчик события сохранения заказа:
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSaleOrderSaved', array("FTeaEvents", "setProfit")); class FTeaEvents { function setProfit (\Bitrix\Main\Event $event) { $orderPurch = 0; $order = $event->getParameter("ENTITY"); $orderId = $order->getId(); $sum = $order->getPrice(); $propertyCollection = $order->getPropertyCollection(); if ($arProps = $propertyCollection->getArray()) { // Находим нужное нам свойства и записываем его id и значение foreach ($arProps as $g => $arGroup) { foreach ($arGroup as $p => $arProp) { if ($arProp['CODE'] == 'PROFIT') { if (is_array($arProp['VALUE'])) { $arProp['VALUE'] = current($arProp['VALUE']); } $profit = $arProp['VALUE']; $propProfitId = $arProp['ID']; break; } } } $dbBasket = CSaleBasket::GetList(Array("ID" => "ASC"), Array("ORDER_ID" => $orderId)); // считаем закупочную стоимость товаров while ($arBasket = $dbBasket->Fetch()){ $arItem = CCatalogProduct::GetByID($arBasket["PRODUCT_ID"]); $orderPurch += $arItem["PURCHASING_PRICE"]*$arBasket["QUANTITY"]; } $profitUpdate = round(($sum-$orderPurch), 2).' ₽'; if ($profit != $profitUpdate && $propProfitId > 0) { // сохраняем новое значение свойства без пересчета самого заказа $somePropValue = $propertyCollection->getItemByOrderPropertyId($propProfitId); $somePropValue->setValue($profitUpdate); $somePropValue->save(); } } } }
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.