Commit graph

84 commits

Author SHA1 Message Date
Baptiste Jonglez
9ef46e2c5d Add a success message when adding an automatic settlement bill 2024-04-27 17:54:13 +02:00
Tom Roussel
050de4e8f6 Removed unnecessary FIXME
This fixme was not actually valid. I think it was mistakenly copied from
web.edit_bill
2024-03-31 19:21:56 +02:00
TomRoussel
720f0e52dd
Adding bill types and automatic settling between people (#1290)
* Bill types added in Bill and Project Model, Implemented in BillForm
* import and export bill feature updated with bill type, tests modified to reflect the behavior
* eliminating unnecessary bill type
* typo fixed, test cases fixed for the current bill types
* button added
* settle button added
* new changes
* test cases added
* bchen-reimbursement
* tests for different bill types
* test cases fixed
* fixed reimbursement test case
* Replaced assertEqual with assert
* Fixed missing bill_type in unit tests
* Removed commented code
* Reverted unnecessary string edit
* Changed bill_type to an Enum
* Added test checking correct bill_type validation
* Fixed  billtype displaying in all caps
* Removed 'Transfer' bill type
* Added migration rule and set default bill_type in alembic
* bill_type is now an optional parameter in the BillForm
* Use enum name instead of value as SQL server_default

SQLAlchemy uses the Enum names in the database, as the values could be
generic python objects.
https://docs.sqlalchemy.org/en/20/core/type_basics.html#sqlalchemy.types.Enum

* Removed bill type from the Bills html table
* Replaced string bill type with enum
* Made "Settlement" translatable
* Manually handle the new Enum creation

Alembic does not handle postgres Enums correctly, so we need to manually
generate the new enum type.
See https://github.com/sqlalchemy/alembic/issues/278

---------

Co-authored-by: Ruitao Li <ruital@andrew.cmu.edu>
Co-authored-by: MelodyZhangYiqun <98992024+MelodyZhangYiqun@users.noreply.github.com>
Co-authored-by: Ruitao Li <49292515+FlowingCloudRTL@users.noreply.github.com>
Co-authored-by: MelodyZhangYiqun <yiqunz@andrew.cmu.edu>
Co-authored-by: Brandan Chen <bychen@andrew.cmu.edu>
Co-authored-by: Emilie Zhou <54161959+ez157@users.noreply.github.com>
Co-authored-by: Tom <tom.roussel@esat.kuleuven.be>
2024-03-16 12:20:48 +01:00
Jojo144
c5c8dba631
Default owers when adding a bill (#1222)
* Remember last owers for next new bill

* Add a test for last_selected_payed_for
2023-10-03 20:20:58 +02:00
Jojo144
b92a36c049 Add backward compatibility for last_selected_payer 2023-10-02 23:50:25 +02:00
Jojo144
3bcc9afb50 [Fix] Remember the last selected payer for each project (and not only for one) 2023-10-02 23:50:25 +02:00
Éloi Rivard
857ca2d5b0
tests: speed up unit tests (#1215)
Adds two configuration parameters that are passed to
generate_password_hash:

- PASSWORD_HASH_METHOD
- PASSWORD_HASH_SALT_LENGTH

The unit tests use high-speed low-security values and
gain 50% speed.
2023-08-13 00:04:06 +02:00
Baptiste Jonglez
5dc9984577 Better feedback when changing project settings
We now display a success flash message, and we stay on the same page
(instead of redirecting to the list of bills, which makes little sense)
2023-07-29 14:02:49 +02:00
Éloi Rivard
8d4584d660 feat: project RSS feed. 2023-07-28 15:22:55 +02:00
Glandos
23d912b703
Migrate existing sessions after conversion to dict (#1194)
Migrate existing session after #1082

fix #1188
2023-07-22 19:55:45 +02:00
Glandos
59f3e9bac1 fix #1192 2023-07-15 15:27:34 +02:00
Baptiste Jonglez
e241104815 Remove useless translation 2023-02-03 20:35:37 +01:00
Baptiste Jonglez
72f252b9f9 Remove f-string based translations
F-strings are a bad idea for translations, because they cause Babel to
crash when collecting strings to translate:
https://github.com/python-babel/babel/issues/715

But even if we replaced f-strings with new-style string interpolation such
as `_("{foo}").format(foo=foo)`, it's still a bad idea, because a wrong
translation can crash Ihatemoney at runtime with a KeyError.

Instead, we must really use old-style python formatting since they are
well supported in Babel.  Wrong translations that mess with string
interpolations will cause Babel to give an error when compiling
translation files, which is exactly what we want.
2023-02-03 20:35:37 +01:00
43289b8dd2 Fix project deletion in the dashboard. Fixes #1094
This was broken due to changes introduced to make project deletion more
secure. Rather than doing some complicated if branches, I decided this
dashboard stuff is probably better handled with separate routes instead.

So I've reintroduced a way to delete the projects without specifying the
project code (otherwise it's not possible for admins to do it).
2023-01-29 23:03:14 +01:00
Glandos
d834394a44 ensure current_limit exist before displaying any message based on it 2022-12-10 18:22:41 +01:00
Glandos
e7ab3c1a95 Implement rate limiting with Flask-Limiter
Fixes #1054
2022-12-10 18:22:41 +01:00
Glandos
dc40c8fc14 use a dict for project list
this avoid finding duplicates, and we only need id -> name

also, use a common function to avoid duplicate code

fix #1081
2022-10-22 23:02:27 +02:00
Glandos
31fef4f4d6
Fix CSRF on logout (#1040)
fix for https://huntr.dev/bounties/a3045614-1125-4901-bb7a-9d51be4beeed/
2022-07-14 15:45:32 +02:00
Glandos
9b4834ff55 remove unused imports 2022-05-14 16:09:14 +02:00
936ea0ea8e
Almet/qrcode (#1000)
Add a QRCode utility to join the project.
2022-05-11 11:20:15 +02:00
Glandos
a71f154354 Purge project history on deletion 2022-03-05 17:12:59 +01:00
Peter Maksymowsky
a5452ccee5
Display admin email in error message for password reminder (#965)
Co-authored-by: Glandos <bugs-github@antipoul.fr>
2022-01-30 15:33:54 +01:00
Glandos
023ec71536
[Performance] Get weight sum along with bills to scale (#949)
* get weight sum along with bills to scale

otherwise, we need to get the weight sum for each displayed bill.
Here, we are much more scalable

* add test

* format

* remove unused import

* oops, restore pagination to 100

* add comments

* format

* rename method to make it clearer

And also, make it static, since it doesn't rely on instance.

* improve comments and naming

* improve naming

* missing article
2022-01-22 00:13:07 +01:00
zorun
c8cbe43ee2
Display monthly statistics for the range of months where the project was active (#885)
* Change the way we import datetime

This makes it easier to use datetime.date later.

* Display monthly statistics for the range of months where the project was active

Currently, we display a hard-coded "one year" range of monthly statistics
starting from today.  This generally is not the intended behaviour: for
instance, on an archived project, the bills might all be older than one
year, so the table only displays months without any operation.

Instead, display all months between the first and last bills.  There might
be empty months in the middle, but that's intended, because we want all
months to be consecutive.

If there are no bills, simply display an empty table.

Co-authored-by: Baptiste Jonglez <git@bitsofnetworks.org>
2022-01-18 14:32:43 +01:00
Youe Graillot
747824a298
CSV bills import (cospend compatible) (#951)
* proper import form (fix messy errors)
* csv compatible import
* cospend compatible import
* localization (best effort)
* refactoring
* revert localization (best effort)
* import return 400 on error
* fix Person.query.get_by_ids calls
* Bill explicit init parameters
* fix tests
* refacto tests with self.get_project
* separate import tests
* fix tests
* csv import test case
* fix import csv parsing
* revert DestructiveActionProjectForm renaming
* fix csv import test
* fix error redirection on import
* fix lint
* import file input type hint
* various fixes from review

Co-authored-by: Youe Graillot <youe.graillot@gmail.com>
2021-12-22 00:00:34 +01:00
Glandos
8b6a2afc63
Check that language is in the supported list (#971) 2021-12-21 22:40:37 +01:00
Glandos
e929181128
Remove notification showing the id of the project after creation (#944) 2021-11-25 14:30:17 +01:00
Youe Graillot
acb2799575
Production ready docker (#919)
* /healthcheck endpoint usefull for monitoring, ci test also uses this
* customizable PORT with environment variable
* customizable PUID/PGID, reduce attack surface and allow better integration in rootless environments
* size optimization
* update to python 3.10
* add postgresql compatibility
* PUID/PGID default as root to not break current user environments
2021-11-25 08:23:23 +01:00
ef3944ccad
Send an email when the project is created via the API. (#938) 2021-11-25 00:49:17 +01:00
1698841f6d
Do not require a captcha when using the API (#931)
* Do not require a captcha when using the API

This was trickier than expected, due to some side effects : when the
captcha is set to `True` via configuration, it doesn't change the
behavior directly of the ProjectForm class, but does so only when the
project form is used in the `web.py` module.

So, when just using the API (and not using the web.py module, for
instance during tests — manual or functional), no problem was shown,
and everything was working properly.

But at soon as somebody sees the "/" endpoint, the captcha was
required, by both the API and the `web.py` module.

This fixes it by adding a way to bypass the captcha with a new
`bypass_captcha` property on the form.

Prior to this commit, things were done by activating or deactivating a
"captcha" property on the class on-the-fly, which caused side-effects.

This is now using subclasses, which makes the code simpler to
understand, and less prone to side-effects.

Thanks @zorun for the idea.
2021-11-25 00:44:21 +01:00
68552a6034
Allow connecting to upper-case project IDs. (#934)
Fix #933.
2021-11-23 19:09:50 +01:00
35a74100cb
Rename all strings to "participants", clean old and small weird stuff (#871)
* Rename all strings to "participants".
* Update the tests with the new strings
* Update tests
2021-11-01 18:25:57 +01:00
Glandos
7d9226745f
Change token path authentication to /PROJECT/join/TOKEN (#843) 2021-10-13 22:00:38 +02:00
2bcc41bdb3
Add optional support for a simple CAPTCHA. (#844)
* Add optional support for a simple CAPTCHA.
* formatting
* add test case
* Flake8

Co-authored-by: Glandos <bugs-github@antipoul.fr>
2021-10-11 17:39:24 +02:00
Glandos
bbe00ebb57
Include project code into project authentication token (#802)
Fix #780 

This a breaking change, the API for authentication is different, as it now requires `project_id`. Token is generated with only the project_id (so it's shorter than before), and signature is done by mixing password with secret key. Thus, it expires on every project code change.
2021-10-10 14:43:40 +02:00
zorun
3cbe276a69 Simplify import code
Co-authored-by: Glandos <bugs-github@antipoul.fr>
2021-09-07 23:15:40 +02:00
Baptiste Jonglez
4bf9308908 Add currency to import and export formats 2021-09-07 23:15:40 +02:00
Baptiste Jonglez
c69b8d66eb Use existing form errors to flash error messages
This is nice because we can reuse the translated strings of form error
messages in another context.

Suggested by Glandos.
2021-07-17 13:54:11 +02:00
Baptiste Jonglez
db982572aa History: also ask for private code to confirm deletion
This is the same idea as deleting a project: deleting history is also a
major destructive action.  We reuse the same form as for project deletion
to ask for the private code and provide CSRF validation.
2021-07-17 13:54:11 +02:00
Baptiste Jonglez
969029a811 Add CSRF validation to project history deletion 2021-07-17 13:54:11 +02:00
Baptiste Jonglez
2bb6f2b6a7 Rework project deletion to add CSRF validation
It requires reworking the user interface, but it's probably for the best.
2021-07-17 13:54:11 +02:00
Baptiste Jonglez
109d7fca17 Add CSRF validation to most disruptive actions
This also switches all such actions to POST requests.

Deleting the project is handled in another commit because it requires more
changes.
2021-07-17 13:54:11 +02:00
Glandos
07b86bc580
Rework currency switching (#661)
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>

Currency switching is both simpler and less powerful. This was done primarily for users, to have a clear and logical understanding, but the code is also simpler. The main change is that it is now forbidden to switch a project to "no currency" if bills don't share the same currency.

Also, tests assume that projects are created without currency, as in the web UI.
2021-07-06 21:51:32 +02:00
Glandos
c62965d4bf fix basic deprecation warnings 2021-06-10 00:09:59 +02:00
Glandos
69a1ad6685 Adapt code for https://github.com/wtforms/wtforms/pull/568 2021-06-09 23:38:05 +02:00
Glandos
ce4d64da57 formatting 2020-11-24 22:25:02 +01:00
Mayank Choudhary
6ec7dd6077
Added a page for downloading mobile application (#688)
Fixes #597 
Fixes #697 

Co-authored-by: Glandos <bugs-github@antipoul.fr>
2020-11-24 22:22:46 +01:00
Daniel Atwood
0fd2958865
Populate the demo project with defaults. (#616) 2020-05-24 11:45:34 +02:00
zorun
df6ffc7d86
Improve error handling when sending emails (#595)
In one case, we were not catching a family of possible exceptions
(socket.error), and in the two other cases there was no error handling at
all. Sending emails can easily fail if no email server is configured, so
it is really necessary to handle these errors instead of crashing with a
HTTP 500 error.

Refactor email sending code and add proper error handling.

Show alert messages that tell the user if an email was sent or if there
was an error.

When sending a password reminder email or inviting people by email, we
don't proceed to the next step in case of error, because sending emails is
the whole point of these actions.
2020-05-21 21:13:33 +02:00
Glandos
981edd413a
Improve currencies (#604)
- Rename "No Currency" to ISO4217 "XXX"
- Use Babel to render currency symbols and names in currency lists
- Improve i18n in bill lists

Fix #601
Fix #600
2020-05-07 22:56:17 +02:00