да когда писался модуль в стандартной сборке были именно города вместо областей, а теперь по порядку:
1) насчет веса действительно такого исхода событий я не предусмотрел:
откроем файл ..\catalog\model\shipping\ems.php
после строки
$method_data = array();добавляем
$cart_weight = number_format($this->weight->convert($this->cart->getWeight(), $this->config->get('config_weight_class'), 'kg'), 1, '.', '');
строку
if ($status && ($this->config->get('ems_max_weight') >= number_format($this->cart->getWeight(), 1, '.', '') )) {заменить на
if ($status && ($this->config->get('ems_max_weight') >= $cart_weight)) {
строку
$url = 'http://emspost.ru/api/rest/?method=ems.calculate&from=city--'.$city_from.'&to=city--'.$city_to.'&weight='.number_format($this->cart->getWeight(), 1, '.', '');заменить на
$url = 'http://emspost.ru/api/rest/?method=ems.calculate&from=city--'.$city_from.'&to=city--'.$city_to.'&weight='.$cart_weight;
теперь учет веса идет не зависимо от выбранной по умолчанию "Единицы веса", разве что у Единицы веса "Килограмм" должно стоять обозначение kg (по умолчанию так и стоит).
2) по поводу города
откроем файл ..\catalog\model\shipping\ems.php (если уже закрыли)
находим
$query = $this->db->query("SELECT name FROM " . DB_PREFIX . "zone WHERE zone_id = '" . $this->config->get('config_zone_id') . "'");
$city_from = $this->transl($query->row['name']);
$query = $this->db->query("SELECT name FROM " . DB_PREFIX . "zone WHERE zone_id = '" . (int)$address['zone_id'] . "'");
$city_to = $this->transl($query->row['name']);
Заменяем на
$city_from = $this->transl('Москва'); // в настройки модуля уж не буду выносить, но тем не менее укажите город отправления вместо Москва.
$city_to = $this->transl($address['city']);
теперь расчет будет идти по полю "Город" при регистрации (главное чтоб клиенты с названием города не косячили)