Параметры заказов и количество работ по API
Максимальное количество работ, которое может быть выполнено по заказу, задается с помощью параметра:
- jobs_total - фиксированное количество работ.
Чтобы отключить ограничение на количество работ, то дополнительно необходимо указать параметр:
- jobs_unlimit - неограниченное количество работы (тип boolean).
Если указан параметр jobs_unlimit со значением "1", заказ будет выполняться, пока на балансе есть средства.
-----
Контроль выполнения заказа
Количество работ, выполненных или оставшихся для выполнения заказа, можно узнать с помощью метода advego.getOrders, указав в параметре id_order номер заказа.
В ответе система отдает следующие параметры:
- jobs_total - необходимое количество работ
- jobs_wait - количество работ, ожидающих модерации
- jobs_active - количество работ, выполняющихся исполнителями (в т. ч. на модерации у заказчика)
- jobs_available - количество работ, доступных для выполнения (еще не взятых в работу)
- jobs_accepted - количество оплаченных работ с момента запуска заказа.
- jobs_accepted_total - общее количество оплаченных по заказу работ за все время его работы (может быть несколько перезапусков заказа, из-за чего значения jobs_accepted и jobs_accepted_total станут различаться, но последний всегда только увеличивается).
Во процессе выполнения работа принимает последовательно следующие состояния:
- Выполняется (учитывается только в jobs_active)
- Выполнена, и находится на модерации у заказчика (учитывается в jobs_active и jobs_wait)
- Оплачена заказчиком (учитывается только в jobs_accepted)
Если заказчик отправляет работу на доработку, то она перестает учитываться в числе работ jobs_wait, только в jobs_active.
Таким образом, работы, ожидающие модерации, всегда учитываются в числе активных работ, пока не будут оплачены - в этот момент они учитываются только в оплаченных:
jobs_active = jobs_wait + взятые, но еще не присланные исполнителями работы.
Если в оплате работы отказано на этапе модерации заказчиком, то она перестает учитываться в числе каких-либо работ (уменьшаются на единицу счетчики jobs_active и jobs_wait и увеличивается на единицу счетчик jobs_available).
Если работа была оплачена, и по ней произведен возврат средств администрацией, то уменьшаются на единицу счетчики jobs_accepted и jobs_accepted_total, и увеличивается на единицу счетчик jobs_available.
-------
Значение jobs_available уменьшается на единицу с каждой взятой исполнителями работой.
Например, если по заказу задано 10 работ (jobs_total = 10), то сразу после запуска значение параметров будет следующим:
- jobs_total - 10
- jobs_wait - 0
- jobs_active - 0
- jobs_available - 10
- jobs_accepted - 0
- jobs_accepted_total - 0
После того, как в работу будет взяла одна работа, значения станут следующими:
- jobs_total - 10
- jobs_wait - 0
- jobs_active - 1
- jobs_available - 9
- jobs_accepted - 0
- jobs_accepted_total - 0
Таким образом, исполнители могут взять в работу еще 9 работ.
Соответственно, если по заказу из 10 доступных будет взято в работу 8 работ, значения параметров станут следующими:
- jobs_total - 10
- jobs_wait - 0
- jobs_active - 8
- jobs_available - 2
- jobs_accepted - 0
- jobs_accepted_total - 0
Если из 8 взятых работ 5 будут присланы на модерацию, значения параметров станут следующими:
- jobs_total - 10
- jobs_wait - 5
- jobs_active - 8
- jobs_available - 2
- jobs_accepted - 0
- jobs_accepted_total - 0
Можно заметить, что значение jobs_active не изменилось, так как число jobs_wait входит в jobs_active.
Если из присланных 5 работ заказчик оплатит 4 работы, значения параметров станут следующими:
- jobs_total - 10
- jobs_wait - 1
- jobs_active - 4
- jobs_available - 2
- jobs_accepted - 4
- jobs_accepted_total - 4
Итак, после оплаты 4 работ на это число увеличились два показателя: jobs_accepted и jobs_accepted_total.
Одновременно с этим на это число уменьшились jobs_wait и jobs_active.
Одна работа осталась на модерации (jobs_wait = 1), и всего активных работ осталось четыре (jobs_active = 4, из них одна на модерации, как мы помним, и три выполняются исполнителями, но еще не присланы на модерацию).
-------
В процессе выполнения заказа может понадобиться оценить, сколько работ осталось получить по заказу.
Это число можно рассчитать двумя способами:
1. Исходя из количества заданных работ (jobs_total) и оплаченных (jobs_accepted):
x = jobs_total - jobs_accepted
Например, в последнем примере:
- jobs_total - 10
- jobs_accepted - 4
Таким образом, заказчику осталось получить 10 - 4 = 6 работ.
2. Исходя из количества активных работ (jobs_active) и оставшихся доступных для выполнения (jobs_available).
x = jobs_active + jobs_available
Например, в последнем примере:
- jobs_active - 4
- jobs_available - 2
Таким образом, заказчику осталось получить 4 + 2 = 6 работ.
-------
Важно, что остановка и перезапуск заказа, пока не будут выполнены все заданные работы (jobs_total), не влияет на параметры заказа, то есть остановив заказ на 10 работ посредине выполнения, например, после оплаты 5 работ, и перезапустив его, заказчик получит еще 5 работ, так как система хранит значения jobs_accepted, а значит, и jobs_available сохранится тоже (10 - 5 = 5):
- jobs_total - 10
- jobs_wait - 0
- jobs_active - 0
- jobs_available - 5
- jobs_accepted - 5
- jobs_accepted_total - 5
И только после выполнения всех работ по заказу, их оплаты и остановки заказа следующий его запуск обнулит jobs_available, и он снова станет равен jobs_total, чтобы исполнители могли выполнить новый набор работ.
- jobs_total - 10
- jobs_wait - 0
- jobs_active - 0
- jobs_available - 10
- jobs_accepted - 0
- jobs_accepted_total - 10
Заметим, что jobs_accepted станет равен 0, чтобы система остановила заказ, как только он станет равен jobs_total:
- jobs_total - 10
- jobs_wait - 0
- jobs_active - 0
- jobs_available - 0
- jobs_accepted - 10
- jobs_accepted_total - 20
После этого заказ автоматически остановится, все заданные работы выполнены.