sedovalx / taxi

6 stars 3 forks source link

Динамический расчет состояния кассового и расчетного счетов #60

Closed sedovalx closed 9 years ago

sedovalx commented 9 years ago

Хранить состояние счетов в БД чревато сложностями с синхронизацией истории пополнений и списаний с текущим состоянием. Скажем, если админ редактирует платежи или расходы, то состояния счетов тоже нужно корректировать, а это далеко не всегда очевидное занятие.

Поэтому лучше все рассчитывать налету. Для этого сделаем следующее допущение - деньги из кассы на карман всегда забираются полностью. В этом случае мы можем в отдельной таблице checkpoint хранить только дату перевода всех средств из кассы в карман.

Тогда расчет денег в кассе сведется к вычислению суммы по всем платежам, выполненным после даты последнего чекпойнта. Довольно просто.

Сумма денег на кармане вычисляется немного сложнее, т.к. она может накапливаться от чекпоинта к чекпоинту. Но вообще - это сумма всех платежей с начала времен до даты последнего чекпоинта включительно минус сумма всех расходов с начала времен до текущего момента. Вроде бы тоже несложно.

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

sedovalx commented 9 years ago

@hodkoff2 @Argelein что думаете?

sedovalx commented 9 years ago

Является альтернативой #58

hodkovdd commented 9 years ago

@sedovalx @Argelein Говорил с заказчиком - идея со счетами одобрена:

  1. Деньги из кассы в карман переводятся всегда полностью (ничего не оставляет никогда)
  2. Расходы из кассы редко но бывают (возврат залога уволившимся, предется учитывать, мне пришел в голову отрицательный платеж)
sedovalx commented 9 years ago

@hodkoff2 расходы из кассы всегда привязаны к какой-то аренде?

kirzas commented 9 years ago

@sedovalx @hodkoff2 Окей. Тогда нужен объект Checkpoint, в котором хранится только дата. Платежи созданные этой датой и ранее, редактировать нельзя. Баланс считается исходя из того, что все, что попадает до чекпоинта, включая дату чекпоинта забирается из кассы.

Что касается отрицательного платежа, то payments и expenses можно объединить в один класс вообще, но предлагаю от этого отказаться в первом релизе по крайней мере.

sedovalx commented 9 years ago

@Argelein да, все так. Расходы и доходы пока оставим отдельными сущностями.

kirzas commented 9 years ago

@sedovalx @hodkoff2 Я тут подумал, что штраф может прийти сильно позже фактического нарушения. Это значит, что штраф придется вешать на закрытую аренду, что сейчас невозможно.

sedovalx commented 9 years ago

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

sedovalx commented 9 years ago

Кажется, старая задача, и обсуждение уже неактуально. Закрываю.