def handleSave(self, action): """Handles the Edit action of the form""" data, errors = self.extractData() #If all validators are ok: proceed if len(errors) == 0: #get the session from z3c.sacofig session = named_scoped_session('footballchallenge') event_id = session.query(Event).filter( Event.deadline > datetime.now()).one().id_ #get the userid we need it to find the right team membershiptool = getToolByName(self.context, 'portal_membership') userid = membershiptool.getAuthenticatedMember().getId() if not session.query(Team).filter_by(user_id=userid).filter_by(event_id=event_id).all(): #create the team if it doesn't exist. team = Team(userid, event_id, name=data['name']) session.add(team) else: team = session.query(Team).filter_by(user_id=userid).filter_by(event_id=event_id).one() session.query(Teams_Players).filter(Teams_Players.team_id==\ team.id_).delete() team.name = data['name'] nations = [] all_nations = [] for k, v in data.items(): if not k == 'name' and v: player = session.query(Player).filter(Player.id_ == v).one() #Create relationsship between Team and Player if bool(not 'substitute' in k): if not player.nation_id in nations: nations.append(player.nation_id) if not player.nation_id in all_nations: all_nations.append(player.nation_id) else: if not player.nation_id in all_nations: all_nations.append(player.nation_id) team.players.append(Teams_Players(team.id_, player, bool(not 'substitute' in k))) if len(nations) >= 6 and len(all_nations) >=12 and len(team.players) == 22: team.valid = True else: msg = _(u'label_not_valid', default=u'Your Team is not valid and will not receive any points') IStatusMessage(self.request).addStatusMessage( msg, type='warning') team.valid = False msg = _(u'label_changes_saved', default=u'Your changes are saved successfully') IStatusMessage(self.request).addStatusMessage( msg, type='info') return self.request.RESPONSE.redirect(self.context.absolute_url()+'/team_overview')
def __call__(self): session = named_scoped_session('footballchallenge') if not session.query(Event).filter(Event.deadline > datetime.now()).all(): msg = _(u'label_not_edit', default="The Event has started. You can't edit your Team now.") IStatusMessage(self.request).addStatusMessage( msg, type='error') return self.request.response.redirect(self.context.absolute_url()) else: return super(EditTeamForm, self).__call__()
def get_tabs(self): tabs = [] session = named_scoped_session("footballchallenge") event_id = session.query(Event).all()[-1].id_ leagues = session.query(League).filter(League.event_id == event_id).all() for league in leagues: self.register_league_tab(league) tabs.append({'id': _('league-%i' % league.id_, default=league.name), 'class': ''}) return tabs
def handleImport(self, action): data, errors = self.extractData() if len(errors) == 0: name = data['name'] event = data['event'] session = named_scoped_session('footballchallenge') league = League(name, event) session.add(league) portal_actions = getToolByName(self.context, 'portal_actions') transaction.commit() msg = _(u'league_created', default=u'League created successfully') IStatusMessage(self.request).addStatusMessage( msg, type='information') return self.request.RESPONSE.redirect(self.context.absolute_url()+'/ranking/'+str(league.id_))
def handleImport(self, action): data, errors = self.extractData() if len(errors) == 0: session = named_scoped_session('footballchallenge') league = session.query(League).filter(League.id_ == self.league_id).one() teams = [] event_id = session.query(Event).order_by(desc(Event.deadline)).first().id_ for user_id in data['teams']: if session.query(Team).filter(Team.user_id == user_id).all(): team = session.query(Team).filter(Team.user_id == user_id).one() else: team = Team(user_id, event_id) session.add(team) teams.append(team) league.teams = teams msg = _(u'label_teams_assign', default=u'Teams were assigned successfully.') IStatusMessage(self.request).addStatusMessage( msg, type='information') return self.request.RESPONSE.redirect(self.context.absolute_url() + '/assign_users/'+self.league_id)
def player_only_once(data): """A Validator that checks if every Player is only used once""" keys = EditTeamSchema playerset = set([getattr(data, name) for name in keys.names()]) playerlist = [getattr(data, name) for name in keys.names()] if len(playerset) == len(keys.names()): return True double_players = [x for x in playerset if playerlist.count(x) > 1] playernames = '' session = named_scoped_session('footballchallenge') if len(double_players) == 1: if not double_players[0]: return True for player_id in double_players: if player_id: playernames += session.query(Player).filter( Player.id_ == player_id).one().name raise Invalid(_(u"You can't use the player ${players} multiple times", mapping={'players':playernames}))
def get_log(self): """Returns a Log with all Events that influenced the Points of a Player """ #TODO: Check if we can refactor this. The code looks bloody awful session = named_scoped_session('footballchallenge') log = [] #get right mapping if self.position == "striker": mapping = POINT_MAPPING_STRIKER elif self.position == "midfield": mapping = POINT_MAPPING_MIDFIELD elif self.position == "defender": mapping = POINT_MAPPING_DEFENDER else: mapping = POINT_MAPPING_KEEPER #get all games where this player played games = session.query(Game).filter(Game.players.any( id_=self.id_)).order_by(Game.date).all() for game in games: if game.nation1 == self.nation: enemy = game.nation2 else: enemy = game.nation1 #get his cards for this game cards = self.get_cards(session, game.id_) if cards: log.append([cards[0], mapping[cards[0].color.lower()], cards[0].color.encode('utf-8')+ ' Card']) goals = self.get_goals(session, game.id_) #get his goals if goals: for goal in goals: if goal.is_penalty == False: log.append([goal, mapping['goal'], _(u'label_goal', default=u'Goal vs ${enemy}', mapping=dict(enemy=enemy.name))]) else: log.append([goal, mapping['penalty'], _(u'label_penalty_log', default=u'Penalty vs ${enemy}', mapping=dict(enemy=enemy.name))]) assists = self.get_assists(session, game.id_) if assists: for assist in assists: log.append([assist, mapping['assist'], _(u'label_assist', default=u'Assist vs ${enemy}', mapping=dict(enemy=enemy.name))]) saves = self.get_saves(session, game.id_) if saves: for save in saves: log.append([save, mapping['save'], _(u'label_save_log', default=u'Save vs ${enemy}', mapping=dict(enemy=enemy.name))]) #distribute points for victory, draw and loss if game.nation1 == self.nation: if game.score_nation1 > game.score_nation2: log.append([game, mapping['victory'], _(u'label_victory', default=u'Victory vs ${nation}', mapping=dict(nation=game.nation2.name))]) elif game.score_nation1 == game.score_nation2: log.append([game, mapping['draw'],_(u'label_draw', default=u'Draw vs ${nation}', mapping=dict(nation=game.nation2.name))]) elif game.score_nation1 < game.score_nation2: log.append([game, mapping['loss'], _(u'label_loss', default=u'Loss vs ${nation}', mapping=dict(nation=game.nation2.name))]) if self.position == "defender" or self.position == "keeper": if game.score_nation2 == 0: log.append([game, mapping['no_goals'], _(u'label_nogoals', default=u'No Goals received')]) elif game.score_nation2 >=3: log.append([game, mapping['3_goals'], _(u'label_3goals', default=u'3 Goals received')]) else: if game.score_nation1 > game.score_nation2: log.append([game, mapping['loss'], _(u'label_loss', default=u'Loss vs ${nation}', mapping=dict(nation=game.nation1.name))]) elif game.score_nation1 == game.score_nation2: log.append([game, mapping['draw'], _(u'label_draw', default=u'Draw vs ${nation}', mapping=dict(nation=game.nation1.name))]) elif game.score_nation1 < game.score_nation2: log.append([game, mapping['victory'], _(u'label_victory', default=u'Victory vs ${nation}', mapping=dict(nation=game.nation1.name))]) if self.position == "defender" or self.position == "keeper": if game.score_nation1 == 0: log.append([game, mapping['no_goals'], _(u'label_nogoals', default=u'No Goals received')]) elif game.score_nation1 >=3: log.append([game, mapping['3_goals'], _(u'label_3goals', default=u'3 Goals received')]) return log
self.calculated = calculated def __repr__(self): return '<Game %s-%s>' % (self.nation1.country, self.nation2.country) def has_penalty(self): penaltys = [] for goal in self.goals: if goal.is_penalty: penaltys.append(goal) return bool(penaltys) def get_penalty(self): total_nation1_score = self.score_nation1 total_nation2_score = self.score_nation2 for goal in self.goals: if goal.is_penalty: if goal.player.nation_id == self.nation1_id: total_nation1_score += 1 else: total_nation2_score += 1 return '('+str(total_nation1_score)+':'+str(total_nation2_score)+' n.P.)' RoundVocabulary = SimpleVocabulary( [SimpleTerm(value=u'group1', title=_(u'label_group1', default=u'Group1')), SimpleTerm(value=u'group2', title=_(u'label_group2', default=u'Group2')), SimpleTerm(value=u'group3', title=_(u'label_group3', default=u'Group3')), SimpleTerm(value=u'roundof16', title=_(u'label_roundof16', default=u'Round of Sixteen')), SimpleTerm(value=u'quarterfinals', title=_(u'label_quarterfinals', default=u'Quarterfinals')), SimpleTerm(value=u'semifinals', title=_(u'label_semifinals', default=u'Semifinals')), SimpleTerm(value=u'finals', title=_(u'label_finals', default=u'Finals'))])