Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions teeting_backend/finance/migrations/0003_auto_20211121_1508.py
Original file line number Diff line number Diff line change
@@ -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)),
),
]
18 changes: 18 additions & 0 deletions teeting_backend/finance/migrations/0004_alter_analysis_date.py
Original file line number Diff line number Diff line change
@@ -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(),
),
]
12 changes: 5 additions & 7 deletions teeting_backend/finance/models.py
Original file line number Diff line number Diff line change
@@ -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 = (
Expand All @@ -26,4 +24,4 @@ class Analysis(models.Model) :
category = models.IntegerField(default=0, choices=CATEGORIIES)

def __str__(self):
return self.tuno
return self.bnprCntn
29 changes: 16 additions & 13 deletions teeting_backend/finance/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -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/<int:pk>', analysis_detail),
# path('analysis/', analysis_list),
# path('analysis/<int:pk>', analysis_detail),


path('analysis/', ChildAnalysisView.as_view()), # 자녀분석 조회 ?childId=<int>
path('balance/', ParentBalanceView.as_view()), # 잔액조회 부모
path('balance/child', ChildBalanceView.as_view()), # 잔액조회 자녀
path('transaction/', ChildTransactionView.as_view()), # 거래내역조회 자녀
path('transaction/', ChildTransactionView.as_view()), # 거래내역조회 자녀 ?childId=<int>&period=<string>
]
92 changes: 68 additions & 24 deletions teeting_backend/finance/views.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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) :

Expand Down Expand Up @@ -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)
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)