Доработка сайта на YII2

Станислав18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
24.04.2017

Имеется web-сервис, разработанный на YII2. Сервис представляет собой аукцион купли-продажи заявок на оказание услуг. В настоящее время поступающие в базу данных заявки выкладываются на аукцион, где покупатели могут их приобрести. Мне необходимо изменить логику приложения, добавив функционал автоматического распределения заявок между покупателями. Для этого покупателям и продавцам в настройки следует добавить переключатель возможности участия в автоматическом аукционе.

1. При включении данной настройки «Участвовать в автоматическом аукционе» (чекбокс, по умолчанию включен, у ранее зарегистрированных покупателей выключен) покупателем, он получает возможность указать:

1.1. цену, по которой готов выкупать лиды (заявки) (цена по Москве и области не может быть ниже 150 руб. и выше 700 руб., по СПБ — не ниже 100 и не выше 500 руб., по иным регионам не ниже 30 и не выше 300 руб. Настройки этих ограничений определяются в админке для каждого направления. Заданная в админке минимальная и максимальная цена выводятся справочно под формой ввода этой настройки покупателем: «Рекомендованная цена от … до … руб.».

1.2. количество лидов, которое он готов выкупать в день;

1.3. время выкупа заявок по МСК (например, если он работает с 9 до 18 часов, то ему не интересны заявки, поступающие ночью).

После указания цены и количества, покупателю автоматически начинают поступать лиды по его региону от продавцов, включивших функцию участия в автоматическом аукционе, в пределах свободной суммы, имеющейся на лицевом счету покупателя.

2. При отправке покупателю каждого лида, на его счете в холд списывается стоимость этого лида, а лид не выставляется на общий аукцион и попадает только к одному покупателю. Дальнейшие действия с лидом (возврат и т. п.) - согласно существующей схеме, однако в этом режиме покупатель имеет возможность в течение дня вернуть только 30% (настраивается в админке) поступивших лидов. То есть к примеру, если покупатель в настройках указал получение 100 лидов в день И денег на его счете хватает на это количество лидов, то он может вернуть 30 лидов из поступивших (также, должно учитываться и само количество поступивших лидов — если, несмотря на желание купить 100 лидов, система смогла предоставить только 10, то возврат рассчитывается от предоставленных). Если же денег на его счете хватает только на 10 лидов, то он и получит 10 лидов, а вернуть сможет 3 из них. Если же на момент заказа 100 лидов денег было на 10 лидов, но баланс покупатель пополнил, то пересчитываем и возможный процент возвратов (если пополнил до 100 лидов, то вернуть сможет 30, а если только до 50 — то 15 лидов).

3. При поступлении лида в систему на автоматический аукцион, он передается тому покупателю, который указал большую стоимость выкупа (проверяется каждый раз при распределении лида) с учетом времени приема заявок покупателем (т. е., заявки должны поступать покупателю только в то время, которое он указал в настройках). При равной стоимости, указанной несколькими покупателями, лиды между ними распределяются рандомно.

4. Если достигнуто установленное покупателем суточное ограничение по количеству выкупаемых лидов, или на его счете заканчиваются средства, или заканчивается указанный им суточный период приема заявок, то лиды ему не поступают.

5. При включении данной функции, у покупателя появляется дополнительное основание к возврату заявки — «Брак по прочим основаниям».

6. При включении настройки «Участвовать в автоматическом аукционе» (чекбокс, по умолчанию включен, у ранее зарегистрированных покупателей выключен) продавцом — поступающие от него лиды перестают попадать на обычный аукцион, а идут на распределение через автоматический аукцион в вышеуказанном порядке.

7. Не выкупленные в автоматическом аукционе лиды поступают на обычный аукцион в общем порядке.

Заявки фрилансеров