Skip to content

Commit

Permalink
#99 compute finance diff in model now
Browse files Browse the repository at this point in the history
  • Loading branch information
Sh4kE committed Dec 17, 2016
1 parent debe159 commit b5da675
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 121 deletions.
46 changes: 45 additions & 1 deletion core/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import math
from collections import Counter

from django.core.urlresolvers import reverse
from django.core.validators import validate_comma_separated_integer_list
from django.db import models
Expand Down Expand Up @@ -381,7 +384,14 @@ def __str__(self):
return "%s: %s" % (self.user.username, self.player.name)


class Finance(models.Model):
class IterMixin(object):
def __iter__(self):
for attr, value in self.__dict__.items():
if not attr.startswith('_'):
yield attr, value


class Finance(models.Model, IterMixin):
class Meta:
ordering = ['user', '-matchday']
unique_together = (('user', 'matchday'),)
Expand Down Expand Up @@ -416,6 +426,40 @@ class Meta:
def __str__(self):
return "%s (%s): %s" % (self.user.username, self.matchday, self.balance)

def diff(self, ot_finance):
f = Finance()
f.income_visitors_league = math.abs(self.income_visitors_league - ot_finance.income_visitors_league)
f.income_sponsoring = math.abs(self.income_sponsoring - ot_finance.income_sponsoring)
f.income_cup = math.abs(self.income_cup - ot_finance.income_cup)
f.income_interests = math.abs(self.income_interests - ot_finance.income_interests)
f.income_loan = math.abs(self.income_loan - ot_finance.income_loan)
f.income_transfer = math.abs(self.income_transfer - ot_finance.income_transfer)
f.income_visitors_friendlies = math.abs(self.income_visitors_friendlies - ot_finance.income_visitors_friendlies)
f.income_funcup = math.abs(self.income_funcup - ot_finance.income_funcup)
f.income_betting = math.abs(self.income_betting - ot_finance.income_betting)

f.expenses_player_salaries = math.abs(self.expenses_player_salaries - ot_finance.expenses_player_salaries)
f.expenses_stadium = math.abs(self.expenses_stadium - ot_finance.expenses_stadium)
f.expenses_youth = math.abs(self.expenses_youth - ot_finance.expenses_youth)
f.expenses_interests = math.abs(self.expenses_interests - ot_finance.expenses_interests)
f.expenses_trainings = math.abs(self.expenses_trainings - ot_finance.expenses_trainings)
f.expenses_transfer = math.abs(self.expenses_transfer - ot_finance.expenses_transfer)
f.expenses_compensation = math.abs(self.expenses_compensation - ot_finance.expenses_compensation)
f.expenses_friendlies = math.abs(self.expenses_friendlies - ot_finance.expenses_friendlies)
f.expenses_funcup = math.abs(self.expenses_funcup - ot_finance.expenses_funcup)
f.expenses_betting = math.abs(self.expenses_betting - ot_finance.expenses_betting)
return f

def income(self):
my_finances_dict = Counter(dict(self))
incomes = [value for key, value in my_finances_dict.items() if key.startswith('income')]
return sum(incomes)

def expenses(self):
my_finances_dict = Counter(dict(self))
incomes = [value for key, value in my_finances_dict.items() if key.startswith('expenses')]
return sum(incomes)


class MatchTeamStatistics(models.Model):
class Meta:
Expand Down
147 changes: 27 additions & 120 deletions core/views/ofm/finance_views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from braces.views import CsrfExemptMixin, JsonRequestResponseMixin
from braces.views import JSONResponseMixin
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views import View
Expand All @@ -21,7 +22,7 @@ def get_context_data(self, **kwargs):


@method_decorator(login_required, name='dispatch')
class FinancesAsJsonView(CsrfExemptMixin, JsonRequestResponseMixin, View):
class FinancesAsJsonView(CsrfExemptMixin, JSONResponseMixin, View):
def get(self, request, *args, **kwargs):
newer_matchday_season = self.request.GET.get('newer_matchday_season',
default=Matchday.objects.all()[0].season.number)
Expand Down Expand Up @@ -57,126 +58,32 @@ def _get_finances_diff_in_json(newer_finances, older_finances):
if not newer_finances:
newer_finances = Finance.objects.all().order_by('matchday')[0]

account_balance = newer_finances.balance

income_visitors_league = newer_finances.income_visitors_league
if older_finances:
income_visitors_league = newer_finances.income_visitors_league - older_finances.income_visitors_league

income_sponsoring = newer_finances.income_sponsoring
if older_finances:
income_sponsoring = newer_finances.income_sponsoring - older_finances.income_sponsoring

income_cup = newer_finances.income_cup
if older_finances:
income_cup = newer_finances.income_cup - older_finances.income_cup

income_interests = newer_finances.income_interests
if older_finances:
income_interests = newer_finances.income_interests - older_finances.income_interests

income_loan = newer_finances.income_loan
if older_finances:
income_loan = newer_finances.income_loan - older_finances.income_loan

income_transfer = newer_finances.income_transfer
if older_finances:
income_transfer = newer_finances.income_transfer - older_finances.income_transfer

income_visitors_friendlies = newer_finances.income_visitors_friendlies
if older_finances:
income_visitors_friendlies = newer_finances.income_visitors_friendlies - \
older_finances.income_visitors_friendlies

income_friendlies = newer_finances.income_friendlies
if older_finances:
income_friendlies = newer_finances.income_friendlies - older_finances.income_friendlies

income_funcup = newer_finances.income_funcup
if older_finances:
income_funcup = newer_finances.income_funcup - older_finances.income_funcup

income_betting = newer_finances.income_betting
if older_finances:
income_betting = newer_finances.income_betting - older_finances.income_betting

expenses_player_salaries = -newer_finances.expenses_player_salaries
if older_finances:
expenses_player_salaries = -(
newer_finances.expenses_player_salaries - older_finances.expenses_player_salaries)

expenses_stadium = -newer_finances.expenses_stadium
if older_finances:
expenses_stadium = -(newer_finances.expenses_stadium - older_finances.expenses_stadium)

expenses_youth = -newer_finances.expenses_youth
if older_finances:
expenses_youth = -(newer_finances.expenses_youth - older_finances.expenses_youth)

expenses_interests = -newer_finances.expenses_interests
if older_finances:
expenses_interests = -(newer_finances.expenses_interests - older_finances.expenses_interests)

expenses_trainings = -newer_finances.expenses_trainings
if older_finances:
expenses_trainings = -(newer_finances.expenses_trainings - older_finances.expenses_trainings)

expenses_transfer = -newer_finances.expenses_transfer
if older_finances:
expenses_transfer = -(newer_finances.expenses_transfer - older_finances.expenses_transfer)

expenses_compensation = -newer_finances.expenses_compensation
if older_finances:
expenses_compensation = -(newer_finances.expenses_compensation - older_finances.expenses_compensation)

expenses_friendlies = -newer_finances.expenses_friendlies
if older_finances:
expenses_friendlies = -(newer_finances.expenses_friendlies - older_finances.expenses_friendlies)

expenses_funcup = -newer_finances.expenses_funcup
if older_finances:
expenses_funcup = -(newer_finances.expenses_funcup - older_finances.expenses_funcup)

expenses_betting = -newer_finances.expenses_betting
finances_diff = newer_finances
if older_finances:
expenses_betting = -(newer_finances.expenses_betting - older_finances.expenses_betting)

finances_diff = dict()
finances_diff['account_balance'] = account_balance

finances_diff['income_visitors_league'] = income_visitors_league
finances_diff['income_sponsoring'] = income_sponsoring
finances_diff['income_cup'] = income_cup
finances_diff['income_interests'] = income_interests
finances_diff['income_loan'] = income_loan
finances_diff['income_transfer'] = income_transfer
finances_diff['income_visitors_friendlies'] = income_visitors_friendlies
finances_diff['income_friendlies'] = income_friendlies
finances_diff['income_funcup'] = income_funcup
finances_diff['income_betting'] = income_betting

finances_diff['expenses_player_salaries'] = expenses_player_salaries
finances_diff['expenses_stadium'] = expenses_stadium
finances_diff['expenses_youth'] = expenses_youth
finances_diff['expenses_interests'] = expenses_interests
finances_diff['expenses_trainings'] = expenses_trainings
finances_diff['expenses_transfer'] = expenses_transfer
finances_diff['expenses_compensation'] = expenses_compensation
finances_diff['expenses_friendlies'] = expenses_friendlies
finances_diff['expenses_funcup'] = expenses_funcup
finances_diff['expenses_betting'] = expenses_betting

sum_income = income_visitors_league + income_sponsoring + income_cup + income_interests + income_loan + \
income_transfer + income_visitors_friendlies + income_friendlies + income_funcup + income_betting
sum_expenses = expenses_player_salaries + expenses_stadium + expenses_youth + expenses_interests + \
expenses_trainings + expenses_transfer + expenses_compensation + expenses_friendlies + \
expenses_funcup + expenses_betting

finances_diff['sum_income'] = sum_income
finances_diff['sum_expenses'] = sum_expenses
finances_diff['balance'] = sum_income + sum_expenses

return [finances_diff]
finances_diff = newer_finances.diff(older_finances)

finances_diff_dict = dict(finances_diff)

finances_diff_dict['account_balance'] = newer_finances.balance
finances_diff_dict['sum_income'] = finances_diff.income()
finances_diff_dict['sum_expenses'] = finances_diff.expenses()
finances_diff_dict['balance'] = finances_diff_dict['sum_income'] + finances_diff_dict['sum_expenses']

return [finances_diff_dict]


class Income(object):
def __init__(self):
self.visitors_league = 0
self.sponsoring = 0
self.cup = 0
self.interests = 0
self.loan = 0
self.transfer = 0
self.visitors_friendlies = 0
self.friendlies = 0
self.funcup = 0
self.betting = 0


@method_decorator(login_required, name='dispatch')
Expand Down

0 comments on commit b5da675

Please sign in to comment.