diff --git a/ihatemoney/models.py b/ihatemoney/models.py index f0ea956c..fb0db673 100644 --- a/ihatemoney/models.py +++ b/ihatemoney/models.py @@ -133,7 +133,7 @@ class Project(db.Model): should_receive[bill.payer.id] += bill.converted_amount for ower in bill.owers: should_pay[ower.id] += ( - ower.weight * bill.converted_amount / total_weight + ower.weight * bill.converted_amount / total_weight ) if bill.bill_type == BillType.REIMBURSEMENT: @@ -265,50 +265,12 @@ class Project(db.Model): ) @staticmethod - def filter_by_date(query, start_date=None, end_date=None): + def filter_by_date(query, start_date, end_date): if start_date and end_date: - return query.filter(Bill.date.between(start_date, end_date)) + return query.filter(Bill.date >= start_date, Bill.date <= end_date) else: return query - @staticmethod - def filter_by_paid_by(query, paid_by=None): - if paid_by: - return query.filter(Bill.payer.has(id=paid_by)) - else: - return query - - @staticmethod - def filter_by_for_what(query, for_what=None): - if for_what: - return query.filter(Bill.what.has(id=for_what)) - else: - return query - - @staticmethod - def filter_by_for_whom(query, for_whom=None): - if for_whom: - return query.filter(Bill.payed_for.has(id=for_whom)) - else: - return query - - @staticmethod - def filter_by_how_much(query, how_much=None): - if how_much is not None: - return query.filter(Bill.amount.has(id=how_much)) - else: - return query - - @staticmethod - def apply_filters(self, query, **kwargs): - filtered_query = query - filtered_query = self.filter_by_date(filtered_query, kwargs.get('start_date'), kwargs.get('end_date')) - filtered_query = self.filter_by_paid_by(filtered_query, kwargs.get('paid_by')) - filtered_query = self.filter_by_for_what(filtered_query, kwargs.get('for_what')) - filtered_query = self.filter_by_for_whom(filtered_query, kwargs.get('for_whom')) - filtered_query = self.filter_by_how_much(filtered_query, kwargs.get('how_much')) - return filtered_query - def get_bill_weights(self): """ Return all bills for this project, along with the sum of weight for each bill. @@ -330,27 +292,10 @@ class Project(db.Model): """Ordered version of get_bill_weights""" return self.order_bills(self.get_bill_weights()) - def get_filtered_bill_weights_ordered(self, start_date=None, end_date=None, paid_by=None, for_what=None, - for_whom=None, - how_much=None): - query = self.get_bill_weights_ordered() - - if start_date and end_date: - query = self.filter_by_date(query, start_date, end_date) - - if paid_by: - query = self.filter_by_paid_by(query, paid_by) - - if for_what: - query = self.filter_by_for_what(query, for_what) - - if for_whom: - query = self.filter_by_for_whom(query, for_whom) - - if how_much is not None: - query = self.filter_by_how_much(query, how_much) - - return query + def get_filtered_date_bill_weights_ordered(self, start_date, end_date): + bill_weights_ordered = self.get_bill_weights_ordered() + filtered_bill_weights = self.filter_by_date(bill_weights_ordered, start_date, end_date) + return filtered_bill_weights def get_member_bills(self, member_id): """Return the list of bills related to a specific member""" @@ -764,16 +709,16 @@ class Bill(db.Model): currency_helper = CurrencyConverter() def __init__( - self, - amount: float, - date: datetime.datetime = None, - external_link: str = "", - original_currency: str = "", - owers: list = [], - payer_id: int = None, - project_default_currency: str = "", - what: str = "", - bill_type: str = "Expense", + self, + amount: float, + date: datetime.datetime = None, + external_link: str = "", + original_currency: str = "", + owers: list = [], + payer_id: int = None, + project_default_currency: str = "", + what: str = "", + bill_type: str = "Expense", ): super().__init__() self.amount = amount diff --git a/ihatemoney/templates/list_bills.html b/ihatemoney/templates/list_bills.html index f151bc86..0ae8b8af 100644 --- a/ihatemoney/templates/list_bills.html +++ b/ihatemoney/templates/list_bills.html @@ -107,41 +107,15 @@ {% endif %}
- {{ static_include("images/plus.svg") | safe }} diff --git a/ihatemoney/web.py b/ihatemoney/web.py index 5005e43c..7263793b 100644 --- a/ihatemoney/web.py +++ b/ihatemoney/web.py @@ -670,50 +670,27 @@ def list_bills(): weighted_bills = g.project.get_bill_weights_ordered().paginate( per_page=100, error_out=True ) - return render_template( - "list_bills.html", - bills=weighted_bills, - member_form=MemberForm(g.project), - bill_form=bill_form, - csrf_form=csrf_form, - add_bill=request.values.get("add_bill", False), - current_view="list_bills", + elif request.method == "POST": + # Retrieve start_date and end_date from form data + start_date = request.form.get('start_date') + end_date = request.form.get('end_date') + + + weighted_bills = g.project.get_filtered_date_bill_weights_ordered(start_date, end_date).paginate( + per_page=100, error_out=True ) - if request.method == "POST": - start_date = request.form.get('start_date', None) - end_date = request.form.get('end_date', None) - paid_by = request.form.get('paid_by', None) - for_what = request.form.get('for_what', None) - for_whom = request.form.get('for_whom', None) - how_much = request.form.get('how_much', None) - - weighted_bills = g.project.get_filtered_bill_weights_ordered( - start_date=start_date, - end_date=end_date, - paid_by=paid_by, - for_what=for_what, - for_whom=for_whom, - how_much=how_much - ).paginate(per_page=100, error_out=True) - - return render_template( - "list_bills.html", - bills=weighted_bills, - member_form=MemberForm(g.project), - bill_form=bill_form, - csrf_form=csrf_form, - add_bill=request.values.get("add_bill", False), - current_view="list_bills", - start_date=start_date, - end_date=end_date, - paid_by=paid_by, - for_what=for_what, - for_whom=for_whom, - how_much=how_much - ) - - + return render_template( + "list_bills.html", + bills=weighted_bills, + member_form=MemberForm(g.project), + bill_form=bill_form, + csrf_form=csrf_form, + add_bill=request.values.get("add_bill", False), + current_view="list_bills", + start_date=start_date if request.method == "POST" else None, + end_date=end_date if request.method == "POST" else None, + ) @main.route("/