Добрый день!
Вопрос интересный :)
Да, сделать можно действительно многое, в том числе и пересчет по весу. И как раз у нас сейчас на одном магазине примерно такая же задача встала, только смысл там немного другой. Мы прикручиваем агрегатор служб доставки multiship.ru/ и там обязательные параметры посылки — вес, ширина, высота и длина. То есть нам пришлось вводить эти параметры для товаров, а потом подсчитывать их сумму для всего заказа, чтобы передавать в запрос создания заказа на доставку. Вот код измененного процессора. Там вы найдете подсчет суммарных габаритов заказа. В оригинале это вот этот процессор. Он получает полную информацию по указанному заказу.
Вот здесь я писал, как переопределить add-процессор (см. заголовок «Переопределяем процессоры»). Вот этот процессор вы можете переопределить и переписать метод process(). В частности, дописать свою проверку, начиная с этой строчки. Почему именно там? Потому что при добавлении товара может выполняться два разных процессора (на добавление товара (если его еще не было) или на обновление количества этих товаров в заказе (если товар уже содержится)). Получите текущие данные заказа, вес добавляемого товара (помноженный на количество добавляемого товара) и проверьте общий вес. Если будет ошибка, вернете ее методом return $this->failure($msg);