def get(self, request, *args, **kwargs): now = datetime.now() # 全データ all_data = Data.get_all_data() # 現在銀行 banks = BankBalance.get_all() # クレカ確認日 credit_checked_date = CreditCheckedDate.get_all() today = date.today() for c in credit_checked_date: # 日付が過ぎていたらpriceを0にする if c.date <= today: c.price = 0 # 銀行残高 all_bank_data = Data.get_bank_data(all_data) checked_bank_data = Data.get_checked_data(all_bank_data) bank_written = Data.get_income_sum( checked_bank_data) - Data.get_outgo_sum(checked_bank_data) context = { 'year': now.year, 'banks': banks, 'credit_checked_date': credit_checked_date, 'bank_written': bank_written, } return render(request, "_several_checked_date.html", context)
def get(self, request, *args, **kwargs): # 全データ all_data = Data.get_all_data() # 支払い方法リスト methods = Method.list() # 支払い方法ごとの残高 methods_bd = [] for m in methods: d = Data.get_method_data(all_data, m.pk) # 銀行はチェック済みだけ if m.pk == Method.get_bank().pk: d = Data.get_checked_data(d) methods_bd.append({ 'pk': m.pk, 'name': m.name, 'balance': Data.get_income_sum(d) - Data.get_outgo_sum(d), 'year': CheckedDate.get(m.pk).date.year, 'month': CheckedDate.get(m.pk).date.month, 'day': CheckedDate.get(m.pk).date.day }) return HttpResponse(json.dumps(methods_bd))
def get(self, request, *args, **kwargs): now = datetime.now() # 実際の現金残高 actual_cash_balance = SeveralCosts.get_actual_cash_balance() # クレカ確認日 credit_checked_date = CreditCheckedDate.get_all() # 生活費目標額 living_cost_mark = SeveralCosts.get_living_cost_mark() context = { 'app_name': settings.APP_NAME, 'username': request.user, 'cash_balance': Data.get_income_sum(Data.get_cash_data(Data.get_all_data())) - Data.get_outgo_sum(Data.get_cash_data(Data.get_all_data())), 'year': now.year, 'month': now.month, 'day': now.day, 'actual_cash_balance': actual_cash_balance, 'credit_checked_date': credit_checked_date, 'living_cost_mark': living_cost_mark, } return render(request, "tools.html", context)
def get(self, request, *args, **kwargs): now = datetime.now() context = { 'app_name': settings.APP_NAME, 'username': request.user, 'draw_graph': False } # パラメータ取得 if 'start_year' not in request.GET or 'start_month' not in request.GET or \ 'end_year' not in request.GET or 'end_month' not in request.GET: # パラメータが無いときはデフォルト値で去年~今月を入れる start_year = now.year - 1 start_month = 1 end_year = now.year end_month = now.month else: try: start_year = int(request.GET.get('start_year')) start_month = int(request.GET.get('start_month')) end_year = int(request.GET.get('end_year')) end_month = int(request.GET.get('end_month')) except ValueError: return render(request, 'period_balances.html', context) i_date = date(start_year, start_month, 1) end_date = date(end_year, end_month, 1) period_balances = [] while True: last_day = i_date + relativedelta(months=1) - timedelta(days=1) d = Data.get_range_data(None, last_day) period_balances.append( LabelValue(datetime.strftime(i_date, '%Y-%m'), Data.get_income_sum(d) - Data.get_outgo_sum(d))) if i_date == end_date: break i_date = i_date + relativedelta(months=1) context['draw_graph'] = True context['period_balances'] = period_balances context['start_year'] = start_year context['start_month'] = start_month context['end_year'] = end_year context['end_month'] = end_month return render(request, 'period_balances.html', context)
def post(self, request, *args, **kwargs): written_bank_data = Data.get_checked_data( Data.get_bank_data(Data.get_all_data())) bank_sum = 0 bb = BankBalance.get_all() cc = CreditCheckedDate.get_all() # フォーマットチェック try: for b in bb: key = "bank-" + str(b.pk) if key in request.POST: int(request.POST.get(key)) for c in cc: key = "credit-" + str(c.pk) if key in request.POST: int(request.POST.get(key)) except ValueError: return HttpResponseBadRequest( json.dumps({"message": "invalid parameter"})) # 更新と計算 for b in bb: key = "bank-" + str(b.pk) if key in request.POST: value = int(request.POST.get(key)) BankBalance.set(b.pk, value) bank_sum += BankBalance.get_price(b.pk) for c in cc: key = "credit-" + str(c.pk) if key in request.POST: value = int(request.POST.get(key)) CreditCheckedDate.set_price(c.pk, value) bank_sum -= CreditCheckedDate.get_price(c.pk) return HttpResponse( json.dumps({ "balance": Data.get_income_sum(written_bank_data) - Data.get_outgo_sum(written_bank_data) - bank_sum }))
def test_get_income_sum_nothing(self): data = Data.get_month_data(1999, 1) self.assertEqual(Data.get_income_sum(data), 0)
def test_get_income_sum(self): data = Data.get_month_data(2000, 1) self.assertEqual(Data.get_income_sum(data), 35123)
def get(self, request, *args, **kwargs): year = kwargs['year'] month_list = list(range(1, 13)) # 月ごとのデータ monthly_context = [] for i_month in month_list: tomonth_context = {} tomonth_context['label'] = i_month monthly_data = Data.get_month_data(year, i_month) monthly_normal_data = Data.get_normal_data(monthly_data) next_month_first = date(year, i_month, 1) + relativedelta(months=1) # 収支 td = Data.get_temp_and_deposit_sum(monthly_data) tomonth_context['income'] = Data.get_income_sum( monthly_normal_data) - td tomonth_context['outgo'] = Data.get_outgo_sum( monthly_normal_data) - td tomonth_context['balance'] = tomonth_context[ 'income'] - tomonth_context['outgo'] # 給与 tomonth_context['salary'] = Data.get_income_sum( Data.get_keyword_data(monthly_data, "給与")) # 生活費 tomonth_context['living_cost'] = Data.get_living_cost(monthly_data) # 食費 tomonth_context['food_cost'] = Data.get_food_costs(monthly_data) # 電気代 tomonth_context['electricity_cost'] = Data.get_outgo_sum( Data.get_keyword_data(monthly_data, "電気代")) # ガス代 tomonth_context['gus_cost'] = Data.get_outgo_sum( Data.get_keyword_data(monthly_data, "ガス代")) # 水道代 w = Data.get_outgo_sum(Data.get_keyword_data(monthly_data, "水道代")) / 2 if (w == 0): d = Data.get_month_data(next_month_first.year, next_month_first.month) w = Data.get_outgo_sum(Data.get_keyword_data(d, "水道代")) / 2 tomonth_context['water_cost'] = w tomonth_context['infra_cost'] = tomonth_context['electricity_cost'] + \ tomonth_context['gus_cost'] + tomonth_context['water_cost'] # 全収支 monthly_data_without_in_move = Data.filter_without_intra_move( monthly_data) t = Data.get_temp_sum(monthly_data) tomonth_context['all_income'] = Data.get_income_sum( monthly_data_without_in_move) - t tomonth_context['all_outgo'] = Data.get_outgo_sum( monthly_data_without_in_move) - t tomonth_context['all_balance'] = tomonth_context[ 'all_income'] - tomonth_context['all_outgo'] # 途中残高 last_day = next_month_first - timedelta(days=1) rd = Data.get_range_data(None, last_day) tomonth_context['period_balance'] = Data.get_income_sum( rd) - Data.get_outgo_sum(rd) monthly_context.append(tomonth_context) context = { 'app_name': settings.APP_NAME, 'username': request.user, 'year': year, 'monthly_context': monthly_context } return render(request, 'statistics.html', context)
def get(self, request, *args, **kwargs): context = { 'app_name': settings.APP_NAME, 'username': request.user, 'directions': Direction.list(), 'methods': Method.list(), 'unused_methods': Method.un_used_list(), 'first_categories': Category.first_list(), 'latter_categories': Category.latter_list(), 'temps': { 0: "No", 1: "Yes" }, 'checkeds': { 0: "No", 1: "Yes" }, } # 入力値を維持するための変数 query_context = {} query_list = [ "start_year", "start_month", "start_day", "end_year", "end_month", "end_day", "item", "lower_price", "upper_price" ] for q in query_list: if q in request.GET: query_context[q] = request.GET.get(q) context.update(query_context) query_context = {} query_list = ["direction", "method", "category", "temp", "checked"] for q in query_list: if q in request.GET and request.GET.get(q) != '': query_context[q] = list(map(int, request.GET.getlist(q))) context.update(query_context) # 条件に沿うデータを検索 if "is_query" in request.GET: # 日付 start_date = None if "start_year" in request.GET and "start_month" in request.GET \ and "start_day" in request.GET: if request.GET.get("start_year") != "" \ and request.GET.get("start_month") != "" \ and request.GET.get("start_day") != "": try: date(int(request.GET.get("start_year")), int(request.GET.get("start_month")), int(request.GET.get("start_day"))) start_date = request.GET.get("start_year") + "-" + request.GET.get("start_month") + \ "-" + request.GET.get("start_day") except: start_date = None end_date = None if "end_year" in request.GET and "end_month" in request.GET and "end_day" in request.GET: if request.GET.get("end_year") != "" and request.GET.get( "end_month") != "" and request.GET.get( "end_day") != "": try: date(int(request.GET.get("end_year")), int(request.GET.get("end_month")), int(request.GET.get("end_day"))) end_date = request.GET.get( "end_year") + "-" + request.GET.get( "end_month") + "-" + request.GET.get("end_day") except: end_date = None data = Data.get_range_data(start_date, end_date) # 品目 if "item" in request.GET: item = request.GET.get("item") if item != "": data = Data.get_keyword_data(data, item) # 金額 if "lower_price" in request.GET and request.GET.get( "lower_price") != "": try: data = Data.filter_price( data, int(request.GET.get("lower_price")), None) except: data = data if "upper_price" in request.GET and request.GET.get( "upper_price") != "": try: data = Data.filter_price( data, None, int(request.GET.get("upper_price"))) except: data = data # 方向 if "direction" in request.GET: try: data = Data.filter_directions(data, context["direction"]) except: data = data # 支払い方法 if "method" in request.GET: try: data = Data.filter_methods(data, context["method"]) except: data = data # 分類 if "category" in request.GET: try: data = Data.filter_categories(data, context["category"]) except: data = data # 立替 if "temp" in request.GET: try: data = Data.filter_temps(data, context["temp"]) except: data = data # チェック済み if "checked" in request.GET: try: data = Data.filter_checkeds(data, context["checked"]) except: data = data # 日付順にソート data = Data.sort_ascending(data) context.update({ "show_data": data, "income_sum": Data.get_income_sum(data), "outgo_sum": Data.get_outgo_sum(data), "is_show": True, }) else: context.update({"is_show": False}) return render(request, 'search.html', context)
def get(self, request, *args, **kwargs): # validation if "year" in request.GET and "month" in request.GET: year = request.GET.get("year") month = request.GET.get("month") if not is_valid_date(year, month): return HttpResponseBadRequest("parameter error") else: return HttpResponseBadRequest("parameter error") # 全データ all_data = Data.get_all_data() # 今月のデータ monthly_data = Data.get_month_data(int(year), int(month)) # 支払い方法リスト methods = Method.list() # 支払い方法ごとの残高 methods_iob = [] methods_monthly_iob = [] for m in methods: d = Data.get_method_data(all_data, m.pk) methods_iob.append( InOutBalance(m.name, None, None, Data.get_income_sum(d) - Data.get_outgo_sum(d))) i = Data.get_income_sum(Data.get_method_data(monthly_data, m.pk)) o = Data.get_outgo_sum(Data.get_method_data(monthly_data, m.pk)) methods_monthly_iob.append(InOutBalance(m.name, i, o, None)) # 立替と貯金 monthly_temp_and_deposit = Data.get_temp_and_deposit_sum(monthly_data) # 通常データ monthly_normal_data = Data.get_normal_data(monthly_data) # 今月の収入 monthly_income = Data.get_income_sum( monthly_normal_data) - monthly_temp_and_deposit # 今月の支出 monthly_outgo = Data.get_outgo_sum( monthly_normal_data) - monthly_temp_and_deposit # 生活費 living_cost = Data.get_living_cost(monthly_data) # 変動費 variable_cost = Data.get_variable_cost(monthly_data) # 生活費目標額 living_cost_mark = SeveralCosts.get_living_cost_mark() # 内部移動以外 monthly_data_without_inmove = Data.filter_without_intra_move( monthly_data) context = { 'total_balance': Data.get_income_sum(all_data) - Data.get_outgo_sum(all_data), 'methods_iob': methods_iob, 'monthly_income': monthly_income, 'monthly_outgo': monthly_outgo, 'monthly_inout': monthly_income - monthly_outgo, 'living_cost': living_cost, 'variable_cost': variable_cost, 'living_remain': living_cost_mark - living_cost, 'variable_remain': monthly_income - max(SeveralCosts.get_living_cost_mark(), living_cost) - variable_cost, 'monthly_all_income': Data.get_income_sum(monthly_data_without_inmove), 'monthly_all_outgo': Data.get_outgo_sum(monthly_data_without_inmove), 'methods_monthly_iob': methods_monthly_iob, } return render(request, '_balance_statistic_mini.html', context)