o
    
gw                     @   s  d dl mZ d dlmZ d dlmZ ddlmZmZm	Z	m
Z
mZ dd Zdd	 Zd
d Zd dlmZmZ d dlmZmZmZmZmZ ddlm	Z	mZmZmZmZmZmZmZm
Z
 dd Zd dlmZmZ d dlmZmZmZmZ ddlm
Z
mZmZmZmZmZmZ dd Zd dlmZ d dlmZmZmZmZmZ ddlm
Z
mZmZmZmZmZ d,ddZd,ddZdd Zd dlmZmZ ddlmZmZmZmZmZmZm
Z
 dd  Z d d!lmZm!Z! d d"l"m#Z# dd#lmZmZmZmZmZm$Z$ d$d% Z%d d"l"m#Z# dd&lm
Z
 d'd( Z&d)d* Z'd+S )-    )model_to_dict)render)Q   )SeasonReplayedgame
TeamseasonPlayerregisterReallifeconferencec                 C   s&   t j }d|i}t| t| d|S )Nplayerszstats/front_page.html)r	   objectsallprintr   )requestr   context r   )/root/dustats/djangounited/stats/views.py
front_page   s   
r   c                 C   s8   d| v rt | dd}|dkrd| S d| S | S )zAConvert '96p' to '1996' and '05p' to '2005' for display purposes.p `   1920)intreplace)year	base_yearr   r   r   format_playoff_year   s   

r   c                 C   sP  | j d}tjdd }|r/tjj|d}dd tjj|dD }dd t	j
 D }n	tj }i }i }i }|D ]}|jdf|jd	ffD ]N\}}	||i }
|
d
}||d}||vrfi ||< ||| vr||
dd| ddddddddddddddddddddddddd|| |< qI|j|j|jdf|j|j|jdffD ]K\}}}}|||i d
d}|| | d d  |7  < || | d d  |7  < || | | d  |7  < || | | d  |7  < q|||ji d
d}|||ji d
d}|j|jkrt|| |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < q<|j|jk r|| |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < q<|| |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < || |j d d  d7  < q<| D ]J\}}| D ]3}|d d |d d  |d d< |d d |d d  |d d< |d d |d d  |d d< q[t| dd dd||< qSt| d|||d S )!Nseason	year_codenamer   c                 S   s   i | ]}|j |j|jd qS ))r    conf_id)team_idr    r"   .0tr   r   r   
<dictcomp>!   s    zstandings.<locals>.<dictcomp>c                 S      i | ]}|j |jqS r   idr    )r%   cr   r   r   r'   %   s    
TFr"   zUnknown ConferencezTeam r   )winsdrawslossespoints	goals_forgoals_against	goal_diff)r#   	team_nametotalhomeawayr5   r6   r4   r0   r1   r,   r   r/      r.   r-   r2   c                 S   s"   | d d | d d | d d fS )Nr4   r/   r,   r2   r   )xr   r   r   <lambda>w      " zstandings.<locals>.<lambda>)keyreversezstats/standings.html)seasonsselected_seasonstandings_by_conference)GETgetr   r   valuesdistinctr   filterr   r
   r   nonehome_idaway_id
home_score
away_scoreitemssortedr   )r   r>   r=   gamesteamsconferencesr?   gamer#   is_home	team_infor"   	conf_namer0   r1   	home_awayhome_team_confaway_team_confteamr   r   r   	standings   s   



     $rW   )r   get_object_or_404)CountSumAvgMaxr   )	r   r   Goals
YellowcardRedcardKeepergamesPlayerteamseasonReallifeteamr	   c           #         sH  t t||d}dd tj D }tjj|dt|dt|dB }dd tj D  i }|D ]}t	jj|||j
d} fd	d
|D ||j
< q1tjj||djddd}	dd tjj|	dD }
g }|	D ]?}t	jj|||d }t	jj|||dd }tjj|||d }tjj|||d }|||
|d||||d qgtjj||d}i }|D ]}|j|kr|j|j}}n|j|j}}d}||krd}n||k rd}|j|j
d}| ro|tdd }|j|d }|D ]w}|j|vr|j|
|jddddddddd	||j< ||j d  |j7  < ||j d   |j7  < ||kr^|dkrB||j d!  d7  < n|dkrS||j d"  d7  < n||j d#  d7  < |dkrn||j d$  d7  < qq| D ]}|d dkr|d  |d d%  |d&< qti }|D ]E}tjj||j
|jd'}tjj||j
|jd'} fd(d
|D } fd)d
|D }|r|nd dd*g|r|nd dd*gd+||j
< qi }i } |D ]/}tjj|||j
d}!tjj|||j
d}" fd,d
|!D ||j
<  fd-d
|"D | |j
< qt| t | d.|||||| |t!| ||d/
S )0N)r#   r   c                 S   r(   r   r*   abbrevr$   r   r   r   r'          zteam_detail.<locals>.<dictcomp>r!   )rF   )rG   c                 S   "   i | ]}|j |j d |j qS  	player_id	firstnamelastnamer%   r   r   r   r   r'      r:   )r   r#   
game_id_idc                    s*   g | ]}|j  |j d |j|jdqS )Unknown)rj   player_nameminutepenalty_kick)rj   rA   rq   rr   )r%   goalall_player_namesr   r   
<listcomp>   s    zteam_detail.<locals>.<listcomp>)r   r#   register_idTflatc                 S   rf   rg   ri   rm   r   r   r   r'      r:   )player_id__in)r   rj   r#   r   )r   rj   r#   rr   ro   )rj   rp   total_goalspenalty_goalstotal_yellow_cardstotal_red_cardsdrawwinloss)rn   minutesminutes__max)r   r   )	rj   rp   total_minutestotal_goals_allowedgaa
total_winstotal_lossestotal_drawstotal_shutoutsr   r   r   r   r   r        V@r   r   rn   r#   c                    "   g | ]}|j  |j d dqS ro   rj   rp   rj   rA   r%   grt   r   r   rv          c                    r   r   r   r   rt   r   r   rv     r   r   )r5   r6   c                    &   g | ]}|j  |j d |jdqS ro   )rj   rp   rq   rj   rA   rq   r%   cardrt   r   r   rv         c                    r   r   r   r   rt   r   r   rv     r   zstats/team_detail.html)
rV   r   rL   goals_by_gameyellow_cards_by_gamered_cards_by_gameplayer_statsgoalie_stats	team_abbrgame_goalkeepers)"rX   r   rb   r   r   r   rD   r   r	   r]   r*   ra   values_listcountr^   r_   appendrA   r`   rF   rH   rI   exists	aggregater\   firstrj   r   goalsrB   rG   r   r   list)#r   r#   r   rV   r   rL   r   rO   r   r   player_namesr   rj   r{   r|   r}   r~   goalie_stats_rawr   
team_score	opp_scoreresultgame_goaliesmax_minutesprimary_goaliegoalier   home_goaliesaway_goalieshome_goalie_listaway_goalie_listr   r   yellow_cards	red_cardsr   rt   r   team_detail   s   $














r   )rZ   rY   r[   r   )r	   ra   r`   r]   r^   r_   rb   c                 C   s  t t|d}|jr|j d|j d|j nd}dd tj D }tjj	|d}g }g }dddddddd}g }	g }
ddddd	}dddddddd}dddddddd}ddddd	}ddddd	}|j
rd
|j
v rtjj	|d}|jddd D ]}|j	|d}t||| jd|tdd pd|tdd pd|tdd pd|tdd pd|tdd pdd|j	ddd d	}|d dkrt|d |d d  d|d< d |v r|| |D ]}|dkr||  || 7  < qq~|| |D ]}|dkr||  || 7  < q
q~|d dkr4t|d |d d  d|d< |d dkrJt|d |d d  d|d< |jddd D ]k}t|||j	|d jdtjj	||d! tjj	||d"d# tjj	||d! tjj	||d! d$}d |v r|
| |D ]}||  || 7  < qqS|	| |D ]}||  || 7  < qqSt| d%|||||||	|
||d&
S )'N)rj   /ro   c                 S   r(   r   rc   )r%   rV   r   r   r   r'   >  re   z!player_detail.<locals>.<dictcomp>)rw   r   )r,   r.   r-   r   goals_allowedr   shutouts)r   pk_goalsr   r   
Goalkeeperr   Trx   r!   r   win__sumr   	loss__sumr   	draw__sumr   minutes__sumr   
goals__sumZ   minutes__gter   )	r   rV   r,   r.   r-   r   r   r   r   r   r      r   r   )rj   r   r   )rj   r   rr   )r   rV   r   r   r   r   zstats/player_detail.html)
playerdobregular_season_gk_statsplayoff_gk_statstotal_regular_gk_statstotal_playoff_gk_statsregular_season_statsplayoff_statstotal_regular_player_statstotal_playoff_player_stats)rX   r	   yearofbirthmonthofbirth
dayofbirthrb   r   r   ra   rD   positionr`   r   rC   r   rA   r   r#   r   rZ   r   roundr   r]   r^   r_   r   )r   rj   r   r   rM   team_seasonsr   r   total_gk_statsr   r   total_player_statsr   r   r   r   keeper_gamesr   season_gamesgk_statsr;   statsr   r   r   player_detail6  s   $





	

r   )rZ   rY   r[   r   F)r	   r]   r^   r_   r`   rb   
   c                 C   s4   | j jdi ||djt|ddd| S )z7Helper function to get top players in a given category.r#   r4   -totalNr   )r   rD   rB   annotaterY   order_by)modelfilter_kwargsgroup_by_fieldcount_fieldlimitr   r   r   get_top_players     r   c                 C   s4   t jjdi | ddjt|ddd| S )z;Helper function to get top goalkeepers in a given category.rj   r#   r   r   Nr   )r`   r   rD   rB   r   rZ   r   )r   
stat_fieldr   r   r   r   get_top_goalkeepers  r   r   c                 C   s  | j dd }ttjjddd dd}|d dd tj	 D }d	d t
j	 D }d
dlm} d
dlm} tjdd}i }|D ]!}	t|	d }
||	d d}|
|v ra||
 | qE|g||
< qEd
d l}|jdd}|| | D ](\}
}dtt|||
< t||
  |dkri }qz|rd|ind|d
 i}qztt|ddtti |ddiddtt|ddtt|ddt|dt|dt|dt|tdd tdd  t|dtjjd/i |dd
dddjt dddd !d!d d" tjjd/i |djt"d#t"dd$jd%d&jtd'td(d)  d*!d+d d" d,}t#| d-|r5|n|d
 |||||d.S )0Nr   r   Trx   )r<   Careerc                 S   rf   rg   ri   rm   r   r   r   r'     r:   zleaders.<locals>.<dictcomp>c                 S   r(   r   rc   r$   r   r   r   r'     re   r   )Value)Concatrw   r#   ro   r   )indentz / rj   r*   rr   r   r   r   r   r7   r   r   r   rn   )rC   r   r   r   r   )r   r   i  )total_minutes__gter   r   r   )r   r   )r   r   r   r   gk_winsgk_draws	gk_losses	gk_pointsmost_goals_allowedmost_shutouts
lowest_gaazstats/leaders.html)r>   all_seasonsleaders_datar   r   player_teams_dictr   )$r@   rA   rK   r]   r   r   rC   r   r	   r   rb   django.db.modelsr   django.db.models.functionsr   ra   rB   strpprintPrettyPrinterrJ   joinsetr   r   r^   r_   r   r   r`   rD   r   rY   r   rZ   r   )r   r>   r   r   r   r   r   player_teamsr   entryrj   r3   r   pprM   r   r   r   r   r   leaders  s|   


"r  )r   r]   r^   r_   r`   rb   r	   c                    s  t t|d}tjj|jd}tjj|jd}tjj|j	||jd}tjj|j	||jd}t
jj|j	||jd}t
jj|j	||jd}tjj|j	||jd}	tjj|j	||jd}
tjj|j	||jd}tjj|j	||jd}dd tj D g   fdd}||dd ||d	d ||dd
 ||d	d
 ||	dd ||
d	d  jdd d fdd|D }fdd|D }||| ||d}t| t| d|S )N)r*   r   c                 S   rf   rg   ri   rm   r   r   r   r'   #  r:   zgame_detail.<locals>.<dictcomp>c                    s<   | D ]}  |j|jd|j||t|ddd qd S )Nro   rr   r   )rq   rp   rj   rV   typerr   )r   rq   rA   rj   getattr)queryset
team_label
event_typeitemeventsplayer_cacher   r   	add_event'  s   

zgame_detail.<locals>.add_eventr5   rs   r6   yellowredc                 S   s   | d S )Nrq   r   )er   r   r   r9   9  s    zgame_detail.<locals>.<lambda>)r;   c                    r   r   r   r   r  r   r   rv   >  r   zgame_detail.<locals>.<listcomp>c                    r   r   r   r   r  r   r   rv   C  r   )rO   	home_team	away_teamr  home_goalkeepersaway_goalkeeperszstats/game_detail.html)rX   r   rb   r   rA   rF   rG   r]   rD   r   r^   r_   r`   r	   r   sortr   r   )r   game_idrO   r  r  
home_goals
away_goalshome_yellowsaway_yellows	home_reds	away_redsr   r   r  r  r  r   r   r  r   game_detail  sH   

	r!  )r   redirect)JsonResponse)r   r]   r`   r^   r_   Regulationpenaltyc              	   C   sN  | j dkr| jd}| jd}| jd}| jd}| jdd}| jdd}tjj||||||d	d
\}}t| jd| jd| jd| jdD ]\}	}
}}tjj	|j
|	|
t|t||d qSt| jd| jd| jd| jdD ]\}}	}}tjj	|j
t||	|t||d qt| jd| jd| jd| jdD ]\}}	}}tjj	|j
t||	|t||d qt| jd| jd| jdD ]\}}	}
tjj	|j
t||	|
|d qt| jd| jd| jd D ]\}}	}
tjj	|j
t||	|
|d qtd!|j
d"S td#d$d%d&d'S )(NPOSTr   	game_dater  r  final_home_scorer   final_away_score)rH   rI   date)r   rF   rG   defaultszkeeper_team[]zkeeper_player[]zkeeper_minutes[]zkeeper_goals_allowed[])r  r#   rj   r   r   r   zgoal_minute[]zgoal_team[]zgoal_scorer[]zgoal_penalty[])r  rq   r#   rj   rr   r   zpenalty_minute[]zpenalty_team[]zpenalty_scorer[]zpenalty_scored[])r  rq   r#   rj   rs   r   zyellow_minute[]zyellow_team[]zyellow_player[])r  rq   r#   rj   r   zred_minute[]z
red_team[]zred_player[]success)statusr  errorzInvalid request)r,  messagei  )r,  )methodr%  rA   r   r   update_or_createzipgetlistr`   creater*   r   r]   r$  r^   r_   r#  )r   r   r&  r  r  r'  r(  rO   createdrV   r   r   r   rq   scorerpenaltyscoredr   r   r   
save_stats[  sz   





















r8  )r	   c                 C   s2   t jj|dddd}dd |D }td|iS )N)r#   rj   rk   rl   c                 S   s,   g | ]}|d  |d  d|d  dqS )rj   rk   rh   rl   r)   r   rm   r   r   r   rv     s   , z'get_players_by_team.<locals>.<listcomp>r   )r	   r   rD   rB   r#  )r   r#   r   players_listr   r   r   get_players_by_team  s   r:  c                 C   s   t | ddtj iS )Nzstats/updated_frontend.htmlr=   )r   r   r   r   )r   r   r   r   record_game_stats  s   r;  N)r   )(django.formsr   django.shortcutsr   r   r   modelsr   r   r   r	   r
   r   r   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   r   r   r   r   r   r  r!  r"  django.httpr#  r$  r8  r:  r;  r   r   r   r   <module>   sB    i, ($f 

		\$F I