Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/wbs24.deliverytypes/lib/ |
Upload File : |
<? namespace Wbs24\Deliverytypes; use Bitrix\Main\Config\Option; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Loader; use Bitrix\Main\Event; use Bitrix\Sale\Delivery\Services; class Events { public function __construct($objects = []) { $this->main = $objects['Main'] ?? new Main(); $this->moduleId = $this->main->getModuleId(); $this->wrappers = new Wrappers($objects); } public static function changeDeliveryPrice(\Bitrix\Main\Event $event) { $eventsObject = new Events(); $shipment = $event->getParameter('SHIPMENT'); $calcResult = $event->getParameter('RESULT'); if (!$shipment) return; $order = $shipment->getCollection()->getOrder(); $siteId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'site_id'); $fastDeliveryPrice = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'fast_delivery_price') ?? 0; $deliveryOnTimePrice = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_on_time_price') ?? 0; if ( $shipment->getDeliveryId() != $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_service_id') || $order->getDeliveryPrice() == 0 || $siteId != SITE_ID ) { return; } $regionId = $eventsObject->getRegionId(); if (empty($_SESSION['WBS24_REGION_ID'])) { $_SESSION['WBS24_REGION_ID'] = $regionId; } // Если текущий регион ID не равен ID региона в сессии то стираем значение базовой цены if ($regionId != $_SESSION['WBS24_REGION_ID']) { $_SESSION['WBS24_REGION_ID'] = $regionId; unset($_SESSION['WBS24_BASE_DELIVERY_PRICE']); } // Установка в сессию изначльную стоимость if (!isset($_SESSION['WBS24_BASE_DELIVERY_PRICE'])) { $_SESSION['WBS24_BASE_DELIVERY_PRICE'] = $order->getDeliveryPrice(); } $baseDeliveryPrice = $_SESSION['WBS24_BASE_DELIVERY_PRICE'] ?? 0; // IDS свойств $regularDeliveryId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'regular_delivery_property_id'); $fastDeliveryId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'fast_delivery_property_id'); $deliveryOnTimeId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_on_time_property_id'); $regularDelivery = $order->getPropertyCollection()->getItemByOrderPropertyId($regularDeliveryId); if ($regularDelivery) $regularDeliveryActive = $regularDelivery->getValue(); $fastDelivery = $order->getPropertyCollection()->getItemByOrderPropertyId($fastDeliveryId); if ($fastDelivery) $fastDeliveryActive = $fastDelivery->getValue(); $deliveryOnTime = $order->getPropertyCollection()->getItemByOrderPropertyId($deliveryOnTimeId); if ($deliveryOnTime) $deliveryOnTimeActive = $deliveryOnTime->getValue(); if ($regularDeliveryActive == 'on') { $calcResult->setDeliveryPrice($baseDeliveryPrice); } elseif ($fastDeliveryActive == 'on') { $calcResult->setDeliveryPrice($baseDeliveryPrice + $fastDeliveryPrice); } elseif ($deliveryOnTimeActive == 'on') { $calcResult->setDeliveryPrice($baseDeliveryPrice + $deliveryOnTimePrice); } return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( "RESULT" => $calcResult, ) ); } protected function getRegionId() { if (!Loader::includeModule('aspro.next')) throw new SystemException("Module aspro.next don`t installed"); $region = new \CNextRegionality(); $regionInfo = $region->getCurrentRegion(); $regionId = $regionInfo['ID'] ?? 0; return $regionId; } public static function OnSaleOrderBeforeSavedHandler(Event $event) { $order = $event->getParameter("ENTITY"); $eventsObject = new Events(); $siteId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'site_id'); if ($siteId != SITE_ID) { return; } // IDS свойств $regularDeliveryId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'regular_delivery_property_id'); $fastDeliveryId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'fast_delivery_property_id'); $deliveryOnTimeId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_on_time_property_id'); $deliveryIntervalId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_interval'); $deliveryTimeId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_time'); $deliveryDateId = $eventsObject->wrappers->Option->get($eventsObject->moduleId, 'delivery_date'); $regularDelivery = $order->getPropertyCollection()->getItemByOrderPropertyId($regularDeliveryId); if ($regularDelivery) $regularDeliveryActive = $regularDelivery->getValue(); $fastDelivery = $order->getPropertyCollection()->getItemByOrderPropertyId($fastDeliveryId); if ($fastDelivery) $fastDeliveryActive = $fastDelivery->getValue(); $deliveryOnTime = $order->getPropertyCollection()->getItemByOrderPropertyId($deliveryOnTimeId); if ($deliveryOnTime) $deliveryOnTimeActive = $deliveryOnTime->getValue(); $deliveryInterval = $order->getPropertyCollection()->getItemByOrderPropertyId($deliveryIntervalId); $deliveryTime = $order->getPropertyCollection()->getItemByOrderPropertyId($deliveryTimeId); $deliveryDate = $order->getPropertyCollection()->getItemByOrderPropertyId($deliveryDateId); if ($regularDeliveryActive == 'on') { $deliveryTime->setValue(''); $regularDelivery->setValue('Да'); } elseif ($fastDeliveryActive == 'on') { $deliveryTime->setValue(''); $deliveryInterval->setValue(''); $deliveryDate->setValue(''); $fastDelivery->setValue('Да'); } elseif ($deliveryOnTimeActive == 'on') { $deliveryInterval->setValue(''); $deliveryOnTime->setValue('Да'); } } public static function OnSaleComponentOrderJsDataHandler(&$arResult, &$arParams) { $Events = new Events(); $siteId = $Events->wrappers->Option->get($Events->moduleId, 'site_id'); if ($siteId != SITE_ID) { return; } $groupParamsId = $Events->wrappers->Option->get($Events->moduleId, 'group_id_for_shipping_options'); foreach ($arResult['JS_DATA']['ORDER_PROP']['properties'] as $key => $prop) { if ($prop['PROPS_GROUP_ID'] == $groupParamsId) { $arResult['JS_DATA']['DELIVERY_PROPS']['properties'][] = $arResult['JS_DATA']['ORDER_PROP']['properties'][$key]; unset($arResult['JS_DATA']['ORDER_PROP']['properties'][$key]); } } foreach ($arResult['JS_DATA']['ORDER_PROP']['groups'] as $key => $group) { if ($group['ID'] == $groupParamsId) { $arResult['JS_DATA']['DELIVERY_PROPS']['groups'][] = $arResult['JS_DATA']['ORDER_PROP']['groups'][$key]; unset($arResult['JS_DATA']['ORDER_PROP']['groups'][$key]); } } echo "<script>".self::getSettingsForJs($Events)."</script>"; } private static function getSettingsForJs($Events) { $settingsObject = 'Wbs24DeliveryTypes'; $code = 'let '.$settingsObject.'= {}; '; $code .= $settingsObject.'.deliveryTypesToActive = '.\CUtil::PhpToJSObject($Events->getDeliveryTypesToActive()).'; '; //$code .= $settingsObject.'.fastDeliverySum = '.$Events->wrappers->Option->get($Events->moduleId, 'fast_delivery_price').'; '; //$code .= $settingsObject.'.deliveryOnTimeInfo = '.\CUtil::PhpToJSObject($Events->getDeliveryOnTimeInfo()).'; '; $code .= $settingsObject.'.deliveryOnTimeInterval = '.$Events->wrappers->Option->get($Events->moduleId, 'delivery_on_time_plus_time').'; '; $code .= $settingsObject.'.deliveryProps = '.\CUtil::PhpToJSObject($Events->getDeliveryProps()).'; '; $code .= $settingsObject.'.deliveryOnTimeActiveFrom = '.$Events->wrappers->Option->get($Events->moduleId, 'delivery_on_time_active_from').'; '; $code .= $settingsObject.'.deliveryOnTimeActiveTo = '.$Events->wrappers->Option->get($Events->moduleId, 'delivery_on_time_active_to').'; '; $code .= $settingsObject.'.specialDeliveryIds = "'.$Events->wrappers->Option->get($Events->moduleId, 'special_delivery_ids').'"; '; return $code; } private function getDeliveryTypesToActive() { return [ //'regular_delivery' => $this->wrappers->Option->get($this->moduleId, 'regular_delivery'), 'fast_delivery' => $this->wrappers->Option->get($this->moduleId, 'fast_delivery'), 'delivery_on_time' => $this->wrappers->Option->get($this->moduleId, 'delivery_on_time'), ]; } private function getDeliveryOnTimeInfo() { $deliveryOnTimeSumToActive = []; for ($i = 0; $i < 24; $i++) { $deliveryOnTimeSumToActive[] = [ 'timeStart' => $i, 'timeEnd' => $i + 1, 'sum' => $this->wrappers->Option->get($this->moduleId, 'delivery_on_time_hour_'.$i), ]; } return $deliveryOnTimeSumToActive; } private function getDeliveryProps() { return [ 'delivery_service_id' => $this->wrappers->Option->get($this->moduleId, 'delivery_service_id'), 'group_id_for_shipping_options' => $this->wrappers->Option->get($this->moduleId, 'group_id_for_shipping_options'), 'regular_delivery_property_id' => $this->wrappers->Option->get($this->moduleId, 'regular_delivery_property_id'), 'fast_delivery_property_id' => $this->wrappers->Option->get($this->moduleId, 'fast_delivery_property_id'), 'delivery_on_time_property_id' => $this->wrappers->Option->get($this->moduleId, 'delivery_on_time_property_id'), 'delivery_date' => $this->wrappers->Option->get($this->moduleId, 'delivery_date'), 'delivery_interval' => $this->wrappers->Option->get($this->moduleId, 'delivery_interval'), 'delivery_time' => $this->wrappers->Option->get($this->moduleId, 'delivery_time'), 'delivery_address' => $this->wrappers->Option->get($this->moduleId, 'delivery_address'), 'delivery_home_number' => $this->wrappers->Option->get($this->moduleId, 'delivery_home_number'), 'delivery_on_time_cost' => $this->wrappers->Option->get($this->moduleId, 'delivery_on_time_cost'), 'fast_delivery_note' => $this->wrappers->Option->get($this->moduleId, 'fast_delivery_note'), ]; } } ?>