
Чтобы удобнее было расплачиваться по событиям и понять кто кому будет платить, сделал "оптимизацию". Основные ее свойства такие
1. Если человек в плюсе, он только получает деньги от других
2. Если человек в минусе, он только отдает
3. Если итоговый баланс по итогам события ноль, то человек никому не должен и ему никто не должен.
3. Сначала человек пытается отдать следующему за ним человеку, на самом деле нужно научиться задавать порядок, но пока это слишком сложно.
Вот простой пример, того как это работает:
Если А купил булочку Б, а Б купил булочку В, то система покажет, что Б должен А, и В должен Б, итоговый баланс Б - ноль, но все равно он должен забрать деньги у В и отдать А. Если вас такая ситуация не устраивает, вы можете сделать оптимизацию и после нее, В будет напрямую должен А.
Также добавил возможность конвертировать все итоге по событию в одну валюту, очень удобно для заграничных поездок, когда платежи бывают в нескольких валютах, а расплачиваться по приезду все-таки удобнее в одной.