Что не давало сайту интернет-магазина правильно отображать остаток товаров
О клиенте
Клиент владеет интернет-магазином, продающим электротовары и осветительную технику. Магазин работает с брендами — производителями и поставщиками продукции. Бренды держат информацию о товарах на виртуальных обновляемых складах, откуда сайт клиента подгружает её себе в виде .xml-файла.
Проблема
Когда на складе у некоторых поставщиков кончался товар, в формируемом .xml-файле напротив этого товара ставился знак 0. Но на сайте клиента всё ещё было указано прежнее количество товаров.
Если утрировать, то сайт клиента не понимал ноля.
Изучая проблему, мы увидели, что сайт написан очень плохим кастомным кодом, который можно было бы реализовать Drupal-модулями. Задача кода — отрабатывать импорт товаров и разного рода проверки. Он писался постепенно: приходит новый поставщик — пишется код, причём не всегда похожий на код для другого поставщика. Этот код копился и дублировал друг друга, и в итоге логики работы поставщиков пересекались.
Решение
Когда сайт клиента делал запрос к базе данных, поиск шёл по неправильным полям. В базе есть поля с id-номерами товаров и идентификаторами поставщика. Также в запрос была вставлена логика запроса из 1С, в чей склад тоже подгружаются данные о товарах из .xml-файлов поставщиков. В итоге данные со склада поставщика и склада 1С перемешиваются, и запрос идёт некорректно.
Поставщики не обрабатывались, потому что поиск по ним шёл не по полю с идентификатором поставщика, а по полю с алиасом (именем поставщика, указанном в ссылке в браузере), который у поставщика со временем мог измениться. По этой причине запрос формировался неправильно, но мы его исправили, добавив в него префикс поставщика.
Следом нашлась другая проблема: функция проверки изменений на складе не работала правильно — она всегда считывала какие-то изменения и в любом случае запускала новый импорт. Функция не работала из-за устаревшего кода, в который залезали только когда что-нибудь сломается. Поэтому мы заменили устаревшую функцию на новую, которая учитывает свежие версии Drupal и PHP.
Итоги
Хотя мы всегда склоняемся к тому, что на дальней дистанции поддерживаемые модули лучше кастомного кода, мы исправили всё так, как того пожелал клиент. Дальнейшей поддержкой и развитием занимается его команда.