Joomla Virtuemart 1: инструкция по подключению модуля доставки eDost.ru

Для работы модуля доставки интернет-магазин должен быть зарегистрирован в системе eDost.
Зарегистрировать магазин в системе eDost

Предупреждение!!!
1. Чтобы рассчитывалась доставка, у каждого товара должен быть прописан его вес.
2. Чтобы в расчете доставки учитывались габариты посылки, у каждого товара должны
быть прописаны его размеры (длина, ширина, высота).
3. Обязательно задайте компании, через которые будет производиться расчет доставки
личном кабинете eDost в настройках магазина).

Разделы:


1. Установка модуля eDost
2. Настройка модуля eDost
3. Установка списка местоположений (городов и регионов)
4. Вес и габариты
5. Изменение названий тарифов
6. Наложенный платеж
7. PickPoint (постаматы и пункты выдачи)
8. Изменение списка стран

Порядок подключения модуля

1. Установка модуля eDost

В личном кабинете eDost в настройках магазина скачайте архив с модулем и загрузите его через админку магазина:

2. Настройка модуля eDost

а) зайдите в настройки модуля eDost:

Скопируйте из настроек магазина в личном кабинете eDost идентификатор и пароль:

б) включите

Модуль доставки eDost.ru

:

в) отключите параметр "Требуется" для поля

country

и

state

:

3. Установка списка местоположений (городов и регионов)

Для корректной работы калькулятора доставки необходимо установить список местоположений, соответствующий стандарту системы eDost.

Отредактируйте на сервере магазина файл administrator/components/com_virtuemart/classes/

ps_userfield.php



Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить!


Автоматическое исправление:

Если у вас магазин версии

VirtueMart_1.1.7

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


Ручное исправление:

Файл

ps_userfield.php

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


Вставьте в файл код, выделенный

зеленым

:


...
...
    if( $startForm ) {
      echo '<form action="'. $mm_action_url .basename($_SERVER['PHP_SELF']) .'" method="post" name="adminForm">';
    }
    echo '
    <div style="width:90%;">';

    if( !empty( $required_fields )) {
      echo '<div style="padding:5px;text-align:center;"><strong>(* = '.$VM_LANG->_('CMN_REQUIRED').')</strong></div>';

    }
    $delimiter = 0;


/* ==================== edost НАЧАЛО */
    echo '<script type="text/javascript" src="'.IMAGEURL.'ps_image/delivery_img/address.js"></script>';
/* ==================== edost КОНЕЦ */



     foreach( $rowFields as $field) {
       if( !isset( $default[$field->name] )) {
         $default[$field->name] = $field->default;
       }

...
...
...

         echo '<fieldset>
         <legend class="sectiontableheader">'.$field->title.'</legend>
';
         $delimiter++;
         continue;
       }


/* ==================== edost НАЧАЛО */
      if ($field->name == 'country' || $field->name == 'state') continue;
      if ($field->name == 'city') {
          $edost_city = $db->sf('city', true, false) ? $db->sf('city', true, false) : '';

         $labelClass = stristr($missing, $field->name) ? ' class="formLabel missing"' : ' class="formLabel"';
         $labelRequired = isset($required_fields[$field->name]) ? '<strong>* </strong>' : '';

          echo "\n" . '    <div id="edost_country" style="display: none;">' . "\n";
          echo '      <div id="edost_country_div"'.$labelClass.'>Страна'.$labelRequired.'</div>' . "\n";
          echo '      <div class="formField">' . "\n";
          echo '        <span id="edost_country_list"></span>' . "\n";
          echo '      </div>' . "\n";
          echo '    </div>' . "\n";

          echo '    <div id="edost_region" style="display: none;">' . "\n";
          echo '      <div id="edost_region_div"'.$labelClass.'>Регион'.$labelRequired.'</div>' . "\n";
          echo '      <div class="formField">' . "\n";
          echo '        <span id="edost_region_list"></span>' . "\n";
          echo '      </div>' . "\n";
          echo '    </div>' . "\n";

          echo '    <div id="edost_city" style="display: none;">' . "\n";
          echo '      <div id="edost_city_div"'.$labelClass.'>Город'.$labelRequired.'</div>' . "\n";
          echo '      <div class="formField">' . "\n";
          echo '        <span id="edost_city_list"></span>' . "\n";
          echo '        <input type="hidden" id="city_field" name="city" value="'.$edost_city.'">' . "\n";
          echo '        <input type="hidden" id="country_field" name="country" value="RUS">' . "\n";
          echo '      </div>' . "\n";
          echo '    </div>' . "\n";

         echo '<br />
         <br style="clear:both;" />';

       continue;
       }
/* ==================== edost КОНЕЦ */



       echo '<div id="'.$field->name.'_div" class="formLabel';
       if (stristr($missing,$field->name)) {
         echo ' missing';
       }

...
...
...

       if( $field->description != '') {
         echo vmToolTip( $field->description );
       }
       echo '<br /></div>
         <br style="clear:both;" />';
   }
    if( $delimiter > 0) {
      echo "</fieldset>\n";
    }
   echo '</div>';


/* ==================== edost НАЧАЛО */
echo'
<script type="text/javascript">
  edost_CreateCountry("'.(isset($edost_city) ? $edost_city : '').'");
</script>
';
/* ==================== edost КОНЕЦ */



   if( VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION') {
       echo '<script type="text/javascript">
       //<![CDATA[
     function showFields( show, fields ) {

...
...
...

echo '
<script language="javascript" type="text/javascript">//<![CDATA[
function '.$functioname.'() {
var form = document.'.$formname.';
var r = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-]", "i");
var isvalid = true;
var required_fields = new Array(\''. $field_list.'\');
  for (var i=0; i < required_fields.length; i++) {
formelement = eval( \'form.\' + required_fields[i] );
';
  echo "


// ==================== edost НАЧАЛО
                    if (required_fields[i] == 'city') {
                      if (document.getElementById('city_field').value == '') var s = 'formLabel missing'; else var s = 'formLabel';

                      document.getElementById('edost_country_div').className = s;
                      document.getElementById('edost_region_div').className = s;
                      document.getElementById('edost_city_div').className = s;

                      continue;
                    }
// ==================== edost КОНЕЦ



if( !formelement ) {
formelement = document.getElementById( required_fields[i]+'_field0' );
var loopIds = true;
}
...
...

4. Вес и габариты

Вес и габариты задаются в параметрах товара - закладка

Габариты и вес

:

Вес необходимо указывать в кг.

Габариты можно указывать в метрах, дециметрах, сантиметрах или миллиметрах.

Чтобы габариты учитывались в расчетах, необходимо в личном кабинете eDost в настройках магазина в поле Габариты (длина, ширина, высота) посылки: выбрать единицу измерения габаритов (

метры

,

дециметры

,

сантиметры

,

миллиметры

) и поставить галочку в

Учитывать в расчетах габариты посылки

.

5. Изменение названий тарифов

Изменить базовые названия тарифов на любые другие можно на сервере магазина в файле модуля:
administrator/components/com_virtuemart/classes/shipping/

edost.php



Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить.



...
...
define("EDOST_PAGE", 'edost_calc_kln.php');
define("EDOST_ADR", 'http://www.edost.ru/edost_calc_kln.php');

class edost {

//Названия компании и тарифа БЕЗ СТРАХОВКИ (если не задано, то берется с сервера edost.ru)
var $ntarif = array(

1 => array('

новое название компании

', '

новое название тарифа

'), //Почта России (отправление 1-го класса)
2 => array('',''), //Почта России (наземная посылка)
3 => array('',''), //EMS Почта России
...
...
...

);

//Названия компании и тарифа СО СТРАХОВКОЙ (если не задано, то берется с сервера edost.ru)
var $ntarif_s = array(

1 => array('

новое название компании

', '

новое название тарифа

'), //Почта России (отправление 1-го класса)
2 => array('',''), //Почта России (наземная посылка)
3 => array('',''), //EMS Почта России
...
...
...

);

function list_rates( &$d ) {
global $weight_total, $total, $CURRENCY_DISPLAY, $vmLogger;
...
...

6. Наложенный платеж

Наложенный платеж - это способ оплаты за заказ наличными в момент вручения (например, оплата в почтовом отделении при получении посылки, или оплата при самовывозе со склада магазина).

Для работы системы наложенного платежа, необходимо задать параметры в настройках наложенного платежа в личном кабинете eDost в настройках магазина (внизу страницы).

а) включите модуль

Наложенный платеж

(код EDOSTCD):

б) чтобы при выборе способа оплаты

Наложенный платеж

покупатель сразу видел все сопутствующие наценки, необходимо внести изменения на сервере магазина в файле:
administrator/components/com_virtuemart/classes/

ps_payment_method.php



Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить!


Автоматическое исправление:

Если у вас магазин версии

VirtueMart_1.1.5-COMPLETE_PACKAGE.j15

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


Ручное исправление (

зеленый

- вставить,

красный

- удалить):


...
...
$db->next_record();
$default_shopper_group_id = $db->f("shopper_group_id");

$q = "SELECT payment_method_id,payment_method_discount, payment_method_discount_is_percent, payment_method_name from #__{vm}_payment_method WHERE ";


//==================== edost НАЧАЛО
$q = "SELECT payment_method_code, payment_method_id,payment_method_discount, payment_method_discount_is_percent, payment_method_name from #__{vm}_payment_method WHERE ";
//==================== edost КОНЕЦ



$q .= "(enable_processor='$selector') AND ";
$q .= "payment_enabled='Y' AND ";
$q .= "vendor_id='$ps_vendor_id' AND ";

if ($auth["shopper_group_id"] == $default_shopper_group_id) {
$q .= "shopper_group_id='$default_shopper_group_id' ";
} else {
$q .= "(shopper_group_id='$default_shopper_group_id' ";
$q .= "OR shopper_group_id='".$auth["shopper_group_id"]."') ";
}

$q .= "ORDER BY list_order";
$db->query($q);
$has_result = false;
// Start radio list
while ($db->next_record()) {



//==================== edost НАЧАЛО
//извлекаем стоимость доставки
$is_arr = explode("|",urldecode($GLOBALS['vars']['shipping_rate_id']));
$tariff_id = 0;
if ( isset($is_arr[4]) ) $tariff_id = intval($is_arr[4]);

$cur_id_shipping = ( isset($is_arr[0]) )? $is_arr[0]:''; //standard_shipping

$pricecash = -1;
$transfer = 0;
$cur_pickpoint = false;
$cur_edost_courier = false;
$edost_pay = ($db->f("payment_method_code") == 'EDOSTCD') ? true : false;

if ( $cur_id_shipping == 'edost' ) {
if ( isset($_SESSION['edost_calc']['pricecash'.$tariff_id]) ) $pricecash = $_SESSION['edost_calc']['pricecash'.$tariff_id];
if ( isset($_SESSION['edost_calc']['transfer'.$tariff_id]) ) $transfer = $_SESSION['edost_calc']['transfer'.$tariff_id];

if ( isset($_SESSION['edost_calc']['id'.$tariff_id]) ) {
$edost_id = $_SESSION['edost_calc']['id'.$tariff_id];
$cur_edost_courier = ( ($edost_id >= 31) and ($edost_id <= 35) and $edost_pay ) ? true : false;
$cur_pickpoint = ( ($edost_id == 29) and $edost_pay ) ? true : false;
}
}

//не показываем Наложенный платеж, т.к. эта компания не работает с наложкой
if ( $edost_pay and ($pricecash < 0) ) continue;

if ($pricecash > 0) $shipping_price = $pricecash - $is_arr[3];
else $shipping_price = 0;
//==================== edost КОНЕЦ



$has_result = true;
echo "<input type=\"radio\" name=\"payment_method_id\" id=\"".$db->f("payment_method_name")."\" value=\"".$db->f("payment_method_id")."\" ";
if( $selector == "' OR enable_processor='Y" ) {
echo "onchange=\"javascript: changeCreditCardList();\" ";
}
if ((($db->f("payment_method_id") == $payment_method_id) || $db->num_rows() < 2) && !@$GLOBALS['payment_selected']) {
echo "checked=\"checked\" />\n";
$GLOBALS['payment_selected'] = true;
}
else
echo "/>\n";
$discount = $ps_checkout->get_payment_discount( $db->f("payment_method_id") );


// ==================== УДАЛИТЬ НАЧАЛО
echo "<label for=\"".$db->f("payment_method_name")."\">".$db->f("payment_method_name");
// ==================== УДАЛИТЬ КОНЕЦ


//==================== edost НАЧАЛО
//если код оплаты Наложка от edost, то добавляем строки о сумме доплаты

echo "<label for=\"".$db->f("payment_method_name")."\">";
$str_edost_pay = $db->f("payment_method_name");

if ($cur_pickpoint) {
$edost_addrdelivery = '';
if ( !empty($_SESSION['pickpoint_id']) ) $edost_addrdelivery = trim($_SESSION['pickpoint_id']);

if ( substr($edost_addrdelivery,0,6) == 'Пос' )
$str_edost_pay = 'Оплата наличными или банковской картой при получении заказа в постамате';
else
$str_edost_pay = 'Оплата наличными при получении заказа в пункте выдачи';
}

if ( $cur_edost_courier ) {
$str_edost_pay = 'Оплата наличными при получении заказа';
}

echo $str_edost_pay;

if ($edost_pay) {
//показываем сумму которую клиенту необходимо оплатить на почте
//показываем сумму на которую увеличится доставка при выборе наложенного платежа

echo ($shipping_price == 0) ? '' : "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Стоимость доставки увеличится на <b>".$CURRENCY_DISPLAY->getFullValue($shipping_price)."</b>";

if ( $transfer > 0 ) {
echo "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#FF0000\">+ доплатить при получении за денежный перевод: <b>".$CURRENCY_DISPLAY->getFullValue($transfer)."</b></font>";
echo "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Итого переплата за наложенный платеж: <b>".$CURRENCY_DISPLAY->getFullValue($transfer+$shipping_price)."</b>";
}
echo "<br />";
}
else
//==================== edost КОНЕЦ



if ($discount > 0.00) {
echo " (- ".$CURRENCY_DISPLAY->getFullValue(abs($discount)).") \n";
}
elseif ($discount < 0.00) {
echo " (+ ".$CURRENCY_DISPLAY->getFullValue(abs($discount)).") \n";
}
echo "</label>";
...
...

в) по умолчанию в магазине наценка за наложенный платеж называется

Плата

- изменить это название можно на сервере магазина в файле administrator/components/com_virtuemart/languages/common/

russian.php



для этого необходимо найти в этом файле строку:
'PHPSHOP_FEE' => 'Плата',

и заменить ее на строку:
'PHPSHOP_FEE' => 'Доплата за доставку посылки наложенным платежом',

г) отображение модуля

Наложенный платеж

в заказе:



Стоимость доставки увеличится на - это наценка на доставку за наложенный платеж - в заказе отображается отдельной строкой и прибавляется к итоговой стоимости заказа.

+ доплатить при получении за денежный перевод

- это сумма, которую дополнительно оплачивает получатель службе доставки в момент вручения за перевод денежных средств отправителю (помимо стоимости заказа).

Пример:
1. Цена товара: 1000 руб.
2. Цена доставки: 100 руб.
3. Наценка на доставку за наложенный платеж: 214.18 руб.
Итоговая стоимость заказа: 1314.18 руб.

Продавец:
1. Оплачивает доставку 314.18 руб. = 100 руб. (цена доставки) + 214.18 руб. (наценка на доставку за наложенный платеж)
2. Указывает в бланке сумму наложенного платежа равную стоимости заказа: 1314.18 руб.

Покупатель:
1. При получении посылки оплачивает 1556.5 руб. = 1314.18 руб. (стоимость заказа) + 242.32 руб. (службе доставки за услугу по переводу денежных средств).

В итоге покупателю обойдется заказ на 456.5 руб. дороже, по сравнению с покупкой без наложенного платежа.

7. PickPoint (постаматы и пункты выдачи)

PickPoint – это сеть постаматов и пунктов выдачи, в которых можно самостоятельно забирать и оплачивать товары, заказанные в интернет-магазинах.

Чтобы покупатели могли выбирать точку выдачи сразу при оформлении заказа, в магазине необходимо установить виджет PickPoint (виджет представляет собой карту с метками постаматов и пунктов выдачи).

а) включите виджет PickPoint в админке магазина в настройках модуля eDost (2-й пункт инструкции)

б) для работы виджета необходимо выполнить 6-й пункт инструкции

в) отредактируйте файл на сервере магазина:
components/com_virtuemart/themes/default/templates/checkout/

get_final_confirmation.tpl.php



Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить.

Автоматическое исправление:

Если у вас магазин версии

VirtueMart_1.1.5-COMPLETE_PACKAGE.j15

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


Ручное исправление (вставьте в файл код, выделенный

зеленым

):

...
...
$q = "SELECT * FROM #__{vm}_state WHERE country_id=".(int)$country_id." AND state_2_code='".$db->f("state")."'";
$dbs->query($q);
$state_name = $dbs->f("state_name");


//==================== edost НАЧАЛО (PickPoint)
$rate_details = explode( "|", $shipping_rate_id );
if ( !empty($_SESSION['pickpoint_id']) ) echo $_SESSION['pickpoint_id'];
else
//==================== edost КОНЕЦ (PickPoint)



echo vmFormatAddress( array('name' => $db->f("first_name")." ".$db->f("last_name"),
'address_1' => $db->f("address_1"),
...
...

г) отредактируйте файл на сервере магазина:
administrator/components/com_virtuemart/classes/

ps_checkout.php



Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить.

Автоматическое исправление:

Если у вас магазин версии

VirtueMart_1.1.5-COMPLETE_PACKAGE.j15

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


Ручное исправление (вставьте в файл код, выделенный

зеленым

):

...
...
case 'CHECK_OUT_GET_SHIPPING_ADDR' :
// The User has choosen a Shipping address
if (empty($d["ship_to_info_id"])) {
$vmLogger->err( $VM_LANG->_('PHPSHOP_CHECKOUT_ERR_NO_SHIPTO',false) );
unset( $_POST['checkout_this_step']);
return False;
}
break;

case 'CHECK_OUT_GET_SHIPPING_METHOD':
// The User has choosen a Shipping method


//==================== edost НАЧАЛО (PickPoint)
$_SESSION['pickpoint_id'] = $_REQUEST['pickpoint_id'];
//==================== edost КОНЕЦ (PickPoint)



if (!$this->validate_shipping_method($d)) {
unset( $_POST['checkout_this_step']);
return false;
}

...
...
...

// Get the IP Address
if (!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
else {
$ip = 'unknown';
}


//==================== edost НАЧАЛО (PickPoint)
if (!empty($_SESSION['pickpoint_id']))
$_POST['customer_note'] .= $_SESSION['pickpoint_id'];
//==================== edost КОНЕЦ (PickPoint)



// Collect all fields and values to store them!
$fields = array(
'user_id' => $auth["user_id"],
'vendor_id' => $ps_vendor_id,
...
...

8. Изменение списка стран

Изменить список стран можно в скрипте генерации адреса доставки:
components/com_virtuemart/shop_image/ps_image/delivery_img/

address.js



//  var edost_country = new Array("Россия");

// доставка только по России


//  var edost_country = new Array("Россия", "Беларусь", "Казахстан", "Украина");
var edost_country = new Array("Россия", "Австралия", "Австрия" ... "Ямайка", "Япония");

// весь список



var edost_region = new Array(["Москва", 0], ["Санкт-Петербург", 0], ["Центральный округ", -1], ...
...
...

info@edost.ru

© ООО "Айсден", 2006-2012. Все права защищены.