Выводим выручку по заказам

Алексей Будагов,
Выводим выручку по заказам

Скидка, еще одна, плюс бесплатная доставка, а не переборщили ли мы и насколько выгодный получился заказ? Выводим в списке заказа информацию о прибыли (стоимость заказа минус закупочная цена всех товаров).

Как сделать?

Важно! Код для нового ядра. Если у Вас битрикс младше 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();
			}
		}
	}
}
Опубликовано 22 Мая 2017
примеры d7, делаюИМ, разработчику

Возврат к списку

Комментарии