
    ]ajF                     L   d dl Z d dlZd dlZd dlZd dlmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZ  ej(                  d      Z G d de j,                        Z G d	 d
e j,                        Z G d de j,                        Z G d de j,                        Z G d d      Zy)    N)get_dynamic_connection   )Upload	SchedulerDeleteResultImportLeagueSetupResultCreateSchedulerInputUpdateSchedulerInput)_resolve_game_find_or_create_team_find_or_create_level_find_or_create_resource_find_or_create_timeslotzscheduler.importc                   X   e Zd Z G d d      Z ej
                         Z ej                         Z ej                         Z	 ej                         Z
 ej                         Z ej                         Z ej                         Z ej                         Z ej                         Zd Zy)CreateSchedulerc                       e Zd Z ed      Zy)CreateScheduler.ArgumentsTrequiredN)__name__
__module____qualname__r	   input     O/var/www/html/myl_app/scheduler-service/schema/mutations/scheduler_mutations.py	Argumentsr          $d3r   r   c                 N   |j                   d   }t        |      5 }|j                         5 }t        |||j                        }t        |||j
                        }t        |||j                        }t        |||j                        }	t        |||j                        }
|j                  d|||ddf       |j                          |j                  }|j                  d||j                  |	|
df       |j                          d d d        t!        |      }t#        |j$                  |j                  |j                  |j                  |j
                  |j                  |j                  |j&                  |j(                  	      cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)Ndb_namez_INSERT INTO game (home_team, away_team, idlevel, status, game_type) VALUES (%s, %s, %s, %s, %s)r   seasonziINSERT INTO schedule (relationshipid, rscs_date, rsc_id, ts_id, sched_status) VALUES (%s, %s, %s, %s, %s)	iddatetimehomeawaylocationdivision
created_at
updated_at)contextr   cursorr   r&   r'   r   r)   r   r(   r   r%   executecommit	lastrowidr$   r   r   r#   r*   r+   )selfinfor   r    conncurhome_team_idaway_team_idlevel_idresource_idtimeslot_idgame_idgame_objs                r   mutatezCreateScheduler.mutate!   sp   ,,y)#G, $	 #3CuzzJ3CuzzJ0dENNK6sD%..Q6sD%**M 2!<1hG
 -- 2ejj+{AF
 -0 %T73H";;]]]]]]]]!**!**#..#..
5$	 $	 $	 $	s$   FCFBFF	FF$Nr   r   r   r   grapheneIntr#   Stringr$   r%   r&   r'   r(   r)   r*   r+   r<   r   r   r   r   r      s    4 4 
B8??D8??D8??D8??Dx Hx H "J "J&r   r   c                   X   e Zd Z G d d      Z ej
                         Z ej                         Z ej                         Z	 ej                         Z
 ej                         Z ej                         Z ej                         Z ej                         Z ej                         Zd Zy)UpdateSchedulerc                       e Zd Z ed      Zy)UpdateScheduler.ArgumentsTr   N)r   r   r   r
   r   r   r   r   r   rD   K   r   r   r   c                 ^   |j                   d   }t        |      5 }|j                         5 }|j                  }|j	                  d|f       |j                         }|st        d|       i }|j                  t        |||j                        |d<   |j                  t        |||j                        |d<   |j                  t        |||j                        |d<   |rQdj                  d |D              }	|j	                  d	|	 d
g |j                         |       |j                          |j	                  d|f       |j                         }
i }|j                  |j                  |d<   |j                   t#        |||j                         |d<   |j$                  t'        |||j$                        |d<   |r|
rBdj                  d |D              }	|j	                  d|	 dg |j                         |       nw||d<   d|d<   dj                  |j)                               }dj                  dgt+        |      z        }|j	                  d| d| dt-        |j                                      |j                          d d d        t/        |      }t1        |j                  |j                  |j$                  |j                  |j                  |j                   |j                  |j2                  |j4                  	      cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)Nr    z SELECT * FROM game WHERE id = %sz"Scheduler entry not found with ID 	home_team	away_teamidlevel, c              3   &   K   | ]	  }| d   ywz = %sNr   .0ks     r   	<genexpr>z)UpdateScheduler.mutate.<locals>.<genexpr>o   s     *L1aS;*L   zUPDATE game SET z WHERE id = %sz8SELECT * FROM schedule WHERE relationshipid = %s LIMIT 1	rscs_datersc_idts_idc              3   &   K   | ]	  }| d   ywrK   r   rL   s     r   rO   z)UpdateScheduler.mutate.<locals>.<genexpr>   s     .Tq!E{.TrP   zUPDATE schedule SET z WHERE relationshipid = %srelationshipidr   sched_statusz%szINSERT INTO schedule (z
) VALUES ()r"   )r,   r   r-   r#   r.   fetchone	Exceptionr&   r   r'   r)   r   joinvaluesr/   r$   r(   r   r%   r   keyslentupler   rB   r*   r+   )r1   r2   r   r    r3   r4   r:   gamegame_update
set_clausescheduleschedule_updatecolsplaceholdersr;   s                  r   r<   zUpdateScheduler.mutateY   s	   ,,y)#G, K	 ="#(( >
K||~#&H	$RSS !::)/CCuzz/ZK,::)/CCuzz/ZK,>>--B3enn-]K	*!%*L*L!LJKK*:,nE8+,,.88 KKM NJ <<>"$::)38::OK0>>-0HT5>>1OH- ::)/GT5::0OG, #%)YY.TO.T%T
2:,>XY@o446@@
 =D(89:;7#yy)=)=)?@'+yy$#o:N1N'O4TF*\NRST!/"8"8":; KKM{="~ %T73H";;]]]]]]]]!**!**#..#..
CK	 K	=" ="K	 K	s$   L#I LBL#L 	L##L,Nr=   r   r   r   rB   rB   J   s    4 4 
B8??D8??D8??D8??Dx Hx H "J "JMr   rB   c                   j    e Zd Z G d d      Z ej
                         Z ej                         Zd Z	y)DeleteSchedulerc                   2    e Zd Z ej                  d      Zy)DeleteScheduler.ArgumentsTr   N)r   r   r   r>   r?   r#   r   r   r   r   ri      s    X\\4(r   r   c                 8   |j                   d   }t        |      5 }|j                         5 }|j                  d|f       |j                  d|f       |j	                          d d d        d d d        t        dd| d      S # 1 sw Y   "xY w# 1 sw Y   &xY w)Nr    z.DELETE FROM schedule WHERE relationshipid = %szDELETE FROM game WHERE id = %sTzScheduler entry z	 deleted.successmessage)r,   r   r-   r.   r/   rg   )r1   r2   r#   r    r3   r4   s         r   r<   zDeleteScheduler.mutate   s    ,,y)#G, 	 #Dre <reD	 t7Gt95UVV 	 	s"   B7B#BB		BBN
r   r   r   r   r>   Booleanrl   r@   rm   r<   r   r   r   rg   rg      s2    ) ) h GhooG
Wr   rg   c                   j    e Zd Z G d d      Z ej
                         Z ej                         Zd Z	y)ImportLeagueSetupc                       e Zd Z ed      Zy)ImportLeagueSetup.ArgumentsTr   N)r   r   r   r   filer   r   r   r   rs      s    t$r   r   c                 0  K   |j                          d {   }t        |      dkD  rt        dd      S |j                  j	                  d      st        dd      S |j
                  j                  d      }|st        dd      S d	 }	 t        j                  |      } ||d
g d      }t        |      dk7  rt        dt        |             |j                  d   }d }	t        |      5 }
|
j                         5 }d}t        |d         j                         j                         dv rd}|j!                  d|d   t#        j$                  |d         j'                         t#        j$                  |d         j'                         t)        |d          |	|j                  d             |	|j                  d             |	|j                  d             |	|j                  d            |f	       |j*                  }|j-                  d        ||dddg      }i }|j/                         D ]  \  }}t        |d         j                         j                         }d}d|v sd|v sd |v rd!}nd"|v sd#|v sd$|v rd}d% }|j                  d&      }t#        j0                  |      r't        |      j                         d'k7  rt)        |      nd}|j!                  d(|d   | ||j                  d)             ||j                  d*            |f       |j*                  ||d   <    |j-                  d        ||d+d,g      }i }|j/                         D ]  \  }}|j                  d-      }d}|rt        |      j                         d'k7  rdt        |      j                         }|j!                  d.|f       |j3                         }|r|d/   }n |j!                  d0||f       |j*                  }|j!                  d1|d,   f       |j3                         }|r|d2   }n#|j!                  d3|d,   |f       |j*                  }|||d,   <    |j-                  d        ||d4g d5      }g } |j/                         D ]P  \  }!}|d6   |vr| j5                  d7|!d8z    d9|d6    d:       |d;   |vs3| j5                  d7|!d8z    d<|d;    d:       R | rt        d=d>j7                  |       z         |j/                         D ]  \  }}t#        j0                  |j                  d?            rSt        |j                  d?            j                         d'k7  r(t        |j                  d?            j                         nd }"|j!                  d@|dA   |dA   d dB ||d6      ||d;      |"f        |
j9                          d d d        d d d        t        dCdDt               dEt               dFt               dG      S 7 # 1 sw Y   FxY w# 1 sw Y   JxY w# t        $ r8}#t:        j=                  dH|#        t        dt        |#            cY d }#~#S d }#~#wt>        $ r1}$t:        jA                  dI|$ dCJ       t        ddK      cY d }$~$S d }$~$ww xY ww)LNi   Fz!File size exceeds the 10MB limit.rk   z.xlsxz%Only .xlsx Excel files are supported.r    z%Organisation database not configured.c           	      >   	 t        j                  | |d      }|j                  d      }|j                  D cg c]*  }t	        |      j                  d      j                         , c}|_        g }|D ]  }||j                  vrt        d| d	|       |||   j                         ||   j                  t              j                  j                         d
k(  z     }|j                  ry|j                  j                         D 	cg c]  }	|	dz   	 }
}	|j                  ||
f        |r)dj                  d |D              }t        d| d|       |j!                  d      S # t        $ r}t        d| dt	        |             d }~ww xY wc c}w c c}	w )N   )
sheet_nameheaderzFailed to read sheet 'z': all)how*[z] missing expected column:     rI   c              3   2   K   | ]  \  }}d | d|   yw)'z' blank at row(s) Nr   )rM   colrowss      r   rO   z?ImportLeagueSetup.mutate.<locals>.load_sheet.<locals>.<genexpr>   s"     #h)#tau,>tf$E#hs   z] required fields blank: T)drop)pd
read_excelrY   
ValueErrorstrdropnacolumnsrstripstripisnaastypeemptyindextolistappendrZ   reset_index)
excel_filerx   required_colsdfecmissing_requiredr   
blank_rowsidxrow_numbersdetailss               r   
load_sheetz,ImportLeagueSetup.mutate.<locals>.load_sheet   s   S]]:*QO u%B>@jjI#a&--,224IBJ!$ @bjj($q4OPSu%UVV3"S'..2E2I2I2O2O2QUW2W XY
!''6@6F6F6M6M6O"Ps37"PK"P$++S+,>?@  ))#hWg#hh 1ZL0I'!STT>>t>,,)  S #9*SQ!QRRS
 J #Qs"   E* /F
F*	F3FFSeason)Season Name
Start DateEnd DateStatusSeason Year   z%Expected exactly 1 season row, found r   c                     t        j                  |       st        |       j                         dk(  ry 	 t        j                  |       j                         S # t        $ r Y y w xY w)Nr~   )r   r   r   r   to_datetimer$   rY   vals    r   opt_datez*ImportLeagueSetup.mutate.<locals>.opt_date   sQ    773<3s8>>#3r#9 >>#.3355    s   "A 	A#"A#r   )inactivehiddenhidea  
                        INSERT INTO season (
                            season_desc, season_start, season_end, year_id,
                            reg_start_date, reg_end_date, early_bird_1, late_fee_date,
                            season_order, season_type, hide, League_ID
                        ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, 1.00, 1, %s, 1)
                        r   r   r   r   zRegistration StartzRegistration EndzEarly Bird DatezLate Fee Date	DivisionszDivision NameGendergirlfemalewomenr   boymalemenc                     t        j                  |       st        |       j                         dk(  ry	 t	        |       S # t
        $ r Y yw xY w)Nr~   g        )r   r   r   r   floatrY   r   s    r   parse_floatz-ImportLeagueSetup.mutate.<locals>.parse_float&  sC    !wws|s3x~~/?2/E'+,',Sz 1#, ,'+,s   
? 	A
AzMax Teams in Divisionr~   a  
                            INSERT INTO level (
                                description, gender, start, end, max_teams,
                                League_ID, sp_id, div_code
                            ) VALUES (%s, %s, %s, %s, %s, 1, 1, "")
                            zStart (age or grade)zEnd (age or grade)Fieldsz
Field NameAddressz5SELECT site_id FROM site WHERE site_name = %s LIMIT 1site_idzHINSERT INTO site (site_name, site_address1, leagueID) VALUES (%s, %s, 1)z7SELECT rsc_id FROM resource WHERE rsc_name = %s LIMIT 1rR   z
                                INSERT INTO resource (
                                    rsc_name, site_id, active, rsc_capacity, rsct_id, prim_tsg_id
                                ) VALUES (%s, %s, 1, 1, 0, 0)
                                Teams)	Team NameDivision
Home Fieldr   zRow r   z: unknown Division 'r   r   z: unknown Home Field 'z!Teams tab has broken references:

zAffiliation/Cluba!  
                            INSERT INTO team (
                                teamname, abbr, level, homefield, affiliation,
                                League_ID, validated, paid_in_full
                            ) VALUES (%s, %s, %s, %s, %s, 1, 1, 0)
                            r      TzImported: 1 season, z divisions, z	 fields, z teams.z-Validation error during league setup import: z-Unexpected error during league setup import: )exc_infozaAn unexpected database error occurred during import. Please check your data format and try again.)!readr]   rq   filenameendswithr,   getioBytesIOr   ilocr   r-   r   r   lowerr.   r   r   r$   intr0   seekiterrowsnotnarX   r   rZ   r/   loggerwarningrY   error)%r1   r2   rt   
file_bytesr    r   r   	season_dfr!   r   r3   r4   hide_val	season_iddiv_dfdivision_id_by_name_row
gender_str
gender_valr   	max_teamsmax_teams_valfield_dffield_id_by_nameaddressr   addr_strsite_rowrsc_rowfield_idteam_dferrorsiaff_strver   s%                                        r   r<   zImportLeagueSetup.mutate   s    99;&
z?--$U<_``}}%%g.$U<cdd,,""9-$U<cdd	-2h	J/J #:x9{|I9~" #HYHX!YZZ^^A&F  (0 H"D[[] G"c H6(+,224::<@^^#$ KK #=1NN6,+?@EEGNN6*+=>CCE} 56$VZZ0D%EF$VZZ0B%CD$VZZ0A%BC$VZZ%@A$
( !$I OOA&'
K/S[A\]F*,'"(//"3 "R3%(X%7%=%=%?%E%E%G
%&
!Z/8z3IWXbMb)*J"j0Fj4HEU_L_)*J, %(GG,C$D	;=88I;NSVW`SaSgSgSimoSoIvw  !$O 4 * +CGG4J,K L +CGG4H,I J - EHMM+C,@AE"RJ OOA&)*hOH')$"*"3"3"5 G3"%'')"4"#"s7|'9'9';r'A'*7|'9'9';HKK(_bjalm'*||~H'*29*= #$n%-x$8!" +.-- $]`cdp`q_st"%,,."'.x'8HKK!$
 "%\!2G < (+}}H>F(\):;?GD OOA&(W>efGF")"2"2"4 d3z?2EE"MMDQ7KCPZOK\\]*^_|,4DD"MMDQ7McR^N_M``a*bc	d
 ()MPTPYPYZ`Pa)abb")"2"2"4 3OQxxX[X_X_`rXsOty|  ~A  ~E  ~E  FX  ~Y  zZ  z`  z`  zb  fh  zh#cgg.@&A"B"H"H"J  os  !$K 0 #K 0" 5 3C
O D 0\1B C '" KKMOG"H"T %.s6{m<HV_`cdk`l_mmtu A 'nG" G"H" H"^  	ENNJ2$OP$UCGDD 	LLHLW[L\${ 	s   ZW?A4ZA#X /X N0X1DX=X9X >ZX	XXX 	Z#-YZZZ"&ZZ	ZZZNrn   r   r   r   rq   rq      s2    % % h GhooGOr   rq   c                       e Zd Zej	                         Zej	                         Zej	                         Z	e
j	                         Zy)SchedulerMutationN)r   r   r   r   Fieldcreate_schedulerrB   update_schedulerrg   delete_schedulerrq   import_league_setupr   r   r   r   r     s>    &,,.&,,.&,,.+113r   r   )r>   r   loggingpandasr   dbr   typesr   r   r   r   r	   r
   helpersr   r   r   r   r   	getLoggerr   Mutationr   rB   rg   rq   r   r   r   r   <module>r      s     	   %  
 
		-	.5h'' 5p\h'' \~Wh'' W(V)) Vr4 4r   