Я лично вамовскими сборками не пользуюсь. Смотрю их только ради интереса или ради вот таких вот модулей типа QIWI или EMS. Но в 99% их приходится ковырять и переделывать под себя.
На счет автоматического выставления счета - это палка о двух концах, есть и плюсы и минусы, минусов больше, ИМХО.
С EMS-модулем помочь могу. Могу прямо в данной теме, могу в отдельной. Лишь бы модераторы не сочли офтопом.
Короче. Работает ээта байда через cURL, поддержка должна быть включена на хостинге.
Далее топаем в функцию quote() и правим ее, правим....
Я выделил код запроса на сервер EMS и ответа в отдельную функцию. Самый первый раз я передаю ей урл _http://emspost.ru/api/rest/?method=ems.get.locations&type=russia чтобы получить список городов и регионов России. на максимальный вес можно забить, т.к. дл России он везде одинаков, а международной доставки у меня нет. Ответ заносим в переменную
ems_zones, я до кучи юзаю кэш, который в вамовской сборке отсутствует.
Далее я получаю город по индексу (но это сугубо моя личная сборка), можно использовать город, который указал клиент, лишь бы он был указан корректно, без лишних символов, опечаток и прочих прелестей. Конвертим город в UTF-8 и ищем его в нашем массиве с регионами
ems_zones['rsp']['locations'] и сравниваем со значением в
ems_zones['rsp']['locations']['name'] предварительно преобразовав оба значения к одному регистру, например нижнему.
Если город не найден, то берем регион (у меня автоматом по индексу, но можно взять из
$order->delivery['state']. Проделываем ту же самую операцию, что и с городом. Удобнее всего вынести это в функцию. Функция при нахождении совпадения должна возвращать значение
ems_zones['rsp']['locations']['value'] - это и будет искомыый город или регион в транслите.
Далее остается только найти город отправки по аналогичному алгоритму и можно все это скармливать EMS серверу. Например так:
PHP:
$url = 'http://emspost.ru/api/rest?method=ems.calculate&from='.$from_city.'&to='.$to_city.'&weight='.$shipping_weight.'&type=att';
В итоге мы получим ответ о стоимости.
Я бы еще рекомендовал вставить такую строку
PHP:
if ($results['rsp']['stat'] != 'ok') {
$this->quotes['error'] = MODULE_SHIPPING_RUSSIANPOSTEMS_ERROR;
}
после
PHP:
if ($this->tax_class > 0) {
$this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
}
переменная $results здесь хранит ответ сервера, а MODULE_SHIPPING_RUSSIANPOSTEMS_ERROR - это Ваше сообщение об ошибке в случае неудачного расчета.
Все очень просто. Но должен предостеречь, что регион из таблицы вамовского магазина не всегда совпадают с регионами, которые возвращаются в запросе EMS, например проблему будут с Кабардой, Чечней, ХМАО, словом, всеми республиками и автономными округами. Для их использования требуется таблица соответствия названий, как и для модуля СПСР.
А вамовскую функцию make_alias() из general.php следует назамедлительно кастрировать, как вредную и мешающую нормальной работе модуля дооставки EMS!
Удачи!