Денежные поля задачи
Все четыре поля рассчитаны на чтение: значения приходят из пересчёта, а не задаются оператором. Даже если какое-то значение прислать снаружи, оно будет затёрто при ближайшем пересчёте.Как считается стоимость и оплаченность
Пересчёт собирает четыре числа заново, полностью замещая прежние значения (а не прибавляя к ним):- Стоимость расходников — сумма цен всех расходников задачи. Если расходников нет, берётся ноль.
- Стоимость услуг — сумма цен всех услуг задачи. Если услуг нет, берётся ноль.
- Оплачено — сумма оплат задачи с учётом знака проводки. Приход увеличивает значение, расход (возврат денег клиенту) уменьшает его.
- Стоимость — простое сложение стоимости расходников и стоимости услуг. Оплаты в итоговую стоимость не входят.
«Оплачено» — это «сколько клиент фактически заплатил за вычетом возвратов». Оплата на 1000 и возврат на 500 дают «оплачено» = 500. Если возвраты превышают приход, значение может стать отрицательным — это корректно отражает, что деньги ушли назад клиенту.
Итоговая стоимость задачи складывается только из расходников и услуг. Ни направление операции, ни статус оплаты, ни фактически оплаченная сумма на стоимость не влияют — стоимость это «сколько работа стоит», а «оплачено» это отдельное число «сколько денег прошло».
Когда запускается пересчёт
Пересчёт стоимости выполняется автоматически при каждом сохранении ремонтной задачи, а также при любом добавлении, изменении или удалении привязанного к ней расходника или услуги. Оплаты пересчёт не запускают сами по себе на этой стороне — их влияние подхватывается при следующем сохранении задачи или изменении её состава (создание оплаты происходит в финансовом модуле, см. ссылку выше).Короткое замыкание: пропуск лишней записи
Прежде чем что-либо записывать, пересчёт сравнивает четыре только что вычисленных числа с теми, что уже хранятся в задаче. Если все четыре совпадают — стоимость расходников, стоимость услуг, оплачено и итоговая стоимость, — пересчёт завершается, ничего не записывая в базу и не запуская пересчёт прибыли. Только если хотя бы одно из четырёх чисел изменилось, происходит одна групповая запись сразу всех четырёх полей, а затем в фоновую очередь ставится пересчёт прибыли по этой задаче.Пересчёт стоимости записывает поля напрямую, минуя обычное сохранение объекта, поэтому сам себя повторно не запускает — зацикливания не возникает. Пересчёт прибыли выполняется отдельной фоновой задачей и не блокирует сохранение задачи.
Фильтр списка задач по статусу оплаты
В списке ремонтных задач доступен вычисляемый фильтр по степени оплаченности. Это не хранимое поле: фильтр сравнивает «оплачено» с итоговой «стоимостью» прямо в запросе. Доступны четыре значения:Сводка по отфильтрованному списку
Вместе с постраничным списком задач возвращается сводка, посчитанная по всему отфильтрованному набору, а не только по видимой странице:В сводке фигурирует итоговая стоимость задач, а не оплаченность — «общая сумма» и «сумма завершённых» показывают, на какую сумму выполнено работ, а не сколько по ним фактически оплачено. Архивные задачи исключаются из «общей суммы» и из «последней задачи», но «сумма завершённых» считается строго по статусу «Завершена».
Связанные страницы
Глоссарий: Стоимость и оплаты
Полный перечень денежных полей задачи и правил их пересчёта.
Мастерская (ремонтные задачи)
Обзор модуля мастерской и переход к остальным его страницам.
Воронка и задачи
Kanban-воронки, этапы и ремонтные задачи с их статусами, порядком и агрегатами по списку.
Ресурсы и склад
Складской справочник расходников и их списание/возврат при привязке к задачам с контролем остатков.
Услуги
Привязка услуг из каталога к ремонтным задачам с тарифом, ценой и длительностью.
Метрика прибыли
Проецирование прибыли по ресурсам и услугам завершённой задачи в общую таблицу метрик.
Автосмена состояния инвентаря
Автоматический перевод инвентаря в целевое состояние при движении задачи по воронке.