From 9595aa7279880a9ca7e85b2a2dfc225e25cf82c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=EC=A0=95=EB=B2=94?= <2018027383@hanyang.ac.kr> Date: Sun, 21 Nov 2021 15:57:23 +0900 Subject: [PATCH] =?UTF-8?q?[feat#26]=20=EB=B6=84=EC=84=9D=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20view=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0003_auto_20211121_1508.py | 35 +++++++ .../migrations/0004_alter_analysis_date.py | 18 ++++ teeting_backend/finance/models.py | 12 +-- teeting_backend/finance/urls.py | 29 +++--- teeting_backend/finance/views.py | 92 ++++++++++++++----- 5 files changed, 142 insertions(+), 44 deletions(-) create mode 100644 teeting_backend/finance/migrations/0003_auto_20211121_1508.py create mode 100644 teeting_backend/finance/migrations/0004_alter_analysis_date.py diff --git a/teeting_backend/finance/migrations/0003_auto_20211121_1508.py b/teeting_backend/finance/migrations/0003_auto_20211121_1508.py new file mode 100644 index 0000000..06c4868 --- /dev/null +++ b/teeting_backend/finance/migrations/0003_auto_20211121_1508.py @@ -0,0 +1,35 @@ +# Generated by Django 3.2.9 on 2021-11-21 06:08 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('finance', '0002_analysis_child'), + ] + + operations = [ + migrations.RemoveField( + model_name='analysis', + name='aftrBlnc', + ), + migrations.RemoveField( + model_name='analysis', + name='mnrcDrotDsnc', + ), + migrations.RemoveField( + model_name='analysis', + name='trdd', + ), + migrations.RemoveField( + model_name='analysis', + name='txtm', + ), + migrations.AddField( + model_name='analysis', + name='date', + field=models.DateField(default=datetime.date(2021, 11, 21)), + ), + ] diff --git a/teeting_backend/finance/migrations/0004_alter_analysis_date.py b/teeting_backend/finance/migrations/0004_alter_analysis_date.py new file mode 100644 index 0000000..857e34e --- /dev/null +++ b/teeting_backend/finance/migrations/0004_alter_analysis_date.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2021-11-21 06:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('finance', '0003_auto_20211121_1508'), + ] + + operations = [ + migrations.AlterField( + model_name='analysis', + name='date', + field=models.DateField(), + ), + ] diff --git a/teeting_backend/finance/models.py b/teeting_backend/finance/models.py index aab4398..dcc8361 100644 --- a/teeting_backend/finance/models.py +++ b/teeting_backend/finance/models.py @@ -1,20 +1,18 @@ from django.core import validators from django.db import models from django.db.models.deletion import CASCADE -from django.utils import translation from ttAccount.models import * from django.core import validators - # Create your models here. # 분석 모델 class Analysis(models.Model) : child = models.ForeignKey(Child, on_delete=CASCADE, default=1) - trdd = models.CharField(max_length=8) # 거래날짜 - txtm = models.CharField(max_length=6) # 거래시간 - mnrcDrotDsnc = models.IntegerField(validators=[validators.MinValueValidator(1), validators.MaxValueValidator(4)]) # 1,2는 입금 / 3,4는 출금 + date = models.DateField(auto_now=False) # 거래날짜 + # txtm = models.CharField(max_length=6) # 거래시간 + # mnrcDrotDsnc = models.IntegerField(validators=[validators.MinValueValidator(1), validators.MaxValueValidator(4)]) # 1,2는 입금 / 3,4는 출금 tram = models.IntegerField(validators = [validators.MinValueValidator(0)]) # 거래금액 - aftrBlnc = models.IntegerField() # 거래후잔액 + # aftrBlnc = models.IntegerField() # 거래후잔액 bnprCntn = models.TextField() # 통장인자내용 tuno = models.IntegerField() # 거래고유번호 CATEGORIIES = ( @@ -26,4 +24,4 @@ class Analysis(models.Model) : category = models.IntegerField(default=0, choices=CATEGORIIES) def __str__(self): - return self.tuno \ No newline at end of file + return self.bnprCntn \ No newline at end of file diff --git a/teeting_backend/finance/urls.py b/teeting_backend/finance/urls.py index 4d91333..6053a45 100644 --- a/teeting_backend/finance/urls.py +++ b/teeting_backend/finance/urls.py @@ -2,23 +2,26 @@ from .views import * -analysis_list = AnalysisViewSet.as_view({ - 'get' : 'list', - 'post' : 'create' -}) +# analysis_list = AnalysisViewSet.as_view({ +# 'get' : 'list', +# 'post' : 'create' +# }) -analysis_detail = AnalysisViewSet.as_view({ - 'get' : 'retrieve', - 'put' : 'update', - 'patch' : 'partial_update', - 'delete' : 'destroy', -}) +# analysis_detail = AnalysisViewSet.as_view({ +# 'get' : 'retrieve', +# 'put' : 'update', +# 'patch' : 'partial_update', +# 'delete' : 'destroy', +# }) urlpatterns = [ - path('analysis/', analysis_list), - path('analysis/', analysis_detail), + # path('analysis/', analysis_list), + # path('analysis/', analysis_detail), + + + path('analysis/', ChildAnalysisView.as_view()), # 자녀분석 조회 ?childId= path('balance/', ParentBalanceView.as_view()), # 잔액조회 부모 path('balance/child', ChildBalanceView.as_view()), # 잔액조회 자녀 - path('transaction/', ChildTransactionView.as_view()), # 거래내역조회 자녀 + path('transaction/', ChildTransactionView.as_view()), # 거래내역조회 자녀 ?childId=&period= ] \ No newline at end of file diff --git a/teeting_backend/finance/views.py b/teeting_backend/finance/views.py index 611e310..68277c6 100644 --- a/teeting_backend/finance/views.py +++ b/teeting_backend/finance/views.py @@ -1,5 +1,6 @@ from django.utils import datastructures from rest_framework import serializers, viewsets, authentication, status +from rest_framework.exceptions import bad_request from rest_framework.permissions import IsAuthenticated from rest_framework.authentication import TokenAuthentication from rest_framework.views import APIView @@ -16,33 +17,10 @@ import random from django.http import HttpResponse -from django.core import serializers # Create your views here. -# 분석작업 기본적인 CRUD 구현 변경 많이많이 필요함 -class AnalysisViewSet(viewsets.ModelViewSet) : - - permission_classes = [IsAuthenticated] - authentication_classes = [TokenAuthentication] - - queryset = Analysis.objects.all() - serializer_class = AnalysisSerializer - - def perform_create(self, serializer): - serializer.save(child = self.request.user) - - def get_queryset(self): - qs = super().get_queryset() - - if self.request.user.is_authenticated : - qs = qs.filter(child = self.request.user) - else : - qs = qs.none() - return qs - - # 잔액조회 (부모) class ParentBalanceView(APIView) : @@ -228,4 +206,70 @@ def get(self, request): return HttpResponse(json.dumps(data), content_type="text/json-comment-filtered", status = status.HTTP_200_OK) else : - return HttpResponse(res.status_code) \ No newline at end of file + return HttpResponse(res.status_code) + + + +# 자녀 분석결과 조회 +class ChildAnalysisView(APIView) : + + permission_classes = [IsAuthenticated] + authentication_classes = [TokenAuthentication] + + + def get(self, request): + + # 프론트에 response로 줄 json data + data = {} + childId = self.request.query_params.get('childId') + child = Child.objects.filter(pk = childId).first() + period = self.request.query_params.get('period') + + if not child : + return HttpResponse("You don't have such child", status=status.HTTP_400_BAD_REQUEST) + + + # 필터링할 날짜 범위 지정 + if period == "week" : + start_date = datetime.now().date() + relativedelta(days=-7) + elif period == "month" : + start_date = datetime.now().date() + relativedelta(months=-1) + elif period == "semiannual" : + start_date = datetime.now().date() + relativedelta(months=-6) + elif period == "annual" : + start_date = datetime.now().date() + relativedelta(years=-1) + else : + return HttpResponse("Period is uncorrect", status=status.HTTP_400_BAD_REQUEST) + + spending = Analysis.objects.filter(child = child).filter(date__range = [start_date, datetime.now().date()]) + + + # initializing + food = 0 # 0번 카테고리 + transportation = 0 # 1번 카테고리 + hobby = 0 # 2번 카테고리 + etc = 0 # 3번 카테고리 + + for i in range(len(spending)) : + if spending[i].category == 0 : + food += spending[i].tram + + elif spending[i].category == 1 : + transportation += spending[i].tram + + elif spending[i].category == 2 : + hobby += spending[i].tram + + elif spending[i].category == 3 : + etc += spending[i].tram + + data["food"] = food + data["transportation"] = transportation + data["hobby"] = hobby + data["etc"] = etc + data["total"] = food + transportation + hobby + etc + + if self.request.user.is_authenticated : + return HttpResponse(json.dumps(data), content_type="text/json-comment-filtered", status=status.HTTP_200_OK) + else : + return HttpResponse(status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file