- import helper
- import clr
- clr.AddReference("Wtvision.Sports.Tools.UefaDigitalAPIImporter")
- from Wtvision.Sports import UefaDigitalApiProxy
- from Wtvision.Sports.Uefa import EventTypes
- from System import Array, DateTime
- from System.Collections.Generic import List
- from System.Threading.Tasks import Task
- Stats = ["ball_possession", "attempts_on_target", "attempts", "corners", "fouls_suffered"]
- Show_Botom_Information = False
- Project.EventsManager.UnsubscribeEvent("GameOnline.ScoreChanged", Script.Id)
- Project.EventsManager.SubscribeEvent("GameOnline.ScoreChanged", Script.Id, "OnGameOnline_ScoreChanged", True)
- def OnGameOnline_ScoreChanged(sender, args):
- if GameOnline.Clock.ActivePart.Name.ToString().lower() != "penalties":
- graphic = GraphicTemplatesManager.GetGraphicByName("ScoreWithScorers_LineUp")
- Task.Run(action = lambda : IntelliflowController.TakeIn(graphic, OutputManager.ActiveChannelOutput, workflowType = IntelliflowController.EWorkflowType.Program))
- def __updateData(graphicOnAirItem, viewBag, momentExecution):
- matchId = Game.ExternalId
- game_stats = UefaDigitalApiProxy.GetTeamStatistic(matchId = matchId)
- __fill_stats(viewBag, game_stats)
- lineUp = UefaDigitalApiProxy.GetMatchLineups(matchId = matchId)
- __updateSubstitutions(viewBag, matchId,lineUp)
- __fill_cards(viewBag,lineUp)
- if Show_Botom_Information:
- __fillBottomInformation(viewBag)
- def __beforeProgram(graphicOnAirItem, momentExecution):
- #helper.GraphicTakeIn("ScoreWithScorers_LineUp", GraphicTemplatesManager, OutputManager, IntelliflowController)
- if Game.Clock.ActivePart.Name != "Penalties":
- graphic = GraphicTemplatesManager.GetGraphicByName("ScoreWithScorers_LineUp")
- else:
- graphic = GraphicTemplatesManager.GetGraphicByName("Penalties")
- Task.Run(action = lambda : IntelliflowController.TakeIn(graphic, OutputManager.ActiveChannelOutput, workflowType = IntelliflowController.EWorkflowType.Program))
- graphicOnAirItem.Scene.Show("Substitutes_to_Statistics")
- def __getData(graphicOnAirItem, viewBag, momentExecution):
- #viewBag.SetString("tLiveInput", "2")
- __clearTags(viewBag)
- matchId = Game.ExternalId
- cards = __getCards(matchId)
- lineUp = UefaDigitalApiProxy.GetMatchLineups(matchId = matchId)
- game_stats = UefaDigitalApiProxy.GetTeamStatistic(matchId = matchId)
- if not lineUp.HomeTeam or not lineUp.AwayTeam:
- momentExecution.MessageType = momentExecution.MessageType.Info
- momentExecution.Message = "LINEUP: No players!"
- momentExecution.Cancel = True
- return
- if Show_Botom_Information:
- __fillBottomInformation(viewBag)
- ### GENERAL INFORMATION
- viewBag.SetTranslatedText("tHomeStatTitle", "{{%s}}.{{LineUp_Stats}}|filter:ToUpper " % "Statistics")
- viewBag.SetTranslatedText("tAwayStatTitle", "{{%s}}.{{LineUp_Stats}}|filter:ToUpper " % "Statistics")
- ## LINEUPS
- __fillTeamData(Game.HomeTeam,viewBag)
- __fillTeamData(Game.AwayTeam,viewBag)
- ## SUBSTITUTIONS
- __updateSubstitutions(viewBag, matchId,lineUp)
- # STATS
- __fill_stats(viewBag, game_stats)
- def __fillTeamData(team, viewBag):
- """Fill Team tags information
- Parameters:
- team: Wtvision.Sports.Team, viewBag
- Returns:
- bool:Returns true if fill all tags, false on exception
- """
- #Define if the Team is Home or Away to affect the correct Tag information
- teamType = "Home" if team == Game.HomeTeam else "Away"
- viewBag.SetTranslatedText("t{homeoraway}CoachFunction".format(homeoraway=teamType), "{{%s}}.{{LineUp}}|filter:ToUpper " % team.Coach.Function)
- viewBag.SetString("t{homeoraway}CoachFirstName".format(homeoraway=teamType), "")
- viewBag.SetString("t{homeoraway}CoachLastName".format(homeoraway=teamType), team.Coach.ShortName)
- # if the Caoch is at Risk the Card type is 1 to show the yellowcard otherwise 0 to hide the card
- viewBag.SetInt("v{homeoraway}CoachCard", 0)
- initialPlayers = filter(lambda player: player.InitialState.ToString().upper() == "INPLAY", team.InGameByKeeperAndShirt)
- players = []
- #players.extend(team.InPlayByKeeperAndShirt)
- players.extend(initialPlayers)
- players.extend([None]*(11-len(players)))
- players.extend(team.InBenchByKeeperAndShirt)
- for enum,player in enumerate(players):
- viewBag.SetVisibility("v{homeoraway}SubstitutionVisibility{idx:02d}".format(homeoraway=teamType, idx=(enum+1)), False)
- viewBag.SetInt("v{homeoraway}Card{idx:02d}".format(homeoraway=teamType, idx=(enum+1)), 0)
- viewBag.SetString("t{homeoraway}Number{idx:02d}".format(homeoraway=teamType, idx=(enum+1)), player.Number)
- viewBag.SetString("t{homeoraway}Name{idx:02d}".format(homeoraway=teamType, idx=(enum+1)), "")
- viewBag.SetString("t{homeoraway}LastName{idx:02d}".format(homeoraway=teamType, idx=(enum+1)), player.OtherNames.upper() if player.OtherNames else player.ShortName.upper())
- def __fill_cards(viewBag,lineUp):
- matchId = Game.ExternalId
- cards = __getCards(matchId)
- for enum,player in enumerate(lineUp.HomeTeam.Field):
- if player.Player.Id in cards.keys():
- viewBag.SetInt("vHomeCard%02d" % (enum+1), 1 if cards[player.Player.Id]=="YELLOW_CARD" else 2)
- else:
- viewBag.SetInt("vHomeCard%02d" % (enum+1), 0)
- viewBag.SetString("tHomeNumber%02d" % (enum+1), player.JerseyNumber.ToString())
- if hasattr(player.Player.Translations, "ShortName"):
- viewBag.SetString("tHomeLastName%02d" % (enum+1), player.Player.Translations.ShortName["EN"].ToString().upper())
- for enum,player in enumerate(lineUp.AwayTeam.Field):
- viewBag.SetString("tAwayNumber%02d" % (enum+1), player.JerseyNumber.ToString())
- if player.Player.Id in cards.keys():
- viewBag.SetInt("vAwayCard%02d" % (enum+1), 1 if cards[player.Player.Id]=="YELLOW_CARD" else 2)
- else:
- viewBag.SetInt("vAwayCard%02d" % (enum+1), 0)
- if hasattr(player.Player.Translations, "ShortName"):
- viewBag.SetString("tAwayLastName%02d" % (enum+1), player.Player.Translations.ShortName["EN"].ToString().upper())
- def __fill_stats(viewBag, game_stats):
- ### HOME STATS
- if len(game_stats) == 0:
- return
- filtered_stats_home = []
- if game_stats[0].TeamId == Game.HomeTeam.ExternalId:
- for stat in game_stats[0].Statistics:
- if stat.Name in Stats:
- stat_name = stat.Name
- stat_value = stat.Value
- filtered_stats_home.append((stat_name, stat_value))
- for enum, stat in enumerate(filtered_stats_home):
- if stat[0].ToString().lower() == "ball_possession":
- viewBag.SetTranslatedText("tHomeStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % "possession")
- viewBag.SetString("tHomeStatValue%02d" % (enum+1), "%s%%" % stat[1])
- else:
- viewBag.SetTranslatedText("tHomeStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % stat[0])
- viewBag.SetString("tHomeStatValue%02d" % (enum+1), stat[1])
- else:
- for stat in game_stats[1].Statistics:
- if stat.Name in Stats:
- stat_name = stat.Name
- stat_value = stat.Value
- filtered_stats_home.append((stat_name, stat_value))
- for enum, stat in enumerate(filtered_stats_home):
- if stat[0].ToString().lower() == "ball_possession":
- viewBag.SetTranslatedText("tHomeStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % "possession")
- viewBag.SetString("tHomeStatValue%02d" % (enum+1), "%s%%" % stat[1])
- else:
- viewBag.SetTranslatedText("tHomeStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % stat[0])
- viewBag.SetString("tHomeStatValue%02d" % (enum+1), stat[1])
- ### AWAY STATS
- filtered_stats_away = []
- if game_stats[0].TeamId == Game.AwayTeam.ExternalId:
- for stat in game_stats[0].Statistics:
- if stat.Name in Stats:
- stat_name = stat.Name
- stat_value = stat.Value
- filtered_stats_away.append((stat_name, stat_value))
- for enum, stat in enumerate(filtered_stats_away):
- if stat[0].ToString().lower() == "ball_possession":
- viewBag.SetTranslatedText("tAwayStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % "possession")
- viewBag.SetString("tAwayStatValue%02d" % (enum+1), "%s%%" % stat[1])
- else:
- viewBag.SetTranslatedText("tAwayStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % stat[0])
- viewBag.SetString("tAwayStatValue%02d" % (enum+1), stat[1])
- else:
- for stat in game_stats[1].Statistics:
- if stat.Name in Stats:
- stat_name = stat.Name
- stat_value = stat.Value
- filtered_stats_away.append((stat_name, stat_value))
- for enum, stat in enumerate(filtered_stats_away):
- if stat[0].ToString().lower() == "ball_possession":
- viewBag.SetTranslatedText("tAwayStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % "possession")
- viewBag.SetString("tAwayStatValue%02d" % (enum+1), "%s%%" % stat[1])
- else:
- viewBag.SetTranslatedText("tAwayStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % stat[0])
- viewBag.SetString("tAwayStatValue%02d" % (enum+1), stat[1])
- def __getCards(matchId):
- game_events = UefaDigitalApiProxy.GetMatchEvents(matchId = matchId, filter = EventTypes.CARDS, offset= "0",limit = "500")
- result = {}
- for event in game_events:
- if event.PrimaryActor.Person.Id in result.keys():
- if result[event.PrimaryActor.Person.Id] == "RED_CARD":
- continue
- else:
- result[event.PrimaryActor.Person.Id] = str(event.Type)
- return result
- def __updateSubstitutions(viewBag, matchId, lineUp):
- home_team_id = lineUp.HomeTeam.Team.Id.ToString()
- away_team_id = lineUp.AwayTeam.Team.Id.ToString()
- substitution_events_home = []
- substitution_events_away = []
- game_events = UefaDigitalApiProxy.GetMatchEvents(matchId = matchId, filter = EventTypes.LINEUP, offset= "0",limit = "500")
- cards = __getCards(matchId)
- substitution_events = filter(lambda sub_event: sub_event.Type.ToString().upper() == "SUBSTITUTION", game_events) # FILTER TO SHOW ONLY SUBSTITUTION EVENTS
- substitution_events_home = filter(lambda sub: sub.PrimaryActor.Team.Id.ToString() == home_team_id, substitution_events)
- substitution_events_away = filter(lambda sub: sub.PrimaryActor.Team.Id.ToString() == away_team_id, substitution_events)
- if len(substitution_events_home) >= 5:
- viewBag.SetFloat("vHomeSubstitutes", 5)
- else:
- viewBag.SetFloat("vHomeSubstitutes", len(substitution_events_home))
- if len(substitution_events_away) >= 5:
- viewBag.SetFloat("vAwaySubstitutes", 5)
- else:
- viewBag.SetFloat("vAwaySubstitutes", len(substitution_events_away))
- if substitution_events_home > 0:
- for enum, sub_event in enumerate(substitution_events_home):
- player_home_id = sub_event.PrimaryActor.Person.Id
- player_home = next((player for player in Game.HomeTeam.Players if sub_event.SecondaryActor.Person.Id == player.ExternalId), None)
- index = next((i for i,x in enumerate(lineUp.HomeTeam.Field,1) if player_home_id == x.Player.Id), None)
- viewBag.SetString("tHomeSubstitutionNumber%02d" % (enum+1), player_home.Number)
- if index:
- viewBag.SetVisibility("vHomeSubstitutionVisibility%02d" % index, True)
- if hasattr(sub_event.SecondaryActor.Person.Translations, "LastName"):
- viewBag.SetString("tHomeSubstitutionLastName%02d" % (enum+1), sub_event.SecondaryActor.Person.Translations.ShortName["EN"].ToString().upper())
- if sub_event.SecondaryActor.Person.Id in cards.keys():
- viewBag.SetInt("vHomeSubstitutionCard%02d" % (enum+1), 1 if cards[sub_event.SecondaryActor.Person.Id]=="YELLOW_CARD" else 2)
- else:
- viewBag.SetInt("vHomeSubstitutionCard%02d" % (enum+1), 0)
- if substitution_events_away > 0:
- for enum, sub_event in enumerate(substitution_events_away):
- player_away_id = sub_event.PrimaryActor.Person.Id
- player_away = next((player for player in Game.AwayTeam.Players if sub_event.SecondaryActor.Person.Id == player.ExternalId), None)
- index = next((i for i,x in enumerate(lineUp.AwayTeam.Field,1) if player_away_id == x.Player.Id), None)
- viewBag.SetString("tAwaySubstitutionNumber%02d" % (enum+1), player_away.Number)
- if index:
- viewBag.SetVisibility("vAwaySubstitutionVisibility%02d" % index, True)
- if hasattr(sub_event.SecondaryActor.Person.Translations, "ShortName"):
- viewBag.SetString("tAwaySubstitutionLastName%02d" % (enum+1), sub_event.SecondaryActor.Person.Translations.ShortName["EN"].ToString().upper())
- if sub_event.SecondaryActor.Person.Id in cards.keys():
- viewBag.SetInt("vAwaySubstitutionCard%02d" % (enum+1), 1 if cards[sub_event.SecondaryActor.Person.Id]=="YELLOW_CARD" else 2)
- else:
- viewBag.SetInt("vAwaySubstitutionCard%02d" % (enum+1), 0)
- def __fillBottomInformation(viewBag):
- competitionId = Game.Competition.IdCompetition
- matchDayId = Game.Attributes["MatchDayId"]
- ### METHOD TO GET ACTUAL LEG
- matchId = Game.ExternalId
- active_game_events = UefaDigitalApiProxy.GetMatch(matchId = matchId)
- leg = active_game_events.Type.ToString().upper()
- ### END
- matches = UefaDigitalApiProxy.GetMatches(offset= "0",limit = "500",competitionId = Array[str]([Game.Competition.IdCompetition]),matchDayId = Array[str]([matchDayId]))
- matches = sorted(matches, key=lambda match: match.KickOffTime.DateTime)
- matches = [match for match in matches if match.Type.ToString().upper() == leg]
- current_date = DateTime.Today
- #matches = [match for match in matches if match.KickOffTime.Date == current_date.Date] # JUST FOR TODAY GAMES
- viewBag.SetFloat("vBottomGames", len(matches))
- for enum, match in enumerate(matches):
- viewBag.SetString("tHomeBottomTeam%02d" % (enum+1), match.HomeTeam.TeamCode.ToString().upper())
- viewBag.SetString("tAwayBottomTeam%02d" % (enum+1), match.AwayTeam.TeamCode.ToString().upper())
- status = match.Status.ToString().upper()
- if status == "FINISHED":
- if hasattr(match.Score, "Total"):
- result = "%s - %s" % (match.Score.Total.Home, match.Score.Total.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- else:
- result = "%s - %s" % (match.Score.Regular.Home, match.Score.Regular.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- elif status == "LIVE":
- if hasattr(match.Score, "Total"):
- result = "(%s - %s)" % (match.Score.Total.Home, match.Score.Total.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- else:
- result = "(%s - %s)" % (match.Score.Regular.Home, match.Score.Regular.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- elif status == "UPCOMING":
- date = match.KickOffTime.DateTime.ToLocalTime()
- hour_minute = "%sH%02d" % (date.Hour, date.Minute)
- viewBag.SetTranslatedText("tGameInfo%02d" % enum, "{{%s}}.{{AggregateSummaryResults}}" % date)
- viewBag.SetString("tBottomTime%02d" % (enum+1), "%s" % hour_minute)
- if match.Id.ToString() == Game.ExternalId.ToString():
- viewBag.SetVisibility("vHighlightVisibility", True)
- viewBag.SetFloat("vBottomHighlight", enum+1)
- viewBag.SetString("tHomeBottomTeamHighlight", match.HomeTeam.TeamCode.ToString().upper())
- viewBag.SetString("tAwayBottomTeamHighlight", match.AwayTeam.TeamCode.ToString().upper())
- status = match.Status.ToString().upper()
- if status == "FINISHED":
- if hasattr(match.Score, "Total"):
- result = "%s - %s" % (match.Score.Total.Home, match.Score.Total.Away)
- viewBag.SetString("tBottomTimeHighlight", result)
- else:
- result = "%s - %s" % (match.Score.Regular.Home, match.Score.Regular.Away)
- viewBag.SetString("tBottomTimeHighlight", result)
- elif status == "LIVE":
- if hasattr(match.Score, "Total"):
- result = "(%s - %s)" % (match.Score.Total.Home, match.Score.Total.Away)
- viewBag.SetString("tBottomTimeHighlight", result)
- else:
- result = "(%s - %s)" % (match.Score.Regular.Home, match.Score.Regular.Away)
- viewBag.SetString("tBottomTimeHighlight", result)
- elif status == "UPCOMING":
- date = match.KickOffTime.DateTime.ToLocalTime()
- hour_minute = "%sH%02d" % (date.Hour, date.Minute)
- viewBag.SetString("tBottomTimeHighlight", "%s" % hour_minute)
- def __beforeProgramOut(graphicOnAirItem, momentExecution):
- #helper.GraphicTakeOut("ScoreWithScorers_LineUp", GraphicTemplatesManager, OutputManager, IntelliflowController)
- #graphic = GraphicTemplatesManager.GetGraphicByName("ScoreWithScorers_LineUp")
- helper.GraphicTakeOut("ScoreWithScorers_LineUp", GraphicTemplatesManager, OutputManager, IntelliflowController)
- #Task.Run(action = lambda: intelliflowController.TakeOut(graphic, output, workflowType = intelliflowController.EWorkflowType.Program))
- def __clearTags(viewBag):
- for i in range(1,25):
- viewBag.SetString("tHomeName%02d" % i, "")
- viewBag.SetString("tHomeLastName%02d" % i, "")
- viewBag.SetString("tHomeNumber%02d" % i, "")
- viewBag.SetString("tHomeSubstitutionName%02d" % i, "")
- viewBag.SetString("tHomeSubstitutionLastName%02d" % i, "")
- viewBag.SetString("tHomeSubstitutionNumber%02d" % i, "")
- viewBag.SetString("tHomeStatName%02d" % i, "")
- viewBag.SetString("tHomeStatValue%02d" % i, "")
- viewBag.SetInt("vHomeCard%02d" % i, 0)
- viewBag.SetString("tAwayName%02d" % i, "")
- viewBag.SetString("tAwayLastName%02d" % i, "")
- viewBag.SetString("tAwayNumber%02d" % i, "")
- viewBag.SetString("tAwaySubstitutionName%02d" % i, "")
- viewBag.SetString("tAwaySubstitutionLastName%02d" % i, "")
- viewBag.SetString("tAwaySubstitutionNumber%02d" % i, "")
- viewBag.SetString("tAwayStatName%02d" % i, "")
- viewBag.SetString("tAwayStatValue%02d" % i, "")
- viewBag.SetInt("vAwayCard%02d" % i, 0)
- viewBag.SetFloat("vBottomGames", 0)
- viewBag.SetFloat("vHomeSubstitutes", 0)
- viewBag.SetFloat("vAwaySubstitutes", 0)
- viewBag.SetVisibility("vHighlightVisibility", False)
- viewBag.SetTranslatedText("tHomeCoachFunction", "")
- viewBag.SetString("tHomeCoachFirstName", "")
- viewBag.SetString("tHomeCoachLastName", "")
- viewBag.SetInt("vHomeCoachCard", 0)
- viewBag.SetTranslatedText("tAwayCoachFunction", "")
- viewBag.SetString("tAwayCoachFirstName", "")
- viewBag.SetString("tAwayCoachLastName", "")
- viewBag.SetInt("vAwayCoachCard", 0)
- for team in ["Home", "Away"]:
- for tagidx in range(1,6):
- viewBag.SetString("t%sSubstitutionName%02d"%(team, tagidx), "")
- viewBag.SetString("t%sSubstitutionLastName%02d"%(team, tagidx), "")
- viewBag.SetInt("v%sSubstitutionCard%02d"%(team, tagidx), 0)