Compare commits

...

3 commits

Author SHA1 Message Date
zorun
39f4348379
Merge f62ca85ace into cf77b4c346 2024-11-16 11:55:10 +01:00
MediMilk
cf77b4c346
Corrected typo Administation > Administration (#1332)
Some checks failed
Check doc / test_doc (push) Has been cancelled
Docker build / test (push) Has been cancelled
Lint & unit tests / lint (push) Has been cancelled
Docker build / build_upload (push) Has been cancelled
Lint & unit tests / test (mariadb, minimal, 3.11) (push) Has been cancelled
Lint & unit tests / test (mariadb, normal, 3.11) (push) Has been cancelled
Lint & unit tests / test (mariadb, normal, 3.9) (push) Has been cancelled
Lint & unit tests / test (postgresql, minimal, 3.11) (push) Has been cancelled
Lint & unit tests / test (postgresql, normal, 3.11) (push) Has been cancelled
Lint & unit tests / test (postgresql, normal, 3.9) (push) Has been cancelled
Lint & unit tests / test (sqlite, minimal, 3.10) (push) Has been cancelled
Lint & unit tests / test (sqlite, minimal, 3.11) (push) Has been cancelled
Lint & unit tests / test (sqlite, minimal, 3.12) (push) Has been cancelled
Lint & unit tests / test (sqlite, minimal, 3.7) (push) Has been cancelled
Lint & unit tests / test (sqlite, minimal, 3.9) (push) Has been cancelled
Lint & unit tests / test (sqlite, normal, 3.10) (push) Has been cancelled
Lint & unit tests / test (sqlite, normal, 3.11) (push) Has been cancelled
Lint & unit tests / test (sqlite, normal, 3.12) (push) Has been cancelled
Lint & unit tests / test (sqlite, normal, 3.7) (push) Has been cancelled
Lint & unit tests / test (sqlite, normal, 3.8) (push) Has been cancelled
Lint & unit tests / test (sqlite, normal, 3.9) (push) Has been cancelled
Co-authored-by: MediMilk <chadricksoup@gmail.com>
2024-11-16 11:55:04 +01:00
Baptiste Jonglez
f62ca85ace Add transferred/received amounts in statistics page 2024-03-29 15:22:54 +01:00
40 changed files with 81 additions and 62 deletions

View file

@ -759,7 +759,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -113,42 +113,57 @@ class Project(db.Model):
@property @property
def full_balance(self): def full_balance(self):
"""Returns a triple of dicts: """Returns a tuple of dicts:
- dict mapping each member to its balance - dict mapping each member to its overall balance
- dict mapping each member to how much he/she should pay others - dict mapping each member to its expenses (i.e. how much he/she
(i.e. how much he/she benefited from bills) benefited from all bills, whoever actually paid)
- dict mapping each member to how much he/she should be paid by - dict mapping each member to how much he/she has paid for bills
others (i.e. how much he/she has paid for bills)
- dict mapping each member to how much he/she has transferred
money to other members
- dict mapping each member to how much he/she has received money
from other members
balance, spent, paid, transferred, received
balance spent paid
""" """
balances, should_pay, should_receive = (defaultdict(int) for time in (1, 2, 3)) balances, spent, paid, transferred, received = (
defaultdict(float) for _ in range(5)
)
for bill in self.get_bills_unordered().all(): for bill in self.get_bills_unordered().all():
total_weight = sum(ower.weight for ower in bill.owers) total_weight = sum(ower.weight for ower in bill.owers)
if bill.bill_type == BillType.EXPENSE: if bill.bill_type == BillType.EXPENSE:
should_receive[bill.payer.id] += bill.converted_amount paid[bill.payer.id] += bill.converted_amount
for ower in bill.owers: for ower in bill.owers:
should_pay[ower.id] += ( spent[ower.id] += ower.weight * bill.converted_amount / total_weight
if bill.bill_type == BillType.REIMBURSEMENT:
transferred[bill.payer.id] += bill.converted_amount
for ower in bill.owers:
received[ower.id] += (
ower.weight * bill.converted_amount / total_weight ower.weight * bill.converted_amount / total_weight
) )
if bill.bill_type == BillType.REIMBURSEMENT:
should_receive[bill.payer.id] += bill.converted_amount
for ower in bill.owers:
should_receive[ower.id] -= bill.converted_amount
for person in self.members: for person in self.members:
balance = should_receive[person.id] - should_pay[person.id] balance = (
paid[person.id]
- spent[person.id]
+ transferred[person.id]
- received[person.id]
)
balances[person.id] = balance balances[person.id] = balance
return ( return (
balances, balances,
should_pay, spent,
should_receive, paid,
transferred,
received,
) )
@property @property
@ -157,17 +172,19 @@ class Project(db.Model):
@property @property
def members_stats(self): def members_stats(self):
"""Compute what each participant has paid """Compute what each participant has spent, paid, transferred and received
:return: one stat dict per participant :return: one stat dict per participant
:rtype list: :rtype list:
""" """
balance, spent, paid = self.full_balance balance, spent, paid, transferred, received = self.full_balance
return [ return [
{ {
"member": member, "member": member,
"spent": -1.0 * spent[member.id],
"paid": paid[member.id], "paid": paid[member.id],
"spent": spent[member.id], "transferred": transferred[member.id],
"received": -1.0 * received[member.id],
"balance": balance[member.id], "balance": balance[member.id],
} }
for member in self.active_members for member in self.active_members

View file

@ -168,7 +168,7 @@
<i class="icon book">{{ static_include("images/book.svg") | safe }}</i> <i class="icon book">{{ static_include("images/book.svg") | safe }}</i>
</a> </a>
{% if g.show_admin_dashboard_link %} {% if g.show_admin_dashboard_link %}
<a target="_blank" rel="noopener" data-toggle="tooltip" data-placement="top" title="{{ _('Administation Dashboard') }}" href="{{ url_for('main.dashboard') }}"> <a target="_blank" rel="noopener" data-toggle="tooltip" data-placement="top" title="{{ _('Administration Dashboard') }}" href="{{ url_for('main.dashboard') }}">
<i class="icon admin">{{ static_include("images/cog.svg") | safe }}</i> <i class="icon admin">{{ static_include("images/cog.svg") | safe }}</i>
</a> </a>
{% endif %} {% endif %}

View file

@ -10,20 +10,22 @@
{% block content %} {% block content %}
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<table id="bill_table" class="split_bills table table-striped ml-md-n3"> <table id="bill_table" class="split_bills table table-striped ml-md-n3">
<thead><tr><th class="d-md-none">{{ _("Who?") }}</th><th>{{ _("Paid") }}</th><th>{{ _("Spent") }}</th></tr></thead> <thead><tr><th class="d-md-none">{{ _("Who?") }}</th><th>{{ _("Paid") }}</th><th>{{ _("Expenses") }}</th><th>{{ _("Transferred") }}</th><th>{{ _("Received") }}</th></tr></thead>
<tbody> <tbody>
{% for stat in members_stats|sort(attribute='member.name') %} {% for stat in members_stats|sort(attribute='member.name') %}
<tr> <tr>
<td class="d-md-none">{{ stat.member.name }}</td> <td class="d-md-none">{{ stat.member.name }}</td>
<td>{{ stat.paid|currency }}</td> <td>{{ stat.paid|currency }}</td>
<td>{{ stat.spent|currency }}</td> <td>{{ stat.spent|currency }}</td>
<td>{{ stat.transferred|currency }}</td>
<td>{{ stat.received|currency }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
<h2>{{ _("Expenses by Month") }}</h2> <h2>{{ _("Expenses by month") }}</h2>
<table id="monthly_stats" class="table table-striped"> <table id="monthly_stats" class="table table-striped">
<thead><tr><th>{{ _("Period") }}</th><th>{{ _("Spent") }}</th></tr></thead> <thead><tr><th>{{ _("Period") }}</th><th>{{ _("Expenses") }}</th></tr></thead>
<tbody> <tbody>
{% for month in months %} {% for month in months %}
<tr> <tr>

View file

@ -782,7 +782,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -785,7 +785,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -826,7 +826,7 @@ msgstr "Aplicació mòbil"
msgid "Documentation" msgid "Documentation"
msgstr "Documentació" msgstr "Documentació"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Panell d'administració" msgstr "Panell d'administració"
msgid "Legal information" msgid "Legal information"

View file

@ -800,7 +800,7 @@ msgstr "Mobilní aplikace"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentace" msgstr "Dokumentace"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Správcovský panel" msgstr "Správcovský panel"
msgid "Legal information" msgid "Legal information"

View file

@ -824,7 +824,7 @@ msgstr "Handy-Applikation"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentation" msgstr "Dokumentation"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Dashboard Administration" msgstr "Dashboard Administration"
msgid "Legal information" msgid "Legal information"

View file

@ -811,7 +811,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
#, fuzzy #, fuzzy

View file

@ -821,7 +821,7 @@ msgstr "Poŝaparata programo"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentaro" msgstr "Dokumentaro"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Administra panelo" msgstr "Administra panelo"
#, fuzzy #, fuzzy

View file

@ -818,7 +818,7 @@ msgstr "Aplicación móvil"
msgid "Documentation" msgid "Documentation"
msgstr "Documentación" msgstr "Documentación"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Panel de administración" msgstr "Panel de administración"
msgid "Legal information" msgid "Legal information"

View file

@ -815,7 +815,7 @@ msgstr "Aplicación móvil"
msgid "Documentation" msgid "Documentation"
msgstr "Documentación" msgstr "Documentación"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Panel de administración" msgstr "Panel de administración"
msgid "Legal information" msgid "Legal information"

View file

@ -782,7 +782,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -824,7 +824,7 @@ msgstr "Application mobile"
msgid "Documentation" msgid "Documentation"
msgstr "Documentation" msgstr "Documentation"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Panneau d'administration" msgstr "Panneau d'administration"
msgid "Legal information" msgid "Legal information"

View file

@ -788,7 +788,7 @@ msgstr "יישום לנייד"
msgid "Documentation" msgid "Documentation"
msgstr "דוקומנטציה" msgstr "דוקומנטציה"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -829,7 +829,7 @@ msgstr "मोबाइल एप्लीकेशन"
msgid "Documentation" msgid "Documentation"
msgstr "प्रलेखन" msgstr "प्रलेखन"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "व्यवस्थापन डैशबोर्ड" msgstr "व्यवस्थापन डैशबोर्ड"
#, fuzzy #, fuzzy

View file

@ -817,7 +817,7 @@ msgstr "Mobil alkalmazás"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentáció" msgstr "Dokumentáció"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Adminisztrátori vezérlőpult" msgstr "Adminisztrátori vezérlőpult"
msgid "Legal information" msgid "Legal information"

View file

@ -812,7 +812,7 @@ msgstr "Aplikasi Gawai"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentasi" msgstr "Dokumentasi"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Dasbor Administrasi" msgstr "Dasbor Administrasi"
msgid "Legal information" msgid "Legal information"

View file

@ -817,7 +817,7 @@ msgstr "Applicazione mobile"
msgid "Documentation" msgid "Documentation"
msgstr "Documentazione" msgstr "Documentazione"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Cruscotto Amministrazione" msgstr "Cruscotto Amministrazione"
msgid "Legal information" msgid "Legal information"

View file

@ -797,7 +797,7 @@ msgstr "携帯アプリ"
msgid "Documentation" msgid "Documentation"
msgstr "書類" msgstr "書類"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "管理ダッシュボード" msgstr "管理ダッシュボード"
#, fuzzy #, fuzzy

View file

@ -793,7 +793,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -793,7 +793,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -855,7 +855,7 @@ msgstr "Mobilprogram"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentasjon" msgstr "Dokumentasjon"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Administrasjonsoversiktspanel" msgstr "Administrasjonsoversiktspanel"
#, fuzzy #, fuzzy

View file

@ -814,7 +814,7 @@ msgstr "Mobiele app"
msgid "Documentation" msgid "Documentation"
msgstr "Documentatie" msgstr "Documentatie"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Administratie-overzicht" msgstr "Administratie-overzicht"
#, fuzzy #, fuzzy

View file

@ -777,7 +777,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "Documentacion" msgstr "Documentacion"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Panèl dadministracion" msgstr "Panèl dadministracion"
msgid "Legal information" msgid "Legal information"

View file

@ -812,7 +812,7 @@ msgstr "Aplikacja mobilna"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentacja" msgstr "Dokumentacja"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Kokpit administracyjny" msgstr "Kokpit administracyjny"
msgid "Legal information" msgid "Legal information"

View file

@ -823,7 +823,7 @@ msgstr "Aplicação Mobile"
msgid "Documentation" msgid "Documentation"
msgstr "Documentação" msgstr "Documentação"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Painel de Administração" msgstr "Painel de Administração"
msgid "Legal information" msgid "Legal information"

View file

@ -809,7 +809,7 @@ msgstr "Aplicativo"
msgid "Documentation" msgid "Documentation"
msgstr "Documentação" msgstr "Documentação"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Painel de Administração" msgstr "Painel de Administração"
msgid "Legal information" msgid "Legal information"

View file

@ -816,7 +816,7 @@ msgstr "Мобильное приложение"
msgid "Documentation" msgid "Documentation"
msgstr "Документация" msgstr "Документация"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Панель инструментов администратора" msgstr "Панель инструментов администратора"
msgid "Legal information" msgid "Legal information"

View file

@ -783,7 +783,7 @@ msgstr "Mobilna Aplikacija"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentacija" msgstr "Dokumentacija"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -818,7 +818,7 @@ msgstr "Mobilapplikation"
msgid "Documentation" msgid "Documentation"
msgstr "Dokumentation" msgstr "Dokumentation"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Översiktspanel för administration" msgstr "Översiktspanel för administration"
msgid "Legal information" msgid "Legal information"

View file

@ -809,7 +809,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -817,7 +817,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -778,7 +778,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -811,7 +811,7 @@ msgstr "Telefon Uygulaması"
msgid "Documentation" msgid "Documentation"
msgstr "Belgelendirme" msgstr "Belgelendirme"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "Yönetici Gösterge Paneli" msgstr "Yönetici Gösterge Paneli"
msgid "Legal information" msgid "Legal information"

View file

@ -791,7 +791,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -776,7 +776,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -775,7 +775,7 @@ msgstr ""
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "" msgstr ""
msgid "Legal information" msgid "Legal information"

View file

@ -779,7 +779,7 @@ msgstr "手机软件"
msgid "Documentation" msgid "Documentation"
msgstr "文件" msgstr "文件"
msgid "Administation Dashboard" msgid "Administration Dashboard"
msgstr "管理面板" msgstr "管理面板"
msgid "Legal information" msgid "Legal information"