Esempio n. 1
0
def to_MainWindow(request, player):
    try:
        player = Player.objects.get(Name=player)
        # player.save()
        players = Factory.get_players()
        rating = list(players).index(player) + 1
        day = list(Admin.objects.all()
                   )[-1:][0].Day  # TODO поменять на день пользоватлея
        len_rating = len(players)
        id_actives = [0, 1, 2, 8]
        if day >= 4:
            id_actives += [3, 4]
        if day > 6:
            id_actives += [5, 7]
            id_actives.remove(1)
        actives = [i for i in Active.objects.all() if i.Id in id_actives]

    except:
        raise Http404('Что-то пошло не так в to Main menue')
    return render(
        request, "player/mainWindow.html", {
            'player': player,
            'len_rating': len_rating,
            'players': players,
            'actives': actives,
            'rating': rating,
            'day': day
        })
Esempio n. 2
0
def to_admin_page(request):
    try:
        try:
            day = list(Admin.objects.all())[-1:][0].Day
            try:
                a = Player.objects.filter(Name=request.POST['user'])[0]
                a.Name = "Игрок1" + str((np.random.randint(50, 10000) % 5000) +
                                        np.random.randint(2, 20)**2 % 79)
                a.save()
            except:
                pass
        except:
            day = 1
            Admin(Day=1).save()
        user_factors = Factor.objects.filter(Day=day)
        players = Factory.get_players()
        actives = Active.objects.all()  # todo допилить админскую страничку
        counter = len(user_factors)
        q = len(players)
    except:
        raise Http404('Что-то пошло не так в to_admin_page')
    return render(
        request, "player/AdminPage.html", {
            'counter': counter,
            'q': q,
            'actives': actives,
            'players': players,
            'day': day
        })
Esempio n. 3
0
def next_step(request, play):
    try:
        st_only = False
        player = Player.objects.get(Name=play)
        # player.save()
        players = Factory.get_players()
        rating = list(players).index(player) + 1
        flag = Admin.objects.order_by('-Day')[0].Day
        day = list(Admin.objects.all())[-1:][0].Day

        if player.Day == flag:
            pass
        len_rating = len(players)
        id_actives = [0, 1, 2, 8]
        if day >= 4:
            id_actives += [3, 4]
        if day > 6:
            id_actives += [5, 7]
            # id_actives.remove(1)
            if st_only:
                id_actives += [6]
        actives = [i for i in Active.objects.all() if i.Id in id_actives]
    except:
        raise Http404('Что-то пошло не так в make_chio')
    return render(
        request, "player/mainWindow.html", {
            'player': player,
            'len_rating': len_rating,
            'players': players,
            'actives': actives,
            'rating': rating,
            'day': day
        })
Esempio n. 4
0
def to_top(request, player):
    try:
        a = Player.objects.filter(Name=player)
        player = a[0]
        players = Factory.get_players()
        rating = list(players).index(player) + 1
    except:
        raise Http404('Что-то пошло не так')
    return render(request, "player/Personal Page.html", {
        'player': player,
        'players': players,
        'rating': rating
    })
Esempio n. 5
0
def to_personal_page(request):
    try:
        if request.POST['user'] == 'adminPage':
            try:
                try:
                    day = list(Admin.objects.all())[-1:][0].Day
                except:
                    day = 1
                    Admin(Day=1).save()
                user_factors = Factor.objects.filter(Day=day)
                actives = Active.objects.all()
                players = Factory.get_players()
            except:
                raise Http404('Что-то пошло не так в to_admin_page')
            return render(
                request, "player/AdminPage.html", {
                    'counter': len(user_factors),
                    'q': len(players),
                    'actives': actives,
                    'players': players,
                    'day': day
                })

        a = Player.objects.filter(Name=request.POST['user'])
        if len(a) == 0:
            player = Player(Name=request.POST['user'])
            player.save()
        else:
            player = a[0]
        players = Factory.get_players()
        rating = list(players).index(player) + 1
    except:
        raise Http404('Что-то пошло не так')
    return render(request, "player/Personal Page.html", {
        'player': player,
        'players': players,
        'rating': rating
    })
Esempio n. 6
0
def to_top_players(request, player_nam):
    try:
        player = Player.objects.get(Name=player_nam)
        day = list(Admin.objects.all())[-1:][0].Day
        # if day == 1:
        #     stata = ['Здесь появится статистика по предыдущим годам'] # Перевести стату в репозиторий
        # else:
        #     repo = factory.get_repository(1)
        #     stata = list(repo.data.iloc[player.ID])
        #     factors = Factor.objects.filter(UserID__factor=player.ID) # не хватает истории того, что приносло
        # какие диведенты

        # player.save()
        players = Factory.get_players()
        rating = list(players).index(player) + 1
        user_choices = Factor.objects.filter(UserID=player).order_by('-Day')
        # if player.Day == 1:
        #     user_choices.append('На данном месте появятся резульаты сделанных вами инвестиций')
        # else:
        #     data = factory.repo
        #     if data:
        #         pass
        #
        #     else:
        #         user_choices.append('err in data. repository is not initialised')

        years = json.dumps(list(range(1, day + 1)))

    except:
        raise Http404('Что-то пошло не так')
    return render(
        request, "player/statistica.html", {
            'years': years,
            'player': player,
            'user_choices': user_choices,
            'players': players,
            'rating': rating
        })
Esempio n. 7
0
def next_day_admin(request, year):
    try:
        factory = Factory()
        empty_choice = 'bank'
        flag = True
        day = list(
            Admin.objects.all())[-1:][0].Day  # Получаем текущий день от админа
        day1 = day
        was_more_than_40 = list(Admin.objects.all())[-1:][0].Was_more_fourty
        Admin.objects.all().delete()  # удаляем этот день из базы
        user_factors = Factor.objects.filter(
            Day=day)  # достаем все выборы за этот день
        players = Factory.get_players()
        actives = Active.objects.all()
        if int(
                year
        ) == 400:  # если нажата кнопка превести всех пользователей в состояние по-умлочанию
            newday = Admin(
                Day=1, Was_more_fourty=was_more_than_40)  # сохраняем день на 1
            newday.save()
            Factor.objects.all().delete()
            for i in players:
                i.obnulit(
                )  # у всех игроков тоже обнуляем день и активы по умолчанию
                i.save()

            day = 1  # загружаем 1й день

            return render(
                request, "player/AdminPage.html", {
                    'counter': len(user_factors),
                    'q': len(players),
                    'actives': actives,
                    'players': players,
                    'day': day
                })
        if int(year) == 500:  # если нажата кнопка удалить всех пользователей
            players.delete()  # удаляем пользователей
            Admin(Day=day1).save()  # день сохраняем текущий
            counter = len(user_factors)
            q = len(players)
            return render(
                request, "player/AdminPage.html", {
                    'counter': counter,
                    'q': q,
                    'actives': actives,
                    'players': players,
                    'day': day
                })

        if int(
                year
        ) == 600:  # если нажата кнопка - загрузить тестовый массив юзеров - можно убрать в репозиторий
            Player(Name='Добротворский').save()
            Player(Name='Михайлов').save()
            Player(Name='Шипиль').save()
            Player(Name='Дубровский').save()
            Player(Name='testUser').save()
            d = Admin(
                Day=day
            )  # сохраняем текущий день и показываем всех пользователей
            d.save()
            players = Factory.get_players()
            counter = len(user_factors)
            q = len(players)
            return render(
                request, "player/AdminPage.html", {
                    'counter': counter,
                    'q': q,
                    'actives': actives,
                    'players': players,
                    'day': day
                })
        if int(year) == 1000 or int(
                year) == 0:  # если нажата кнопка - предыдущий год. тогда
            if day == 0:  # нельзя уходить в отрицуательные значения - мб добавить что
                day += 1
            new_day = Admin(Day=day - 1)
            for player in players:
                player.one_year_back()
                player.save()
            fact_del = Factor.objects.filter(Day__gte=day)
            fact_del.delete()
        else:
            new_day = Admin(Day=day + 1, Was_more_fourty=was_more_than_40)
        new_day.save()  # просто меняем день на новый
        day = new_day.Day

        # now make calculations:
        if int(year) != 1000 and int(
                year) != 0:  # если нажата кнопка следующий год
            k = sorted(user_factors, key=lambda x: x.UserID.ID
                       )  # отсортируем выборы юзеров по ид (отметим, что
            # выбрали только тех юзеров, которые сделали выбор в данном году)
            idshniki = [i.UserID.ID
                        for i in k]  # чтобы был всегда один и тот же порядок
            id_players_sorted = sorted([i.ID for i in list(players)])
            # TODO ВОТ ТУТ НАДО ДОСТАТЬ ПЕРЕМЕННУЮ ИЗ БД И ОТПРАВИТЬ ЕЕ В ФУНКЦИЮ get_repository (аргумент flag_40, линия 33 в repository.py)
            game1 = factory.get_repository(
                id_players_sorted, flag_40=was_more_than_40
            )  # нициализируем репозиторий только по тем юзерам, которые сделали
            # первый ход. Те, кто не сделали первых ход в дальнейшем будут игнорироваться. - Это можно пофиксить через
            # репозиторий. Если это не первый год, то вызывается уже существующий репозиторий
            if len(idshniki) < len(game1.id_):
                flag = False  # если тех, кто сделал выбор в текущем году меньше, чем тех, кто сделал выбор в первом году
                list_of_actives_a = []
                list_of_actives_b = []
                list_of_actives_c = []
                dict_k = {el.UserID.ID: el for el in k}
                k = []
                default_act = Active.objects.get(Name_eng=empty_choice)
                for i in game1.id_:
                    player_ = Player.objects.get(ID__exact=i)
                    k.append(player_)
                    if i in dict_k:
                        elem = dict_k[i]
                        list_of_actives_a.append(elem.Name1.Name_eng)
                        list_of_actives_b.append(elem.Name2.Name_eng)
                        list_of_actives_c.append(elem.Name3.Name_eng)
                    else:
                        list_of_actives_a.append(empty_choice)
                        list_of_actives_b.append(empty_choice)
                        list_of_actives_c.append(empty_choice)
                        Factor(Day=day1,
                               UserID=player_,
                               Name1=default_act,
                               Name2=default_act,
                               Name3=default_act).save(
                               )  # ту логику лучше убрать в репозиторий
                    #  до этого все строчки про то, как преобразовать в нужный вид полученные данные + для тех, кто не
                    # сделал выбор - деньги по-умолчанию в банке
                game1.Choice(day1, list_of_actives_a, list_of_actives_b,
                             list_of_actives_c)  # делаем выбор
            else:
                a = [i.Name1.Name_eng for i in k]
                b = [i.Name2.Name_eng for i in k]
                c = [i.Name3.Name_eng for i in k]
                game1.Choice(day1, [i.Name1.Name_eng for i in k],
                             [i.Name2.Name_eng for i in k],
                             [i.Name3.Name_eng for i in k])
            dataframe, was_more_than_40 = game1.Gamble(
                day1)  # проводим расчёты
            # TODO ВОТ ТУТ Я ДОСТАЛ ЭТУ ПЕРЕМЕННУЮ И ЕЕ ТЕПЕРЬ НАДО КАК-ТО СОХРАНИТЬ В БД - ОНА ОДНА НА ВСЕХ
            i = 0
            act_a = 'asset_' + str(day1) + '_1'
            act_b = 'asset_' + str(day1) + '_2'
            act_c = 'asset_' + str(day1) + '_3'
            # act_a_historical = 'asset_' + str(day1) + '_1_' + 'for_dohod'
            # act_b_historical = 'asset_' + str(day1) + '_2_' + 'for_dohod'
            # act_c_historical = 'asset_' + str(day1) + '_3_' + 'for_dohod'

            for a, b, c, d, e, f, g in game1.data[[
                    act_a,
                    act_b,
                    act_c,  # a, b, c, aa, bb, cc, d, e, f, g
                    # act_a_historical,act_b_historical, act_c_historical,
                    'educ',
                    'mortgage_count',
                    'further_mortgage',
                    'now_mortgage'
            ]].to_numpy():
                user = k[i]
                if flag:
                    user = user.UserID  # тут просто был  просчет с юзером и идшником
                user.nextyear(np.round(a, 4), np.round(b, 4), np.round(c, 4),
                              e, f, g, d, day)  # aa,bb,cc
                user.Education = d
                user.save()
                f = user.factor_set.filter(Day=day1)[0]
                f.ActA_increase = user.percentage_increase_active_a()
                f.ActB_increase = user.percentage_increase_active_b()
                f.ActC_increase = user.percentage_increase_active_c()
                f.save()
                i += 1
        Admin.objects.all().delete()
        new_day = Admin(Day=day, Was_more_fourty=was_more_than_40)
        new_day.save()  # просто меняем день на новый
        day = new_day.Day
        players = Factory.get_players()
        counter = len(Factor.objects.filter(Day=day))
        q = len(players)
    except:
        raise Http404('Что-то пошло не так в to_admin_page')
    return render(
        request, "player/AdminPage.html", {
            'counter': counter,
            'q': q,
            'actives': actives,
            'players': players,
            'day': day
        })
Esempio n. 8
0
def make_choice(request,
                player_name):  # игроком нажата клавиша (подтвердить выбор)
    try:
        st_only = False
        player = Player.objects.get(Name=player_name)

        # player.Day = player.Day + 1 #TODO Позже перестать использовать день как флаг что игрок сделал ход
        # player.save() # не учел где мы используем день, как флаг
        day = list(Admin.objects.all())[-1:][0].Day
        # player.save()
        players = Factory.get_players()
        rating = list(players).index(player) + 1
        ##
        len_rating = len(players)
        id_actives = [0, 1, 2, 8]
        if day >= 4:
            id_actives += [3, 4]
        if day > 6:
            id_actives += [5, 7]
            id_actives.remove(1)
            if st_only:
                id_actives += [6]
        actives = [i for i in Active.objects.all() if i.Id in id_actives]
        ##
        a = request.POST.get('activeA')
        b = request.POST.get('activeB')
        c = request.POST.get('activeС')
        if not a:
            a = 'Банк'
        if not b:
            b = 'Банк'
        if not c:
            c = 'Банк'
        act_a = Active.objects.get(Name__startswith=a)
        act_b = Active.objects.get(Name__startswith=b)
        act_c = Active.objects.get(Name__startswith=c)
        user_factors = Factor(Name1=act_a,
                              Name2=act_b,
                              Name3=act_c,
                              Day=day,
                              UserID=player)
        factor = Factor.objects.filter(Day=day, UserID=player)
        if len(factor) != 0:
            factor.delete()
        user_factors.save()
        factor = Factor.objects.filter(Day=day)
        if player.Day <= day and len(factor) < len(players) > 1:
            player.Day = player.Day + 1
            player.save()
        if len(factor) >= len(players) > 1:
            factory = Factory()
            empty_choice = 'bank'
            flag = True
            day1 = day
            was_more_than_40 = list(
                Admin.objects.all())[-1:][0].Was_more_fourty
            Admin.objects.all().delete()  # удаляем этот день из базы
            user_factors = Factor.objects.filter(
                Day=day)  # достаем все выборы за этот день
            players = Factory.get_players()
            new_day = Admin(Day=day + 1, Was_more_fourty=was_more_than_40)
            new_day.save()  # просто меняем день на новый
            day = new_day.Day
            k = sorted(user_factors, key=lambda x: x.UserID.ID
                       )  # отсортируем выборы юзеров по ид (отметим, что
            # выбрали только тех юзеров, которые сделали выбор в данном году)
            idshniki = [i.UserID.ID
                        for i in k]  # чтобы был всегда один и тот же порядок
            id_players_sorted = sorted([i.ID for i in list(players)])
            # TODO ВОТ ТУТ НАДО ДОСТАТЬ ПЕРЕМЕННУЮ ИЗ БД И ОТПРАВИТЬ ЕЕ В ФУНКЦИЮ get_repository (аргумент flag_40, линия 33 в repository.py)
            game1 = factory.get_repository(
                id_players_sorted, flag_40=was_more_than_40
            )  # нициализируем репозиторий только по тем юзерам, которые сделали
            # первый ход. Те, кто не сделали первых ход в дальнейшем будут игнорироваться. - Это можно пофиксить через
            # репозиторий. Если это не первый год, то вызывается уже существующий репозиторий
            if len(idshniki) < len(game1.id_):
                flag = False  # если тех, кто сделал выбор в текущем году меньше, чем тех, кто сделал выбор в первом году
                list_of_actives_a = []
                list_of_actives_b = []
                list_of_actives_c = []
                dict_k = {el.UserID.ID: el for el in k}
                k = []
                default_act = Active.objects.get(Name_eng=empty_choice)
                for i in game1.id_:
                    player_ = Player.objects.get(ID__exact=i)
                    k.append(player_)
                    if i in dict_k:
                        elem = dict_k[i]
                        list_of_actives_a.append(elem.Name1.Name_eng)
                        list_of_actives_b.append(elem.Name2.Name_eng)
                        list_of_actives_c.append(elem.Name3.Name_eng)
                    else:
                        list_of_actives_a.append(empty_choice)
                        list_of_actives_b.append(empty_choice)
                        list_of_actives_c.append(empty_choice)
                        Factor(Day=day1,
                               UserID=player_,
                               Name1=default_act,
                               Name2=default_act,
                               Name3=default_act).save(
                               )  # ту логику лучше убрать в репозиторий
                    #  до этого все строчки про то, как преобразовать в нужный вид полученные данные + для тех, кто не
                    # сделал выбор - деньги по-умолчанию в банке
                game1.Choice(day1, list_of_actives_a, list_of_actives_b,
                             list_of_actives_c)  # делаем выбор
            else:
                a = [i.Name1.Name_eng for i in k]
                b = [i.Name2.Name_eng for i in k]
                c = [i.Name3.Name_eng for i in k]
                game1.Choice(day1, [i.Name1.Name_eng for i in k],
                             [i.Name2.Name_eng for i in k],
                             [i.Name3.Name_eng for i in k])
            dataframe, was_more_than_40 = game1.Gamble(
                day1)  # проводим расчёты
            # TODO ВОТ ТУТ Я ДОСТАЛ ЭТУ ПЕРЕМЕННУЮ И ЕЕ ТЕПЕРЬ НАДО КАК-ТО СОХРАНИТЬ В БД - ОНА ОДНА НА ВСЕХ
            i = 0
            act_a = 'asset_' + str(day1) + '_1'
            act_b = 'asset_' + str(day1) + '_2'
            act_c = 'asset_' + str(day1) + '_3'
            # act_a_historical = 'asset_' + str(day1) + '_1_' + 'for_dohod'
            # act_b_historical = 'asset_' + str(day1) + '_2_' + 'for_dohod'
            # act_c_historical = 'asset_' + str(day1) + '_3_' + 'for_dohod'

            for a, b, c, d, e, f, g in game1.data[[
                    act_a,
                    act_b,
                    act_c,  # a, b, c, aa, bb, cc, d, e, f, g
                    # act_a_historical,act_b_historical, act_c_historical,
                    'educ',
                    'mortgage_count',
                    'further_mortgage',
                    'now_mortgage'
            ]].to_numpy():
                user = k[i]
                if flag:
                    user = user.UserID  # тут просто был  просчет с юзером и идшником
                user.nextyear(np.round(a, 4), np.round(b, 4), np.round(c, 4),
                              e, f, g, d, day)  # aa,bb,cc
                user.Education = d
                user.save()
                f = user.factor_set.filter(Day=day1)[0]
                f.ActA_increase = user.percentage_increase_active_a()
                f.ActB_increase = user.percentage_increase_active_b()
                f.ActC_increase = user.percentage_increase_active_c()
                f.save()
                i += 1
            Admin.objects.all().delete()
            new_day = Admin(Day=day, Was_more_fourty=was_more_than_40)
            new_day.save()  # просто меняем день на новый
            day = new_day.Day
            players = Factory.get_players()

    except:
        raise Http404('Что-то пошло не так в make_chio')
    return render(
        request, "player/mainWindow.html", {
            'player': player,
            'len_rating': len_rating,
            'players': players,
            'actives': actives,
            'rating': rating,
            'day': day
        })