Необходимо создать БД в любом табличном виде, любой sql.
Основные графы:
Страна(EN/UA/RU) на трех языках
Вес с градацией 0,2/0,5/1/1,5 и так далее кг(до 100 кг)
тип документы/не документы
подрядчик(наименование)
Срок поставки в раб днях
Тариф
Топливный сбор(если применяется)(отдельная ячейка для каждого подрядчика в шапке таблицы. В идеале парить их с оф сайтов подрядчиков. Таких сайтов несколько DHL.com и ups.com Fedex.com. ссылки для Парсинга предоставлю дополнительно
Стоимость без НДС или с НДС
в каждой стране мы должны зарезервировать дополнительную ячейку для каждого подрядчика чтобы можно было внести номер или наименование зоны.
У всех подрядчиков страны(220 стран примерно) делятся на 6-10 групп(по цене). У каждого подрядчика одна и та же страна может быть в разных ценовых группах.
к примеру:
Germany
UPS - Zone 2
DHL - Zone 2
Aramex - Zone 1
Fedex Zone H
Основная идея - выбираем страну/вес/тип отправки/вводим топливный сбор
выводится стоимость с НДС и без НДС и наименование подрядчика который может оказать данную услугу.
к примеру:
Германия, документы вес 0,2 кг:
UPS 1000 грн без НДС, 1080 грн с НДС, срок доставки 2-3 дня
DHL 1500 грн без НДС, 1516 грн с НДС, срок доставки 1-2 дня
Fedex 1000 грн без НДС, 1080 грн с НДС, срок доставки 2-3 дня
таких подрядчиков может быть до 10-20 компаний. Добавлять нужно простым "плюсиком"
При этом мы вводим по каждой стране и по каждому весу стоимость в базу данных с НДС и без НДС(2 суммы) так же и выводить.
Для простоты и удобства загрузки входных данных от подрядчиков мы будем вносить стоимость по зонам. то есть если подрядчик UPS то для веса 0,2 и зоны 2 тариф составляет 1000 грн без НДС и 1100 с НДС. таким образом мы вносим по зоне 2 данные и они автоматически сохраняются во всех странах, входящих в зону 2. И так далее
Логику рассечка цены с учетом НДС и топливного сбора опишу дополнительно, но там простое умножение и сложение. простая формула
Возможны два варианта создания и синхронизации калькулятора с нашей БД
Вариант 1
service_type - тип услуги (0 - стандрат, 1 - экспресс)
country_id - ссылка на страну
weight - вес
is_parcel - 0 - документы, 1 - посылка
contragent_id - ссылка на контрагента
estimated_days_range - строка с указанием количества дней, например 3-5 - означает от 3х до 5ти дней
price - стоимость
price_without_tax - стоимость без НДС
уникальность service_type, country_id, contragent_id, weight, is_parcel
Зона не нужна так как связь контрагента и страны вынесено в отдельную таблицу, например страна Германия и контрагент ЮПС - зона 1
Вариант 2
zone_id - ссылка на зону, зона принадлежит контрагенту и содержит множество стран
service_type - тип услуги (0 - стандрат, 1 - экспресс)
weight - вес
is_parcel - 0 - документы, 1 - посылка
estimated_days_range - строка с указанием количества дней, например 3-5 - означает от 3х до 5ти дней
price - стоимость
price_without_tax - стоимость без НДС
уникальность service_type, zone_id, weight, is_parcel
Топливный сбор
contragent_id - ссылка на контрагента
amount - значение сбора
уникальность contragent_id