Перейти к содержанию
Форум поддержки пользователей VamShop

Новый модуль доставки — СДЭК ПВЗ


Рекомендуемые сообщения

  • Ответов 64
  • Created
  • Последний ответ

Top Posters In This Topic

  • support

    36

  • vitaly

    25

  • Роман_DD

    2

  • Nexoos

    1

В 19.03.2021 в 14:11, support сказал:

Исправил в текущем коде на 1000

В архиве с патчем 1.99.31 в файле boxberrypvz.php все еще множитель 100:

        $date_Execute = date('Y-m-d');
        $total_weight = $shipping_weight * 100;

 

Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, vitaly сказал:

В архиве с патчем 1.99.31 в файле boxberrypvz.php все еще множитель 100:


        $date_Execute = date('Y-m-d');
        $total_weight = $shipping_weight * 100;

 

Исправил

Ссылка на сообщение
Поделиться на другие сайты
  • 2 weeks later...

Здравствуйте!

У компании СДЭК есть более дешевые тарифы для дальней отправки посылок:
Услуга действует по направлениям из Москвы в подразделения СДЭК, находящиеся за Уралом и в Крым.
233    Экономичная посылка склад-дверь
234    Экономичная посылка склад-склад

Чтобы не создавать еще один способ доставки решили доработать существующий.
Идея такая: заменять тариф СДЭК в зависимости от расположения покупателя.
В админке создали новую географическую зону, в которой будет действовать этот тариф.
Теперь необходимо подключить функцию определения расположения покупателя и сравнить его с созданной географической зоной на совпадение.
Далее в файле cdek.php будем менять тариф.
Прошу подсказать, где можно найти функцию определения геозоны покупателя и функцию скрытия/отображения способа доставки в зависимости от зоны покупателя и настроек видимости этого способа доставки.

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты
52 минуты назад, vitaly сказал:

Здравствуйте!

У компании СДЭК есть более дешевые тарифы для дальней отправки посылок:
Услуга действует по направлениям из Москвы в подразделения СДЭК, находящиеся за Уралом и в Крым.
233    Экономичная посылка склад-дверь
234    Экономичная посылка склад-склад

Чтобы не создавать еще один способ доставки решили доработать существующий.
Идея такая: заменять тариф СДЭК в зависимости от расположения покупателя.
В админке создали новую географическую зону, в которой будет действовать этот тариф.
Теперь необходимо подключить функцию определения расположения покупателя и сравнить его с созданной географической зоной на совпадение.
Далее в файле cdek.php будем менять тариф.
Прошу подсказать, где можно найти функцию определения геозоны покупателя и функцию скрытия/отображения способа доставки в зависимости от зоны покупателя и настроек видимости этого способа доставки.

Спасибо.

В /includes/modules/shipping/sdekpvz.php

      if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_SDEKPVZ_ZONE > 0) ) {
        $check_flag = false;
        $check_query = vam_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_SDEKPVZ_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
        while ($check = vam_db_fetch_array($check_query)) {
          if ($check['zone_id'] < 1) {
            $check_flag = true;
            break;
          } elseif ($check['zone_id'] == $order->delivery['zone_id']) {
            $check_flag = true;
            break;
          }
        }

        if ($check_flag == false) {
          $this->enabled = false;
        }
      }

Этот код отключает модуль, если заполнена опция Зона в настройках модуля и зона покупателя попадает в условия.

 

Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, support сказал:

Этот код отключает модуль, если заполнена опция Зона в настройках модуля и зона покупателя попадает в условия.

Спасибо!

Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, vitaly сказал:

Спасибо!

Ну в Вашем случае может можно и не зоны использовать, в просто в коде добавлять услоия типа:

if ($order->delivery['state'] == "Красноярский край") {
$this->enabled = false;
}

 

и вставлять это в метод quote например.

Ссылка на сообщение
Поделиться на другие сайты

Для регионов за Уралом и Крым получится 29 условий (хотя, можно использовать массив...):

1    Кемеровская область
2    Алтайский край
3    Томская область
4    Новосибирская область
5    Омская область
6    Республика Крым
7    Сахалинская область
8    Хабаровский край
9    Еврейская автономная область
10    Приморский край
11    Якутия
12    Читинская область
13    Бурятия
14    Иркутская область
15    Хакасия
16    Ханты-Мансийский АО
17    Коми
18    Ненецкий АО
19    Дагестан
20    Чечня
21    Камчатский край
22    Магаданская область
23    Красноярский край
24    Ямало-Ненецкий АО
25    Камчатский край
26    Чукотский АО
27    Амурская область
28    Забайкальский край
29    Тюменская область

1 час назад, support сказал:

и вставлять это в метод quote например.

Переменная $order доступна в методе quote. $order->delivery['state'] содержит наименование региона покупателя, определённого по его ip-адресу.

Как быть, если покупатель находится в одном регионе, а доставку оформляет в другой регион?

Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, vitaly сказал:

Для регионов за Уралом и Крым получится 29 условий (хотя, можно использовать массив...):

1    Кемеровская область
2    Алтайский край
3    Томская область
4    Новосибирская область
5    Омская область
6    Республика Крым
7    Сахалинская область
8    Хабаровский край
9    Еврейская автономная область
10    Приморский край
11    Якутия
12    Читинская область
13    Бурятия
14    Иркутская область
15    Хакасия
16    Ханты-Мансийский АО
17    Коми
18    Ненецкий АО
19    Дагестан
20    Чечня
21    Камчатский край
22    Магаданская область
23    Красноярский край
24    Ямало-Ненецкий АО
25    Камчатский край
26    Чукотский АО
27    Амурская область
28    Забайкальский край
29    Тюменская область

Переменная $order доступна в методе quote. $order->delivery['state'] содержит наименование региона покупателя, определённого по его ip-адресу.

Как быть, если покупатель находится в одном регионе, а доставку оформляет в другой регион?

А кто сказал, что по ip ?!

Нет, не по IP, по умолчанию в этой переменной значение поля Регион, которое заполняет покупатель на странице оформления заказа, т.е. оформляет заказ как гость.

Либо поле регион из адресной книги, если заказ оформляет авторизованный покупатель.

Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, support сказал:

А кто сказал, что по ip ?!

Предположил, что именно так...
Не понятно, зачем покупатель будет заполнять поле «Регион», если для расчета доставки в ПВЗ достаточно указать город? Если бы поле "Город" было заблокировано до того, как укажешь регион, то конечно, покупатели указывали бы регион доставки.

После того, как покупатель выберет регион, переменная сразу обновляет значение? А до выбора региона переменная что содержит?

После указания города доставки у нас запускается расчет стоимости доставки. В этот момент изменяется значение в переменной $order->delivery['state'] ?

 

Ссылка на сообщение
Поделиться на другие сайты
8 часов назад, vitaly сказал:

Предположил, что именно так...
Не понятно, зачем покупатель будет заполнять поле «Регион», если для расчета доставки в ПВЗ достаточно указать город? Если бы поле "Город" было заблокировано до того, как укажешь регион, то конечно, покупатели указывали бы регион доставки.

После того, как покупатель выберет регион, переменная сразу обновляет значение? А до выбора региона переменная что содержит?

После указания города доставки у нас запускается расчет стоимости доставки. В этот момент изменяется значение в переменной $order->delivery['state'] ?

 

Ну я про это и говорю, что опция Зона Вам не подходит.

Она ограничивает по региону, не городу.

Если Регион не заполняет, то опция Зона работать правильно не будет.

 

Если в полях Регион и Город ничего не указано, то и значения $order->delivery['state'] и $order->delivery['city'] пустые

Ссылка на сообщение
Поделиться на другие сайты

После того, как покупатель указал город доставки, у нас запускается расчет доставки и в методе quote в файле sdekpvz.php переменная $order->delivery['city'] будет содержать указанный город? Все правильно?

Остается где-то брать и хранить у себя таблицу соответствия Город-> Регион...

Или список городов, для которых применим более дешевый тариф СДЭК...

Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, vitaly сказал:

После того, как покупатель указал город доставки, у нас запускается расчет доставки и в методе quote в файле sdekpvz.php переменная $order->delivery['city'] будет содержать указанный город? Все правильно?

Остается где-то брать и хранить у себя таблицу соответствия Город-> Регион...

Да.

 

Ссылка на сообщение
Поделиться на другие сайты

×
×
  • Создать...