diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py index 6a787e214..e1ddabe87 100644 --- a/ihatemoney/forms.py +++ b/ihatemoney/forms.py @@ -364,7 +364,12 @@ class BillForm(FlaskForm): payed_for = SelectMultipleField( _("For whom?"), validators=[DataRequired()], coerce=int ) - bill_type = SelectField(_("Bill Type"), choices=BillType.choices(), coerce=BillType, default=BillType.EXPENSE) + bill_type = SelectField( + _("Bill Type"), + choices=BillType.choices(), + coerce=BillType, + default=BillType.EXPENSE, + ) submit = SubmitField(_("Submit")) submit2 = SubmitField(_("Submit and add a new one")) diff --git a/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py b/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py index 9b1fc520b..d7e273306 100644 --- a/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py +++ b/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py @@ -19,7 +19,10 @@ def upgrade(): billtype_enum = sa.Enum(BillType) billtype_enum.create(op.get_bind(), checkfirst=True) - op.add_column("bill", sa.Column("bill_type", billtype_enum, server_default=BillType.EXPENSE.name)) + op.add_column( + "bill", + sa.Column("bill_type", billtype_enum, server_default=BillType.EXPENSE.name), + ) op.add_column("bill_version", sa.Column("bill_type", sa.UnicodeText())) @@ -28,4 +31,4 @@ def downgrade(): op.drop_column("bill_version", "bill_type") billtype_enum = sa.Enum(BillType) - billtype_enum.drop(op.get_bind()) \ No newline at end of file + billtype_enum.drop(op.get_bind()) diff --git a/ihatemoney/models.py b/ihatemoney/models.py index fcc172647..aab02b9fe 100644 --- a/ihatemoney/models.py +++ b/ihatemoney/models.py @@ -51,6 +51,7 @@ ], ) + class BillType(Enum): EXPENSE = "Expense" REIMBURSEMENT = "Reimbursement" @@ -131,7 +132,9 @@ def full_balance(self): if bill.bill_type == BillType.EXPENSE: should_receive[bill.payer.id] += bill.converted_amount for ower in bill.owers: - should_pay[ower.id] += (ower.weight * bill.converted_amount / total_weight) + should_pay[ower.id] += ( + ower.weight * bill.converted_amount / total_weight + ) if bill.bill_type == BillType.REIMBURSEMENT: should_receive[bill.payer.id] += bill.converted_amount @@ -563,7 +566,7 @@ def create_demo_project(): ("Alice", 20, ("Amina", "Alice"), "Beer !", "Expense"), ("Amina", 50, ("Amina", "Alice", "Georg"), "AMAP", "Expense"), ) - for (payer, amount, owers, what, bill_type) in operations: + for payer, amount, owers, what, bill_type in operations: db.session.add( Bill( amount=amount, diff --git a/ihatemoney/tests/api_test.py b/ihatemoney/tests/api_test.py index ff94ebe7e..191790b64 100644 --- a/ihatemoney/tests/api_test.py +++ b/ihatemoney/tests/api_test.py @@ -1017,7 +1017,6 @@ def test_amount_too_high(self): def test_validate_bill_type(self): self.api_create("raclette") self.api_add_member("raclette", "zorglub") - req = self.client.post( "/api/projects/raclette/bills", @@ -1029,7 +1028,7 @@ def test_validate_bill_type(self): "bill_type": "wrong_bill_type", "amount": "50", }, - headers=self.get_auth("raclette") + headers=self.get_auth("raclette"), ) self.assertStatus(400, req) @@ -1044,7 +1043,7 @@ def test_validate_bill_type(self): "bill_type": "Expense", "amount": "50", }, - headers=self.get_auth("raclette") + headers=self.get_auth("raclette"), ) self.assertStatus(201, req) @@ -1063,7 +1062,7 @@ def test_default_bill_type(self): "payed_for": ["1"], "amount": "50", }, - headers=self.get_auth("raclette") + headers=self.get_auth("raclette"), ) self.assertStatus(201, req) @@ -1076,4 +1075,3 @@ def test_default_bill_type(self): # Bill type should now be "Expense" got = json.loads(req.data.decode("utf-8")) assert got["bill_type"] == "Expense" - diff --git a/ihatemoney/tests/budget_test.py b/ihatemoney/tests/budget_test.py index 9ddeec8a8..15e7d4e1c 100644 --- a/ihatemoney/tests/budget_test.py +++ b/ihatemoney/tests/budget_test.py @@ -716,8 +716,8 @@ def test_manage_bills(self): "amount": "17", }, ) - - #transfer bill should not affect balances at all + + # transfer bill should not affect balances at all self.client.post( "/raclette/add", data={ @@ -801,22 +801,22 @@ def test_reimbursement_bill(self): self.client.post("/rent/members/add", data={"name": "alice"}) members_ids = [m.id for m in self.get_project("rent").members] - # create a bill to test reimbursement + # create a bill to test reimbursement self.client.post( "/rent/add", data={ "date": "2022-12-12", "what": "december rent", - "payer": members_ids[0], #bob - "payed_for": members_ids, #bob and alice + "payer": members_ids[0], # bob + "payed_for": members_ids, # bob and alice "bill_type": "Expense", "amount": "1000", }, ) - #check balance + # check balance balance = self.get_project("rent").balance assert set(balance.values()), set([500 == -500]) - #check paid + # check paid bob_paid = self.get_project("rent").full_balance[2][members_ids[0]] alice_paid = self.get_project("rent").full_balance[2][members_ids[1]] assert bob_paid == 1000 @@ -828,8 +828,8 @@ def test_reimbursement_bill(self): data={ "date": "2022-12-13", "what": "reimbursement for rent", - "payer": members_ids[1], #alice - "payed_for": members_ids[0], #bob + "payer": members_ids[1], # alice + "payed_for": members_ids[0], # bob "bill_type": "Reimbursement", "amount": "500", }, @@ -837,11 +837,12 @@ def test_reimbursement_bill(self): balance = self.get_project("rent").balance assert set(balance.values()), set([0 == 0]) - #check paid + # check paid bob_paid = self.get_project("rent").full_balance[2][members_ids[0]] alice_paid = self.get_project("rent").full_balance[2][members_ids[1]] assert bob_paid == 500 assert alice_paid == 500 + def test_transfer_bill(self): self.post_project("random") @@ -855,8 +856,8 @@ def test_transfer_bill(self): data={ "date": "2022-10-10", "what": "Rent", - "payer": members_ids[0], #zorglub - "payed_for": members_ids, #zorglub + fred + "payer": members_ids[0], # zorglub + "payed_for": members_ids, # zorglub + fred "bill_type": "Expense", "amount": "1000", }, @@ -867,8 +868,8 @@ def test_transfer_bill(self): data={ "date": "2022-10-10", "what": "Transfer of 500 to fred", - "payer": members_ids[0], #zorglub - "payed_for": members_ids[1], #fred + "payer": members_ids[0], # zorglub + "payed_for": members_ids[1], # fred "bill_type": "Transfer", "amount": "500", }, @@ -884,22 +885,22 @@ def test_reimbursement_bill(self): self.client.post("/rent/members/add", data={"name": "alice"}) members_ids = [m.id for m in self.get_project("rent").members] - # create a bill to test reimbursement + # create a bill to test reimbursement self.client.post( "/rent/add", data={ "date": "2022-12-12", "what": "december rent", - "payer": members_ids[0], #bob - "payed_for": members_ids, #bob and alice + "payer": members_ids[0], # bob + "payed_for": members_ids, # bob and alice "bill_type": "Expense", "amount": "1000", }, ) - #check balance + # check balance balance = self.get_project("rent").balance assert set(balance.values()), set([500 == -500]) - #check paid + # check paid bob_paid = self.get_project("rent").full_balance[2][members_ids[0]] alice_paid = self.get_project("rent").full_balance[2][members_ids[1]] assert bob_paid == 1000 @@ -911,8 +912,8 @@ def test_reimbursement_bill(self): data={ "date": "2022-12-13", "what": "reimbursement for rent", - "payer": members_ids[1], #alice - "payed_for": members_ids[0], #bob + "payer": members_ids[1], # alice + "payed_for": members_ids[0], # bob "bill_type": "Reimbursement", "amount": "500", }, @@ -920,11 +921,12 @@ def test_reimbursement_bill(self): balance = self.get_project("rent").balance assert set(balance.values()), set([0 == 0]) - #check paid + # check paid bob_paid = self.get_project("rent").full_balance[2][members_ids[0]] alice_paid = self.get_project("rent").full_balance[2][members_ids[1]] assert bob_paid == 500 assert alice_paid == 500 + def test_transfer_bill(self): self.post_project("random") @@ -938,8 +940,8 @@ def test_transfer_bill(self): data={ "date": "2022-10-10", "what": "Rent", - "payer": members_ids[0], #zorglub - "payed_for": members_ids, #zorglub + fred + "payer": members_ids[0], # zorglub + "payed_for": members_ids, # zorglub + fred "bill_type": "Expense", "amount": "1000", }, @@ -950,8 +952,8 @@ def test_transfer_bill(self): data={ "date": "2022-10-10", "what": "Transfer of 500 to fred", - "payer": members_ids[0], #zorglub - "payed_for": members_ids[1], #fred + "payer": members_ids[0], # zorglub + "payed_for": members_ids[1], # fred "bill_type": "Transfer", "amount": "500", }, @@ -1433,7 +1435,7 @@ def test_settle(self): for m, a in members.items(): assert abs(a - balance[m.id]) < 0.01 return - + def test_settle_button(self): self.post_project("raclette") @@ -1482,16 +1484,24 @@ def test_settle_button(self): ) project = self.get_project("raclette") transactions = project.get_transactions_to_settle_bill() - + count = 0 for t in transactions: - count+=1 - self.client.get("/raclette/settle"+"/"+str(t["amount"])+"/"+str(t["ower"].id)+"/"+str(t["receiver"].id)) + count += 1 + self.client.get( + "/raclette/settle" + + "/" + + str(t["amount"]) + + "/" + + str(t["ower"].id) + + "/" + + str(t["receiver"].id) + ) temp_transactions = project.get_transactions_to_settle_bill() - #test if the one has disappeared - assert len(temp_transactions) == len(transactions)-count - - #test if theres a new one with bill_type reimbursement + # test if the one has disappeared + assert len(temp_transactions) == len(transactions) - count + + # test if theres a new one with bill_type reimbursement bill = project.get_newest_bill() assert bill.bill_type == models.BillType.REIMBURSEMENT return @@ -2005,7 +2015,7 @@ def test_rss_feed(self): "payed_for": [1, 2, 3], "amount": "12", "original_currency": "EUR", - "bill_type": "Expense" + "bill_type": "Expense", }, ) self.client.post( @@ -2017,7 +2027,7 @@ def test_rss_feed(self): "payed_for": [1, 2], "amount": "15", "original_currency": "EUR", - "bill_type": "Expense" + "bill_type": "Expense", }, ) self.client.post( @@ -2029,7 +2039,7 @@ def test_rss_feed(self): "payed_for": [1, 2], "amount": "10", "original_currency": "EUR", - "bill_type": "Expense" + "bill_type": "Expense", }, ) @@ -2092,7 +2102,7 @@ def test_rss_feed_history_disabled(self): "payed_for": [1, 2, 3], "amount": "12", "original_currency": "EUR", - "bill_type": "Expense" + "bill_type": "Expense", }, ) self.client.post( @@ -2104,7 +2114,7 @@ def test_rss_feed_history_disabled(self): "payed_for": [1, 2], "amount": "15", "original_currency": "EUR", - "bill_type": "Expense" + "bill_type": "Expense", }, ) self.client.post( @@ -2116,7 +2126,7 @@ def test_rss_feed_history_disabled(self): "payed_for": [1, 2], "amount": "10", "original_currency": "EUR", - "bill_type": "Expense" + "bill_type": "Expense", }, ) @@ -2195,7 +2205,7 @@ def test_rss_if_modified_since_header(self): "payed_for": [1], "amount": "12", "original_currency": "XXX", - "bill_type": "Expense" + "bill_type": "Expense", }, follow_redirects=True, ) @@ -2364,7 +2374,7 @@ def test_remember_payer_per_project(self): "payer": members_ids[1], "payed_for": members_ids, "amount": "25", - "bill_type": "Expense" + "bill_type": "Expense", }, ) @@ -2382,7 +2392,7 @@ def test_remember_payer_per_project(self): "payer": members_ids_tartif[2], "payed_for": members_ids_tartif, "amount": "24", - "bill_type": "Expense" + "bill_type": "Expense", }, ) @@ -2417,7 +2427,7 @@ def test_remember_payed_for(self): "payer": members_ids[1], "payed_for": members_ids[1:], "amount": "25", - "bill_type": "Expense" + "bill_type": "Expense", }, )