@Bunzuk

Django как правильно реализовать хранение и получение остатков?

Доброго всем дня или вечера.
Я новичок в django - по этому нуждаюсь в "пинке" от профессионалов). Есть задача реализовать систему начисления платы за детский садик. Проблема в правильной реализации хранении и получении остатков по ребенку или списку детей.
Модели:
1. Child
2. Document (тип документа: Начисление, Оплата)
3. DocumentItems
4. Transactions (вид оборота: Приход, Расход)

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

Пример №1
Дата Тип документа Сумма Ребенок
01.10.2018 "Начисление" 50.00 Ребенок №1
02.10.2018 "Начисление" 55.00 Ребенок №1
03.10.2018 "Оплата" 50.00 Ребенок №1
10.11.2018 "Начисление" 50.00 Ребенок №1

После сохранения должна ити запись в промежуточною таблицу вида:
Дата Ребенок Начальный Остаток Оборот Конечный Остаток
01.10.2018 Ребенок №1 0.00 55.00 55.00
01.11.2018 Ребенок №1 55.00 50.00 105.00

Промежуточная таблица нужна для того что бы не пересчитывать остатки по ребенку каждый раз когда потребуется вывести информацию. Это упрощенный вариант, на деле должно еще учитываться возможность внесения оплат или начислений задним числом, их удаление задним числом (ошибки операторов), перерасчет при изменении тарифного плата с определенной даты.
Может у Вас есть идеи как это все правильно хранить или реализовать, правильным путем ли я иду, или может я сам себе усложняю задачу.
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 1
netpastor
@netpastor
Python developer
Начисление - со знаком плюс
Оплата - со знаком минус
Все подсчеты за тебя сделает база данных очень лихо
Промежуточная таблица в прямом виде не нужна - на ее месте я бы сделал SQL View + managed=False модель
Все ошибки, оплаты задним числом и удаление задним числом - никак не повлияют
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы