1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
options.php
См. документацию.
1<?php
2
3$module_id = 'sale';
6
13use Bitrix\Sale;
17
18$SALE_RIGHT = $APPLICATION->GetGroupRight('sale');
19if ($SALE_RIGHT < 'R')
20{
21 return;
22}
23if (
24 !Loader::includeModule('sale')
25 || !Loader::includeModule('currency')
26)
27{
28 return;
29}
30
31$allowEditPhp = $USER->CanDoOperation('edit_php');
32$defaultValues = Option::getDefaults('sale');
33$showMeasurePathOption = Option::get('sale', 'measurement_path') !== $defaultValues['measurement_path'];
34
35$request = Main\Context::getCurrent()->getRequest();
36
37IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/options.php');
38IncludeModuleLangFile(__FILE__);
39
40Main\Page\Asset::getInstance()->addJs('/bitrix/js/sale/options.js');
41$APPLICATION->SetAdditionalCSS("/bitrix/themes/.default/sale.css");
42
45
48$siteIterator = SiteTable::getList([
49 'select' => [
50 'LID',
51 'NAME',
52 'SORT',
53 ],
54 'order' => [
55 'SORT' => 'ASC',
56 ],
57]);
58while ($oneSite = $siteIterator->fetch())
59{
60 $siteList[] = [
61 'ID' => $oneSite['LID'],
62 'SAFE_ID' => htmlspecialcharsbx($oneSite['LID']),
63 'NAME' => $oneSite['NAME'],
64 'SAFE_NAME' => htmlspecialcharsbx($oneSite['NAME']),
65 ];
66 $siteIdList[] = $oneSite['LID'];
67}
68unset($oneSite, $siteIterator);
70
72
74if ($request->getPost('Update') === 'Y')
75{
76 if ($request->getPost('Save') !== null)
77 {
78 $currentAction = 'save';
79 }
80 elseif ($request->getPost('Apply') !== null)
81 {
82 $currentAction = 'apply';
83 }
84 elseif ($request->getPost('RestoreDefaults') !== null)
85 {
86 $currentAction = 'reset';
87 }
88}
89
90$backUrl = (string)$request->get('back_url_settings');
91
92if (
93 $request->isPost()
94 && $currentAction === 'reset'
95 && $SALE_RIGHT === 'W'
97)
98{
99 $bWasUpdated = true;
100
101 $valueList = [];
102 $savedOptions = [
103 'sale_locationpro_migrated',
104 'sale_locationpro_enabled',
105 ];
106
107 foreach ($savedOptions as $optionId)
108 {
109 $valueList[$optionId] = Option::get('sale', $optionId, '-');
110 }
111 Option::delete('sale');
112 foreach ($valueList as $optionId => $value)
113 {
114 if ($value !== '-')
115 {
116 Option::set('sale', $optionId, $value);
117 }
118 }
119 unset($savedOptions, $valueList);
120
122 'id',
123 'asc',
124 [
125 'ACTIVE' => 'Y',
126 'ADMIN' => 'N',
127 ]
128 );
129 while ($zr = $z->Fetch())
130 {
131 $APPLICATION->DelGroupRight('sale', [$zr["ID"]]);
132 }
133 unset($z);
134}
135
136// region basis options
139 'ID' => 'order_email',
140 'TITLE' => Loc::getMessage('SALE_EMAIL_ORDER'),
141 'DEFAULT_VALUE' => 'order@' . $_SERVER['SERVER_NAME'],
142 'TYPE' => 'text',
143 'SETTINGS' => [
144 'LENGTH' => 30,
145 ],
146];
147$optionMainList[] = [
148 'ID' => 'delete_after',
149 'TITLE' => Loc::getMessage('SALE_DELETE_AFTER'),
150 'TYPE' => 'text',
151 'SETTINGS' => [
152 'LENGTH' => 10,
153 ],
154];
155$optionMainList[] = [
156 'ID' => 'order_list_date',
157 'TITLE' => Loc::getMessage('SALE_ORDER_LIST_DATE'),
158 'TYPE' => 'text',
159 'SETTINGS' => [
160 'LENGTH' => 10,
161 ],
162];
163$optionMainList[] = [
164 'ID' => 'MAX_LOCK_TIME',
165 'TITLE' => Loc::getMessage('SALE_MAX_LOCK_TIME'),
166 'TYPE' => 'text',
167 'SETTINGS' => [
168 'LENGTH' => 10,
169 ],
170];
171$optionMainList[] = [
172 'ID' => 'GRAPH_WEIGHT',
173 'TITLE' => Loc::getMessage('SALE_GRAPH_WEIGHT'),
174 'TYPE' => 'text',
175 'SETTINGS' => [
176 'LENGTH' => 10,
177 ],
178];
179$optionMainList[] = [
180 'ID' => 'GRAPH_HEIGHT',
181 'TITLE' => Loc::getMessage('SALE_GRAPH_HEIGHT'),
182 'TYPE' => 'text',
183 'SETTINGS' => [
184 'LENGTH' => 10,
185 ],
186];
187$optionMainList[] = [
188 'ID' => 'path2user_ps_files',
189 'TITLE' => Loc::getMessage('SALE_PATH2UPSF'),
190 'TYPE' => 'path',
191 'SETTINGS' => [
192 'LENGTH' => 40,
193 ],
194 'HINT' => Loc::getMessage('SALE_HINT_NEED_ADMIN_RIGHTS_FOR_CHANGE'),
195 'VALIDATE' => [
196 'TYPE' => 'dir',
197 ],
198];
199$optionMainList[] = [
200 'ID' => 'lock_catalog',
201 'TITLE' => Loc::getMessage('SMO_LOCK_CATALOG'),
202 'TYPE' => 'checkbox',
203];
204if (CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
205{
206 $optionMainList[] = [
207 'ID' => 'affiliate_param_name',
208 'TITLE' => Loc::getMessage('SMOS_AFFILIATE_PARAM'),
209 'TYPE' => 'text',
210 'SETTINGS' => [
211 'LENGTH' => 40,
212 ],
213 ];
214 $optionMainList[] = [
215 'ID' => 'affiliate_life_time',
216 'TITLE' => Loc::getMessage('SMO_AFFILIATE_LIFE_TIME'),
217 'TYPE' => 'text',
218 'SETTINGS' => [
219 'LENGTH' => 10,
220 ],
221 ];
222}
223$optionMainList[] = [
224 'ID' => 'show_order_sum',
225 'TITLE' => Loc::getMessage('SMO_SHOW_ORDER_SUM'),
226 'TYPE' => 'checkbox',
227];
228$optionMainList[] = [
229 'ID' => 'show_order_product_xml_id',
230 'TITLE' => Loc::getMessage('SMO_SHOW_ORDER_PRODUCT_XML_ID'),
231 'TYPE' => 'checkbox',
232];
233$optionMainList[] = [
234 'ID' => 'show_paysystem_action_id',
235 'TITLE' => Loc::getMessage('SMO_SHOW_PAYSYSTEM_ACTION_ID'),
236 'TYPE' => 'checkbox',
237];
239{
240 $optionMainList[] = [
241 'ID' => 'measurement_path',
242 'TITLE' => Loc::getMessage('SMO_MEASUREMENT_PATH'),
243 'TYPE' => 'path',
244 'SETTINGS' => [
245 'LENGTH' => '40',
246 ],
247 'HINT' => Loc::getMessage('SALE_HINT_NEED_ADMIN_RIGHTS_FOR_CHANGE'),
248 'VALIDATE' => [
249 'TYPE' => 'file',
250 ],
251 ];
252}
253$optionMainList[] = [
254 'ID' => 'delivery_handles_custom_path',
255 'TITLE' => Loc::getMessage('SMO_DELIVERY_HANDLERS_CUSTOM_PATH'),
256 'TYPE' => 'path',
257 'SETTINGS' => [
258 'LENGTH' => 40,
259 ],
260 'HINT' => Loc::getMessage('SALE_HINT_NEED_ADMIN_RIGHTS_FOR_CHANGE'),
261 'VALIDATE' => [
262 'TYPE' => 'dir',
263 ],
264];
265$optionMainList[] = [
266 'ID' => 'use_secure_cookies',
267 'TITLE' => Loc::getMessage('SMO_USE_SECURE_COOKIES'),
268 'TYPE' => 'checkbox',
269];
270$optionMainList[] = [
271 'ID' => 'encode_fuser_id',
272 'TITLE' => Loc::getMessage('SMO_ENCODE_FUSER_ID'),
273 'TYPE' => 'checkbox',
274];
275$optionMainList[] = [
276 'ID' => 'save_anonymous_fuser_cookie',
277 'TITLE' => Loc::getMessage('SALE_SAVE_ANONYMOUS_FUSER_COOKIE'),
278 'TYPE' => 'checkbox',
279 'HINT' => Loc::getMessage('SALE_HINT_SAVE_ANONYMOUS_FUSER_COOKIE'),
280];
281$optionMainList[] = [
282 'ID' => 'COUNT_DISCOUNT_4_ALL_QUANTITY',
283 'TITLE' => Loc::getMessage('SALE_OPT_COUNT_DISCOUNT_4_ALL_QUANTITY'),
284 'TYPE' => 'checkbox',
285];
286$optionMainList[] = [
287 'ID' => 'COUNT_DELIVERY_TAX',
288 'TITLE' => Loc::getMessage('SALE_OPT_COUNT_DELIVERY_TAX'),
289 'TYPE' => 'checkbox',
290];
291if (Option::get('sale', 'QUANTITY_FACTORIAL') === 'Y')
292{
293 $optionMainList[] = [
294 'ID' => 'QUANTITY_FACTORIAL',
295 'TITLE' => Loc::getMessage('SALE_OPT_QUANTITY_FACTORIAL'),
296 'TYPE' => 'checkbox',
297 ];
298}
299$optionMainList[] = [
300 'ID' => 'product_viewed_save',
301 'TITLE' => Loc::getMessage('SALE_PRODUCT_VIEWED_SAVE'),
302 'TYPE' => 'checkbox',
303];
304$optionMainList[] = [
305 'ID' => 'viewed_capability',
306 'TITLE' => Loc::getMessage('SALE_VIEWED_CAPABILITY'),
307 'TYPE' => 'checkbox',
308];
309$optionMainList[] = [
310 'ID' => 'viewed_time',
311 'TITLE' => Loc::getMessage('SALE_VIEWED_TIME'),
312 'TYPE' => 'text',
313 'SETTINGS' => [
314 'LENGTH' => 10,
315 ],
316];
317$optionMainList[] = [
318 'ID' => 'viewed_count',
319 'TITLE' => Loc::getMessage('SALE_VIEWED_COUNT'),
320 'TYPE' => 'text',
321 'SETTINGS' => [
322 'LENGTH' => 10,
323 ],
324];
325$optionMainList[] = [
326 'ID' => 'SALE_ADMIN_NEW_PRODUCT',
327 'TITLE' => Loc::getMessage('SALE_ADMIN_NEW_PRODUCT'),
328 'TYPE' => 'checkbox',
329];
330$optionMainList[] = [
331 'ID' => 'use_ccards',
332 'TITLE' => Loc::getMessage('SALE_ADMIN_USE_CARDS'),
333 'TYPE' => 'checkbox',
334];
335$optionMainList[] = [
336 'ID' => 'show_basket_props_in_order_list',
337 'TITLE' => Loc::getMessage('SALE_SHOW_BASKET_PROPS_IN_ORDER_LIST'),
338 'TYPE' => 'checkbox',
339];
340// endregion basis options
341
343 'P' => Loc::getMessage('SMO_PAYMENT_FLAG'),
344 'C' => Loc::getMessage('SMO_CANCEL_FLAG'),
345 'D' => Loc::getMessage('SMO_DELIVERY_FLAG'),
346];
350{
352}
354 array("DIV" => "edit1", "TAB" => GetMessage("MAIN_TAB_SET"), "ICON" => "sale_settings", "TITLE" => GetMessage("MAIN_TAB_TITLE_SET")),
355 array("DIV" => "edit7", "TAB" => GetMessage("SALE_TAB_WEIGHT"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_WEIGHT_TITLE")),
356 array("DIV" => "edit5", "TAB" => GetMessage("SALE_TAB_ADDRESS"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_ADDRESS_TITLE"))
357);
358
359if (CBXFeatures::IsFeatureEnabled('SaleCCards') && Option::get('sale', "use_ccards", "N") == "Y")
360 $aTabs[] = array("DIV" => "edit2", "TAB" => GetMessage("SALE_TAB_2"), "ICON" => "sale_settings", "TITLE" => GetMessage("SMO_CRYPT_TITLE"));
361
362$aTabs[] = array("DIV" => "edit3", "TAB" => GetMessage("SALE_TAB_3"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_3_TITLE"));
363$aTabs[] = array("DIV" => "edit4", "TAB" => GetMessage("MAIN_TAB_RIGHTS"), "ICON" => "sale_settings", "TITLE" => GetMessage("MAIN_TAB_TITLE_RIGHTS"));
364$aTabs[] = array("DIV" => "edit8", "TAB" => GetMessage("SALE_TAB_AUTO"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_AUTO_TITLE"));
365$aTabs[] = array("DIV" => "edit9", "TAB" => GetMessage("SALE_TAB_ARCHIVE"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_ARCHIVE_TITLE"));
366$aTabs[] = array("DIV" => "edit10", "TAB" => GetMessage("SALE_TAB_ORDER_NUMERATOR_TEMPLATE"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_ORDER_NUMERATOR_TEMPLATE_TITLE"));
368
370function addNumeratorErrorToWarningString($_numeratorResult): string
371{
372 $numeratorWarningsString = '';
373 foreach ($_numeratorResult->getErrors() as $error)
374 {
375 $numeratorWarningsString = $error->getMessage() . '<br>';
376 }
377 return $numeratorWarningsString;
378}
379
385function getSaleArrayOptionValue(array $list, $index): string
386{
387 $result = $list[$index] ?? '';
388 if (is_array($result))
389 {
390 $result = '';
391 }
392
393 return trim($result);
394}
395
396function getSaleStringOptionFromRequest(HttpRequest $request, string $index): string
397{
398 $result = $request->getPost($index) ?? '';
399 if (is_array($result))
400 {
401 $result = '';
402 }
403
404 return trim($result);
405}
406
407function getSaleBooleanOptionFromRequest(HttpRequest $request, string $index): ?string
408{
409 $result = $request->getPost($index);
410 if ($result === 'Y' || $result === 'N')
411 {
412 return $result;
413 }
414
415 return null;
416}
417
418if (
419 $request->isPost()
420 && ($currentAction === 'save' || $currentAction === 'apply')
421 && $SALE_RIGHT === 'W'
423)
424{
425 $bWasUpdated = true;
426
427 $separateSettings = getSaleBooleanOptionFromRequest($request, 'WEIGHT_dif_settings');
428 if ($separateSettings !== null)
429 {
430 $weightUnit = $request->getPost('weight_unit');
431 $weightKoef = $request->getPost('weight_koef');
432 if (!empty($weightUnit) && is_array($weightUnit) && !empty($weightKoef) && is_array($weightKoef))
433 {
434 Option::delete('sale', ['name' => 'weight_unit']);
435 Option::delete('sale', ['name' => 'weight_koef']);
436
437 if ($separateSettings === 'Y')
438 {
439 $weightUnit = $request->getPost('weight_unit');
440 $weightKoef = $request->getPost('weight_koef');
441
442 foreach ($siteIdList as $siteId)
443 {
444 Option::set(
445 'sale',
446 'weight_unit',
447 getSaleArrayOptionValue($weightUnit, $siteId),
448 $siteId
449 );
450 Option::set(
451 'sale',
452 'weight_koef',
453 (float)getSaleArrayOptionValue($weightKoef, $siteId),
454 $siteId
455 );
456 }
457 }
458 else
459 {
460 $siteId = getSaleStringOptionFromRequest($request, 'WEIGHT_current_site');
461 Option::set(
462 'sale',
463 'weight_unit',
464 getSaleArrayOptionValue($weightUnit, $siteId),
465 );
466 Option::set(
467 'sale',
468 'weight_koef',
469 (float)getSaleArrayOptionValue($weightKoef, $siteId),
470 );
471 }
472
473 Option::set('sale', 'WEIGHT_different_set', $separateSettings);
474 }
475 unset($weightKoef, $weightUnit);
476 }
477
478 $separateSettings = getSaleBooleanOptionFromRequest($request, 'ADDRESS_dif_settings');
479 if ($separateSettings !== null)
480 {
481 $locationZip = $request->getPost('location_zip');
482 $location = $request->getPost('location');
483 if (!empty($locationZip) && is_array($locationZip) && !empty($location) && is_array($location))
484 {
485 Option::delete('sale', ['name' => 'location_zip']);
486 Option::delete('sale', ['name' => 'location']);
487
488 if ($separateSettings === 'Y')
489 {
490 foreach ($siteIdList as $siteId)
491 {
492 Option::set(
493 'sale',
494 'location_zip',
495 getSaleArrayOptionValue($locationZip, $siteId),
496 $siteId
497 );
498 Option::set(
499 'sale',
500 'location',
502 $siteId
503 );
504 }
505 }
506 else
507 {
508 $siteId = getSaleStringOptionFromRequest($request, 'ADDRESS_current_site');
509 Option::set(
510 'sale',
511 'location_zip',
512 getSaleArrayOptionValue($locationZip, $siteId)
513 );
514 Option::set(
515 'sale',
516 'location',
518 );
519 }
520 Option::set('sale', 'ADDRESS_different_set', $separateSettings);
521 }
522 unset($location, $locationZip);
523 }
524
525 if(!$lMigrated )
526 {
527 COption::RemoveOption('sale', "sales_zone_countries");
528 COption::RemoveOption('sale', "sales_zone_regions");
529 COption::RemoveOption('sale', "sales_zone_cities");
530 }
531
532 if(!$lpEnabled)
533 {
534 if (!empty($_REQUEST["ADDRESS_dif_settings"]))
535 {
536 for ($i = 0; $i < $siteCount; $i++)
537 {
538 if($lMigrated)
539 {
540 try
541 {
542 SalesZone::saveSelectedTypes(array(
543 'COUNTRY' => $_REQUEST["sales_zone_countries"][$siteList[$i]["ID"]],
544 'REGION' => $_REQUEST["sales_zone_regions"][$siteList[$i]["ID"]],
545 'CITY' => $_REQUEST["sales_zone_cities"][$siteList[$i]["ID"]]
546 ), $siteList[$i]["ID"]);
547 }
548 catch(Exception $e)
549 {
550 }
551 }
552 else
553 {
554 COption::SetOptionString('sale', "sales_zone_countries", implode(":", $_REQUEST["sales_zone_countries"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
555 COption::SetOptionString('sale', "sales_zone_regions", implode(":",$_REQUEST["sales_zone_regions"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
556 COption::SetOptionString('sale', "sales_zone_cities", implode(":",$_REQUEST["sales_zone_cities"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
557 }
558 }
559 }
560 else
561 {
562 $site_id = trim($_REQUEST["ADDRESS_current_site"]);
563
564 if($lMigrated)
565 {
566 try
567 {
568 SalesZone::saveSelectedTypes(array(
569 'COUNTRY' => $_REQUEST["sales_zone_countries"][$site_id],
570 'REGION' => $_REQUEST["sales_zone_regions"][$site_id],
571 'CITY' => $_REQUEST["sales_zone_cities"][$site_id]
572 ), $site_id);
573 }
574 catch(Exception $e)
575 {
576 }
577 }
578 else
579 {
580 COption::SetOptionString('sale', "sales_zone_countries", implode(":",$_REQUEST["sales_zone_countries"][$site_id]));
581 COption::SetOptionString('sale', "sales_zone_regions", implode(":",$_REQUEST["sales_zone_regions"][$site_id]));
582 COption::SetOptionString('sale', "sales_zone_cities", implode(":",$_REQUEST["sales_zone_cities"][$site_id]));
583 }
584 }
585 }
586
587 foreach ($optionMainList as $option)
588 {
589 $name = $option['ID'];
590 switch ($option['TYPE'])
591 {
592 case 'checkbox':
594 if ($value !== null)
595 {
596 Option::set('sale', $name, $value);
597 }
598 break;
599 case 'text':
601 Option::set('sale', $name, $value);
602 break;
603 case 'path':
604 if ($allowEditPhp)
605 {
607 try
608 {
610 }
611 catch (Main\IO\InvalidPathException $e)
612 {
613 $value = $defaultValues[$name] ?? '';
614 }
615 if ($value !== '')
616 {
617 if (($option['VALIDATE']['TYPE'] ?? '') === 'dir')
618 {
619 if (mb_substr($value, - 1, 1) !== '/')
620 {
621 $value .= '/';
622 }
623 }
624 Option::set('sale', $name, $value);
625 }
626 }
627 break;
628 }
629 }
630
631 $rsAgents = CAgent::GetList(
632 [
633 'ID' => 'DESC',
634 ],
635 [
636 'MODULE_ID' => 'sale',
637 'NAME' => "\\Bitrix\\Sale\\Basket::deleteOldAgent(%",
638 ]
639 );
640 while ($arAgent = $rsAgents->Fetch())
641 {
642 CAgent::Delete($arAgent['ID']);
643 }
644 unset($arAgent, $rsAgents);
645
646 $delete_after = (int)Option::get('sale', 'delete_after');
647 if ($delete_after > 0)
648 {
649 CAgent::AddAgent(
650 "\\Bitrix\\Sale\\Basket::deleteOldAgent(" . $delete_after . ");",
651 "sale",
652 "N",
653 8 * 60 * 60,
654 "",
655 "Y"
656 );
657 }
658
659 if (CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
660 {
661 Option::set(
662 'sale',
663 'affiliate_plan_type',
664 getSaleStringOptionFromRequest($request, 'affiliate_plan_type')
665 );
666 }
667
668 $amountValues = $request->getPost('amount_val');
669 $amountCurrencies = $request->getPost('amount_currency');
670 if (!empty($amountValues) && is_array($amountValues) && !empty($amountCurrencies) && is_array($amountCurrencies))
671 {
672 $amountList = [];
673 foreach (array_keys($amountValues) as $amountIndex)
674 {
675 $amount = (float)getSaleArrayOptionValue($amountValues, $amountIndex);
676 $currency = getSaleArrayOptionValue($amountCurrencies, $amountIndex);
677 if ($amount > 0 && $currency !== '')
678 {
679 $amountList[] = [
680 'AMOUNT' => $amount,
681 'CURRENCY' => $currency,
682 ];
683 }
684 }
685 if (!empty($amountList))
686 {
687 Option::set('sale', 'pay_amount', serialize($amountList));
688 }
689 unset($amountList);
690 }
691 unset($amountCurrencies, $amountValues);
692
693 CAgent::RemoveAgent('CSaleOrder::RemindPayment();', 'sale');
694 Option::delete('sale', ['name' => 'pay_reminder']);
695 $rawPayReminder = $request->getPost('reminder');
696 if (!empty($rawPayReminder) && is_array($rawPayReminder))
697 {
698 $payReminder = [];
699 foreach ($siteIdList as $siteId)
700 {
701 if (!empty($rawPayReminder[$siteId]) && is_array($rawPayReminder[$siteId]))
702 {
703 $payReminder[$siteId] = [
704 'use' => ($rawPayReminder[$siteId]['use'] ?? 'N') === 'Y' ? 'Y' : 'N',
705 'after' => (int)($rawPayReminder[$siteId]['after'] ?? 0),
706 'frequency' => (int)($rawPayReminder[$siteId]['frequency'] ?? 0),
707 'period' => (int)($rawPayReminder[$siteId]['period'] ?? 0),
708 ];
709 }
710 }
711 if (!empty($payReminder))
712 {
713 Option::set('sale', 'pay_reminder', serialize($payReminder));
714 CAgent::AddAgent('CSaleOrder::RemindPayment();', 'sale', 'N', 86400, '', 'Y');
715 }
716 unset($payReminder);
717 }
718 unset($rawPayReminder);
719
720 //subscribe product
721 $rsAgents = CAgent::GetList(
722 [
723 'ID' => 'DESC',
724 ],
725 [
726 'MODULE_ID' => 'sale',
727 'NAME' => 'CSaleBasket::ClearProductSubscribe(%',
728 ]
729 );
730 while ($arAgent = $rsAgents->Fetch())
731 {
732 CAgent::Delete($arAgent["ID"]);
733 }
734 unset($arAgent, $rsAgents);
735 Option::delete('sale', ['name' => 'subscribe_prod']);
736 $rawProductSubscribe = $request->getPost('subscribProd');
737 if (!empty($rawProductSubscribe) && is_array($rawProductSubscribe))
738 {
739 $productSubscribe = [];
740 foreach ($siteIdList as $siteId)
741 {
742 $useSubscribe = ($rawProductSubscribe[$siteId]['use'] ?? 'N') === 'Y' ? 'Y' : 'N';
743 $period = (int)($rawProductSubscribe[$siteId]['del_after'] ?? 0);
744 if ($period <= 0)
745 {
746 $period = 30;
747 }
748 $productSubscribe[$siteId] = [
749 'use' => $useSubscribe,
750 'del_after' => $period,
751 ];
752 if ($useSubscribe === 'Y')
753 {
754 CAgent::AddAgent(
755 "CSaleBasket::ClearProductSubscribe('" . $siteId . "');",
756 'sale',
757 'N',
758 $period * 86400,
759 '',
760 'Y'
761 );
762 }
763 }
764 Option::set('sale', 'subscribe_prod', serialize($productSubscribe));
765 unset($productSubscribe);
766 }
767 unset($rawProductSubscribe);
768
769 //viewed product
770 Option::delete('sale', ['name' => 'viewed_product']);
771 $rawViewed = $request->getPost('viewed');
772 if (!empty($rawViewed) && is_array($rawViewed))
773 {
774 $viewed = [];
775 foreach ($siteIdList as $siteId)
776 {
777 $viewedTime = (int)($rawViewed[$siteId]['time'] ?? 0);
778 if ($viewedTime <= 0)
779 {
780 $viewedTime = 90;
781 }
782 $viewedCount = (int)($rawViewed[$siteId]['count'] ?? 0);
783 if ($viewedCount <= 0)
784 {
785 $viewedCount = 1000;
786 }
787 $viewed[$siteId] = [
788 'time' => $viewedTime,
789 'count' => $viewedCount,
790 ];
791 }
792 Option::set('sale', 'viewed_product', serialize($viewed));
793 unset($viewed);
794 }
795
796 Option::set(
797 'sale',
798 'viewed_capability',
799 ($request->getPost('viewed_capability') ?? 'N') === 'Y' ? 'Y' : 'N'
800 );
801
802 $rsAgents = CAgent::GetList(
803 [
804 'ID' => 'DESC',
805 ],
806 [
807 'MODULE_ID' => 'sale',
808 'NAME' => 'CSaleViewedProduct::ClearViewed();',
809 ]
810 );
811 $arAgent = $rsAgents->Fetch();
812 unset($rsAgents);
813 if (!$arAgent)
814 {
815 CAgent::AddAgent(
816 'CSaleViewedProduct::ClearViewed();',
817 'sale',
818 'N',
819 86400,
820 '',
821 'Y'
822 );
823 }
824
825 Option::set('sale', 'default_currency', getSaleStringOptionFromRequest($request, 'CURRENCY_DEFAULT'));
826 Option::set('sale', 'crypt_algorithm', getSaleStringOptionFromRequest($request, 'crypt_algorithm'));
827 Option::set('sale', 'sale_data_file', getSaleStringOptionFromRequest($request, 'sale_data_file'));
828
829 $sale_ps_success_path = getSaleStringOptionFromRequest($request, 'sale_ps_success_path');
830 if ($sale_ps_success_path === '')
831 {
832 $sale_ps_success_path = '/';
833 }
834 Option::set('sale', 'sale_ps_success_path', $sale_ps_success_path);
835
836 $sale_ps_fail_path = getSaleStringOptionFromRequest($request, 'sale_ps_fail_path');
837 if ($sale_ps_fail_path === '')
838 {
839 $sale_ps_fail_path = '/';
840 }
841 Option::set('sale', 'sale_ps_fail_path', $sale_ps_fail_path);
842
843 $sale_location_selector_appearance = getSaleStringOptionFromRequest($request, 'sale_location_selector_appearance');
844 if ($sale_location_selector_appearance === '')
845 {
846 $sale_location_selector_appearance = 'steps';
847 }
848 Option::set('sale', 'sale_location_selector_appearance', $sale_location_selector_appearance);
849
850 $optionList = [
851 'status_on_paid' => 'PAID_STATUS',
852 'status_on_half_paid' => 'HALF_PAID_STATUS',
853 'status_on_allow_delivery' => 'ALLOW_DELIVERY_STATUS',
854 'status_on_allow_delivery_one_of' => 'ALLOW_DELIVERY_ONE_OF_STATUS',
855 'status_on_shipped_shipment' => 'SHIPMENT_SHIPPED_STATUS',
856 'status_on_shipped_shipment_one_of' => 'SHIPMENT_SHIPPED_ONE_OF_STATUS',
857 'shipment_status_on_allow_delivery' => 'SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS',
858 'shipment_status_on_shipped' => 'SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS',
859 'status_on_payed_2_allow_delivery' => 'PAYED_2_ALLOW_DELIVERY',
860 'status_on_change_allow_delivery_after_paid' => 'CHANGE_ALLOW_DELIVERY_AFTER_PAID',
861 ];
862 foreach ($optionList as $optionName => $requestKey)
863 {
864 Option::set('sale', $optionName, getSaleStringOptionFromRequest($request, $requestKey));
865 }
866 unset($optionName, $requestKey, $optionList);
867
868 $alloDeductionOnDelivery = getSaleBooleanOptionFromRequest($request, 'ALLOW_DEDUCTION_ON_DELIVERY');
869 if ($alloDeductionOnDelivery !== null)
870 {
871 Option::set('sale', 'allow_deduction_on_delivery', $alloDeductionOnDelivery);
872 }
873 unset($alloDeductionOnDelivery);
874
875 $formatQuantity = getSaleStringOptionFromRequest($request, 'FORMAT_QUANTITY');
876 if ($formatQuantity !== 'AUTO')
877 {
878 $formatQuantity = (int)$formatQuantity;
879 }
880 Option::set('sale', 'format_quantity', $formatQuantity);
881 unset($formatQuantity);
882
883 $valuePrecision = (int)getSaleStringOptionFromRequest($request, 'VALUE_PRECISION');
884 if ($valuePrecision < 0)
885 {
886 $valuePrecision = 2;
887 }
888 Option::set('sale', 'value_precision', $valuePrecision);
889
890 $oldExpirationProcessingEvents = Option::get('sale', 'expiration_processing_events');
891 $newExpirationProcessingEvents = getSaleBooleanOptionFromRequest($request, 'EXPIRATION_PROCESSING_EVENTS');
892 if ($newExpirationProcessingEvents !== null)
893 {
894 Option::set('sale', 'expiration_processing_events', $newExpirationProcessingEvents);
895 if ($oldExpirationProcessingEvents !== $newExpirationProcessingEvents)
896 {
898 if ($newExpirationProcessingEvents === 'Y')
899 {
901
902 $eventManager->registerEventHandlerCompatible(
903 'sale',
904 'OnBeforeBasketAdd',
905 'sale',
906 '\Bitrix\Sale\Internals\ConversionHandlers',
907 'onBeforeBasketAdd'
908 );
909 $eventManager->registerEventHandlerCompatible(
910 'sale',
911 'OnBasketAdd',
912 'sale',
913 '\Bitrix\Sale\Internals\ConversionHandlers',
914 'onBasketAdd'
915 );
916 $eventManager->registerEventHandlerCompatible(
917 'sale',
918 'OnOrderAdd',
919 'sale',
920 '\Bitrix\Sale\Internals\ConversionHandlers',
921 'onOrderAdd'
922 );
923 $eventManager->registerEventHandlerCompatible(
924 'sale',
925 'OnSalePayOrder',
926 'sale',
927 '\Bitrix\Sale\Internals\ConversionHandlers',
928 'onSalePayOrder'
929 );
930
931 $eventManager->unRegisterEventHandler(
932 'sale',
933 'OnSaleBasketItemSaved',
934 'sale',
935 '\Bitrix\Sale\Internals\ConversionHandlers',
936 'onSaleBasketItemSaved'
937 );
938 $eventManager->unRegisterEventHandler(
939 'sale',
940 'OnSaleOrderSaved',
941 'sale',
942 '\Bitrix\Sale\Internals\ConversionHandlers',
943 'onSaleOrderSaved'
944 );
945 $eventManager->unRegisterEventHandler(
946 'sale',
947 'OnSaleOrderPaid',
948 'sale',
949 '\Bitrix\Sale\Internals\ConversionHandlers',
950 'onSaleOrderPaid'
951 );
952 }
953 else
954 {
956
957 $eventManager->unRegisterEventHandler(
958 'sale',
959 'OnBeforeBasketAdd',
960 'sale',
961 '\Bitrix\Sale\Internals\ConversionHandlers',
962 'onBeforeBasketAdd'
963 );
964 $eventManager->unRegisterEventHandler(
965 'sale',
966 'OnBasketAdd',
967 'sale',
968 '\Bitrix\Sale\Internals\ConversionHandlers',
969 'onBasketAdd'
970 );
971 $eventManager->unRegisterEventHandler(
972 'sale',
973 'OnOrderAdd',
974 'sale',
975 '\Bitrix\Sale\Internals\ConversionHandlers',
976 'onOrderAdd'
977 );
978 $eventManager->unRegisterEventHandler(
979 'sale',
980 'OnSalePayOrder',
981 'sale',
982 '\Bitrix\Sale\Internals\ConversionHandlers',
983 'onSalePayOrder'
984 );
985
986 $eventManager->registerEventHandler(
987 'sale',
988 'OnSaleBasketItemSaved',
989 'sale',
990 '\Bitrix\Sale\Internals\ConversionHandlers',
991 'onSaleBasketItemSaved'
992 );
993 $eventManager->registerEventHandler(
994 'sale',
995 'OnSaleOrderSaved',
996 'sale',
997 '\Bitrix\Sale\Internals\ConversionHandlers',
998 'onSaleOrderSaved'
999 );
1000 $eventManager->registerEventHandler(
1001 'sale',
1002 'OnSaleOrderPaid',
1003 'sale',
1004 '\Bitrix\Sale\Internals\ConversionHandlers',
1005 'onSaleOrderPaid'
1006 );
1007 }
1008 }
1009 }
1010
1011 $optionList = [
1012 'order_history_log_level' => 'ORDER_HISTORY_LOG_LEVEL',
1013 'order_history_action_log_level' => 'ORDER_HISTORY_ACTION_LOG_LEVEL',
1014 ];
1015 foreach ($optionList as $optionName => $requestKey)
1016 {
1017 $value = (int)getSaleStringOptionFromRequest($request, $requestKey);
1018 if ($value !== 1)
1019 {
1020 $value = 0;
1021 }
1022 Option::set('sale', $optionName, $value);
1023 }
1024 unset($value, $optionName, $requestKey, $optionList);
1025
1026 $orderListFields = '';
1027 $rawOrderListields = $request->getPost('SELECTED_FIELDS');
1028 if (!is_array($rawOrderListields))
1029 {
1030 $rawOrderListields = [];
1031 }
1032 $rawOrderListields = array_filter($rawOrderListields);
1033 if (!empty($rawOrderListields))
1034 {
1035 $orderListFields = implode(',', $rawOrderListields);
1036 }
1037 if ($orderListFields === '')
1038 {
1039 $orderListFields = 'ID,USER,PAY_SYSTEM,PRICE,STATUS,PAYED,PS_STATUS,CANCELED,BASKET';
1040 }
1041 Option::set('sale', 'order_list_fields', $orderListFields);
1042
1043 // account number generation - via numerator
1044 $hideNumeratorSettings = getSaleBooleanOptionFromRequest($request, 'hideNumeratorSettings');
1045 if ($hideNumeratorSettings !== null)
1046 {
1047 if ($hideNumeratorSettings === 'Y')
1048 {
1050 {
1052 }
1053 }
1054 else
1055 {
1056 $postValues = $request->getPostList()->toArray();
1058 {
1059 $numeratorUpdateResult = Main\Numerator\Numerator::update($numeratorForOrdersId, $postValues);
1060 if (!$numeratorUpdateResult->isSuccess())
1061 {
1062 $strWarning .= addNumeratorErrorToWarningString($numeratorUpdateResult);
1063 }
1064 }
1065 else
1066 {
1067 $numeratorOrder = Main\Numerator\Numerator::create();
1068 $numeratorOrderValidationResult = $numeratorOrder->setConfig($postValues);
1069 if ($numeratorOrderValidationResult->isSuccess())
1070 {
1071 $numeratorOrderSaveResult = $numeratorOrder->save();
1072 if (!$numeratorOrderSaveResult->isSuccess())
1073 {
1074 $strWarning .= addNumeratorErrorToWarningString($numeratorOrderSaveResult);
1075 }
1076 }
1077 else
1078 {
1079 $strWarning .= addNumeratorErrorToWarningString($numeratorOrderValidationResult);
1080 }
1081 }
1082 unset($postValues);
1083 }
1084 }
1085
1086 //subscribe product
1087 $rawDefaultDeductStore = $request->getPost('defaultDeductStore');
1088 if (!empty($rawDefaultDeductStore) && is_array($rawDefaultDeductStore))
1089 {
1090 Option::delete('sale', ['name' => 'deduct_store_id']);
1091 foreach ($siteIdList as $siteId)
1092 {
1093 if (($rawDefaultDeductStore[$siteId]['save'] ?? 'N') === 'Y')
1094 {
1095 $defaultStoreId = (int)($rawDefaultDeductStore[$siteId]['id'] ?? 0);
1096 if ($defaultStoreId > 0)
1097 {
1098 Option::set('sale', 'deduct_store_id', $defaultStoreId, $siteId);
1099 }
1100 }
1101 }
1102 }
1103 unset($rawDefaultDeductStore);
1104
1105 //SAVE SHOP LIST SITE
1106 foreach ($siteIdList as $siteId)
1107 {
1108 Option::delete('sale', ['name' => 'SHOP_SITE_' . $siteId]);
1109 }
1110 $rawShopSites = $request->getPost('SHOP_SITE');
1111 if (!empty($rawShopSites) && is_array($rawShopSites))
1112 {
1113 foreach ($rawShopSites as $siteId)
1114 {
1115 if (!is_string($siteId))
1116 {
1117 continue;
1118 }
1119 if (!in_array($siteId, $siteIdList))
1120 {
1121 continue;
1122 }
1123 Option::set('sale', 'SHOP_SITE_' . $siteId, $siteId);
1124 }
1125 }
1126 unset($rawShopSites);
1127
1128 $SALE_P2P_ALLOW_COLLECT_DATA = getSaleBooleanOptionFromRequest($request, 'SALE_P2P_ALLOW_COLLECT_DATA');
1129 if ($SALE_P2P_ALLOW_COLLECT_DATA !== null)
1130 {
1131 $p2p_del_exp_old = (int)Option::get('sale', 'p2p_del_exp');
1132 $agentData = CAgent::GetList(
1133 [
1134 'ID' => 'DESC',
1135 ],
1136 [
1137 'MODULE_ID' => 'sale',
1138 'NAME' => "\\Bitrix\\Sale\\Product2ProductTable::addProductsByAgent(%",
1139 ]
1140 );
1141 $agent = $agentData->Fetch();
1142 unset($agentData);
1143
1144 if ($SALE_P2P_ALLOW_COLLECT_DATA === 'Y')
1145 {
1146 if (!$agent)
1147 {
1148 $limit = (int)Option::get('sale', 'p2p_limit_collecting_per_hit');
1149 CAgent::AddAgent(
1150 "Bitrix\\Sale\\Product2ProductTable::addProductsByAgent($limit);",
1151 'sale',
1152 'N',
1153 60,
1154 '',
1155 'Y'
1156 );
1157 }
1158 }
1159 else
1160 {
1161 $agentId = (int)($agent['ID'] ?? 0);
1162 if ($agentId > 0)
1163 {
1164 CAgent::Delete($agentId);
1165 }
1166 unset($agentId);
1167 }
1168 unset($agent);
1169
1170 Option::set('sale', 'p2p_allow_collect_data', $SALE_P2P_ALLOW_COLLECT_DATA);
1171 }
1172 $SALE_P2P_STATUS_LIST = $request->getPost('SALE_P2P_STATUS_LIST');
1173 if (is_array($SALE_P2P_STATUS_LIST))
1174 {
1175 $SALE_P2P_STATUS_LIST = array_filter($SALE_P2P_STATUS_LIST);
1176 Option::set('sale', 'p2p_status_list', serialize($SALE_P2P_STATUS_LIST));
1177 }
1178 unset($SALE_P2P_STATUS_LIST);
1179
1180 $p2p_del_period = (int)getSaleStringOptionFromRequest($request, 'p2p_del_period');
1181 if ($p2p_del_period <= 0)
1182 {
1183 $p2p_del_period = 10;
1184 }
1185 Option::set('sale', 'p2p_del_period', $p2p_del_period);
1186
1187 $p2p_del_exp = (int)getSaleStringOptionFromRequest($request, 'p2p_del_exp');
1188 if ($p2p_del_exp <= 0)
1189 {
1190 $p2p_del_exp = 10;
1191 }
1192 Option::set('sale', 'p2p_del_exp', $p2p_del_exp);
1193 $rsAgents = CAgent::GetList(
1194 ['ID'=>'DESC'],
1195 [
1196 'MODULE_ID' => 'sale',
1197 'NAME' => "\\Bitrix\\Sale\\Product2ProductTable::deleteOldProducts(%",
1198 ]
1199 );
1200 while($arAgent = $rsAgents->Fetch())
1201 {
1202 CAgent::Delete($arAgent["ID"]);
1203 }
1204 unset($arAgent, $rsAgents);
1205 CAgent::AddAgent(
1206 "Bitrix\\Sale\\Product2ProductTable::deleteOldProducts(" . $p2p_del_exp . ");",
1207 'sale',
1208 'N',
1209 86400 * $p2p_del_period,
1210 '',
1211 'Y'
1212 );
1213 unset($p2p_del_exp, $p2p_del_period);
1214
1215 $siteCurrencies = [];
1216 $iterator = Sale\Internals\SiteCurrencyTable::getList([
1217 'select' => [
1218 'LID',
1219 ],
1220 ]);
1221 while ($row = $iterator->fetch())
1222 {
1223 $siteCurrencies[$row['LID']] = $row['LID'];
1224 }
1225 unset($row, $iterator);
1226 foreach ($siteIdList as $siteId)
1227 {
1228 $valCurrency = getSaleStringOptionFromRequest($request, 'CURRENCY_' . $siteId);
1229 if (isset($siteCurrencies[$siteId]))
1230 {
1231 if ($valCurrency === '')
1232 {
1233 Sale\Internals\SiteCurrencyTable::delete($siteId);
1234 }
1235 else
1236 {
1237 Sale\Internals\SiteCurrencyTable::update(
1238 $siteId,
1239 [
1240 'CURRENCY' => $valCurrency,
1241 ]
1242 );
1243 }
1244 unset($siteCurrencies[$siteId]);
1245 }
1246 else
1247 {
1248 Sale\Internals\SiteCurrencyTable::add([
1249 'LID' => $siteId,
1250 'CURRENCY' => $valCurrency,
1251 ]);
1252 }
1253
1255 $userGroupList = $request->getPost('SITE_USER_GROUPS_' . $siteId);
1256 if (!empty($userGroupList) && is_array($userGroupList))
1257 {
1259 foreach ($userGroupList as $groupId)
1260 {
1262 'SITE_ID' => $siteId,
1263 'GROUP_ID' => $groupId,
1264 ]);
1265 }
1266 }
1267 unset($userGroupList);
1268 }
1269/* if (!empty($siteCurrencies))
1270 {
1271 foreach ($siteCurrencies as $siteId)
1272 {
1273 Sale\Internals\SiteCurrencyTable::delete($siteId);
1274 }
1275 } */
1276 unset($siteCurrencies);
1277
1278 $productReserveCondition = getSaleStringOptionFromRequest($request, 'product_reserve_condition');
1279 if (in_array($productReserveCondition, Sale\Configuration::getReservationConditionList(false)))
1280 {
1281 Option::set('sale', 'product_reserve_condition', $productReserveCondition);
1282 }
1283 unset($productReserveCondition);
1284
1285 $clearPeriod = (int)getSaleStringOptionFromRequest($request, 'product_reserve_clear_period');
1286 if ($clearPeriod >= 0)
1287 {
1288 Option::set('sale', 'product_reserve_clear_period', $clearPeriod);
1289 }
1290 unset($clearPeriod);
1291
1293 if ($useSaleDiscountOnly !== null)
1294 {
1295 Option::set('sale', 'use_sale_discount_only', $useSaleDiscountOnly);
1296 }
1297 unset($useSaleDiscountOnly);
1298
1299 $discountPercent = getSaleBooleanOptionFromRequest($request, 'get_discount_percent_from_base_price');
1300 if ($discountPercent !== null)
1301 {
1302 Option::set('sale', 'get_discount_percent_from_base_price', $discountPercent);
1303 }
1304 unset($discountPercent);
1305
1306 if (Option::get('sale', 'use_sale_discount_only') === 'N')
1307 {
1308 $discountModeApply = (int)getSaleStringOptionFromRequest($request, 'discount_apply_mode');
1309 if (in_array($discountModeApply, Sale\Discount::getApplyModeList(false)))
1310 {
1311 Option::set('sale', 'discount_apply_mode', $discountModeApply);
1312 }
1313 unset($discountModeApply);
1314 }
1315
1316 $optionList = [
1317 'regular_archive_active' => 'archive_regular_accept',
1318 'archive_blocked_order' => 'archive_blocked_order_accept',
1319 ];
1320 foreach ($optionList as $optionName => $requestKey)
1321 {
1323 if ($value !== null)
1324 {
1325 Option::set('sale', $optionName, $value);
1326 }
1327 }
1328 unset($value, $optionName, $requestKey, $optionList);
1329
1330 $enableRegularArchive = Option::get('sale', 'regular_archive_active') === 'Y';
1331 $archiveBlockedOrder = Option::get('sale', 'archive_blocked_order') === 'Y';
1332
1333 $filter = [];
1334 $archivePeriod = (int)getSaleStringOptionFromRequest($request, 'archive_period');
1335 $filter['PERIOD'] = ($archivePeriod > 0 ? $archivePeriod : 365);
1336 unset($archivePeriod);
1337
1338 if (!$archiveBlockedOrder)
1339 {
1340 $filter['LOCKED_BY'] = null;
1341 $filter['DATE_LOCK'] = null;
1342 }
1343
1344 $rawStatusList = $request->getPost('archive_status_id');
1345 if (!empty($rawStatusList) && is_array($rawStatusList))
1346 {
1347 $allStatusNames = Sale\OrderStatus::getAllStatusesNames();
1348 $statusList = [];
1349 foreach ($rawStatusList as $statusId)
1350 {
1351 if (isset($allStatusNames[$statusId]))
1352 {
1353 $statusList[] = $statusId;
1354 }
1355 }
1356 if (!empty($statusList))
1357 {
1358 $filter['@STATUS_ID'] = $statusList;
1359 }
1361 }
1362 unset($rawStatusList);
1363
1364 $rawArchiveSiteList = $request->getPost('archive_site');
1365 if (!empty($rawArchiveSiteList) && is_array($rawArchiveSiteList))
1366 {
1367 $archiveSiteList = [];
1368 foreach ($rawArchiveSiteList as $siteId)
1369 {
1370 if (isset($siteList[$siteId]))
1371 {
1372 $archiveSiteList[] = $siteId;
1373 }
1374 }
1375 if (!empty($archiveSiteList))
1376 {
1377 $filter['@LID'] = $archiveSiteList;
1378 }
1379 unset($archiveSiteList);
1380 }
1381 unset($rawArchiveSiteList);
1382
1383 $archiveFlagOptionList = [
1384 '=PAYED' => 'archive_payed',
1385 '=CANCELED' => 'archive_canceled',
1386 '=DEDUCTED' => 'archive_deducted',
1387 ];
1388 foreach ($archiveFlagOptionList as $filterKey => $requestKey)
1389 {
1391 if ($value !== null)
1392 {
1393 $filter[$filterKey] = $value;
1394 }
1395 }
1396 unset($archiveFlagOptionList);
1397
1398 $archiveLimit = (int)getSaleStringOptionFromRequest($request, 'archive_limit');
1399 if ($archiveLimit <= 0)
1400 {
1401 $archiveLimit = 10;
1402 }
1403 Option::set('sale', 'archive_limit', $archiveLimit);
1404
1405 $archiveTimeLimit = (int)getSaleStringOptionFromRequest($request, 'archive_time_limit');
1406 if ($archiveTimeLimit <= 0)
1407 {
1409 }
1410 Option::set('sale', 'archive_time_limit', $archiveTimeLimit);
1411
1412 $filter = serialize($filter);
1413 Option::set('sale', 'archive_params', $filter);
1414
1415 $agentsList = CAgent::GetList(
1416 [
1417 'ID' => 'DESC',
1418 ],
1419 [
1420 'MODULE_ID' => 'sale',
1421 'NAME' => "\\Bitrix\\Sale\\Archive\\Manager::archiveOnAgent(%",
1422 ]
1423 );
1424 while ($agent = $agentsList->Fetch())
1425 {
1426 CAgent::Delete($agent["ID"]);
1427 }
1428 unset($agent, $agentList);
1429
1431 {
1432 CAgent::AddAgent(
1433 "\\Bitrix\\Sale\\Archive\\Manager::archiveOnAgent(" . $archiveLimit . "," . $archiveTimeLimit . ");",
1434 "sale",
1435 "N",
1436 86400,
1437 "",
1438 "Y"
1439 );
1440 }
1441
1442 $orderChangesCleanerActive = getSaleBooleanOptionFromRequest($request, 'order_changes_cleaner_active');
1443 if ($orderChangesCleanerActive !== null)
1444 {
1445 Option::set('sale', 'order_changes_cleaner_active', $orderChangesCleanerActive);
1446 }
1447 $orderChangesCleanerActive = Option::get('sale', 'order_changes_cleaner_active') === 'Y';
1448
1449 $orderChangesCleanerDays = (int)getSaleStringOptionFromRequest($request, 'order_changes_cleaner_days');
1450 if ($orderChangesCleanerDays <= 0)
1451 {
1452 $orderChangesCleanerDays = 365;
1453 }
1454 Option::set('sale', 'order_changes_cleaner_days', $orderChangesCleanerDays);
1455
1456 $orderChangesCleanerLimit = (int)getSaleStringOptionFromRequest($request, 'order_changes_cleaner_limit');
1457 if ($orderChangesCleanerLimit <= 0)
1458 {
1459 $orderChangesCleanerLimit = 10000;
1460 }
1461 Option::set('sale', 'order_changes_cleaner_limit',$orderChangesCleanerLimit);
1462
1463 $agentsList = CAgent::GetList(
1464 [
1465 'ID' => 'DESC',
1466 ],
1467 [
1468 'MODULE_ID' => 'sale',
1469 'NAME' => "\\Bitrix\\Sale\\OrderHistory::deleteOldAgent(%",
1470 ]
1471 );
1472 while($agent = $agentsList->Fetch())
1473 {
1474 CAgent::Delete($agent["ID"]);
1475 }
1476 unset($agent, $agentList);
1477
1478 if ($orderChangesCleanerActive)
1479 {
1480 CAgent::AddAgent(
1481 "\\Bitrix\\Sale\\OrderHistory::deleteOldAgent(" . $orderChangesCleanerDays ."," . $orderChangesCleanerLimit . ");",
1482 'sale',
1483 'N',
1484 60,
1485 '',
1486 'Y'
1487 );
1488 }
1489
1490 ob_start();
1491 require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/admin/group_rights.php';
1492 ob_end_clean();
1493
1494 $rawTrackingMapStatuses = $request->getPost('tracking_map_statuses');
1495 if (!empty($rawTrackingMapStatuses) && is_array($rawTrackingMapStatuses))
1496 {
1498 $shipmentStatuses = [];
1499 $iterator = Sale\Internals\StatusTable::getList([
1500 'select' => [
1501 'ID',
1502 ],
1503 'filter' => [
1504 '=TYPE' => Sale\Internals\StatusTable::TYPE_SHIPMENT,
1505 ],
1506 ]);
1507 while ($row = $iterator->fetch())
1508 {
1509 $shipmentStatuses[$row['ID']] = $row['ID'];
1510 }
1511 unset($row, $iterator);
1512 $trackingMapStatuses = [];
1513 foreach ($rawTrackingMapStatuses as $trackStatusId => $shipmentStatusId)
1514 {
1515 if (!is_string($shipmentStatusId) || $shipmentStatusId === '')
1516 {
1517 continue;
1518 }
1519 if (!isset($trackingStatuses[$trackStatusId]) || !isset($shipmentStatuses[$shipmentStatusId]))
1520 {
1521 continue;
1522 }
1523 $trackingMapStatuses[$trackStatusId] = $shipmentStatusId;
1524 }
1525 Option::set('sale', 'tracking_map_statuses', serialize($trackingMapStatuses));
1526 unset($trackingMapStatuses);
1528 }
1529 unset($rawTrackingMapStatuses);
1530
1531 $trackingCheck = getSaleBooleanOptionFromRequest($request, 'tracking_check_switch');
1532 if ($trackingCheck !== null)
1533 {
1534 Option::set('sale', 'tracking_check_switch', $trackingCheck);
1535 }
1536 $trackingCheck = Option::get('sale', 'tracking_check_switch') === 'Y';
1537
1538 $trackingPeriod = (int)getSaleStringOptionFromRequest($request, 'tracking_check_period');
1539 if ($trackingPeriod > 0)
1540 {
1541 Option::set('sale', 'tracking_check_period', $trackingPeriod);
1542 }
1543 $trackingPeriod = (int)Option::get('sale', 'tracking_check_period');
1544
1545 $agentName = '\Bitrix\Sale\Delivery\Tracking\Manager::startRefreshingStatuses();';
1546
1547 if ($trackingCheck && $trackingPeriod > 0)
1548 {
1549 $res = CAgent::GetList([], ['NAME' => $agentName]);
1550 $agent = $res->Fetch();
1551 unset($res);
1552 if ($agent)
1553 {
1554 CAgent::Update($agent['ID'], ['AGENT_INTERVAL' => $trackingPeriod * 3600]);
1555 }
1556 else
1557 {
1558 CAgent::AddAgent(
1559 $agentName,
1560 'sale',
1561 'Y',
1562 $trackingPeriod * 3600,
1563 '',
1564 'Y'
1565 );
1566 }
1567 }
1568 else
1569 {
1570 CAgent::RemoveAgent(
1571 $agentName,
1572 'sale'
1573 );
1574 }
1575
1576 $checkTypeOnPay = getSaleStringOptionFromRequest($request, 'CHECK_TYPE_ON_PAY');
1577 if ($checkTypeOnPay === '')
1578 {
1579 $checkTypeOnPay = 'sell';
1580 }
1581 Option::set('sale', 'check_type_on_pay', $checkTypeOnPay);
1582 unset($checkTypeOnPay);
1583
1584 $basketRefreshGap = (int)getSaleStringOptionFromRequest($request, 'BASKET_REFRESH_GAP');
1585 if ($basketRefreshGap < 0)
1586 {
1587 $basketRefreshGap = 0;
1588 }
1589 Option::set('sale', 'basket_refresh_gap', $basketRefreshGap);
1590 unset($basketRefreshGap);
1591
1592 $orderStatuses = [];
1593 $iterator = Sale\Internals\StatusTable::getList([
1594 'select' => [
1595 'ID',
1596 ],
1597 'filter' => [
1598 '=TYPE' => Sale\Internals\StatusTable::TYPE_ORDER,
1599 ],
1600 ]);
1601 while ($row = $iterator->fetch())
1602 {
1603 $orderStatuses[$row['ID']] = $row['ID'];
1604 }
1605 unset($row, $iterator);
1606 $allowPayStatus = getSaleStringOptionFromRequest($request, 'ALLOW_PAY_STATUS');
1607 if ($allowPayStatus === '' || !isset($orderStatuses[$allowPayStatus]))
1608 {
1609 $allowPayStatus = Sale\OrderStatus::getInitialStatus();
1610 }
1611 unset($orderStatuses);
1612 Option::set('sale', 'allow_pay_status', $allowPayStatus);
1613 unset($allowPayStatus);
1614
1615 $allowGuestOrderView = getSaleBooleanOptionFromRequest($request, 'ALLOW_GUEST_ORDER_VIEW');
1616 if ($allowGuestOrderView !== null)
1617 {
1618 Option::set('sale', 'allow_guest_order_view', $allowGuestOrderView);
1619 }
1620 unset($allowGuestOrderView);
1621
1622 $allowGuestOrderViewPath = $request->getPost('ALLOW_GUEST_ORDER_VIEW_PATH');
1623 if (!is_array($allowGuestOrderViewPath))
1624 {
1625 $allowGuestOrderViewPath = [];
1626 }
1627 //TODO: check values
1628 Option::set('sale', 'allow_guest_order_view_paths', serialize($allowGuestOrderViewPath));
1629 unset($allowGuestOrderViewPath);
1630
1631 $allowGuestOrderViewStatus = $request->getPost('ALLOW_GUEST_ORDER_VIEW_STATUS');
1632 if (!is_array($allowGuestOrderViewStatus))
1633 {
1634 $allowGuestOrderViewStatus = [];
1635 }
1636 //TODO: check values
1637 Option::set('sale', 'allow_guest_order_view_status', serialize($allowGuestOrderViewStatus));
1638 unset($allowGuestOrderViewStatus);
1639}
1640
1643 '' => Loc::getMessage('SMO_STATUS'),
1644];
1645$iterator = Sale\Internals\StatusTable::getList([
1646 'select' => [
1647 'ID',
1648 'SORT',
1649 'NAME' => 'STATUS_LANG.NAME',
1650 ],
1651 'filter' => [
1652 '=STATUS_LANG.LID' => LANGUAGE_ID,
1653 '=TYPE' => Sale\Internals\StatusTable::TYPE_ORDER,
1654 ],
1655 'order' => [
1656 'SORT' => 'ASC',
1657 'ID' => 'ASC',
1658 ],
1659]);
1660while ($arStatus = $iterator->fetch())
1661{
1662 $title = htmlspecialcharsbx('[' .$arStatus['ID'].'] '. $arStatus['NAME']);
1663 $arStatuses[$arStatus['ID']] = $title;
1664 $statusesWithoutNoChange[$arStatus['ID']] = $title;
1665}
1666unset($iterator);
1667
1669 '' => Loc::getMessage('SMO_STATUS'),
1670];
1671$delieryStatusesList = Sale\DeliveryStatus::getAllStatusesNames();
1672if (!empty($delieryStatusesList) && is_array($delieryStatusesList))
1673{
1674 foreach ($delieryStatusesList as $statusId => $statusName)
1675 {
1676 $delieryStatuses[$statusId] = htmlspecialcharsbx('[' . $statusId .'] ' . $statusName);
1677 }
1678}
1679
1680
1681if ($strWarning !== '')
1682{
1684}
1686{
1687 if ($currentAction === 'save' && $backUrl !== '')
1688 {
1690 }
1691 else
1692 {
1694 $APPLICATION->GetCurPage()
1695 . '?lang=' . LANGUAGE_ID
1696 . '&mid=' . urlencode('sale')
1697 . '&mid_menu=1'
1698 . ($backUrl !== '' ? '&back_url_settings=' . urlencode($backUrl) : '')
1699 . '&' . $tabControl->ActiveTabParam()
1700 );
1701 }
1702}
1703
1705$settings['use_sale_discount_only'] = Option::get('sale', 'use_sale_discount_only');
1706$settings['get_discount_percent_from_base_price'] = Option::get('sale', 'get_discount_percent_from_base_price');
1707$settings['discount_apply_mode'] = (int)Option::get('sale', 'discount_apply_mode');
1708$settings['product_reserve_condition'] = Option::get('sale', 'product_reserve_condition');
1709$settings['product_reserve_clear_period'] = (int)Option::get('sale', 'product_reserve_clear_period');
1710$settings['tracking_map_statuses'] = [];
1711$option = Option::get('sale', 'tracking_map_statuses');
1712if ($option !== '')
1713{
1714 $settings['tracking_map_statuses'] = unserialize($option, ['allowed_classes' => false]);
1715}
1716if (!is_array($settings['tracking_map_statuses']))
1717{
1718 $settings['tracking_map_statuses'] = [];
1719}
1720$settings['tracking_check_switch'] = Option::get('sale', 'tracking_check_switch');
1721$settings['tracking_check_period'] = (int)Option::get('sale', 'tracking_check_period');
1722
1723$tabControl->Begin();
1724?><form method="POST" action="<?= $APPLICATION->GetCurPage()?>?lang=<?= LANGUAGE_ID; ?>&mid=<?= $module_id; ?>&mid_menu=1" name="opt_form">
1726$tabControl->BeginNextTab();
1727?>
1728<tr class="heading">
1729 <td colspan="2"><?= Loc::getMessage('SALE_SERVICE_AREA'); ?></td>
1730</tr>
1731<?php
1732foreach ($optionMainList as $option):
1733 $value = Option::get('sale', $option['ID'], $option['DEFAULT_VALUE'] ?? '');
1734
1736
1737 ?>
1738 <tr>
1739 <td style="width: 40%;">
1740 <?php
1741 if (isset($option['HINT']))
1742 {
1743 ?><span id="hint_<?= $optionName; ?>"></span>
1744 <script>BX.hint_replace(BX('hint_<?= $optionName; ?>'), '<?= CUtil::JSEscape($option['HINT']); ?>');</script>&nbsp;<?php
1745 }
1746 if ($option['TYPE'] === 'checkbox')
1747 {
1748 echo '<label for="' . $optionName . '">' . $option['TITLE'] . '</label>';
1749 }
1750 else
1751 {
1752 echo $option['TITLE'];
1753 }
1754 ?>
1755 </td>
1756 <td>
1757 <?php
1758 switch ($option['TYPE'])
1759 {
1760 case 'checkbox':
1761 ?>
1762 <input type="hidden" name="<?= $optionName; ?>" id="<?= $optionName; ?>_hidden" value="N">
1763 <input type="checkbox" name="<?= $optionName; ?>" id="<?= $optionName; ?>" value="Y"<?= ($value === 'Y' ? ' checked' : ''); ?>>
1764 <?php
1765 break;
1766 case 'text':
1767 ?>
1768 <input type="text" size="<?= (int)$option['SETTINGS']['LENGTH']; ?>" value="<?= htmlspecialcharsbx($value); ?>" name="<?= $optionName; ?>">
1769 <?php
1770 break;
1771 case 'path':
1772 $disabled = $allowEditPhp ? '' : ' disabled';
1773 ?>
1774 <input type="text"<?= $disabled; ?> size="<?= (int)$option['SETTINGS']['LENGTH']; ?>" value="<?= htmlspecialcharsbx($value); ?>" name="<?= $optionName; ?>">
1775 <?php
1776
1777 break;
1778 }
1779 ?>
1780 </td>
1781 </tr>
1782 <?php
1784
1785 $valDeductOnDelivery = Option::get('sale', 'allow_deduction_on_delivery');
1786 ?>
1787 <tr>
1788 <td>
1789 <?= Loc::getMessage('SMO_FORMAT_QUANTITY_TITLE'); ?>:
1790 </td>
1791 <td>
1792 <?php
1793 $val = Option::get('sale', 'format_quantity');
1795 'AUTO',
1796 '2',
1797 '3',
1798 '4',
1799 ];
1800 ?>
1801 <select name="FORMAT_QUANTITY">
1802 <?php
1803 foreach ($selectList as $option):
1804 ?>
1805 <option value="<?= $option; ?>"<?= ($val === $option ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_FORMAT_QUANTITY_' . $option); ?></option>
1806 <?php
1807 endforeach;
1808 unset($option, $selectList);
1809 ?>
1810 </select>
1811 </td>
1812 </tr>
1813 <tr>
1814 <td>
1815 <?= Loc::getMessage('SMO_VALUE_PRECISION_TITLE'); ?>:
1816 </td>
1817 <td>
1818 <?php
1819 $val = (int)Option::get('sale', 'value_precision');
1820 ?>
1821 <select name="VALUE_PRECISION">
1822 <?php
1823 for ($i = 0; $i <= 4; $i++):
1824 ?>
1825 <option value="<?= $i; ?>>"<?= ($i === $val ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_VALUE_PRECISION_' . $i); ?></option>
1826 <?php
1828 ?>
1829 </select>
1830 </td>
1831 </tr>
1832 <tr>
1833 <td>
1834 <?= Loc::getMessage('SALE_DEF_CURR'); ?>
1835 </td>
1836 <td>
1837 <?php
1839 'CURRENCY_DEFAULT',
1840 Option::get('sale', 'default_currency'),
1841 '',
1842 true,
1843 ''
1844 );
1845 ?>
1846 </td>
1847 </tr>
1848 <?php
1849 if (CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
1850 {
1851 ?>
1852 <tr>
1853 <td>
1854 <?= Loc::getMessage('SMO_AFFILIATE_PLAN_TYPE'); ?>:
1855 </td>
1856 <td>
1857 <?php
1858 $val = Option::get('sale', 'affiliate_plan_type');
1859 ?>
1860 <select name="affiliate_plan_type">
1861 <option value="N"<?= ($val === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_AFFILIATE_PLAN_TYPE_N'); ?></option>
1862 <option value="S"<?= ($val === 'S' ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_AFFILIATE_PLAN_TYPE_S'); ?></option>
1863 </select>
1864 </td>
1865 </tr>
1866 <?php
1867 }
1868 ?>
1869 <tr>
1870 <td>
1871 <label for="EXPIRATION_PROCESSING_EVENTS"><?= Loc::getMessage('SALE_EXPIRATION_PROCESSING_EVENTS'); ?></label>
1872 </td>
1873 <td>
1874 <?php
1875 $valExpirationProcessingEvents = Option::get('sale', 'expiration_processing_events');
1876 ?>
1877 <input type="hidden" name="EXPIRATION_PROCESSING_EVENTS" id="EXPIRATION_PROCESSING_EVENTS_hidden" value="N">
1878 <input type="checkbox" name="EXPIRATION_PROCESSING_EVENTS" id="EXPIRATION_PROCESSING_EVENTS" value="Y"<?= ($valExpirationProcessingEvents === 'Y' ? ' checked' : ''); ?>>
1879 </td>
1880 </tr>
1881
1882 <tr>
1883 <td>
1884 <label for='ORDER_HISTORY_LOG_LEVEL'><?= Loc::getMessage('SALE_ORDER_HISTORY_LOG_LEVEL'); ?></label>
1885 </td>
1886 <td>
1887 <?php
1888 $valOrderHistoryLogLevel = (int)Option::get('sale', 'order_history_log_level');
1889 ?>
1890 <input type="hidden" name="ORDER_HISTORY_LOG_LEVEL" id="ORDER_HISTORY_LOG_LEVEL_hidden" value="0">
1891 <input type="checkbox" name="ORDER_HISTORY_LOG_LEVEL" id="ORDER_HISTORY_LOG_LEVEL" value="1"<?= ($valOrderHistoryLogLevel === 1 ? ' checked' : ''); ?>>
1892 </td>
1893 </tr>
1894 <tr>
1895 <td>
1896 <label for="ORDER_HISTORY_ACTION_LOG_LEVEL"><?= Loc::getMessage('SALE_ORDER_HISTORY_ACTION_LOG_LEVEL'); ?></label>
1897 </td>
1898 <td>
1899 <?php
1900 $valOrderHistoryActionLogLevel = (int)Option::get('sale', 'order_history_action_log_level');
1901 ?>
1902 <input type="hidden" name="ORDER_HISTORY_ACTION_LOG_LEVEL" id="ORDER_HISTORY_ACTION_LOG_LEVEL_hidden" value="0">
1903 <input type="checkbox" name="ORDER_HISTORY_ACTION_LOG_LEVEL" id="ORDER_HISTORY_ACTION_LOG_LEVEL" value="1"<?= ($valOrderHistoryActionLogLevel === 1 ? ' checked' : ''); ?>>
1904 </td>
1905 </tr>
1906
1907 <tr>
1908 <td valign="top">
1909 <?= Loc::getMessage('SALE_IS_SHOP'); ?>
1910 </td>
1911 <td>
1912 <select name="SHOP_SITE[]" multiple size="5">
1913 <?php
1914 foreach ($siteList as $val)
1915 {
1916 $site = Option::get('sale', 'SHOP_SITE_' . $val['ID'], '');
1917 ?>
1918 <option value="<?= $val['SAFE_ID']; ?>"<?= ($site === $val['ID'] ? ' selected' : ''); ?>><?= $val['SAFE_NAME'] .' (' . $val['SAFE_ID'] . ')'; ?></option>
1919 <?php
1920 }
1921 unset($site, $val);
1922 ?>
1923 </select>
1924 </td>
1925 </tr>
1926
1927 <!-- ps success and fail paths -->
1928 <tr>
1929 <td>
1930 <?= Loc::getMessage('SALE_PS_SUCCESS_PATH'); ?>
1931 </td>
1932 <td>
1933 <input type="text" name="sale_ps_success_path" size="40" value="<?= htmlspecialcharsbx(Option::get('sale', 'sale_ps_success_path')); ?>">
1934 </td>
1935 </tr>
1936 <tr>
1937 <td>
1938 <?= Loc::getMessage('SALE_PS_FAIL_PATH'); ?>
1939 </td>
1940 <td>
1941 <input type="text" name="sale_ps_fail_path" size="40" value="<?=htmlspecialcharsbx(Option::get('sale', 'sale_ps_fail_path')); ?>">
1942 </td>
1943 </tr>
1944 <tr>
1945 <td>
1946 <?= Loc::getMessage("SALE_ALLOW_PAY_STATUS"); ?>:
1947 </td>
1948 <td>
1949 <?php
1950 $val = Option::get('sale', 'allow_pay_status');
1951 ?>
1952 <select name="ALLOW_PAY_STATUS">
1953 <?php
1954 foreach($statusesWithoutNoChange as $statusId => $safeName)
1955 {
1956 ?><option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option><?php
1957 }
1958 ?>
1959 </select>
1960 </td>
1961 </tr>
1962 <!-- start of check default type -->
1963 <?php
1964 if (Cashbox\Manager::isSupportedFFD105()):
1965 ?>
1966 <tr class="heading" id="check_default_type_block">
1967 <td colspan="2"><?= Loc::getMessage('SALE_BLOCK_CHECK_TITLE'); ?></td>
1968 </tr>
1969 <tr>
1970 <td><?= Loc::getMessage('SALE_CHECK_TYPE_ON_PAY'); ?>:</td>
1971 <td>
1972 <?php
1973 $val = Option::get('sale', 'check_type_on_pay');
1974 $selectList = [
1975 'sell' => 'SALE_CHECK_TYPE_ON_PAY_SELL',
1976 'prepayment' => 'SALE_CHECK_TYPE_ON_PAY_PREPAYMENT',
1977 'advance' => 'SALE_CHECK_TYPE_ON_PAY_ADVANCE',
1978 ];
1979 ?>
1980 <select name="CHECK_TYPE_ON_PAY">
1981 <?php
1982 foreach ($selectList as $option => $messageId):
1983 ?>
1984 <option value="<?= $option; ?>" <?=($val === $option ? 'selected': ''); ?>><?= Loc::getMessage($messageId); ?></option>
1985 <?php
1986 endforeach;
1987 ?>
1988 </select>
1989 </td>
1990 </tr>
1991 <?php
1993 ?>
1994 <!-- start of basket behavior in public -->
1995 <tr class="heading" id="basket_public_behavior_block">
1996 <td colspan="2"><?= Loc::getMessage('SALE_BASKET_PUBLIC_BEHAVIOR_TITLE'); ?></td>
1997 </tr>
1998 <tr>
1999 <td><?= Loc::getMessage('SALE_BASKET_REFRESH_GAP'); ?>:</td>
2000 <td>
2001 <?php
2002 $refreshGapVal = (int)Option::get('sale', 'basket_refresh_gap');
2003 ?>
2004 <input type="text" size="10" value="<?= $refreshGapVal; ?>" name="BASKET_REFRESH_GAP" id="basket_refresh_gap">
2005 </td>
2006 </tr>
2007 <?php
2008 if ($settings['use_sale_discount_only'] !== 'Y'):
2009 ?>
2010 <tr id="basket_refresh_gap_warning" <?= ($refreshGapVal === 0 ? 'style="display: none;"' : ''); ?>>
2011 <td colspan="2" align="center">
2012 <div class="adm-info-message-wrap">
2013 <div class="adm-info-message">
2014 <div><?= Loc::getMessage('SALE_BASKET_REFRESH_GAP_WARNING'); ?></div>
2015 </div>
2016 </div>
2017 </td>
2018 </tr>
2019 <script>
2020 BX.bind(BX('basket_refresh_gap'), 'change', function(event){
2021 var target = BX.getEventTarget(event);
2022 var warning = BX('basket_refresh_gap_warning');
2023
2024 if (BX.type.isDomNode(target) && BX.type.isDomNode(warning))
2025 {
2026 warning.style.display = parseInt(target.value) === 0 ? 'none' : '';
2027 }
2028 });
2029 </script>
2030 <?php
2031 endif;
2032 ?>
2033 <!-- start of order guest view -->
2034 <tr class="heading" id="guest_order_view_block">
2035 <td colspan="2"><a name="section_guest_order_view"></a><?= Loc::getMessage('SALE_ALLOW_GUEST_ORDER_VIEW_TITLE'); ?></td>
2036 </tr>
2037 <tr>
2038 <td>
2039 <?= Loc::getMessage('SALE_ALLOW_GUEST_ORDER_VIEW'); ?>:
2040 </td>
2041 <td>
2042 <?php
2043 $val = Option::get('sale', 'allow_guest_order_view');
2044 $rowStyle = ($val === 'Y' ? '' : 'style="display:none;"');
2045 ?>
2046 <input type="hidden" value="N" name="ALLOW_GUEST_ORDER_VIEW">
2047 <input type="checkbox" value="Y" name="ALLOW_GUEST_ORDER_VIEW"<?= ($val === 'Y' ? ' checked' : ''); ?> onchange="showAllowGuestOrderViewPaths(this);">
2048 </td>
2049 </tr>
2050 <tr class="sale_allow_guest_order_view"<?= $rowStyle; ?>>
2051 <td valign='top'>
2052 <?= Loc::getMessage('SALE_ORDER_GUEST_VIEW_STATUS'); ?>
2053 </td>
2054 <td>
2055 <?php
2056 $guestStatuses = Option::get('sale', 'allow_guest_order_view_status');
2057 if ($guestStatuses !== '')
2058 {
2059 $guestStatuses = unserialize($guestStatuses, ['allowed_classes' => false]);
2060 }
2061 if (!is_array($guestStatuses))
2062 {
2063 $guestStatuses = [];
2064 }
2065 $statusList = array_slice($arStatuses,1);
2066 ?>
2067 <select name="ALLOW_GUEST_ORDER_VIEW_STATUS[]" multiple size="3">
2068 <?php
2069 foreach($statusList as $id => $safeName):
2070 ?>
2071 <option value="<?=$id?>" <?=(in_array($id, $guestStatuses) ? "selected" : "")?>><?= $safeName; ?>
2072 </option>
2073 <?php
2074 endforeach;
2075 ?>
2076 </select>
2077 </td>
2078 </tr>
2079 <?php
2081 $serializedPass = Option::get('sale', 'allow_guest_order_view_paths');
2082 if ($serializedPass !== '')
2083 {
2084 $paths = unserialize($serializedPass, ['allowed_classes' => false]);
2085 }
2086 if (!is_array($paths))
2087 {
2088 $paths = [];
2089 }
2090 foreach($siteList as $site)
2091 {
2092 ?>
2093 <tr class="sale_allow_guest_order_view" <?= $rowStyle; ?>>
2094 <td>
2095 <?= Loc::getMessage(
2096 'SALE_ALLOW_GUEST_ORDER_VIEW_PATH',
2097 [
2098 '#SITE_ID#' => $site['ID']
2099 ]
2100 ); ?>:
2101 </td>
2102 <td>
2103 <input type="text" size="40" value="<?= htmlspecialcharsbx($paths[$site["ID"]] ?? ''); ?>" name="ALLOW_GUEST_ORDER_VIEW_PATH[<?= $site['SAFE_ID']; ?>]">
2104 </td>
2105 </tr>
2106 <?php
2107 }
2108 unset($site);
2109 ?>
2110 <tr class="sale_allow_guest_order_view" <?= $rowStyle; ?>>
2111 <td>
2112 <?= Loc::getMessage('SALE_ALLOW_GUEST_ORDER_VIEW_EXAMPLE'); ?>:
2113 </td>
2114 <td>
2115 /personal/orders/#order_id#
2116 </td>
2117 </tr>
2118 <!-- end of order guest view -->
2119 <?php
2120 unset($rowStyle);
2121
2122 if (!(Loader::includeModule('crm') && !CCrmSaleHelper::isWithOrdersMode())):
2123 ?>
2124 <tr class="heading">
2125 <td colspan="2"><a name="section_reservation"></a><?= Loc::getMessage('BX_SALE_SETTINGS_SECTION_RESERVATION'); ?></td>
2126 </tr>
2127 <tr>
2128 <td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_PRODUCT_RESERVE_CONDITION'); ?></td>
2129 <td width="60%"><select name="product_reserve_condition">
2130 <?php
2131 foreach (Sale\Configuration::getReservationConditionList(true) as $reserveId => $reserveTitle)
2132 {
2133 ?><option value="<?= $reserveId; ?>"<?php
2134 echo ($reserveId == $settings['product_reserve_condition'] ? ' selected' : '')
2135 ?>><?= htmlspecialcharsbx($reserveTitle); ?></option>
2136 <?php
2137 }
2138 unset($reserveId, $reserveTitle);
2139 ?>
2140 </select></td>
2141 </tr>
2142 <tr>
2143 <td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_PRODUCT_RESERVE_CLEAR_PERIOD'); ?></td>
2144 <td width="60%">
2145 <input type="text" name="product_reserve_clear_period" value="<?= $settings['product_reserve_clear_period']; ?>">
2146 </td>
2147 </tr>
2148 <?php
2149 endif;
2150 ?>
2151 <tr class="heading">
2152 <td colspan="2"><?= Loc::getMessage('BX_SALE_SETTINGS_SECTION_LOCATIONS'); ?></td>
2153 </tr>
2154 <tr>
2155 <td>
2156 <?= Loc::getMessage('SALE_LOCATION_WIDGET_APPEARANCE'); ?>:
2157 </td>
2158 <td>
2159 <?php
2160 $widgetType = Option::get('sale', 'sale_location_selector_appearance');
2161 $selectList = [
2162 'steps' => 'SALE_LOCATION_SELECTOR_APPEARANCE_STEPS',
2163 'search' => 'SALE_LOCATION_SELECTOR_APPEARANCE_SEARCH',
2164 ];
2165 ?>
2166 <select name="sale_location_selector_appearance">
2167 <?php
2168 foreach ($selectList as $option => $messageId):
2169 ?>
2170 <option value="<?= $option; ?>"<?= ($option === $widgetType ? ' selected' : ''); ?>><?= Loc::getMessage($messageId); ?></option>
2171 <?php
2172 endforeach;
2173 ?>
2174 </select>
2175 </td>
2176 </tr>
2177 <tr class="heading">
2178 <td colspan="2"><a name="section_discount"></a><?= Loc::getMessage('BX_SALE_SETTINGS_SECTION_DISCOUNT'); ?></td>
2179 </tr>
2180 <tr>
2181 <td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_USE_SALE_DISCOUNT_ONLY'); ?></td>
2182 <td width="60%">
2183 <input type="hidden" name="use_sale_discount_only" id="use_sale_discount_only_N" value="N">
2184 <input type="checkbox" name="use_sale_discount_only" id="use_sale_discount_only_Y" value="Y"<?= ($settings['use_sale_discount_only'] == 'Y' ? ' checked' : ''); ?>>
2185 </td>
2186 </tr>
2187 <script>
2188 BX.bind(BX('use_sale_discount_only_Y'), 'change', function(event){
2189 var target = BX.getEventTarget(event);
2190 var warning = BX('use_sale_discount_only_warning');
2191
2192 if (BX.type.isDomNode(target) && BX.type.isDomNode(warning))
2193 {
2194 warning.style.display = target.checked ? 'none' : '';
2195 }
2196 });
2197 </script>
2198 <tr id="use_sale_discount_only_warning" <?= ($settings['use_sale_discount_only'] === 'Y' || $refreshGapVal === 0 ? 'style="display: none;"' : ''); ?>>
2199 <td colspan="2" align="center">
2200 <div class="adm-info-message-wrap">
2201 <div class="adm-info-message">
2202 <div><?= Loc::getMessage('SALE_USE_SALE_DISCOUNT_ONLY_WARNING'); ?></div>
2203 </div>
2204 </div>
2205 </td>
2206 </tr>
2207 <tr>
2208 <td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_PERCENT_FROM_BASE_PRICE'); ?></td>
2209 <td width="60%">
2210 <input type="hidden" name="get_discount_percent_from_base_price" id="get_discount_percent_from_base_price_N" value="N">
2211 <input type="checkbox" name="get_discount_percent_from_base_price" id="get_discount_percent_from_base_price_Y" value="Y"<?= ($settings['get_discount_percent_from_base_price'] == 'Y' ? ' checked' : ''); ?>>
2212 </td>
2213 </tr>
2214 <tr id="tr_discount_apply_mode" style="display: <?=($settings['use_sale_discount_only'] == 'Y' ? 'none' : 'table-row'); ?>">
2215 <td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_DISCOUNT_APPLY_MODE'); ?></td>
2216 <td width="60%">
2217 <select name="discount_apply_mode" style="max-width: 300px;">
2218 <?php
2219 $modeList = Sale\Discount::getApplyModeList(true);
2220 foreach ($modeList as $modeId => $modeTitle)
2221 {
2222 ?><option value="<?=$modeId; ?>"<?=($modeId == $settings['discount_apply_mode'] ? ' selected' : ''); ?>><?= htmlspecialcharsbx($modeTitle); ?></option><?php
2223 }
2224 unset($modeTitle, $modeId, $modeList);
2225 ?>
2226 </select>
2227 </td>
2228 </tr>
2229
2230 <!-- Recommended products -->
2231 <tr class="heading">
2232 <td colspan="2"><?= Loc::getMessage('SALE_P2P'); ?></td>
2233 </tr>
2234 <tr>
2235 <td align="right" width="40%">
2236 <label for="p2p_allow_collect_data"><?= Loc::getMessage('SALE_P2P_COLLECT_DATA'); ?></label>
2237 </td>
2238 <td width="60%">
2239 <input type="hidden" name="SALE_P2P_ALLOW_COLLECT_DATA" value="N" id="p2p_allow_collect_data_hidden">
2240 <input type="checkbox" name="SALE_P2P_ALLOW_COLLECT_DATA" value="Y" id="p2p_allow_collect_data"<?= (Option::get('sale', 'p2p_allow_collect_data') === 'Y' ? ' checked' : ''); ?>>
2241 </td>
2242 </tr>
2243 <tr>
2244 <td valign="top">
2245 <?= Loc::getMessage('SALE_P2P_STATUS_LIST'); ?>
2246 </td>
2247 <td>
2248 <?php
2249 $recStatuses = Option::get('sale', 'p2p_status_list');
2250 if ($recStatuses !== '')
2251 {
2252 $recStatuses = unserialize($recStatuses, ['allowed_classes' => false]);
2253 }
2254 if (!is_array($recStatuses))
2255 {
2256 $recStatuses = [];
2257 }
2258
2260 $p2pStatusesList = array_merge(
2262 [
2263 'F_CANCELED' => htmlspecialcharsbx(Loc::getMessage('F_CANCELED')),
2264 'F_DELIVERY' => htmlspecialcharsbx(Loc::getMessage('F_DELIVERY')),
2265 'F_PAY' => htmlspecialcharsbx(Loc::getMessage('F_PAY')),
2266 'F_OUT' => htmlspecialcharsbx(Loc::getMessage('F_OUT')),
2267 ]
2268 );
2269 ?>
2270 <select name="SALE_P2P_STATUS_LIST[]" multiple size="5">
2271 <?php
2272 foreach($p2pStatusesList as $id => $safeName):
2273 ?>
2274 <option value="<?=$id?>"<?= (in_array($id, $recStatuses) ? ' selected' : '')?>><?= $safeName; ?>
2275 </option>
2276 <?php
2277 endforeach;
2278 ?>
2279 </select>
2280 </td>
2281 </tr>
2282 <tr>
2283 <td>
2284 <?= Loc::getMessage('SALE_P2P_STATUS_PERIOD'); ?>
2285 </td>
2286 <td>
2287 <input type="text" size="5" value="<?= (int)Option::get('sale', 'p2p_del_period'); ?>" name="p2p_del_period">
2288 </td>
2289 </tr>
2290
2291 <tr>
2292 <td>
2293 <?= Loc::getMessage('SALE_P2P_EXP_DATE'); ?>
2294 </td>
2295 <td>
2296 <input type="text" size="5" value="<?= (int)Option::get('sale', 'p2p_del_exp'); ?>" name="p2p_del_exp">
2297 </td>
2298 </tr>
2299
2300 <!-- Order history cleaner -->
2301 <tr class="heading">
2302 <td colspan="2"><?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_TITLE'); ?></td>
2303 </tr>
2304 <tr>
2305 <td align="right" width="40%">
2306 <label for="order_changes_cleaner_active"><?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_SWITCHER'); ?></label>
2307 </td>
2308 <td width="60%">
2309 <input type="hidden" name="order_changes_cleaner_active" value="N" id="order_changes_cleaner_active_hidden">
2310 <input type="checkbox" name="order_changes_cleaner_active" value="Y" id="order_changes_cleaner_active"<?= (Option::get('sale', 'order_changes_cleaner_active') === 'Y' ? ' checked' : ''); ?>>
2311 </td>
2312 </tr>
2313 <tr>
2314 <td>
2315 <?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_DAYS'); ?>
2316 </td>
2317 <td>
2318 <input type="text" size="5" value="<?= (int)Option::get('sale', 'order_changes_cleaner_days'); ?>" name="order_changes_cleaner_days">
2319 </td>
2320 </tr>
2321 <tr>
2322 <td>
2323 <?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_BY_HIT'); ?>
2324 </td>
2325 <td>
2326 <input type="text" size="5" value="<?= (int)Option::get('sale', 'order_changes_cleaner_limit'); ?>" name="order_changes_cleaner_limit">
2327 </td>
2328 </tr>
2329 <!-- /Recommended products -->
2330 <?php
2331 if (CBXFeatures::IsFeatureEnabled('SaleAccounts'))
2332 {
2333 ?>
2334 <tr class="heading">
2335 <td colspan="2"><?= Loc::getMessage('SALE_AMOUNT_NAME'); ?></td>
2336 </tr>
2337 <tr>
2338 <td colspan="2" align="center">
2339 <table cellspacing="0" cellpadding="0" border="0" class="internal">
2340 <tr class="heading">
2341 <td valign="top">
2342 <?= Loc::getMessage('SALE_AMOUNT_VAL'); ?>
2343 </td>
2344 <td valign="top">
2345 <?= Loc::getMessage('SALE_AMOUNT_CURRENCY'); ?>
2346 </td>
2347 </tr>
2348 <?php
2349 $lastCurrency = '';
2350 $val = Option::get('sale', 'pay_amount');
2351 if ($val !== '')
2352 {
2353 $amountList = unserialize($val, ['allowed_classes' => false]);
2354 if (!is_array($amountList))
2355 {
2356 $amountList = [];
2357 }
2358 foreach($amountList as $amount)
2359 {
2360 ?>
2361 <tr>
2362 <td><input type="text" name="amount_val[]" value="<?= (float)($amount['AMOUNT'] ?? 0); ?>"></td>
2363 <td><?= CCurrency::SelectBox(
2364 'amount_currency[]',
2365 $amount['CURRENCY'] ?? '',
2366 '',
2367 true,
2368 ''
2369 );
2370 ?></td>
2371 </tr>
2372 <?php
2373 $lastCurrency = $amount['CURRENCY'] ?? '';
2374 }
2375 unset($amountList);
2376 }
2377 ?>
2378 <tr>
2379 <td><input type="text" name="amount_val[]" value=""></td>
2380 <td><?= CCurrency::SelectBox(
2381 'amount_currency[]',
2382 $lastCurrency
2383 );
2384 ?>
2385 </td>
2386 </tr>
2387 <tr>
2388 <td><input type="text" name="amount_val[]" value=""></td>
2389 <td><?= CCurrency::SelectBox(
2390 'amount_currency[]',
2391 $lastCurrency
2392 );
2393 ?>
2394 </td>
2395 </tr>
2396 <tr>
2397 <td><input type="text" name="amount_val[]" value=""></td>
2398 <td><?= CCurrency::SelectBox(
2399 'amount_currency[]',
2400 $lastCurrency
2401 );
2402 ?>
2403 </td>
2404 </tr>
2405 </table>
2406 </td>
2407 </tr>
2408 <?php
2409 }
2410 ?>
2411 <tr>
2412 <td colspan="2">
2413 <?php
2415 $reminder = Option::get('sale', 'pay_reminder');
2416 if ($reminder !== '')
2417 {
2418 $arReminder = unserialize($reminder, ['allowed_classes' => false]);
2419 }
2420 if (!is_array($arReminder))
2421 {
2422 $arReminder = [];
2423 }
2424
2426 $subscribeProd = Option::get('sale', 'subscribe_prod');
2427 if ($subscribeProd !== '')
2428 {
2429 $arSubscribeProd = unserialize($subscribeProd, ['allowed_classes' => false]);
2430 }
2431 if (!is_array($arSubscribeProd))
2432 {
2433 $arSubscribeProd = [];
2434 }
2435
2437 foreach($siteList as $val)
2438 {
2439 $aTabs2[] = [
2440 'DIV' => 'reminder' . $val['SAFE_ID'],
2441 'TAB' => '['.$val['SAFE_ID'].'] ' . $val['SAFE_NAME'],
2442 'TITLE' => '[' . $val['SAFE_ID'] . '] ' . $val['SAFE_NAME'],
2443 ];
2444 }
2446 $tabControl2->Begin();
2447 foreach($siteIdList as $siteId)
2448 {
2449 $arStores = [];
2450 if (Loader::includeModule('catalog'))
2451 {
2452 $dbStore = CCatalogStore::GetList(
2453 [
2454 'SORT' => 'DESC',
2455 'ID' => 'ASC',
2456 ],
2457 [
2458 'ACTIVE' => 'Y',
2459 'SHIPPING_CENTER' => 'Y',
2460 '+SITE_ID' => $siteId,
2461 ]
2462 );
2463 while ($arStore = $dbStore->GetNext())
2464 {
2465 $arStore['ID'] = (int)$arStore['ID'];
2466 $arStores[] = $arStore;
2467 }
2468 unset($arStore, $dbStore);
2469 }
2470 $tabControl2->BeginNextTab();
2471 ?>
2472 <table cellspacing="5" cellpadding="0" border="0" width="100%" align="center">
2473 <!-- default store -->
2474 <?php
2475 $deductStore = (int)Option::get('sale', 'deduct_store_id', '', $siteId);
2476
2477 $showRow = (count($arStores) > 1 && $valDeductOnDelivery === 'Y');
2478 $display = $showRow ? 'table-row' : 'none';
2479 ?>
2480 <tr class="default_deduct_store_control" style="display:<?= $display; ?>" id="default_deduct_store_control_<?= $siteId; ?>">
2481 <td align="right" width="40%"><?= Loc::getMessage('SALE_DEDUCT_STORE'); ?></td>
2482 <td width="60%">
2483 <select name="defaultDeductStore[<?= $siteId; ?>][id]" id="default_store_select_<?= $siteId; ?>">
2484 <?php
2485 foreach ($arStores as $storeId => $arStore):
2486 ?>
2487 <option value="<?=$arStore["ID"]?>"<?= ($deductStore === $arStore['ID'] ? ' selected' : ''); ?>><?= $arStore['TITLE'] . ' ['. $arStore['ID'] . ']'; ?></option>
2488 <?php
2489 endforeach;
2490 ?>
2491 </select>
2492 <input type="hidden" id="default_store_select_save_<?= $siteId; ?>" name="defaultDeductStore[<?= $siteId; ?>][save]" value="<?= ($showRow ? 'Y' : 'N'); ?>">
2493 </td>
2494 </tr>
2495 <!-- end of default store -->
2496
2497 <tr class="heading">
2498 <td colspan="2"><?= Loc::getMessage('SMO_PRODUCT_SUBSCRIBE'); ?></td>
2499 </tr>
2500 <tr>
2501 <td align="right" width="40%"><label for="notify-<?=$siteId?>"><?= Loc::getMessage('SALE_NOTIFY_PRODUCT_USE'); ?></label></td>
2502 <td width="60%"><input type="checkbox" name="subscribProd[<?=$siteId?>][use]" value="Y" id="notify-<?=$siteId?>"<?= (($arSubscribeProd[$siteId]['use'] ?? 'N') === 'Y' ? ' checked' : ''); ?>></td>
2503 </tr>
2504 <tr>
2505 <td align="right"><?= Loc::getMessage("SALE_NOTIFY_PRODUCT")?></td>
2506 <td><input type="text" name="subscribProd[<?=$siteId?>][del_after]" value="<?= (int)($arSubscribeProd[$siteId]["del_after"] ?? 0); ?>" size="5" id="del-after-<?=$siteId?>"></td>
2507 </tr>
2508 <tr class="heading">
2509 <td colspan="2"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER")?></td>
2510 </tr>
2511 <tr>
2512 <td align="right" width="40%"><label for="use-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_USE")?>:</label></td>
2513 <td width="60%"><input type="checkbox" name="reminder[<?=$siteId?>][use]" value="Y" id="use-<?=$siteId?>"<?= (($arReminder[$siteId]["use"] ?? 'N') === "Y" ? ' checked' : ''); ?>></td>
2514 </tr>
2515 <tr>
2516 <td align="right"><label for="after-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_AFTER")?>:</label></td>
2517 <td><input type="text" name="reminder[<?=$siteId?>][after]" value="<?= (int)($arReminder[$siteId]["after"] ?? 0); ?>" size="5" id="after-<?=$siteId?>"></td>
2518 </tr>
2519 <tr>
2520 <td align="right"><label for="frequency-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_FREQUENCY")?>:</label></td>
2521 <td><input type="text" name="reminder[<?=$siteId?>][frequency]" value="<?= (int)($arReminder[$siteId]["frequency"] ?? 0); ?>" size="5" id="frequency-<?=$siteId?>"></td>
2522 </tr>
2523 <tr>
2524 <td align="right"><label for="period-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_PERIOD")?>:</label></td>
2525 <td><input type="text" name="reminder[<?=$siteId?>][period]" value="<?= (int)($arReminder[$siteId]["period"] ?? 0); ?>" size="5" id="period-<?=$siteId?>"></td>
2526 </tr>
2527 </table>
2528 <?php
2529 }
2530 $tabControl2->End();
2531 ?>
2532 </td>
2533 </tr>
2534 <?php
2535 $tabControl->BeginNextTab();
2536 ?>
2537<script>
2538var cur_site = {WEIGHT:'<?=CUtil::JSEscape($siteList[0]["ID"])?>',ADDRESS:'<?=CUtil::JSEscape($siteList[0]["ID"])?>'};
2539function changeSiteList(value, add_id)
2540{
2541 var SLHandler = document.getElementById(add_id + '_site_id');
2542 SLHandler.disabled = value;
2543}
2544
2545function changeStoreDeductCondition(value, control_id)
2546{
2547 var SLDeductCondition = document.getElementById(control_id);
2548 SLDeductCondition.disabled = value;
2549}
2550
2551function selectSite(current, add_id)
2552{
2553 if (current == cur_site[add_id]) return;
2554
2555 var last_handler = document.getElementById('par_' + add_id + '_' +cur_site[add_id]);
2556 var current_handler = document.getElementById('par_' + add_id + '_' + current);
2557 var CSHandler = document.getElementById(add_id + '_current_site');
2558
2559 last_handler.style.display = 'none';
2560 current_handler.style.display = 'inline';
2561
2562 cur_site[add_id] = current;
2563 CSHandler.value = current;
2564
2565 return;
2566}
2567
2568function setWeightValue(obj)
2569{
2570 if (!obj.value) return;
2571
2572 var selectorUnit = document.forms.opt_form['weight_unit[' + cur_site['WEIGHT'] + ']'];
2573 var selectorKoef = document.forms.opt_form['weight_koef[' + cur_site['WEIGHT'] + ']'];
2574
2575 if (selectorKoef && selectorUnit)
2576 {
2577 selectorKoef.value = obj.value;
2578 selectorUnit.value = obj.options[obj.selectedIndex].text;
2579 }
2580}
2581
2582function showAllowGuestOrderViewPaths(target)
2583{
2584 var allowPaths = document.getElementsByClassName('sale_allow_guest_order_view');
2585 for (id in allowPaths)
2586 {
2587 if (allowPaths[id] instanceof Node)
2588 {
2589 if (target.checked)
2590 {
2591 allowPaths[id].style.display = 'table-row';
2592 }
2593 else
2594 {
2595 allowPaths[id].style.display = 'none';
2596 }
2597 }
2598 }
2599}
2600
2601function allowAutoDelivery(value)
2602{
2603 var allowDeliveryCheckbox = document.getElementById('PAYED_2_ALLOW_DELIVERY');
2604
2605 if (value === false) {
2606 allowDeliveryCheckbox.disabled = true;
2607 allowDeliveryCheckbox.checked = false;
2608 } else {
2609 allowDeliveryCheckbox.disabled = false;
2610 }
2611}
2612</script>
2613 <?php
2614 $differentWeight = Option::get('sale', 'WEIGHT_different_set') === 'Y';
2615 ?>
2616 <tr>
2617 <td valign="top" width="40%"><?= Loc::getMessage('SMO_PAR_DIF_SETTINGS'); ?></td>
2618 <td valign="top" width="60%">
2619 <input type="hidden" name="WEIGHT_dif_settings" value="N" id="dif_settings_hidden">
2620 <input type="checkbox" name="WEIGHT_dif_settings" value="Y" id="dif_settings" <?= ($differentWeight ? ' checked' : ''); ?> onclick="changeSiteList(!this.checked, 'WEIGHT')">
2621 </td>
2622 </tr>
2623 <tr>
2624 <td><?= Loc::getMessage('SMO_PAR_SITE_LIST'); ?></td>
2625 <td>
2626 <select name="site" id="WEIGHT_site_id"<?= ($differentWeight ? '' : ' disabled'); ?> onchange="selectSite(this.value, 'WEIGHT')">
2627 <?php
2628 foreach ($siteList as $site)
2629 {
2630 ?>
2631 <option value="<?= $site['SAFE_ID']; ?>"><?= $site['SAFE_NAME']; ?></option>
2632 <?php
2633 }
2634 unset($site);
2635 ?></select>
2636 <input type="hidden" name="WEIGHT_current_site" id="WEIGHT_current_site" value="<?=$siteList[0]['SAFE_ID']; ?>">
2637 </td>
2638 </tr>
2639 <tr>
2640 <td valign="top" colspan="2">
2641 <?php
2643 if (!is_array($arUnitList))
2644 {
2645 $arUnitList = [];
2646 }
2648 foreach ($siteList as $site):
2649 ?>
2650 <div id="par_WEIGHT_<?= $site['SAFE_ID']; ?>" style="display: <?= ($firstSite ? 'inline' : 'none'); ?>;">
2651 <table cellpadding="0" cellspacing="2" class="adm-detail-content-table edit-table">
2652 <tr class="heading">
2653 <td align="center" colspan="2"><?= Loc::getMessage('SMO_PAR_SITE_PARAMETERS'); ?></td>
2654 </tr>
2655 <tr>
2656 <td width="40%" class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_PAR_SITE_WEIGHT_UNIT_SALE'); ?></td>
2657 <td width="60%" class="adm-detail-content-cell-r">
2658 <select name="weight_unit_tmp[<?= $site['SAFE_ID']; ?>]" onchange="setWeightValue(this)">
2659 <?php
2660 $selectedWeightUnit = Option::get(
2661 'sale',
2662 'weight_unit',
2663 Loc::getMessage('SMO_PAR_WEIGHT_UNIT_GRAMM'),
2664 $site['ID']
2665 );
2666 foreach ($arUnitList as $key => $arM)
2667 {
2668 ?>
2669 <option value="<?= (float)$arM['KOEF']; ?>"<?= ($selectedWeightUnit === $arM['NAME'] ? ' selected' : ''); ?>><?= htmlspecialcharsbx($arM['NAME']); ?></option>
2670 <?php
2671 }
2672 ?></select>
2673 </td>
2674 </tr>
2675 <tr>
2676 <td class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_PAR_WEIGHT_UNIT'); ?></td>
2677 <td class="adm-detail-content-cell-r">
2678 <input type="text" name="weight_unit[<?= $site['SAFE_ID']; ?>]" size="5" value="<?= htmlspecialcharsbx($selectedWeightUnit); ?>">
2679 </td>
2680 </tr>
2681 <tr>
2682 <td class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_PAR_WEIGHT_KOEF'); ?></td>
2683 <td class="adm-detail-content-cell-r">
2684 <input type="text" name="weight_koef[<?= $site['SAFE_ID']; ?>]" size="5" value="<?=htmlspecialcharsbx(Option::get('sale', 'weight_koef', 1, $site['ID'])); ?>">
2685 </td>
2686 </tr>
2687 </table>
2688 </div>
2689 <?php
2690 $firstSite = false;
2691 endforeach;
2692 unset($site, $firstSite);
2693 ?>
2694 </td>
2695 </tr>
2696<?php
2697$tabControl->BeginNextTab();
2698 $differentAddress = Option::get('sale', 'ADDRESS_different_set') === 'Y';
2699?>
2700 <tr>
2701 <td width="40%"><?= Loc::getMessage('SMO_DIF_SETTINGS'); ?></td>
2702 <td width="60%">
2703 <input type="hidden" name="ADDRESS_dif_settings" value="N" id="ADDRESS_dif_settings_hidden">
2704 <input type="checkbox" name="ADDRESS_dif_settings" value="Y" id="ADDRESS_dif_settings"<?= ($differentAddress ? ' checked' : ''); ?> onclick="changeSiteList(!this.checked, 'ADDRESS')">
2705 </td>
2706 </tr>
2707 <tr>
2708 <td><?= Loc::getMessage('SMO_SITE_LIST'); ?></td>
2709 <td>
2710 <select name="site" id="ADDRESS_site_id"<?= ($differentAddress ? '' : ' disabled'); ?> onchange="selectSite(this.value, 'ADDRESS')">
2711 <?php
2712 foreach ($siteList as $site):
2713 ?>
2714 <option value="<?= $site['SAFE_ID']; ?>"><?= $site['SAFE_NAME']; ?></option>
2715 <?php
2716 endforeach;
2717 unset($site);
2718 ?>
2719 </select>
2720 <input type="hidden" name="ADDRESS_current_site" id="ADDRESS_current_site" value="<?= $siteList[0]['SAFE_ID']; ?>">
2721 </td>
2722 </tr>
2723 <tr>
2724 <td colspan="2" valign="top">
2725<?php
2726$firstSite = true;
2727foreach ($siteList as $site):
2728 $location_zip = Option::get('sale', 'location_zip', '', $site['ID']);
2729 $location = Option::get('sale', 'location', '', $site['ID']);
2730
2731 if (!$lpEnabled)
2732 {
2733 $location = (int)$location;
2734 }
2735
2736 if (!$lMigrated)
2737 {
2738 $sales_zone_countries = SalesZone::getCountriesIds($site['ID']);
2739 $sales_zone_regions = SalesZone::getRegionsIds($site['ID']);
2740 $sales_zone_cities = SalesZone::getCitiesIds($site['ID']);
2741 }
2742
2743 if ($location_zip === '0')
2744 {
2745 $location_zip = '';
2746 }
2747?>
2748 <div id="par_ADDRESS_<?= $site['SAFE_ID']; ?>" style="display: <?= ($firstSite ? 'inline' : 'none'); ?>">
2749 <table cellpadding="0" cellspacing="2" border="0" width="60%" align="center">
2750 <tr class="heading">
2751 <td align="center" colspan="2"><?= Loc::getMessage('SMO_PAR_SITE_ADRES'); ?></td>
2752 </tr>
2753 <tr>
2754 <td width="40%" class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_LOCATION_ZIP'); ?></td>
2755 <td width="60%" class="adm-detail-content-cell-r">
2756 <input type="text" name="location_zip[<?= $site['SAFE_ID']; ?>]" value="<?= htmlspecialcharsbx($location_zip); ?>" size="5">
2757 </td>
2758 </tr>
2759 <tr>
2760 <td class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_LOCATION_SHOP_CITY'); ?>:</td>
2761 <td class="adm-detail-content-cell-r">
2762 <?php
2763 if($lpEnabled):
2764 $APPLICATION->IncludeComponent(
2765 'bitrix:sale.location.selector.' . $widgetType,
2766 '',
2767 [
2768 'ID' => '',
2769 'CODE' => $location,
2770 'INPUT_NAME' => 'location['.$site['SAFE_ID'].']',
2771 'PROVIDE_LINK_BY' => 'code',
2772 'SHOW_ADMIN_CONTROLS' => 'N',
2773 'SELECT_WHEN_SINGLE' => 'N',
2774 'FILTER_BY_SITE' => 'N',
2775 'SHOW_DEFAULT_LOCATIONS' => 'N',
2776 'SEARCH_BY_PRIMARY' => 'Y',
2777 ],
2778 false,
2779 [
2780 'HIDE_ICONS' => 'Y',
2781 ]
2782 );
2783 else:
2784 ?>
2785 <select name="location[<?= $site['SAFE_ID']; ?>]">
2786 <option value=""></option>
2787 <?php
2789 [
2790 'COUNTRY_NAME_LANG' => 'ASC',
2791 'REGION_NAME_LANG' => 'ASC',
2792 'CITY_NAME_LANG' => 'ASC',
2793 ],
2794 [],
2795 LANGUAGE_ID
2796 );
2797 while ($arLocation = $dbLocationList->GetNext()):
2798 $arLocation['ID'] = (int)$arLocation['ID'];
2799 $locationName = (string)$arLocation['COUNTRY_NAME'];
2800 $arLocation['REGION_NAME'] = (string)$arLocation['REGION_NAME'];
2801 $arLocation['CITY_NAME'] = (string)$arLocation['CITY_NAME'];
2802
2803 if ($arLocation['REGION_NAME'] !== '')
2804 {
2805 if ($locationName !== '')
2806 {
2807 $locationName .= ' - ';
2808 }
2809 $locationName .= $arLocation['REGION_NAME'];
2810 }
2811 if ($arLocation['CITY_NAME'] !== '')
2812 {
2813 if ($locationName !== '')
2814 $locationName .= ' - ';
2815 $locationName .= $arLocation['CITY_NAME'];
2816 }
2817 if ($locationName === '')
2818 {
2819 $locationName = $arLocation['ID'];
2820 }
2821 ?>
2822 <option value="<?= $arLocation['ID']; ?>"<?= ($location === $arLocation['ID'] ? ' selected' : ''); ?>><?= htmlspecialcharsbx($locationName); ?></option>
2823 <?php
2825 ?>
2826 </select>
2827 <?php
2828 endif;
2829 ?>
2830 </td>
2831 </tr>
2832 <?php
2833 if(!$lpEnabled):
2834 ?>
2835 <tr>
2836 <td class="adm-detail-content-cell-l" valign="top">
2837 <?= Loc::getMessage('SMO_LOCATION_SALES_ZONE'); ?>:
2838 <script>
2839 BX.ready( function(){
2840 BX.bind(BX("sales_zone_countries_<?=$site['SAFE_ID']; ?>"), 'change', BX.Sale.Options.onCountrySelect);
2841 BX.bind(BX("sales_zone_regions_<?= $site['SAFE_ID']; ?>"), 'change', BX.Sale.Options.onRegionSelect);
2842 });
2843 </script>
2844 </td>
2845 <td class="adm-detail-content-cell-r">
2846 <?php
2847 $sales_zone_countries = SalesZone::getCountriesIds($site['ID']);
2848 $sales_zone_regions = SalesZone::getRegionsIds($site['ID']);
2849 $sales_zone_cities = SalesZone::getCitiesIds($site['ID']);
2850 ?>
2851 <table><tr>
2852 <th><?= Loc::getMessage('SMO_LOCATION_COUNTRIES'); ?></th>
2853 <th><?= Loc::getMessage('SMO_LOCATION_REGIONS'); ?></th>
2854 <th><?= Loc::getMessage('SMO_LOCATION_CITIES'); ?></th>
2855 </tr><tr>
2856 <td>
2857 <select id="sales_zone_countries_<?= $site['SAFE_ID']; ?>" name="sales_zone_countries[<?= $site['SAFE_ID']; ?>][]" multiple size="10" class="sale-options-location-mselect">
2858 <option value=""<?= in_array('', $sales_zone_countries) ? ' selected' : ''; ?>><?= Loc::getMessage('SMO_LOCATION_ALL'); ?></option>
2859 <option value="NULL"<?=in_array('NULL', $sales_zone_countries) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_NO_COUNTRY'); ?></option>
2860 <?php
2862 while ($arCountry = $dbCountryList->fetch()):
2863 ?>
2864 <option value="<?=(int)$arCountry['ID']?>"<?=in_array($arCountry['ID'], $sales_zone_countries) ? ' selected' : ''?>><?= htmlspecialcharsbx($arCountry['NAME_LANG']); ?></option>
2865 <?php
2866 endwhile;
2867 unset($dbCountryList);
2868 ?>
2869 </select>
2870 </td><td>
2871 <select id="sales_zone_regions_<?= $site['SAFE_ID']; ?>" name="sales_zone_regions[<?= $site['SAFE_ID']; ?>][]" multiple size="10" class="sale-options-location-mselect">
2872 <option value=""<?= in_array('', $sales_zone_regions) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_ALL'); ?></option>
2873 <option value="NULL"<?= in_array('NULL', $sales_zone_regions) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_NO_REGION'); ?></option>
2874 <?php
2875 if (!in_array('', $sales_zone_countries)):
2876 $arRegions = SalesZone::getRegions($sales_zone_countries, LANGUAGE_ID);
2877 foreach ($arRegions as $regionId => $arRegionName):
2878 ?>
2879 <option value="<?= $regionId; ?>"<?= in_array($regionId, $sales_zone_regions) ? ' selected' : ''; ?>><?= htmlspecialcharsbx($arRegionName); ?></option>
2880 <?php
2881 endforeach;
2882 endif;
2883 ?>
2884 </select>
2885 </td><td>
2886 <select id="sales_zone_cities_<?= $site['SAFE_ID']; ?>" name="sales_zone_cities[<?= $site['SAFE_ID']; ?>][]" multiple size="10" class="sale-options-location-mselect">
2887 <option value=""<?= in_array('', $sales_zone_cities) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_ALL'); ?></option>
2888 <?php
2889 if (!in_array('', $sales_zone_regions)):
2890 $arCities = SalesZone::getCities($sales_zone_countries, $sales_zone_regions, LANGUAGE_ID);
2891 foreach($arCities as $cityId => $cityName):
2892 ?>
2893 <option value="<?= $cityId; ?>"<?= in_array($cityId, $sales_zone_cities) ? ' selected' : ''?>><?= htmlspecialcharsbx($cityName); ?></option>
2894 <?php
2895 endforeach;
2896 endif;
2897 ?>
2898 </select>
2899 </td>
2900 </tr></table>
2901 </td>
2902 </tr>
2903 <?php
2904 endif;
2905 ?>
2906 </table>
2907 </div>
2908<?php
2909 $firstSite = false;
2911unset($site);
2912?>
2913 </td>
2914 </tr>
2915<?php
2916if (CBXFeatures::IsFeatureEnabled('SaleCCards') && Option::get('sale', 'use_ccards') === 'Y')
2917{
2918 $tabControl->BeginNextTab();
2919
2921 {
2922 ?><tr>
2923 <td colspan="2"><?php
2925 Loc::getMessage(
2926 'SMO_NO_VALID_PASSWORD',
2927 [
2928 '#ROOT#' => $_SERVER['DOCUMENT_ROOT'],
2929 ]
2930 )
2931 );
2932 ?></td>
2933 </tr><?php
2934 }
2935 ?>
2936 <tr>
2937 <td valign="top" width="50%">
2938 <?= Loc::getMessage('SMO_PATH2CRYPT_FILE'); ?>
2939 </td>
2940 <td valign="middle" width="50%">
2941 <input type="text" size="40" value="<?= htmlspecialcharsbx(Option::get('sale', 'sale_data_file')); ?>" name="sale_data_file">
2942 </td>
2943 </tr>
2944 <tr>
2945 <td valign="top">
2946 <?= Loc::getMessage('SMO_CRYPT_ALGORITHM'); ?>
2947 </td>
2948 <td valign="middle">
2949 <?php
2950 $val = Option::get('sale', 'crypt_algorithm');
2951 $selectList = [
2952 'RC4' => 'RC4',
2953 'AES' => 'AES (Rijndael) - ' . Loc::getMessage('SMO_NEED_MCRYPT'),
2954 '3DES' => '3DES (Triple-DES) - ' . Loc::getMessage('SMO_NEED_MCRYPT'),
2955 ];
2956 ?>
2957 <select name="crypt_algorithm">
2958 <?php
2959 foreach ($selectList as $option => $message):
2960 ?>
2961 <option value="<?= $option; ?>>"<?= ($val === $option ? ' selected' : ''); ?>><?= $message; ?>></option>
2962 <?php
2963 endforeach;
2964 unset($selectList);
2965 ?>
2966 </select>
2967 </td>
2968 </tr>
2969 <?php
2970}
2971
2972$tabControl->BeginNextTab();
2973?>
2974 <tr class="heading">
2975 <td colspan="2"><?= Loc::getMessage("SMO_ADDITIONAL_SITE_PARAMS")?></td>
2976 </tr>
2977 <tr>
2978 <td colspan="2" align="center">
2979 <table cellspacing="0" cellpadding="0" border="0" class="internal">
2980 <tr class="heading">
2981 <td valign="top">
2982 <?= Loc::getMessage('SALE_LANG'); ?>
2983 </td>
2984 <td valign="top">
2985 <?= Loc::getMessage('SALE_CURRENCY'); ?>
2986 </td>
2987 <td valign="top">
2988 <?= Loc::getMessage('SMO_GROUPS2SITE'); ?>
2989 </td>
2990 </tr>
2991 <?php
2993 $dbGroups = CGroup::GetList('c_sort', 'asc', ['ANONYMOUS' => 'N']);
2994 while ($arGroup = $dbGroups->Fetch())
2995 {
2996 $arGroup['ID'] = (int)$arGroup['ID'];
2997
2998 if ($arGroup['ID'] === 1 || $arGroup['ID'] === 2)
2999 continue;
3000
3001 $userGroupList[] = [
3002 'ID' => $arGroup['ID'],
3003 'SAFE_NAME' => htmlspecialcharsbx($arGroup['NAME']),
3004 ];
3005 }
3006
3007 foreach($siteList as $site)
3008 {
3009 ?>
3010 <tr>
3011 <td valign="top">
3012 [<a href="site_edit.php?LID=<?= $site['SAFE_ID']; ?>&lang=<?= LANGUAGE_ID; ?>" title="<?= htmlspecialcharsbx(Loc::getMessage('SALE_SITE_ALT')); ?>"><?= $site['SAFE_ID']; ?></a>] <?= $site['SAFE_NAME']; ?>
3013 </td>
3014 <td valign="top">
3015 <?php
3016 $arCurr = CSaleLang::GetByID($site['ID']);
3018 'CURRENCY_' . $site['SAFE_ID'],
3019 $arCurr['CURRENCY'] ?? '',
3020 Loc::getMessage('SALE_NOT_SET')
3021 );
3022 ?>
3023 </td>
3024 <td valign="top">
3025 <?php
3026 $arCurrentGroups = [];
3027 $dbSiteGroupsList = CSaleGroupAccessToSite::GetList(
3028 [],
3029 [
3030 'SITE_ID' => $site['ID'],
3031 ],
3032 false,
3033 false,
3034 [
3035 'GROUP_ID',
3036 ]
3037 );
3038 while ($arSiteGroup = $dbSiteGroupsList->Fetch())
3039 {
3040 $arCurrentGroups[] = (int)$arSiteGroup['GROUP_ID'];
3041 }
3042 unset($arSiteGroup, $dbSiteGroupsList);
3043
3044 unset($arGroup, $dbGroups);
3045 ?>
3046 <select name="SITE_USER_GROUPS_<?= $site['SAFE_ID']; ?>[]" multiple size="5">
3047 <?php
3048 foreach ($userGroupList as $userGroup):
3049 ?>
3050 <option value="<?= $userGroup['ID'] ?>"<?= (in_array($userGroup['ID'], $arCurrentGroups) ? ' selected' : ''); ?>><?= $userGroup['SAFE_NAME']; ?></option>
3051 <?php
3052 endforeach;
3053 ?>
3054 </select>
3055 </td>
3056 </tr>
3057 <?php
3058 }
3059 ?>
3060 </table>
3061 </td>
3062 </tr>
3063<?php
3064$tabControl->BeginNextTab();
3065
3066require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/admin/group_rights.php';
3067
3068$tabControl->BeginNextTab();
3069?>
3070 <tr class="heading">
3071 <td colspan='2'><?= Loc::getMessage('SALE_AUTO_ORDER_STATUS_TITLE'); ?></td>
3072 </tr>
3073 <tr>
3074 <td>
3075 <?= Loc::getMessage('SALE_PAY_TO_STATUS'); ?>
3076 </td>
3077 <td>
3078 <?php
3079 $val = Option::get('sale', 'status_on_paid');
3080 ?>
3081 <select name="PAID_STATUS">
3082 <?php
3083 foreach($arStatuses as $statusId => $safeName):
3084 ?>
3085 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3086 <?php
3087 endforeach;
3088 ?>
3089 </select>
3090 </td>
3091 </tr>
3092 <tr>
3093 <td>
3094 <?= Loc::getMessage("SALE_HALF_PAY_TO_STATUS"); ?>
3095 </td>
3096 <td>
3097 <?php
3098 $val = Option::get('sale', 'status_on_half_paid');
3099 ?>
3100 <select name="HALF_PAID_STATUS">
3101 <?php
3102 foreach($arStatuses as $statusId => $safeName):
3103 ?>
3104 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3105 <?php
3106 endforeach;
3107 ?>
3108 </select>
3109 </td>
3110 </tr>
3111 <tr>
3112 <td>
3113 <?= Loc::getMessage('SALE_CHANGE_ALLOW_DELIVERY_AFTER_PAID'); ?>
3114 </td>
3115 <td>
3116 <?php
3117 $val = Option::get('sale', 'status_on_change_allow_delivery_after_paid');
3118 $isPayed2AllowDelivery = Option::get('sale', 'status_on_payed_2_allow_delivery');
3119
3120 if ($val === '')
3121 {
3122 $val = ($isPayed2AllowDelivery == 'Y') ? Sale\Configuration::ALLOW_DELIVERY_ON_FULL_PAY : 'N';
3123 }
3124 ?>
3125 <select name="CHANGE_ALLOW_DELIVERY_AFTER_PAID">
3126 <option value="N"<?= ($val === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage('SALE_DENY_STATUS'); ?></option>
3127 <?php
3128 foreach (Sale\Configuration::getAllowDeliveryAfterPaidConditionList(true) as $payTypeId => $payTitle):
3129 ?>
3130 <option value="<?= $payTypeId; ?>"<?= ($payTypeId === $val ? ' selected' : ''); ?>><?= htmlspecialcharsbx($payTitle); ?></option>
3131 <?php
3132 endforeach;
3133 ?>
3134 </select>
3135 </td>
3136 </tr>
3137 <tr>
3138 <td colspan="2">
3139 &nbsp;
3140 </td>
3141 </tr>
3142 <tr>
3143 <td>
3144 <?= Loc::getMessage('SALE_ALLOW_DELIVERY_TO_STATUS'); ?>
3145 </td>
3146 <td>
3147 <?php
3148 $val = Option::get('sale', 'status_on_allow_delivery');
3149 ?>
3150 <select name="ALLOW_DELIVERY_STATUS">
3151 <?php
3152 foreach($arStatuses as $statusId => $safeName):
3153 ?>
3154 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3155 <?php
3156 endforeach;
3157 ?>
3158 </select>
3159 </td>
3160 </tr>
3161 <tr>
3162 <td>
3163 <?= Loc::getMessage('SALE_ALLOW_DELIVERY_ONE_OF_TO_STATUS'); ?>
3164 </td>
3165 <td>
3166 <?php
3167 $val = Option::get('sale', 'status_on_allow_delivery_one_of');
3168 ?>
3169 <select name="ALLOW_DELIVERY_ONE_OF_STATUS">
3170 <?php
3171 foreach($arStatuses as $statusId => $safeName):
3172 ?>
3173 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3174 <?php
3175 endforeach;
3176 ?>
3177 </select>
3178 </td>
3179 </tr>
3180 <tr>
3181 <td>
3182 <?= Loc::getMessage('SALE_SHIPMENT_SHIPPED_TO_STATUS'); ?>
3183 </td>
3184 <td>
3185 <?php
3186 $val = Option::get('sale', 'status_on_shipped_shipment');
3187 ?>
3188 <select name="SHIPMENT_SHIPPED_STATUS">
3189 <?php
3190 foreach($arStatuses as $statusId => $safeName):
3191 ?>
3192 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3193 <?php
3194 endforeach;
3195 ?>
3196 </select>
3197 </td>
3198 </tr>
3199 <tr>
3200 <td>
3201 <?= Loc::getMessage('SALE_SHIPMENT_SHIPPED_ONE_OF_TO_STATUS'); ?>
3202 </td>
3203 <td>
3204 <?php
3205 $val = Option::get('sale', 'status_on_shipped_shipment_one_of');
3206 ?>
3207 <select name="SHIPMENT_SHIPPED_ONE_OF_STATUS">
3208 <?php
3209 foreach($arStatuses as $statusId => $safeName):
3210 ?>
3211 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3212 <?php
3213 endforeach;
3214 ?>
3215 </select>
3216 </td>
3217 </tr>
3218 <tr class='heading'>
3219 <td colspan='2'><?= Loc::getMessage('SALE_AUTO_SHIPMENT_STATUS_TITLE'); ?></td>
3220 </tr>
3221 <tr>
3222 <td>
3223 <?= Loc::getMessage('SALE_SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS'); ?>
3224 </td>
3225 <td>
3226 <?php
3227 $val = Option::get('sale', 'shipment_status_on_allow_delivery');
3228 ?>
3229 <select name="SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS">
3230 <?php
3231 foreach ($delieryStatuses as $statusId => $safeName):
3232 ?>
3233 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3234 <?php
3235 endforeach;
3236 ?>
3237 </select>
3238 </td>
3239 </tr>
3240 <tr>
3241 <td>
3242 <?= Loc::getMessage('SALE_SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS'); ?>
3243 </td>
3244 <td>
3245 <?php
3246 $val = Option::get('sale', 'shipment_status_on_shipped');
3247 ?>
3248 <select name="SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS">
3249 <?php
3250 foreach ($delieryStatuses as $statusId => $safeName):
3251 ?>
3252 <option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
3253 <?php
3254 endforeach;
3255 ?>
3256 </select>
3257 </td>
3258 </tr>
3259 <tr>
3260 <td>
3261 <label for="ALLOW_DEDUCTION_ON_DELIVERY"><?= Loc::getMessage('SALE_ALLOW_DEDUCTION_ON_DELIVERY'); ?></label>
3262 </td>
3263 <td>
3264 <?php
3265 //$valDeductOnDelivery = Option::get("sale", "allow_deduction_on_delivery", "");
3266 ?>
3267 <input type="hidden" name="ALLOW_DEDUCTION_ON_DELIVERY" id="ALLOW_DEDUCTION_ON_DELIVERY_hidden" value="N">
3268 <input type="checkbox" name="ALLOW_DEDUCTION_ON_DELIVERY" id="ALLOW_DEDUCTION_ON_DELIVERY" value="Y"<?= ($valDeductOnDelivery === 'Y' ? ' checked' : ''); ?> onclick="javascript:toggleDefaultStores(this);">
3269 <script>
3270 function toggleDefaultStores(el)
3271 {
3272 var elements = document.getElementsByClassName('default_deduct_store_control');
3273 for (var i = 0; i < elements.length; ++i)
3274 {
3275 var site_id = elements[i].id.replace('default_deduct_store_control_', ''),
3276 selector = BX("default_store_select_" + site_id);
3277
3278 elements[i].style.display = (el.checked && selector.length > 0) ? 'table-row' : 'none';
3279 BX("default_store_select_save_" + site_id).value = (el.checked && selector.length > 0) ? "Y" : "N";
3280 }
3281
3282 }
3283 </script>
3284 </td>
3285 </tr>
3286 <tr class="heading">
3287 <td colspan="2"><?= Loc::getMessage('SALE_AUTO_SHP_TR_STATUS_ON'); ?></td>
3288 </tr>
3289 <tr>
3290 <td><?= Loc::getMessage('SALE_TRACKING_CHECK_SWITCH'); ?>:</td>
3291 <td>
3292 <input id="sale-option-tracking-auto-switch_hidden" type="hidden" value="N" name="tracking_check_switch">
3293 <input id="sale-option-tracking-auto-switch" type="checkbox" value="Y" onClick="toggleTrackingAuto();" name="tracking_check_switch"<?= ($settings["tracking_check_switch"] === 'Y' ? ' checked' : ''); ?>>
3294 </td>
3295 </tr>
3296 <tr class="sale-option-tracking-auto">
3297 <td><?= Loc::getMessage('SALE_TRACKING_CHECK_PERIOD'); ?>:</td>
3298 <td><input type="text" name="tracking_check_period" value="<?= ($settings['tracking_check_period'] ?: '0'); ?>"></td>
3299 </tr>
3300
3301 <tr class="heading sale-option-tracking-auto">
3302 <td colspan="2"><?= Loc::getMessage('SALE_AUTO_SHP_TR_STATUS_MAP'); ?></td>
3303 </tr>
3304 <?php
3306 $dbRes = Sale\Internals\StatusTable::getList([
3307 'select' => [
3308 'ID',
3309 'SORT',
3310 'NAME' => 'STATUS_LANG.NAME',
3311 ],
3312 'filter' => [
3313 '=STATUS_LANG.LID' => LANGUAGE_ID,
3314 '=TYPE' => Sale\Internals\StatusTable::TYPE_SHIPMENT,
3315 ],
3316 'order' => [
3317 'SORT' => 'ASC',
3318 'ID' => 'ASC',
3319 ],
3320 ]);
3321 while ($shipmentStatus = $dbRes->fetch())
3322 {
3323 $shipmentStatuses[$shipmentStatus['ID']] = htmlspecialcharsbx($shipmentStatus['NAME'] . ' [' . $shipmentStatus['ID'] . ']');
3324 }
3325 unset($dbRes);
3326
3328 ?><tr class="sale-option-tracking-auto"><td><b><?= Loc::getMessage("SALE_TRACKING_TSTATUSES")?></b></td><td><b><?= Loc::getMessage("SALE_TRACKING_SSTATUSES")?></b></td></tr><?php
3329 foreach($trackingStatuses as $trackingStatusId => $trackingStatusName):?>
3330 <tr class="sale-option-tracking-auto">
3331 <td><?=$trackingStatusName?>:</td>
3332 <td>
3333 <select name="tracking_map_statuses[<?=$trackingStatusId?>]">
3334 <option value=""><?= Loc::getMessage("SALE_TRACKING_NOT_USE")?></option>
3335 <?php
3336 foreach($shipmentStatuses as $statusId => $safeName):
3337 ?>
3338 <option value="<?= $statusId; ?>"<?= (($settings['tracking_map_statuses'][$trackingStatusId] ?? '') === $statusId ? " selected" : ""); ?>><?= $safeName; ?></option>
3339 <?php
3340 endforeach;
3341 ?>
3342 </select>
3343 </td>
3344 </tr>
3345 <?php
3346 endforeach;
3347 $tabControl->BeginNextTab();
3348
3350 $serializedFilterValue = Option::get('sale', 'archive_params');
3351 if ($serializedFilterValue !== '')
3352 {
3353 $filterValues = unserialize($serializedFilterValue, ['allowed_classes' => false]);
3354 }
3355 if (!is_array($filterValues))
3356 {
3357 $filterValues = [];
3358 }
3359 if (isset($filterValues['LID']) && !isset($filterValues['@LID']))
3360 {
3361 $filterValues['@LID'] = $filterValues['LID'];
3362 unset($filterValues['LID']);
3363 }
3364 if (isset($filterValues['STATUS_ID']) && !isset($filterValues['@STATUS_ID']))
3365 {
3366 $filterValues['@STATUS_ID'] = $filterValues['STATUS_ID'];
3367 unset($filterValues['STATUS_ID']);
3368 }
3369 $enableRegularArchive = Option::get('sale', 'regular_archive_active') === 'Y';
3370 $archiveLimit = (int)Option::get('sale', 'archive_limit');
3371 $archiveTimeLimit = (int)Option::get('sale', 'archive_time_limit');
3372 ?>
3373 <tr>
3374 <td>
3375 <label for="ORDER_ARCHIVE_REGULAR_ACCEPT"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_ACCEPT'); ?>:</label>
3376 </td>
3377 <td>
3378 <input type="hidden" name="archive_regular_accept" id="ORDER_ARCHIVE_REGULAR_ACCEPT_hidden" value="N">
3379 <input type="checkbox" name="archive_regular_accept" id="ORDER_ARCHIVE_REGULAR_ACCEPT" value="Y"<?= ($enableRegularArchive ? ' checked' : ''); ?>>
3380 </td>
3381 </tr>
3382 <tr>
3383 <td>
3384 <label for="archive_limit"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_LIMIT_BY_HIT'); ?>:</label>
3385 </td>
3386 <td>
3387 <input type="text" name="archive_limit" value="<?= $archiveLimit ?: 10; ?>" size="5" id="archive_limit">
3388 </td>
3389 </tr>
3390 <tr>
3391 <td><label for="archive_time_limit"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_MAX_TIME_BY_HIT'); ?>:</label></td>
3392 <td>
3393 <input type="text" name="archive_time_limit" value="<?= $archiveTimeLimit ?: 5; ?>" size="5" id="archive_time_limit">
3394 <?= Loc::getMessage("SALE_ORDER_ARCHIVE_SEC"); ?>
3395 </td>
3396 </tr>
3397 <?php
3399 {
3400 ?>
3401 <tr>
3402 <td align="center" colspan="2">
3403 <a href="sale_archive.php"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_FIRST_START_NOTE'); ?></a>
3404 </td>
3405 </tr>
3406 <?php
3407 }
3408 ?>
3409 <tr class="heading">
3410 <td colspan="2"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_TITLE'); ?></td>
3411 </tr>
3412 <tr>
3413 <td><label for="archive_period"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_PERIOD'); ?>:</label></td>
3414 <td><?php
3415 $filterValuePeriod = (int)($filterValues['PERIOD'] ?? 0);
3416 if ($filterValuePeriod <= 0)
3417 {
3418 $filterValuePeriod = 365;
3419 }
3420 ?><input type="text" name="archive_period" value="<?= $filterValuePeriod; ?>" size="5" id="archive_period"></td>
3421 </tr>
3422 <tr>
3423 <td valign="top"><label for="archive_blocked_order_accept"><?= Loc::getMessage('ARCHIVE_BLOCKED_ORDER_ACCEPT'); ?>:</label></td>
3424 <td>
3425 <input type="hidden" name="archive_blocked_order_accept" id="archive_blocked_order_accept_hidden" value="N">
3426 <input type="checkbox" name="archive_blocked_order_accept" id="archive_blocked_order_accept" value="Y"<?= (Option::get('sale', 'archive_blocked_order') === 'Y' ? ' checked' : ''); ?>>
3427 </td>
3428 </tr>
3429 <?php
3430 if ($siteCount > 1)
3431 {
3432 $nonEmptyArchiveSites = !empty($filterValues['@LID']) && is_array($filterValues['@LID']);
3433 ?>
3434 <tr valign="top">
3435 <td><label for="archive_site"><?=Loc::getMessage('SALE_LANG'); ?>:</label></td>
3436 <td>
3437 <select name="archive_site[]" id="archive_site" multiple size="<?=($siteCount < 5) ? $siteCount : 5; ?>">
3438 <?php
3439 foreach ($siteList as $site)
3440 {
3441 ?>
3442 <option
3443 value="<?= $site['SAFE_ID']; ?>"
3444 <?php
3445 $checkedSite = true;
3446 if ($nonEmptyArchiveSites)
3447 {
3448 $checkedSite = in_array($site['ID'], $filterValues['@LID']);
3449 }
3450 if ($checkedSite)
3451 {
3452 echo ' selected';
3453 }
3454 ?>
3455 >
3456 <?= $site['SAFE_NAME']; ?>
3457 </option>
3458 <?php
3459 }
3460 ?>
3461 </select>
3462 </td>
3463 </tr>
3464 <?php
3465 unset($nonEmptyArchiveSites);
3466 }
3467 ?>
3468 <tr>
3469 <td valign="top"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_STATUS")?>:</td>
3470 <td>
3471 <select name="archive_status_id[]" multiple size="3">
3472 <?php
3473 $statusesList = Sale\OrderStatus::getStatusesUserCanDoOperations(
3474 $USER->GetID(),
3475 array('view')
3476 );
3477 $allStatusNames = Sale\OrderStatus::getAllStatusesNames();
3478 $nonEmptyStatuses = !empty($filterValues['@STATUS_ID']) && is_array($filterValues['@STATUS_ID']);
3479 foreach($statusesList as $statusCode)
3480 {
3481 if (!$statusName = $allStatusNames[$statusCode])
3482 continue;
3483 ?>
3484 <option
3485 value="<?= htmlspecialcharsbx($statusCode) ?>"
3486 <?php
3487 $checkedStatus = true;
3489 {
3490 $checkedStatus = in_array($statusCode, $filterValues['@STATUS_ID']);
3491 }
3492 if ($checkedStatus)
3493 {
3494 echo " selected";
3495 }
3496 ?>
3497 >
3498 [<?= htmlspecialcharsbx($statusCode) ?>] <?= htmlspecialcharsbx($statusName) ?>
3499 </option>
3500 <?php
3501 }
3502 unset($nonEmptyStatuses);
3503 ?>
3504 </select>
3505 </td>
3506 </tr>
3507 <tr>
3508 <td>
3509 <label for="ORDER_ARCHIVE_PAYED"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_PAYED"); ?>:</label>
3510 </td>
3511 <td><?php
3512 $optionValue = $filterValues['=PAYED'] ?? '';
3513 if ($optionValue !== 'Y' && $optionValue !== 'N')
3514 {
3515 $optionValue = '';
3516 }
3517 ?>
3518 <select name="archive_payed" id="ORDER_ARCHIVE_PAYED">
3519 <option value=""<?= ($optionValue === '' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_ALL"); ?></option>
3520 <option value="Y"<?= ($optionValue === 'Y' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_YES"); ?></option>
3521 <option value="N"<?= ($optionValue === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_NO")?></option>
3522 </select>
3523 </td>
3524 </tr>
3525 <tr>
3526 <td>
3527 <label for="ORDER_ARCHIVE_CANCELED"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_CANCELED"); ?>:</label>
3528 </td>
3529 <td><?php
3530 $optionValue = $filterValues['=CANCELED'] ?? '';
3531 if ($optionValue !== 'Y' && $optionValue !== 'N')
3532 {
3533 $optionValue = '';
3534 }
3535 ?>
3536 <select name="archive_canceled" id="ORDER_ARCHIVE_CANCELED">
3537 <option value=""<?= ($optionValue === '' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_ALL"); ?></option>
3538 <option value="Y"<?= ($optionValue === 'Y' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_YES"); ?></option>
3539 <option value="N"<?= ($optionValue === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_NO"); ?></option>
3540 </select>
3541 </td>
3542 </tr>
3543 <tr>
3544 <td>
3545 <label for="ORDER_ARCHIVE_DEDUCTED"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_DEDUCTED"); ?>:</label>
3546 </td>
3547 <td><?php
3548 $optionValue = $filterValues['=DEDUCTED'] ?? '';
3549 if ($optionValue !== 'Y' && $optionValue !== 'N')
3550 {
3551 $optionValue = '';
3552 }
3553 ?>
3554 <select name="archive_deducted" id="ORDER_ARCHIVE_DEDUCTED">
3555 <option value=""<?= ($optionValue === '' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_ALL"); ?></option>
3556 <option value="Y"<?= ($optionValue === 'Y' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_YES"); ?></option>
3557 <option value="N"<?= ($optionValue === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_NO"); ?></option>
3558 </select>
3559 </td>
3560 </tr>
3561 <?php
3562 $tabControl->BeginNextTab();
3563 ?>
3564 <div class="adm-numerator-use-template-checkbox-outer">
3565 <span class="adm-numerator-use-template-checkbox-title"><?= Loc::getMessage('NUMERATOR_NOT_USE_CHECKBOX_TITLE'); ?></span>
3566 <div class="adm-numerator-use-template-checkbox-inner">
3567 <input type="hidden" name="hideNumeratorSettings" id="hideNumeratorSettings_hidden" value="N">
3568 <input type="checkbox" class="adm-designed-checkbox" name="hideNumeratorSettings" id="hideNumeratorSettings"
3569 value="Y"
3570 <?php
3571 if ($numeratorForOrdersId==''):
3572 ?>
3573 checked=""
3574 <?php
3575 endif;
3576 ?>>
3577 <label class="adm-designed-checkbox-label" for="hideNumeratorSettings" title=""></label>
3578 </div>
3579 </div>
3580 <?php
3581 $APPLICATION->IncludeComponent(
3582 'bitrix:main.numerator.edit',
3583 'admin',
3584 [
3585 'NUMERATOR_TYPE' => 'ORDER',
3586 'CSS_WRAP_CLASS' => 'js-numerator-form',
3587 'NUMERATOR_ID' => $numeratorForOrdersId,
3588 'IS_HIDE_NUMERATOR_NAME' => true,
3589 'IS_HIDE_IS_DIRECT_NUMERATION' => true,
3590 ]
3591 );
3592 ?>
3593<?php
3594$tabControl->Buttons();
3595$buttonDisable = ($SALE_RIGHT < 'W' ? ' disabled' : '');
3596?>
3597<input type="hidden" name="Update" value="Y">
3598<input type="submit"<?= $buttonDisable; ?> name="Save" value="<?= Loc::getMessage("MAIN_SAVE"); ?>" title="<?= Loc::getMessage("MAIN_OPT_SAVE_TITLE")?>" class="adm-btn-save">
3599<input type="submit"<?= $buttonDisable; ?> name="Apply" value="<?= Loc::getMessage("MAIN_OPT_APPLY"); ?>" title="<?= Loc::getMessage("MAIN_OPT_APPLY_TITLE")?>">
3600<?php
3601if ($backUrl !== ''):
3602 ?>
3603 <input type="button" name="Cancel" value="<?=htmlspecialcharsbx(GetMessage("MAIN_OPT_CANCEL")); ?>" onclick="window.location='<?= htmlspecialcharsbx(CUtil::addslashes($backUrl)); ?>'">
3604 <input type="hidden" name="back_url_settings" value="<?=htmlspecialcharsbx($backUrl)?>">
3605 <?php
3606endif;
3607?>
3608<input type="submit"<?= $buttonDisable; ?> name="RestoreDefaults" title="<?= htmlspecialcharsbx(GetMessage("MAIN_HINT_RESTORE_DEFAULTS")); ?>" onclick="return confirm('<?= AddSlashes(GetMessage("MAIN_HINT_RESTORE_DEFAULTS_WARNING"))?>')" value="<?= htmlspecialcharsbx(GetMessage("MAIN_RESTORE_DEFAULTS")); ?>">
3609<?php
3610$tabControl->End();
3611?>
3612</form>
3613<h2><?= Loc::getMessage('SALE_SYSTEM_PROCEDURES'); ?></h2>
3614 <?php
3615 $showbasketDiscountConvert = Option::get('sale', 'basket_discount_converted') !== 'Y' && Main\ModuleManager::isModuleInstalled('catalog');
3617 {
3619 {
3620 $adminNotifyIterator = CAdminNotify::GetList(
3621 [],
3622 [
3623 'MODULE_ID' => 'sale',
3624 'TAG' => 'BASKET_DISCOUNT_CONVERTED',
3625 ]
3626 );
3627 if ($adminNotifyIterator)
3628 {
3629 if ($adminNotify = $adminNotifyIterator->Fetch())
3630 CAdminNotify::Delete($adminNotify['ID']);
3631 unset($adminNotify);
3632 }
3633 unset($adminNotifyIterator);
3635 }
3636 }
3638 'DIV' => 'saleSysTabReindex',
3639 'TAB' => Loc::getMessage('SALE_SYSTEM_TAB_REINDEX'),
3640 'ICON' => 'sale_settings',
3641 'TITLE' => Loc::getMessage('SALE_SYSTEM_TAB_REINDEX_TITLE'),
3642 ];
3644 {
3645 $systemTabs[] = [
3646 'DIV' => 'saleSysTabConvert',
3647 'TAB' => Loc::getMessage('SALE_SYSTEM_TAB_CONVERT'),
3648 'ICON' => 'sale_settings',
3649 'TITLE' => Loc::getMessage('SALE_SYSTEM_TAB_CONVERT_TITLE'),
3650 ];
3651 }
3652
3653$systemTabControl = new CAdminTabControl('saleSysTabControl', $systemTabs, true, true);
3654
3655 $systemTabControl->Begin();
3656 $systemTabControl->BeginNextTab();
3657 ?><tr><td align="left"><?php
3658 $firstTop = ' style="margin-top: 0;"';
3659 ?><h4<?= $firstTop; ?>><?= Loc::getMessage('SALE_SYS_PROC_REINDEX_DISCOUNT'); ?></h4>
3660 <input class="adm-btn-save" type="button" id="sale_discount_reindex" value="<?= htmlspecialcharsbx(Loc::getMessage('SALE_SYS_PROC_REINDEX_DISCOUNT_BTN')); ?>">
3661 <p><?= Loc::getMessage('SALE_SYS_PROC_REINDEX_DISCOUNT_ALERT'); ?></p><?php
3662 $firstTop = '';
3663 ?></td></tr><?php
3665 {
3666 $systemTabControl->BeginNextTab();
3667 ?>
3668 <tr>
3669 <td align="left"><?php
3670 $firstTop = ' style="margin-top: 0;"';
3671 ?><h4<?= $firstTop; ?>><?= Loc::getMessage('SALE_SYS_PROC_CONVERT_BASKET_DISCOUNT'); ?></h4>
3672 <input class="adm-btn-save" type="button" id="sale_basket_discount" value="<?= htmlspecialcharsbx(Loc::getMessage('SALE_SYS_PROC_CONVERT_BASKET_DISCOUNT_BTN')); ?>">
3673 <p><?= Loc::getMessage('SALE_SYS_PROC_CONVERT_BASKET_DISCOUNT_ALERT'); ?></p><?php
3674 $firstTop = '';
3675 ?></td></tr><?php
3676 }
3677 $systemTabControl->End();
3678 ?>
3679<script>
3680 BX.ready(function(){
3681 var numeratorSettingsToggle = BX('hideNumeratorSettings');
3682
3683 if (BX('hideNumeratorSettings').checked)
3684 {
3685 hideNumeratorSettings();
3686 }
3687 if (!!numeratorSettingsToggle)
3688 {
3689 BX.bind(numeratorSettingsToggle, 'click', hideNumeratorSettings);
3690 }
3691 });
3692
3693 function hideNumeratorSettings()
3694 {
3695 var numForm = document.querySelector('.js-numerator-form');
3696 if (numForm)
3697 {
3698 if (numForm.style.display === 'none')
3699 {
3700 numForm.style.display = 'block'
3701 }
3702 else
3703 {
3704 numForm.style.display = 'none'
3705 }
3706 }
3707 }
3708
3709 function toggleTrackingAuto()
3710 {
3711 var nodes = BX.findChildren(document, {className:"sale-option-tracking-auto"}, true),
3712 switchStateOn = BX("sale-option-tracking-auto-switch").checked;
3713
3714 for(var i in nodes)
3715 nodes[i].style.display = switchStateOn ? '' : 'none';
3716 }
3717
3718 function showDiscountReindex()
3719 {
3720 var obDiscount, params;
3721
3722 params = {
3723 bxpublic: 'Y',
3724 sessid: BX.bitrix_sessid()
3725 };
3726
3727 var obBtn = {
3728 title: '<?= CUtil::JSEscape(Loc::getMessage('SALE_OPTIONS_POPUP_WINDOW_CLOSE_BTN')); ?>',
3729 id: 'close',
3730 name: 'close',
3731 action: function () {
3732 this.parentWindow.Close();
3733 }
3734 };
3735
3736 obDiscount = new BX.CAdminDialog({
3737 'content_url': '/bitrix/tools/sale/discount_reindex.php?lang=<?= LANGUAGE_ID; ?>',
3738 'content_post': params,
3739 'draggable': true,
3740 'resizable': true,
3741 'buttons': [obBtn]
3742 });
3743 obDiscount.Show();
3744 return false;
3745 }
3746 function showBasketDiscountConvert()
3747 {
3748 var obDiscount, params;
3749
3750 params = {
3751 bxpublic: 'Y',
3752 sessid: BX.bitrix_sessid()
3753 };
3754
3755 var obBtn = {
3756 title: '<?= CUtil::JSEscape(Loc::getMessage('SALE_OPTIONS_POPUP_WINDOW_CLOSE_BTN')); ?>',
3757 id: 'close',
3758 name: 'close',
3759 action: function () {
3760 this.parentWindow.Close();
3761 }
3762 };
3763
3764 obDiscount = new BX.CAdminDialog({
3765 'content_url': '/bitrix/tools/sale/basket_discount_convert.php?lang=<?= LANGUAGE_ID; ?>',
3766 'content_post': params,
3767 'draggable': true,
3768 'resizable': true,
3769 'buttons': [obBtn]
3770 });
3771 obDiscount.Show();
3772 return false;
3773 }
3774 function showApplyDiscountMode()
3775 {
3776 var modeList = BX('tr_discount_apply_mode'),
3777 showMode = BX('use_sale_discount_only_Y');
3778 if (!BX.type.isElementNode(modeList) || !BX.type.isElementNode(showMode))
3779 return;
3780 BX.style(modeList, 'display', (showMode.checked ? 'none' : 'table-row'));
3781 }
3782 BX.ready( function(){
3783 BX.message['SMO_LOCATION_JS_GET_DATA_ERROR'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_JS_GET_DATA_ERROR')); ?>';
3784 BX.message['SMO_LOCATION_ALL'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_ALL')); ?>';
3785 BX.message['SMO_LOCATION_NO_COUNTRY'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_NO_COUNTRY')); ?>';
3786 BX.message['SMO_LOCATION_NO_REGION'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_NO_REGION')); ?>';
3787
3788 var discountReindex = BX('sale_discount_reindex'),
3789 basketDiscount = BX('sale_basket_discount'),
3790 showMode = BX('use_sale_discount_only_Y');
3791
3792 if (!!discountReindex)
3793 BX.bind(discountReindex, 'click', showDiscountReindex);
3794 if (!!basketDiscount)
3795 BX.bind(basketDiscount, 'click', showBasketDiscountConvert);
3796 if (BX.type.isElementNode(showMode))
3797 BX.bind(showMode, 'click', showApplyDiscountMode);
3798
3799 toggleTrackingAuto();
3800 });
3801</script>
3802<?php
return select
Определения access_edit.php:440
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
global $APPLICATION
Определения include.php:80
$viewedTime
Определения options.php:1608
$module_id
Определения options.php:6
$useSaleDiscountOnly
Определения options.php:32
if($canUseYandexMarket) $strWarning
Определения options.php:74
if($canUseYandexMarket) if(! $useSaleDiscountOnly||$catalogCount > 0) if($strUseStoreControl==='N' && $catalogCount > 0 $systemTabControl)
Определения options.php:2339
$viewedCount
Определения options.php:1609
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
static getInstance()
Определения eventmanager.php:31
static normalize($path)
Определения path.php:22
Определения loader.php:13
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
static create()
Определения numerator.php:43
static getOneByType($type=null)
Определения numerator.php:174
static update($numId, $config)
Определения numerator.php:278
static delete($id)
Определения numerator.php:406
Определения site.php:31
static normalizeArrayValuesByInt(&$map, $sorted=true)
Определения collection.php:150
static getStatusesList()
Определения manager.php:132
static getInitialStatus()
Определения orderstatus.php:111
static ShowMessage($message)
Определения admin_lib.php:2351
static Delete($ID)
Определения admin_notify.php:113
static GetList($arSort=[], $arFilter=[])
Определения admin_notify.php:207
static SelectBox($sFieldName, $sValue, $sDefaultValue='', $bFullName=true, $JavaFunc='', $sAdditionalParams='')
Определения currency.php:522
static GetList($by='c_sort', $order='asc', $arFilter=[], $SHOW_USERS_AMOUNT="N")
Определения group.php:136
static RemoveOption($module_id, $name="", $site=false)
Определения option.php:35
static SetOptionString($module_id, $name, $value="", $desc=false, $site="")
Определения option.php:29
static DeleteBySite($SITE_ID)
Определения settings.php:172
static isLocationProMigrated()
Определения location.php:58
static isLocationProEnabled()
Определения location.php:40
static CheckPassword()
Определения user_cards.php:140
static IsFeatureEnabled($_1488512778)
Определения include.php:116
static getAllCounter()
Определения step_operations.php:85
static Add($arFields)
Определения settings.php:99
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения settings.php:7
static GetByID($siteId)
Определения settings.php:38
static GetList($arOrder=array("SORT"=>"ASC", "COUNTRY_NAME_LANG"=>"ASC", "CITY_NAME_LANG"=>"ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения location.php:9
static GetCountryList($arOrder=Array("NAME_LANG"=>"ASC"), $arFilter=Array(), $strLang=LANGUAGE_ID)
Определения location.php:155
static GetList($category=false)
Определения measurement.php:5
if(!in_array("BC". $f_USER_ID, $arContra)) endwhile
Определения commerceml.php:102
& nbsp
Определения epilog_main_admin.php:38
bx popup label bx width30 PAGE_NEW_MENU_NAME text width
Определения file_new.php:677
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$zr
Определения options.php:5
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
$currentAction
Определения options.php:52
if($request->getPost('Update') !==null) elseif( $request->getPost( 'Apply') !==null) elseif($request->getPost('RestoreDefaults') !==null) $backUrl
Определения options.php:66
$defaultValues
Определения iblock_catalog_edit.php:124
$filter
Определения iblock_catalog_list.php:54
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $USER
Определения csv_new_run.php:40
$tabControl
Определения csv_new_setup.php:244
$aTabs
Определения csv_new_setup.php:238
endif
Определения csv_new_setup.php:990
$z
Определения options.php:31
URL bitrix admin public_file_edit php bxpublic
Определения structure.php:440
$siteId
Определения ajax.php:8
bitrix_sessid_post($varname='sessid', $returnInvocations=false)
Определения tools.php:4700
check_bitrix_sessid($varname='sessid')
Определения tools.php:4686
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
LocalRedirect($url, $skip_security_check=false, $status="302 Found")
Определения tools.php:4005
$name
Определения menu_edit.php:35
$value
Определения Param.php:39
Определения directory.php:3
if(!function_exists("bx_hmac")) $amount
Определения payment.php:30
$message
Определения payment.php:8
$settings
Определения product_settings.php:43
global_menu_<?echo $menu["menu_id"]?> adm main menu item icon adm main menu item text text adm main menu hover adm submenu menucontainer menu_id menu_id items_id items_id desktop menu_id block none adm global submenu<?=($subMenuDisplay=="block" ? " adm-global-submenu-active" :"")?> global_submenu_<?echo $menu["menu_id"]?> text MAIN_PR_ADMIN_FAV items adm submenu items wrap adm submenu items stretch wrap BX adminMenu itemsStretchScroll()"> <table class if (!empty( $menu["items"])) elseif ( $menu[ 'menu_id']=='desktop') if ( $menu[ 'menu_id']=='desktop') endforeach
Определения prolog_main_admin.php:255
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
<? endif;?> window document title
Определения prolog_main_admin.php:76
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
font style
Определения invoice.php:442
font size
Определения invoice.php:442
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$currency
Определения template.php:266
endfor
Определения template.php:569
text align
Определения template.php:556
$title
Определения pdf.php:123
$shipmentStatuses
Определения options.php:3305
$buttonDisable
Определения options.php:3595
$firstTop
Определения options.php:3658
$siteIterator
Определения options.php:48
$filterValues
Определения options.php:3349
if(!is_array($arUnitList)) $firstSite
Определения options.php:2647
$sales_zone_regions
Определения options.php:2848
if( $recStatuses !=='') if(!is_array($recStatuses)) $p2pStatusesList
Определения options.php:2259
$paths
Определения options.php:2080
getSaleArrayOptionValue(array $list, $index)
Определения options.php:385
$numeratorsOrderType
Определения options.php:348
$isPayed2AllowDelivery
Определения options.php:3118
if( $request->isPost() &&($currentAction==='save'|| $currentAction==='apply') && $SALE_RIGHT==='W' &&check_bitrix_sessid()) $statusesWithoutNoChange
Определения options.php:1641
if( $SALE_RIGHT< 'R') if(!Loader::includeModule('sale')||!Loader::includeModule('currency')) $allowEditPhp
Определения options.php:31
$valOrderHistoryActionLogLevel
Определения options.php:1900
$recStatuses
Определения options.php:2249
$locationName
Определения options.php:2799
$showMeasurePathOption
Определения options.php:33
$bWasUpdated
Определения options.php:71
$lpEnabled
Определения options.php:43
$refreshGapVal
Определения options.php:2002
$selectedWeightUnit
Определения options.php:2660
$valExpirationProcessingEvents
Определения options.php:1875
$valDeductOnDelivery
Определения options.php:1785
$arLocation['REGION_NAME']
Определения options.php:2800
if( $reminder !=='') if(!is_array($arReminder)) $arSubscribeProd
Определения options.php:2425
$siteCount
Определения options.php:69
$arStatuses
Определения options.php:1642
$valOrderHistoryLogLevel
Определения options.php:1888
if(CBXFeatures::IsFeatureEnabled('SaleAccounts')) $arReminder
Определения options.php:2414
$numeratorForOrdersId
Определения options.php:347
if( $subscribeProd !=='') if(!is_array($arSubscribeProd)) $aTabs2
Определения options.php:2436
$rowStyle
Определения options.php:2044
$arOrderFlags
Определения options.php:342
if($siteCount > 1) $statusesList
Определения options.php:3473
$nonEmptyStatuses
Определения options.php:3478
$siteList
Определения options.php:47
$delieryStatusesList
Определения options.php:1671
$selectList
Определения options.php:1794
if( $request->isPost() && $currentAction==='reset' && $SALE_RIGHT==='W' &&check_bitrix_sessid()) $optionMainList
Определения options.php:137
$option
Определения options.php:1711
$siteIdList
Определения options.php:46
getSaleStringOptionFromRequest(HttpRequest $request, string $index)
Определения options.php:396
$sales_zone_countries
Определения options.php:2847
$dbLocationList
Определения options.php:2788
$showbasketDiscountConvert
Определения options.php:3615
if( $serializedFilterValue !=='') if(!is_array($filterValues)) if(isset( $filterValues[ 'LID']) &&!isset( $filterValues[' @LID'])) if(isset($filterValues['STATUS_ID']) &&!isset($filterValues[' @STATUS_ID'])) $enableRegularArchive
Определения options.php:3369
$archiveTimeLimit
Определения options.php:3371
$subscribeProd
Определения options.php:2426
$arUnitList
Определения options.php:2642
$userGroupList
Определения options.php:2992
getSaleBooleanOptionFromRequest(HttpRequest $request, string $index)
Определения options.php:407
$archiveLimit
Определения options.php:3370
$sales_zone_cities
Определения options.php:2849
$delieryStatuses
Определения options.php:1668
$SALE_RIGHT
Определения options.php:18
$filterValuePeriod
Определения options.php:3415
$val
Определения options.php:1793
$guestStatuses
Определения options.php:2056
$lMigrated
Определения options.php:44
$location
Определения options.php:2729
if( $guestStatuses !=='') if(!is_array($guestStatuses)) $statusList
Определения options.php:2065
$reminder
Определения options.php:2415
foreach($siteList as $val) $tabControl2
Определения options.php:2445
$allStatusNames
Определения options.php:3477
$widgetType
Определения options.php:2160
$optionName
Определения options.php:1735
if($showbasketDiscountConvert) $systemTabs[]
Определения options.php:3637
$differentAddress
Определения options.php:2698
$serializedFilterValue
Определения options.php:3350
$dbGroups
Определения options.php:2993
$trackingStatuses
Определения options.php:3327
$dbCountryList
Определения options.php:2861
$modeList
Определения options.php:2219
addNumeratorErrorToWarningString($_numeratorResult)
Определения options.php:370
$serializedPass
Определения options.php:2081
$differentWeight
Определения options.php:2614
$optionValue
Определения options.php:3512
$eventManager
Определения include.php:412
$site_id
Определения sonet_set_content_view.php:9
$error
Определения subscription_card_product.php:20
$dbRes
Определения yandex_detail.php:168
$iterator
Определения yandex_run.php:610
$site
Определения yandex_run.php:614