Jump to content

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


Recommended Posts

support

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

Link to post
Share on other sites
  • Replies 64
  • Created
  • Last Reply

Top Posters In This Topic

  • support

    36

  • vitaly

    25

  • Роман_DD

    2

  • Nexoos

    1

Top Posters In This Topic

Posted Images

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

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

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

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

 

Link to post
Share on other sites
support
2 часа назад, vitaly сказал:

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


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

 

Исправил

Link to post
Share on other sites
  • 2 weeks later...
vitaly

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

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

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

Спасибо.

Link to post
Share on other sites
support
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;
        }
      }

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

 

Link to post
Share on other sites
vitaly
12 минут назад, support сказал:

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

Спасибо!

Link to post
Share on other sites
support
10 минут назад, vitaly сказал:

Спасибо!

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

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

 

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

Link to post
Share on other sites
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    Тюменская область

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

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

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

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

Link to post
Share on other sites
support
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, по умолчанию в этой переменной значение поля Регион, которое заполняет покупатель на странице оформления заказа, т.е. оформляет заказ как гость.

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

Link to post
Share on other sites
vitaly
10 часов назад, support сказал:

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

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

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

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

 

Link to post
Share on other sites
support
8 часов назад, vitaly сказал:

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

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

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

 

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

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

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

 

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

Link to post
Share on other sites
vitaly

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

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

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

Link to post
Share on other sites
support
15 минут назад, vitaly сказал:

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

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

Да.

 

Link to post
Share on other sites
vitaly
1 минуту назад, support сказал:

Да.

Спасибо.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...