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

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

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

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

Как сделать?

Важно! Код для нового ядра. Если у Вас битрикс младше 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, делаюИМ, разработчику
Поделиться
Похожие статьи
Считаем профит покупателей
Для персонализированный рассылки понадобилось узнать кто из покупателей давно не делал заказ, а кто ...
Читать дальше » 0
Алексей,
Как получить название единицы измерения товара
Да и вообще всю информацию о единице измерения товара. Сразу покажу готовый код для нового ядра битр...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Скидка, еще одна, плюс бесплатная доставка, а не переборщили ли мы и насколько выгодный получился заказ? Выводим в списке заказа информацию о прибыли (стоимость заказа минус закупочная цена всех товаров).