diff --git a/core/api/billPriceSum.py b/core/api/billPriceSum.py new file mode 100644 index 0000000000000000000000000000000000000000..1056d08af40f348c93068787fc4f3f1224d98514 --- /dev/null +++ b/core/api/billPriceSum.py @@ -0,0 +1,48 @@ +from rest_framework import generics, response +from core.models.bill import Bill, BillSearchQuerySet +from core.serializers.bill import BillSerializer +from rest_framework import authentication +from django.db.models import Sum + +class BillSumPriceListView(generics.ListAPIView): + queryset = Bill.objects.all() + serializer_class = BillSerializer + authentication_classes = [ + authentication.SessionAuthentication, + authentication.TokenAuthentication + ] + + + def get(self, request, *args, **kwargs): + item = request.GET.get('item') + + categorieModel = { + 1: "Food", + 2: "Groceries", + 3: "Transportation", + 4: "clothing", + 5: "Entertainment", + 6: "Bill", + 7: "Sports", + 8: "Electronics", + 9: "Travel", + 10: "House & Car", + 11: "Others", + } + queryset = self.filter_queryset(self.get_queryset()) + user = None + if self.request.user.is_authenticated: + user = self.request.user + data = {} + + for i in range(1,12): + qs = BillSearchQuerySet(Bill).searchCategories(query=i, user=user) + if item == 'today': + qs = qs.searchToday(user=user) + elif item == 'month': + qs = qs.searchThisMonth(user=user) + total_price = qs.aggregate(Sum('price')) + data[categorieModel[i]] = total_price['price__sum'] + return response.Response(data) + +BillSumPriceListViewAPI = BillSumPriceListView.as_view() \ No newline at end of file diff --git a/core/api/billSearch.py b/core/api/billSearch.py index f35d1e8086d643846fbd621e12e39a0356727be1..a976a1b483be482b73eccb35b8ba281462918c68 100644 --- a/core/api/billSearch.py +++ b/core/api/billSearch.py @@ -35,5 +35,4 @@ class SearchBillListView(generics.ListAPIView): result = qs.searchToday(user=user) elif item == "title": result = qs.searchTitle(keyword, user=user) - print(result) return result \ No newline at end of file diff --git a/core/models/bill.py b/core/models/bill.py index e834fc3eaef61f04bbe609d7443c4607b94da5a3..3579d86ea0e99741a88a0a9b838f354ab1b5d0a0 100644 --- a/core/models/bill.py +++ b/core/models/bill.py @@ -41,20 +41,7 @@ class BillSearchQuerySet(models.QuerySet): if user is not None: qs = self.filter(user=user).filter(lookup) return qs - - # def searchTitle(self, keyword, user=None): - # lookup = Q(title__contains = keyword) - # qs = self.filter(lookup) - # if user is not None: - # qs = self.filter(user=user).filter(lookup) - # return qs - - # def categorieAmount(self, date, categories, user=None): - # if date == "day": - # qs = self.searchCategories(categories, user=user).searchToday(user=user) - # elif date == "month": - # qs = self.searchCategories(categories, user=user).searchThisMonth(user=user) class BillManager(models.Manager): diff --git a/core/urls.py b/core/urls.py index e5180f0469c9b904cffdb0db4d4827e13c353b87..b8b9db70cf19a849ea8ba03589047bb52ed17b66 100644 --- a/core/urls.py +++ b/core/urls.py @@ -8,6 +8,7 @@ from core.api.profile import ProfileViewSet from core.api.coupon import CouponViewSet from core.api.bill import * from core.api.billSearch import SearchBillListView +from core.api.billPriceSum import BillSumPriceListViewAPI router = routers.DefaultRouter() @@ -36,7 +37,10 @@ urlpatterns += [ path('api/bill/<uuid:pk>/', bill_detail_api, name="bill-detail"), # bill search - path('api/bill/search/', SearchBillListView.as_view(), name="bill-search") + path('api/bill/search/', SearchBillListView.as_view(), name="bill-search"), + + # bill price list searched by categories + path('api/bill/price-sum/', BillSumPriceListViewAPI, name="bill-price-sum") ]