feat(costs): each expense row shows who it is split between, with their part

Under the payers, a Split line lists every member of the expense with their share and a tick once they marked it paid, so checking that the right people are in no longer means opening each expense. More than six fold into a +N chip with the rest in its tooltip. (#1763)
This commit is contained in:
Maurice
2026-10-01 09:34:52 +02:00
parent b4f0a6dea3
commit 104f0eef38
29 changed files with 116 additions and 12 deletions
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'اضغط للتضمين',
'costs.amount': 'المبلغ',
'costs.split': 'التقسيم',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'بالتساوي',
'costs.splitCustom': 'مخصص',
'costs.splitTicket': 'الإيصال',
+1
View File
@@ -141,6 +141,7 @@ const budget: TranslationStrings = {
'costs.splitBetween': 'Bərabər bölüşdürüləcək şəxslər',
'costs.split': 'Bölüşdür',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Bərabər',
'costs.splitCustom': 'Fərdi',
'costs.splitTicket': 'Qəbz üzrə',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Toque para incluir',
'costs.amount': 'Valor',
'costs.split': 'Dividir',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Igualmente',
'costs.splitCustom': 'Personalizado',
'costs.splitTicket': 'Recibo',
+1
View File
@@ -118,6 +118,7 @@ const budget: TranslationStrings = {
'costs.whoPaid': 'Qui ha pagat?',
'costs.splitBetween': 'Dividir a parts iguals entre',
'costs.split': 'Dividir',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'A parts iguals',
'costs.splitCustom': 'Personalitzat',
'costs.splitTicket': 'Tiquet',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Klepnutím zahrnout',
'costs.amount': 'Částka',
'costs.split': 'Rozdělení',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Rovným dílem',
'costs.splitCustom': 'Vlastní',
'costs.splitTicket': 'Účtenka',
+1
View File
@@ -153,6 +153,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Zum Einbeziehen tippen',
'costs.amount': 'Betrag',
'costs.split': 'Aufteilen',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Gleichmäßig',
'costs.splitCustom': 'Individuell',
'costs.splitTicket': 'Beleg',
+1
View File
@@ -126,6 +126,7 @@ const budget: TranslationStrings = {
'costs.payersUnbalanced': 'Payer amounts must add up to {amount}',
'costs.splitBetween': 'Split equally between',
'costs.split': 'Split',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Equally',
'costs.splitCustom': 'Custom',
'costs.splitTicket': 'Ticket',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Toca para incluir',
'costs.amount': 'Importe',
'costs.split': 'Dividir',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'A partes iguales',
'costs.splitCustom': 'Personalizado',
'costs.splitTicket': 'Recibo',
+1
View File
@@ -126,6 +126,7 @@ const budget: TranslationStrings = {
'costs.payersUnbalanced': 'Maksjate summad peavad kokku andma {amount}',
'costs.splitBetween': 'Jaga võrdselt järgmiste vahel',
'costs.split': 'Jaotus',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Võrdselt',
'costs.splitCustom': 'Kohandatud',
'costs.splitTicket': 'Tšekk',
+1
View File
@@ -151,6 +151,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Toucher pour inclure',
'costs.amount': 'Montant',
'costs.split': 'Répartition',
'costs.splitChipLabel': '{name} : {amount}',
'costs.splitEqually': 'À parts égales',
'costs.splitCustom': 'Personnalisé',
'costs.splitTicket': 'Reçu',
+1
View File
@@ -151,6 +151,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Πατήστε για προσθήκη',
'costs.amount': 'Ποσό',
'costs.split': 'Διαμοιρασμός',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Εξίσου',
'costs.splitCustom': 'Προσαρμογή',
'costs.splitTicket': 'Απόδειξη',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Koppintson a hozzáadáshoz',
'costs.amount': 'Összeg',
'costs.split': 'Felosztás',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Egyenlően',
'costs.splitCustom': 'Egyéni',
'costs.splitTicket': 'Blokk',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Ketuk untuk menyertakan',
'costs.amount': 'Jumlah',
'costs.split': 'Pembagian',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Rata',
'costs.splitCustom': 'Kustom',
'costs.splitTicket': 'Struk',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Tocca per includere',
'costs.amount': 'Importo',
'costs.split': 'Suddivisione',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'In parti uguali',
'costs.splitCustom': 'Personalizzato',
'costs.splitTicket': 'Scontrino',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'タップして追加',
'costs.amount': '金額',
'costs.split': '分け方',
'costs.splitChipLabel': '{name}:{amount}',
'costs.splitEqually': '均等',
'costs.splitCustom': 'カスタム',
'costs.splitTicket': 'レシート',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': '탭하여 포함',
'costs.amount': '금액',
'costs.split': '나누기',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': '균등하게',
'costs.splitCustom': '직접 설정',
'costs.splitTicket': '영수증',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Tik om toe te voegen',
'costs.amount': 'Bedrag',
'costs.split': 'Verdelen',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Gelijk',
'costs.splitCustom': 'Aangepast',
'costs.splitTicket': 'Bon',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Dotknij, aby dodać',
'costs.amount': 'Kwota',
'costs.split': 'Podział',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Po równo',
'costs.splitCustom': 'Własny',
'costs.splitTicket': 'Paragon',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Нажмите, чтобы добавить',
'costs.amount': 'Сумма',
'costs.split': 'Разделение',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Поровну',
'costs.splitCustom': 'Вручную',
'costs.splitTicket': 'Чек',
+1
View File
@@ -126,6 +126,7 @@ const budget: TranslationStrings = {
'costs.payersUnbalanced': 'Súčet súm platcov musí byť {amount}',
'costs.splitBetween': 'Rozdeliť rovným dielom medzi',
'costs.split': 'Rozdeliť',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Rovnakým dielom',
'costs.splitCustom': 'Vlastné',
'costs.splitTicket': 'Účtenka',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Tryck för att inkludera',
'costs.amount': 'Summa',
'costs.split': 'Fördelning',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Lika',
'costs.splitCustom': 'Anpassat',
'costs.splitTicket': 'Kvitto',
+1
View File
@@ -122,6 +122,7 @@ const budget: TranslationStrings = {
'costs.payersUnbalanced': 'จำนวนเงินของผู้ชำระจะต้องรวมกันไม่เกิน {amount}',
'costs.splitBetween': 'แบ่งเท่าๆ กันระหว่าง',
'costs.split': 'แยก',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'เท่าๆ กัน',
'costs.splitCustom': 'กำหนดเอง',
'costs.splitTicket': 'ตั๋ว',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Eklemek için dokun',
'costs.amount': 'Tutar',
'costs.split': 'Paylaşım',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Eşit',
'costs.splitCustom': 'Özel',
'costs.splitTicket': 'Fiş',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Натисніть, щоб додати',
'costs.amount': 'Сума',
'costs.split': 'Розподіл',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Порівну',
'costs.splitCustom': 'Вручну',
'costs.splitTicket': 'Чек',
+1
View File
@@ -150,6 +150,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': 'Nhấn để bao gồm',
'costs.amount': 'Số lượng',
'costs.split': 'Chia tiền',
'costs.splitChipLabel': '{name}: {amount}',
'costs.splitEqually': 'Chia đều',
'costs.splitCustom': 'Tùy chỉnh',
'costs.splitTicket': 'Hóa đơn',
+1
View File
@@ -149,6 +149,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': '點按以加入',
'costs.amount': '金額',
'costs.split': '分攤',
'costs.splitChipLabel': '{name}:{amount}',
'costs.splitEqually': '平均',
'costs.splitCustom': '自訂',
'costs.splitTicket': '收據',
+1
View File
@@ -149,6 +149,7 @@ const budget: TranslationStrings = {
'costs.tapToInclude': '点按以加入',
'costs.amount': '金额',
'costs.split': '分摊',
'costs.splitChipLabel': '{name}:{amount}',
'costs.splitEqually': '平均分摊',
'costs.splitCustom': '自定义金额',
'costs.splitTicket': '按账单明细',