Jump to content
Sign in to follow this  
kachulin

Пример кода для расчета стоимости доставки ПЭК

Recommended Posts

class ModelExtensionShippingPek extends Model {
    function getQuote($address) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('shipping_pek_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");

        if (!$this->config->get('shipping_pek_geo_zone_id')) {
            $status = true;
        } elseif ($query->num_rows) {
            $status = true;
        } else{
            $status = false;
        }

        $city = mb_strtolower($this->session->data['payment_address']['city']);
        $citySearch = $this->searchCity($city);
        if ($citySearch) {
            $cityCode = array_keys($citySearch)[0];
            $pekData = $this->getPekCost($cityCode);
            $pekCost = $pekData['auto'][2];
            $this->config->set('shipping_pek_cost', $pekCost);
        }
        else{
            $status = false;
        }

        $method_data = array();

        if ($status) {
            $quote_data = array();
            $products = $this->cart->getProducts();
            $product_info = $products[0];
            $length = number_format($product_info['length'], 0);
            $width = number_format($product_info['width'], 0);
            $height = number_format($product_info['height'], 0);
            $weight = number_format($product_info['weight'], 0);

            $quote_data['pek'] = array(
                'code'         => 'pek.pek',
                'title'        => "ПЭК",
                'cost'         => $this->config->get('shipping_pek_cost'),
                'tax_class_id' => $this->config->get('shipping_pek_tax_class_id'),
                'text'         => $this->currency->format($this->tax->calculate($this->config->get('shipping_pek_cost'), $this->config->get('shipping_pek_tax_class_id'), $this->config->get('config_tax')), $this->session->data['currency'])
            );

            $method_data = array(
                'code'       => 'pek',
                'title'      => 'ПЭК',
                'quote'      => $quote_data,
                'sort_order' => $this->config->get('shipping_pek_sort_order'),
                'error'      => false
            );
        }

        return $method_data;
    }

    function getPekCost($town_id){
        // Публичный АПИ pecom
        $ch = curl_init();
        $url = 'http://calc.pecom.ru/bitrix/components/pecom/calc/ajax.php';

        $arr = [
            'places' => [
                [
                    0, // Ширина
                    0, // Длина
                    0, // Высота
                    0.1, // Объем
                    1, // Вес
                    1, // Признак негабаритности груза
                    1 // Признак ЖУ
                ]
            ],
            'take' => [
                'town' => -477, //Код города отправителя (Пермь)
                // 'tent' => 0,
                // 'gidro' => 0,
                // 'manip' => 0,
                // 'speed' => 0,
                // 'moscow' => 0
            ],
            'deliver' => [
                'town' => $town_id, // Код города получателя
                // 'tent' => 0,
                // 'gidro' => 0,
                // 'manip' => 0,
                // 'speed' => 0,
                // 'moscow' => 0
            ],
            // 'plombir' => 0,
            'strah' => 3000,
            // 'ashan' => 0,
            // 'night' => 0,
            // 'pal'  => 0,
            // 'pallets' => 0
        ];
        $params = http_build_query($arr);
        // echo $params;
        curl_setopt_array($ch, array(
            CURLOPT_URL => $url.'?'.$params,
            CURLOPT_RETURNTRANSFER => true
        ));

        $out = curl_exec($ch);
        // print_r($out);
        $res = json_decode($out, true);
        return $res;
    }
    public function getCitiesList(){
        $url = 'https://pecom.ru/ru/calc/towns.php';
        $ch=curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
        $cities=curl_exec($ch);
        if($cities!=''){
            $cities=  json_decode($cities,true);
        }
        return $cities;
    }
    public function searchCity($q_string,$limit=1){
        $cities=$this->getCitiesList();
        $out=array();
        if(mb_strlen($q_string)>2){
            $l=mb_strlen($q_string)/2;
            foreach ($cities as $region){
                if(is_array($region)){
                    foreach ($region as $key=>$city){
                        if((mb_stripos(mb_strtolower($city,'utf-8'),mb_strtolower($q_string,'utf-8'))!==FALSE) && (mb_strlen($city,'utf-8') == mb_strlen($q_string,'utf-8'))){
                            $c['label']=$city;
                            $c['value']= $city;
                            $c['id']=$key;
                            $out[$c['id']]=$c;
                            if(count($out)>=$limit){
                                //$out=array_reverse($out);
                            return  $out;
                            }
                        }
                    }
                }
            }
            $out=array_reverse($out);
            return  $out;
        }
    }

}

Share this post


Link to post
Share on other sites

Что это!? Зачем, кому может пригодится? Как расшифровывается ПЭК?

Share this post


Link to post
Share on other sites

Надо было выложить код срочно, чтобы люди посмотрели. ПЭК - транспортная компания грузоперевозок. Расшифровка "Первая Экспедиционная Компания".

Делаю для себя модуль расчета стоимости доставки в зависимости от города-отправителя, города-получателя, а также габаритов и веса груза. Позже в установочный архив закатаю, выложу. Может кому пригодится.   

Edited by kachulin

Share this post


Link to post
Share on other sites

А пока он не выложен, можно воспользоваться полноценным модулем:

 

 

Share this post


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
You are posting as a guest. If you have an account, please sign in.
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.

Sign in to follow this  

  • Similar Content

    • By progroman
      Модуль добавляет любое количество служб доставки с тарифами, указанными вами.
      Позволяет настраивать тарифы, скидки на доставку, регионы и города для доставки.
      Может быть полезен, например, если у вас собственная курьерская служба, или у службы доставки нет своего api, либо он слишком сложный. Или вы хотите увеличить или наоборот уменьшить стоимость доставки для клиента. В этих случаях с помощью данного модуля вы просто вбиваете соответствующие тарифы для нужных регионов.
       
      Стоимость доставки может быть:
      - фиксированной, например, 300 руб.
      - текстом, например, "уточняйте у менеджера"
      - зависимой от веса, например: 5:300,7:400,10:500
       
      Настройка тарифов по весу
      Пример
      5:300,7:400,10:500
      заказ весом меньше или равный 5 кг будет стоить 300.00 руб., весом меньше или равный 7 кг, но больше чем 5 кг, будет стоить 400 руб., от 7 до 10 кг - 500 руб.
      Чтобы указать минимальный вес заказа, оставьте значение пустым:
      3:,5:300,7:400,10:500
      в данном случае, заказ весом до 3 кг не доставляется, максимальный вес в данном случае 10 кг.
       
      Указывайте вес товаров в единицах, выбранных в настройках (Система / Настройки / Локализация / Вес). Без веса товара стоимость доставки не рассчитывается.
       
      Скидки на доставку
      Есть возможность установить скидки на доставку или сделать ее бесплатной от определонной суммы заказа.
      Пример
      3000:0,10000:50,100000000:100
      заказ стоимостью до 3 000 руб. - нет скидки
      от 3 000 до 10 000 - скидка на доставку 50
      больше 10 000 (до 100 000 000 - любое большое число) - бесплатная доставка (скидка 100%).
       
      Установка
      Скачайте архив, подходящий под вашу версию OpenCart, OcStore и т.д. Следуйте инструкции из файла readme.txt.
       
      Демо
      Демо
      Админка
      demo / demo
       
      Лицензия
      Модуль работает по лицензии (один домен + его поддомены), выдается по запросу личным сообщением с адресом вашего сайта и темой "Лицензия Генератора доставок".
      Дополнительные лицензии на другие домены можно оплатить через Яндекс.Деньги или переводом на карту Сбербанка.
      Стоимость второй и последующих лицензий при оплате указанными способами - 400 рублей.
      Важно! Удаление или перенос лицензии на другой домен невозможно! Это уже другая лицензия, которая покупается отдельно.
       
      Обновление
      До версии 1.2
      залейте файлы из архива поверх старой версии, обновите модификатор  
      До версии 1.1
      удалите файлы, генерированные модулем для OC 2.0 - 2.2: admin/controller/shipping/progroman_shipgen{N}.php, admin/language/russian/shippnig/progroman_shipgen{N}.php, catalog/model/shipping/progroman_shipgen{N}.php для OC 2.3 и выше: admin/controller/extension/shipping/progroman_shipgen{N}.php, admin/language/ru-ru/extension/shippnig/progroman_shipgen{N}.php, catalog/model/extension/shipping/progroman_shipgen{N}.php установите новую версию модуля по инструкции
    • By progroman
      499.00 руб
      Скачать/Купить дополнение


      Генератор доставок
      Модуль добавляет любое количество служб доставки с тарифами, указанными вами.
      Позволяет настраивать тарифы, скидки на доставку, регионы и города для доставки.
      Может быть полезен, например, если у вас собственная курьерская служба, или у службы доставки нет своего api, либо он слишком сложный. Или вы хотите увеличить или наоборот уменьшить стоимость доставки для клиента. В этих случаях с помощью данного модуля вы просто вбиваете соответствующие тарифы для нужных регионов.
       
      Стоимость доставки может быть:
      - фиксированной, например, 300 руб.
      - текстом, например, "уточняйте у менеджера"
      - зависимой от веса, например: 5:300,7:400,10:500
       
      Настройка тарифов по весу
      Пример
      5:300,7:400,10:500
      заказ весом меньше или равный 5 кг будет стоить 300.00 руб., весом меньше или равный 7 кг, но больше чем 5 кг, будет стоить 400 руб., от 7 до 10 кг - 500 руб.
      Чтобы указать минимальный вес заказа, оставьте значение пустым:
      3:,5:300,7:400,10:500
      в данном случае, заказ весом до 3 кг не доставляется, максимальный вес в данном случае 10 кг.
       
      Указывайте вес товаров в единицах, выбранных в настройках (Система / Настройки / Локализация / Вес). Без веса товара стоимость доставки не рассчитывается.
       
      Скидки на доставку
      Есть возможность установить скидки на доставку или сделать ее бесплатной от определонной суммы заказа.
      Пример
      3000:0,10000:50,100000000:100
      заказ стоимостью до 3 000 руб. - нет скидки
      от 3 000 до 10 000 - скидка на доставку 50
      больше 10 000 (до 100 000 000 - любое большое число) - бесплатная доставка (скидка 100%).
       
      Установка
      Скачайте архив, подходящий под вашу версию OpenCart, OcStore и т.д. Следуйте инструкции из файла readme.txt.
       
      Демо
      Демо
      Админка
      demo / demo
       
      Лицензия
      Модуль работает по лицензии (один домен + его поддомены), выдается по запросу личным сообщением с адресом вашего сайта и темой "Лицензия Генератора доставок".
      Дополнительные лицензии на другие домены можно оплатить через Яндекс.Деньги или переводом на карту Сбербанка.
      Стоимость второй и последующих лицензий при оплате указанными способами - 400 рублей.
      Важно! Удаление или перенос лицензии на другой домен невозможно! Это уже другая лицензия, которая покупается отдельно.
       
      Обновление
      До версии 1.2
      залейте файлы из архива поверх старой версии, обновите модификатор  
      До версии 1.1
      удалите файлы, генерированные модулем для OC 2.0 - 2.2: admin/controller/shipping/progroman_shipgen{N}.php, admin/language/russian/shippnig/progroman_shipgen{N}.php, catalog/model/shipping/progroman_shipgen{N}.php для OC 2.3 и выше: admin/controller/extension/shipping/progroman_shipgen{N}.php, admin/language/ru-ru/extension/shippnig/progroman_shipgen{N}.php, catalog/model/extension/shipping/progroman_shipgen{N}.php установите новую версию модуля по инструкции Добавил progroman Добавлено 06.03.2018 Категория Доставки Системные требования ionCube PHP Loader 5 или выше, PHP 5.4 и выше Метод активации По запросу в ЛС Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет Старая цена 499  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.