Ранее уже приводил пример простого калькулятора на JavaScript, теперь вот пример посложнее.
Калькулятор требовался для автоматизации работы отдела продаж натяжных потолков. Алгоритм вычисления стоимости оказался весьма запутанным с большим числом зависимостей между параметрами. Кроме параметров самих потолков существовала ещё система скидок, которая переплетала промежуточные и конечные результаты вычислений.
К моменту постановки задачи вычисление стоимости набора потолков для одного клиента могло занимать до получаса. Во-первых, это сильно тормозило работу отдела продаж. Вторым негативным фактором была большая вероятность появления ошибок в ручных вычислениях, что позднее влияло на лояльность со стороны клиентов. Наконец, было очень тяжело обучить нового сотрудника особенностям вычислений и исключениям из правил.
Технических требований практически не было изначально. Точнее было мнение заказчика, что неплохо бы это всё реализовать в Excel'е.
Я предложил вариант веб-версии калькулятора. В результате можно было избежать зависимостей от конкретных версий Excel'я, сложностей установки на все компьютеры, поддержки актуальных обновлений программной части, а так же легко реализовать единый массив посчитанных вариантов, который всем доступен.
Все вычисления было решено проводить на фронтенде JavaScropt'ом — это с одной стороны давало возможность получать результат моментально, без отправки всего массива данных на сервер и анализа ответа; с другой стороны это позволяло немного проще всем управлять, когда будут менять алгоритмы работы калькулятора.
В качестве интерфейса был выбран Bootstrap, что позволило вообще не задумываться о дизайне отдельных элементов интерфейса, а полностью сконцентрироваться на программной части.
Итоговый вид калькулятора получился таким.
Исходные проблемы были устранены. Теперь требовалось только внести нужные цифры — все вычисления происходили сразу. Сотруднику отдела продаж не нужно было досконально разбираться в особенностях алгоритма. Для упрощения работы новым сотрудникам по каждому параметру были вынесены достаточно подробные всплывающие описания с упоминанием особенностей и исключений.
Pабочая интерактивная версия калькулятора натяжных потолков.
В расчёте может быть несколько потолков, например для кухни, гостиной, ванной комнаты. Потолки могут быть двух типов: ПВХ и тканевый. Для обоих типов было много общего в вычислении стоимости.
В результате был реализован класс потолка, хранящий состояние и выполняющий вычисления, одинаковые для обоих потолков. Для обоих типов потолков реализовывались классы, наследуемые от этого общего класса потолка, позволяющие отразить особенности каждого типа.
Помимо прочего была разработана процедура экспорта в Excel итоговой сметы по набору потолков.