3namespace Bitrix\Sale\Internals;
5use Bitrix\Conversion\Utils;
6use Bitrix\Conversion\DayContext;
9use Bitrix\Main\Type\Date;
10use Bitrix\Main\Type\DateTime;
11use Bitrix\Main\Localization\Loc;
17 private static float $onBeforeBasketAddQuantity = 0;
22 'sale_cart_add_day' => [
24 'NAME' =>
'Added to cart goals',
29 'NAME' =>
'Added to cart total',
31 'sale_cart_sum_add' => [
33 'NAME' =>
'Sum added to cart',
36 'sale_order_add_day' => [
38 'NAME' =>
'Placed orders goals',
43 'NAME' =>
'Placed orders total',
45 'sale_order_sum_add' => [
47 'NAME' =>
'Sum placed orders',
50 'sale_payment_add_day' => [
52 'NAME' =>
'Payments a day goals',
55 'sale_payment_add' => [
57 'NAME' =>
'Payments a day total',
59 'sale_payment_sum_add' => [
61 'NAME' =>
'Added payment sum',
68 $scale = [0.5, 1, 1.5, 2, 5];
71 'SUM' =>
function ($value, $format =
null)
83 'NAME' => Loc::getMessage(
'SALE_CONVERSION_RATE_PAYMENT_NAME'),
90 'conversion_visit_day',
91 'sale_payment_add_day',
93 'sale_payment_add_cmpfb',
94 'sale_payment_sum_add',
98 $denominator = (int)(
$counters[
'conversion_visit_day'] ?? 0);
99 $numerator = (int)(
$counters[
'sale_payment_add_day'] ?? 0);
100 $quantity = (float)(
$counters[
'sale_payment_add'] ?? 0) + (float)(
$counters[
'sale_payment_add_cmpfb'] ?? 0);
104 'DENOMINATOR' => $denominator,
105 'NUMERATOR' => $numerator,
106 'QUANTITY' => $quantity,
107 'RATE' => $denominator ? $numerator / $denominator : 0,
114 'NAME' => Loc::getMessage(
'SALE_CONVERSION_RATE_ORDER_NAME'),
121 'conversion_visit_day',
122 'sale_order_add_day',
124 'sale_order_add_cmpfb',
125 'sale_order_sum_add',
129 $denominator = (int)(
$counters[
'conversion_visit_day'] ?? 0);
130 $numerator = (int)(
$counters[
'sale_order_add_day'] ?? 0);
131 $quantity = (float)(
$counters[
'sale_order_add'] ?? 0) + (float)(
$counters[
'sale_order_add_cmpfb'] ?? 0);
135 'DENOMINATOR' => $denominator,
136 'NUMERATOR' => $numerator,
137 'QUANTITY' => $quantity,
138 'RATE' => $denominator ? $numerator / $denominator : 0,
145 'NAME' => Loc::getMessage(
'SALE_CONVERSION_RATE_CART_NAME'),
152 'conversion_visit_day',
155 'sale_cart_add_cmpfb',
160 $denominator = (int)(
$counters[
'conversion_visit_day'] ?? 0);
161 $numerator = (int)(
$counters[
'sale_cart_add_day'] ?? 0);
162 $quantity = (float)(
$counters[
'sale_cart_add'] ?? 0) + (float)(
$counters[
'sale_cart_add_cmpfb'] ?? 0);
166 'DENOMINATOR' => $denominator,
167 'NUMERATOR' => $numerator,
168 'QUANTITY' => $quantity,
169 'RATE' => $denominator ? $numerator / $denominator : 0,
188 '>=DATE_PAYED' => $from,
189 '<=DATE_PAYED' => $to,
201 while ($row =
$result->Fetch())
203 $day =
new DateTime($row[
'DATE_PAYED']);
214 'sale_payment_add_day' => 1,
215 'sale_payment_sum_add' =>
$sum,
226 '>=DATE_INSERT' => $from,
227 '<=DATE_INSERT' => $to,
239 while ($row =
$result->Fetch())
241 $day =
new DateTime($row[
'DATE_INSERT']);
252 'sale_order_add_day' => 1,
253 'sale_order_sum_add' =>
$sum,
263 '>=DATE_INSERT' => $from,
264 '<=DATE_INSERT' => $to,
277 while ($row =
$result->Fetch())
279 $day =
new DateTime($row[
'DATE_INSERT']);
290 'sale_cart_add_day' => 1,
291 'sale_cart_sum_add' =>
$sum,
305 'ATTRIBUTES' => [
'conversion_site' =>
$siteId],
306 'DAY_COUNTERS' => $dayCounters,
322 if (!
$event->getParameter(
'IS_NEW'))
327 $basketItem =
$event->getParameter(
'ENTITY');
331 $price = $basketItem->getPrice();
332 $quantity = $basketItem->getQuantity();
335 if ($quantity && Loader::includeModule(
'conversion'))
337 $context = DayContext::getSiteInstance($basketItem->getField(
'LID'));
339 $context->addDayCounter(
'sale_cart_add_day', 1);
344 $context->addCurrencyCounter(
'sale_cart_sum_add', $price * $quantity,
$currency);
352 self::$onBeforeBasketAddQuantity = (float)(
$fields[
'QUANTITY'] ?? 0);
359 && self::$onBeforeBasketAddQuantity
360 && Loader::includeModule(
'conversion'))
363 $context->addDayCounter(
'sale_cart_add_day', 1);
367 $fields[
'PRICE'] * self::$onBeforeBasketAddQuantity,
372 self::$onBeforeBasketAddQuantity = 0;
445 if (!
$event->getParameter(
'IS_NEW'))
454 $price =
$order->getPrice();
457 if (Loader::includeModule(
'conversion'))
461 $context->addDayCounter(
'sale_order_add_day', 1);
475 if (Loader::includeModule(
'conversion'))
478 $context->addDayCounter(
'sale_order_add_day', 1);
481 $context->attachEntityItem(
'sale_order', $id);
490 if (Loader::includeModule(
'conversion') &&
$order instanceof
Sale\Order)
492 self::updatePaidOrderConversion(
496 Date::createFromText(
$order->getField(
'DATE_PAYED')),
504 if (Loader::includeModule(
'conversion') && ($row = \CSaleOrder::GetById($id)))
506 self::updatePaidOrderConversion(
510 new Date($row[
'DATE_PAYED'],
'Y-m-d H:i:s'),
526 private static function updatePaidOrderConversion(
$orderId, $price,
$currency, $day, $isPaid): void
529 $isAdminSection = defined(
'ADMIN_SECTION') &&
ADMIN_SECTION ===
true;
533 $currentDate =
new Date();
536 $context->addCounter($currentDate,
'sale_payment_add_day', 1);
540 $context->addDayCounter(
'sale_payment_add_day', 1);
543 $context->addCounter($currentDate,
'sale_payment_add', 1);
551 $context->subCounter($day,
'sale_payment_add_day', 1);
555 $context->subDayCounter($day,
'sale_payment_add_day', 1);
558 $context->subCounter($day,
'sale_payment_add', 1);
static getBaseCurrencyUnit()
static formatToBaseCurrency($value, $format=null)
static convertToBaseCurrency($value, $currency)
static onBeforeBasketUpdate($id, $fields=null)
static onBasketDelete($id)
static onSaleOrderPaid(Main\Event $event)
static onSalePayOrder($id, $paid)
static onGenerateInitialData(Date $from, Date $to)
static onBasketUpdate($id, $fields)
static onBasketAdd($id, $fields)
static onOrderAdd($id, array $fields)
static onSaleBasketItemSaved(Main\Event $event)
static onSaleOrderSaved(Main\Event $event)
static onBeforeBasketDelete($id)
static onGetCounterTypes()
static onBeforeBasketAdd( $fields)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetList($arOrder=array("ID"=>"DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arOptions=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)