Вычисление стоимости аренды по коэффициентам в программе Автопрокат

Вычисление стоимости аренды по коэффициентам

В автопрокатах часто используют систему тарифов, когда тариф аренды зависит от "сезона" и от вида страховки. Именно для этого в программе "Автопрокат" имеются "Тарифные планы". Но хочется автоматизировать эту систему тарифов чтобы тарифный план не выбирался вручную сотрудником, оформляющим заказ.
 
Можно было бы сделать в программе "Тарифный план по умолчанию" и переключать его в настройках программы в зависимости от текущего сезона. Но это бы работало не очень четко и не полностью автоматически. Пусть, например, в марте один тариф, а в апреле другой. И в марте клиент бронирует автомобиль на какие-то даты в апреле. Если сотрудник автопроката не исправит тариф, то автоматически ему поставится "мартовский" тариф.
А может быть заявка на несколько дней в марте и несколько в апреле. Какой при этом должен быть тариф? Есть еще праздничные дни и даже выходные, в которые тоже хочется применить другой тариф!

Недавно для одного из наших клиентов мы реализовали (в 10-й версии программы) новую тарифную систему, которая учитывает все эти потребности (и даже больше). Там тарифы зависят еще от Фирмы (филиала) и от Класса автомобиля. Вот краткое описание этой системы...

Тариф вычисляется для каждого дня аренды примерно так:

Тариф дня = Базовый тариф * Коэффициент сезонности * Коэффициент скидки * Тарифный коэффициент
 
Базовый тариф - задается для каждого автомобиля в окне "Автомобиль"
 
Коэффициент сезонности - задается таблицей из 365 записей для каждого дня года. Это позволяет иметь разные тарифы для нескольких "сезонов", а также особые тарифы в праздники и выходные дни. Этот коэффициент зависит еще от Фирмы и от Класса автомобиля.
 
Коэффициент скидки - Определяет зависимость тарифа от числа дней аренды. Задается таблицей из 30 записей для числа дней аренды от 1 до 30. Если срок аренды больше 30-и дней, то используется коэффициент 30-го дня. Этот коэффициент зависит еще от Фирмы.
 
Тарифный коэффициент - Задается в окне "Вид договора". Он нужен для того чтобы иметь разные тарифы для договоров с разными видами страховки.
 
Стоимость аренды по договору определяется как сумма всех Тарифов дня (по всем дням аренды).
 
Система на первый взгляд кажется довольно сложной, но она уже сделана, работает и свои функции успешно выполняет. Возможно у вас она будет немного проще, если у вас только одна Фирма. Может быть у вас нет зависимости от Класса автомобиля или Вида договора (вида страховки).
 
----
Выше приведено упрощенное описание алгоритма вычисления стоимости. На самом деле стоимость аренды вычисляется немного сложнее. А именно:

Сначала для каждого дня аренды вычисляется тариф так: 

Тариф дня = Базовый тариф * Коэффициент сезонности * Коэффициент скидки 
 
Все тарифы дня суммируются за все дни проката и делятся на число дней проката. Таким образом вычисляется средний тариф договора за все дни.  Затем этот средний тариф округляется до 100 руб.
 
После этого тариф умножается на "Тарифный коэффициент" (зависящий от Вида договора) и результат округляется до 1 руб.
 
Этот средний тариф договора виден в поле "Тариф" в окне "Договор". Для вычисления стоимости за аренду он умножается на число дней проката.
 
-----
Прилагаю скриншоты, чтобы Вы увидели реальные значения этих коэффициентов и как они настраиваются в программе.
 
1. Настройка Коэффициента сезонности и Коэффициента скидки в окне "Фирма":
 
 
Коэффициент сезонности можно быстро заполнять путем импорта из Excel и при помощи нескольких полей расположенных правее таблицы этого коэффициента. В них нужно задать период "сезона", коэффициент для рабочих дней, коэффициент для выходных дней и нажать кнопку "Установить". В результате все даты этого сезона заполняются заданными коэффициентами.
 
2. Коэффициент вида договора:
 


Недостатки у такой тарифной системы я вижу такие:

1. Трудоемкость заполнения таблиц коэффициентов. Хотя, при помощи имеющихся в программе средств быстрого заполнения это занимает всего несколько минут :)
Нужно иметь в виду, что если использовать отдельный коэффициент для выходных дней, то эту таблицу нужно заполнять для КАЖДОГО ГОДА. Потому что выходные бывают каждый год в разные дни.

2. Нельзя предоставить клиентам информацию о тарифах на сайте в виде наглядной таблицы тарифов. Хотя в форме заявки на сайте можно сделать вычисление стоимости по этому алгоритму чтобы показать стоимость заявки клиенту.