* install json2csv package
* add necessary labels
* add support convert the JSON to redable CSV format and export
* add a popover to export btton and provide options for exporting to JSON and CSV
* Use a DropdownMenu
* Translations
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* feat(expense-list): Display the attachment count only when the expense includes attachments
* handle attachments - singular & plural
* move documents count between amount and date
* Remove label
* Use document count only instead of whole document list
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* no division of amount
* use gpt-4-turbo
* testing setup and naive test
* test multiple variants
* document
* correct locale names
* test large amounts
* test wth strings
* prettier
* Fix#209: Correctly display loaded expense
- Don't load default split options after displaying an existing expense
- Re-validate form after changing the "paidFor" selection.
This fixes the error message "The expense must be paid for at least one
participant." after clicking "Select None" and the selecting one participant.
* Fix Paid For Field reset in Edit Expense Page for split Mode 'Unevenly - By amount'
---------
Co-authored-by: partho.kunda <partho.kunda@chaldal.net>
* feat: add German language support
* fix: translate other locale names to German
* chore: integrate recommendations from the PR review
* i18n: add translation recommendations from the PR
* Fix translations
---------
Co-authored-by: Christian Schuller <christianschuller.biz@gmail.com>
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* create ES i18n json
* add ES locale to i18n and existing locales
* capitalize words at es.json
* Add missing translation
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* Added french version and title/description from json messages
* Revert back default language to en-US
* Code reviewed with prettier :)
* Updated json to add information field
* Updated json to add information block (missed on previous)
* Reviewed code language
* correction traduction "groupes étoilés" en "groupes favoris"
---------
Co-authored-by: Andy Trouvé <andy@strekol.eu>
* add group information field to group and Information tab to display
* add breaks to info page
* Improve UX
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
* feat: add auto-balancing for the amount edit
this implementation allocates the rest of the total
to participants, whose rows have yet not been edited.
* fix: reset already edited on total amount change
* suggested reimbursements: make recalculation stable across repayments
Previously, after a group participant executed a suggested reimbursement, rerunning getSuggestedReimbursements() could return a completely new list of suggestions.
With this change, getSuggestedReimbursements() should now be stable:
if it returns a graph with n edges, and then a repayment is made according to one of those edges, when called again, it should now return the same graph but with that one edge removed.
The trick is that the main logic in getSuggestedReimbursements() does not rely on balancesArray being sorted based on .total values, only that the array gets partitioned into participants with credit first and then participants with debt last. After a repayment is made, re-sorting based on .total values would result in a new order hence new suggestions, but sorting based on usernames/participantIds should be unaffected.
fixes https://github.com/spliit-app/spliit/issues/178
* Prettier
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>