def _validate_teilnehmer(runde_id: Union[None, str], geber_id: Union[None, str], teilnehmer_ids: List[str]) -> Union[html.Div, None]: m = [] if runde_id is None: m.append(f'Bitte wählen Sie eine Runde.') if geber_id is None: m.append(f'Bitte wählen einen Geber.') if None in teilnehmer_ids: m.append(f'Bitte wählen Sie vier Teilnehmer.') teilnehmer_ids_without_none = [int(t) for t in teilnehmer_ids if t is not None] if len(teilnehmer_ids_without_none) != len(set(teilnehmer_ids_without_none)): m.append(f'Bitte wählen Sie eindeutige Teilnehmer.') teilnehmer_ids_without_none_and_geberhand = [int(t) for t in teilnehmer_ids[:-1] if t is not None] if geber_id is not None and int(geber_id) in teilnehmer_ids_without_none_and_geberhand: m.append(f'Bitte positionieren Sie den Geber eindeutig auf die Geberhand.') if len(m) == 0: return None return html.Div([wrap_empty_dbc_row(), wrap_alert(m)])
def wrap_spielen_layout(): teilnehmers_options = [{ 'label': f'{s.name}', 'value': f'{s.id}' } for s in get_teilnehmer()] einzelspiel_id = get_latest_einzelspiel_id() runde_id = get_runde_id_by_einzelspiel_id(einzelspiel_id) einzelspiel = get_einzelspiele_by_einzelspiel_ids([einzelspiel_id]) geber_id = einzelspiel[0].ausspieler_id if len(einzelspiel) == 1 else None ausspieler_id = einzelspiel[0].mittelhand_id if len( einzelspiel) == 1 else None mittelhand_id = einzelspiel[0].hinterhand_id if len( einzelspiel) == 1 else None hinterhand_id = einzelspiel[0].geberhand_id if len( einzelspiel) == 1 else None if len(einzelspiel ) == 1 and einzelspiel[0].geber_id != einzelspiel[0].geberhand_id: geberhand_id = einzelspiel[0].geber_id elif len(einzelspiel ) == 1 and einzelspiel[0].geber_id == einzelspiel[0].geberhand_id: geberhand_id = einzelspiel[0].ausspieler_id else: geberhand_id = None return html.Div([ html.Div([ dbc.Modal([ dbc.ModalHeader(id='rufspiel_stats_modal_header'), dbc.ModalBody(html.Div(id='rufspiel_stats_modal_body')), dbc.ModalFooter( html.Div(id='rufspiel_stats_modal_close_button')), ], id='rufspiel_spielstand_modal', size='xl', scrollable=True), dbc.Modal([ dbc.ModalHeader(id='solo_stats_modal_header'), dbc.ModalBody(html.Div(id='solo_stats_modal_body')), dbc.ModalFooter(html.Div(id='solo_stats_modal_close_button')), ], id='solo_spielstand_modal', size='xl', scrollable=True), dbc.Modal([ dbc.ModalHeader(id='hochzeit_stats_modal_header'), dbc.ModalBody(html.Div(id='hochzeit_stats_modal_body')), dbc.ModalFooter( html.Div(id='hochzeit_stats_modal_close_button')), ], id='hochzeit_spielstand_modal', size='xl', scrollable=True), dbc.Modal([ dbc.ModalHeader(id='ramsch_stats_modal_header'), dbc.ModalBody(html.Div(id='ramsch_stats_modal_body')), dbc.ModalFooter( html.Div(id='ramsch_stats_modal_close_button')), ], id='ramsch_spielstand_modal', size='xl', scrollable=True), ]), dbc.Container([ wrap_empty_dbc_row(), dbc.Row([ dbc.Col([ dbc.Row([dbc.Col([html.Div(html.H4('Spielen'))])], justify='start'), dbc.Row([ dbc.Col([ wrap_select_div( form_text='Runde', id='runde_id', options=[{ 'label': f'{r.datum.strftime("%d. %b %Y")} - {r.name} - ' f'{r.ort}', 'value': f'{r.id}' } for r in get_runden()], value=runde_id), ], xl=12, xs=12) ]), wrap_empty_dbc_row(), dbc.Row([ dbc.Col([ wrap_select_div(form_text='Geber', id='geber_id', options=teilnehmers_options, value=geber_id), ], xl=10, xs=10) ]), wrap_empty_dbc_row(), dbc.Row([ dbc.Col([ wrap_select_div(form_text='Ausspieler', id='ausspieler_id', options=teilnehmers_options, value=ausspieler_id), ], xl=10, xs=10), dbc.Col([ wrap_checklist_div(form_text='Gelegt', id='gelegt_ausspieler_id', options=[{ 'label': '', 'value': 1 }], value=[]), ], xl=2, xs=2) ]), dbc.Row([ dbc.Col([ wrap_select_div(form_text='Mittelhand', id='mittelhand_id', options=teilnehmers_options, value=mittelhand_id), ], xl=10, xs=10), dbc.Col([ wrap_checklist_div(form_text='Gelegt', id='gelegt_mittelhand_id', options=[{ 'label': '', 'value': 1 }], value=[]), ], xl=2, xs=2) ]), dbc.Row([ dbc.Col([ wrap_select_div(form_text='Hinterhand', id='hinterhand_id', options=teilnehmers_options, value=hinterhand_id), ], xl=10, xs=10), dbc.Col([ wrap_checklist_div(form_text='Gelegt', id='gelegt_hinterhand_id', options=[{ 'label': '', 'value': 1 }], value=[]), ], xl=2, xs=2) ]), dbc.Row([ dbc.Col([ wrap_select_div(form_text='Geberhand', id='geberhand_id', options=teilnehmers_options, value=geberhand_id), ], xl=10, xs=10), dbc.Col([ wrap_checklist_div(form_text='Gelegt', id='gelegt_geberhand_id', options=[{ 'label': '', 'value': 1 }], value=[]), ], xl=2, xs=2) ]), ], xs=12, xl=4), # ]), # wrap_empty_dbc_row(), # dbc.Row([ dbc.Col([ html.Div([ dbc.Tabs([ dbc.Tab(tab_id='rufspiel_tab', label='Rufspiel'), dbc.Tab(tab_id='solo_tab', label='Solo'), dbc.Tab(tab_id='hochzeit_tab', label='Hochzeit'), dbc.Tab(tab_id='ramsch_tab', label='Ramsch') ], id='tabs', active_tab='rufspiel_tab'), html.Div(id='tab_content') ]) ], xs=12, xl=8) ]), wrap_footer_row() ]), ])
def wrap_teilnehmer_anlegen_layout(): current = pathlib.Path(__file__).name.split('.')[0] return html.Div([ dcc.Store(id='create_teilnehmer_modal_open_n_clicks', data={'n_clicks': 0}), dcc.Store(id='create_teilnehmer_modal_close_n_clicks', data={'n_clicks': 0}), dbc.Modal([ dbc.ModalHeader(id='create_teilnehmer_modal_header'), dbc.ModalBody(html.Div(id='create_teilnehmer_modal_body')), dbc.ModalFooter([ dbc.Button('Schließen', id='create_teilnehmer_modal_close', color='primary', block=True), dbc.Button('Schließen', id='create_teilnehmer_modal_close_reload', color='primary', block=True, href=f'/{current}', external_link=True) ]), ], id='create_teilnehmer_modal', size='xl', scrollable=True), dbc.Container([ wrap_empty_dbc_row(), dbc.Row([dbc.Col([html.Div(html.H5('Teilnehmer anlegen'))])], justify='start'), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.FormText('Vorname des neuen Teilnehmers'), dbc.Input(id='teilnehmer_new_vorname', placeholder='', maxLength=20), ]) ], xl=6, xs=12), ]), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.FormText('Nachname des neuen Teilnehmers'), dbc.Input(id='teilnehmer_new_nachname', placeholder='', maxLength=20), ]) ], xl=6, xs=12), ]), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.Button('Neuen Teilnehmer erstellen', id='create_teilnehmer_modal_open', color='primary', block=True), ]) ], xl=6, xs=12) ]), wrap_footer_row() ]), ])
def wrap_statistiken_layout(): teilnehmers_options = [{'label': f'{s.name}', 'value': f'{s.id}'} for s in get_teilnehmer()] einzelspiel_id = get_latest_einzelspiel_id() runde_id = get_runde_id_by_einzelspiel_id(einzelspiel_id) einzelspiel = get_einzelspiele_by_einzelspiel_ids([einzelspiel_id]) geber_id = einzelspiel[0].ausspieler_id if len(einzelspiel) == 1 else None ausspieler_id = einzelspiel[0].mittelhand_id if len(einzelspiel) == 1 else None mittelhand_id = einzelspiel[0].hinterhand_id if len(einzelspiel) == 1 else None hinterhand_id = einzelspiel[0].geberhand_id if len(einzelspiel) == 1 else None if len(einzelspiel) == 1 and einzelspiel[0].geber_id != einzelspiel[0].geberhand_id: geberhand_id = einzelspiel[0].geber_id elif len(einzelspiel) == 1 and einzelspiel[0].geber_id == einzelspiel[0].geberhand_id: geberhand_id = einzelspiel[0].ausspieler_id else: geberhand_id = None return html.Div([ html.Div([ dcc.Store(id='stats_teilnehmer_modal_open_n_clicks', data={'n_clicks': 0}), dcc.Store(id='stats_teilnehmer_modal_close_n_clicks', data={'n_clicks': 0}), dcc.Store(id='stats_runden_modal_open_n_clicks', data={'n_clicks': 0}), dcc.Store(id='stats_runden_modal_close_n_clicks', data={'n_clicks': 0}), dcc.Store(id='stats_all_modal_open_n_clicks', data={'n_clicks': 0}), dcc.Store(id='stats_all_modal_close_n_clicks', data={'n_clicks': 0}), dbc.Modal([ dbc.ModalHeader(id='stats_teilnehmer_modal_header'), dbc.ModalBody(html.Div(id='stats_teilnehmer_modal_body')), dbc.ModalFooter( dbc.Button('Schließen', id='stats_teilnehmer_modal_close', color='primary', block=True) ), ], id='stats_teilnehmer_modal', size='xl', scrollable=True), dbc.Modal([ dbc.ModalHeader(id='stats_runden_modal_header'), dbc.ModalBody(html.Div(id='stats_runden_modal_body')), dbc.ModalFooter( dbc.Button('Schließen', id='stats_runden_modal_close', color='primary', block=True) ), ], id='stats_runden_modal', size='xl', scrollable=True), dbc.Modal([ dbc.ModalHeader(id='stats_all_modal_header'), dbc.ModalBody(html.Div(id='stats_all_modal_body')), dbc.ModalFooter( dbc.Button('Schließen', id='stats_all_modal_close', color='primary', block=True) ), ], id='stats_all_modal', size='xl', scrollable=True), ]), dbc.Container([ wrap_empty_dbc_row(), dbc.Row([ wrap_dbc_col([ html.Div( dbc.Row([ dbc.Col([ html.Div(html.H4('Statistiken')) ])], justify='start'), ), dbc.Row([ dbc.Col([ wrap_dash_dropdown_div(form_text='Teilnehmer wählen', id='selected_teilnehmer_ids', options=teilnehmers_options, value=list({geber_id, ausspieler_id, mittelhand_id, hinterhand_id, geberhand_id})), ], xl=6, xs=12), ]), dbc.Row([ dbc.Col([ dbc.Button('Statistiken gewählter Teilnehmer anzeigen', id='stats_teilnehmer_modal_open', color='primary', block=True), ], xl=6, xs=12), ]), html.Br(), dbc.Row([ dbc.Col([ wrap_dash_dropdown_div(form_text='Runden wählen', id='selected_runden_ids', options=[{'label': f'{r.datum.strftime("%d. %b %Y")} - {r.name} - ' f'{r.ort}', 'value': f'{r.id}'} for r in get_runden()], value=[runde_id]), ], xl=6, xs=12), ]), html.Div( dbc.Row([ dbc.Col([ dbc.Button('Statistiken gewählter Runden anzeigen', id='stats_runden_modal_open', color='primary', block=True), ], xl=6, xs=12), ])), html.Br(), html.Br(), html.Div( dbc.Row([ dbc.Col([ dbc.Button('Alle Statistiken anzeigen', id='stats_all_modal_open', color='primary', block=True), ], xl=6, xs=12), ])), ]), ]), wrap_footer_row() ]), ])
def wrap_letztes_spiel_loeschen_layout(): current = pathlib.Path(__file__).name.split('.')[0] einzelspiel_id = get_latest_einzelspiel_id() if einzelspiel_id is not None: einzelspiel = get_einzelspiele_by_einzelspiel_ids([einzelspiel_id])[0] runde = get_runde_by_id(einzelspiel.runde_id) df = get_latest_result() dict = { entry['teilnehmer_id']: entry['punkte'] for entry in df.to_dict(orient='records') } tt = f"{einzelspiel.created_on.strftime('%d.%m.%Y')} - {einzelspiel.created_on.strftime('%H:%M:%S')}" return html.Div([ dcc.Store(id='delete_einzelspiel_modal_open_n_clicks', data={'n_clicks': 0}), dcc.Store(id='delete_einzelspiel_modal_close_n_clicks', data={'n_clicks': 0}), dcc.Store(id='delete_einzelspiel_einzelspiel_id', data={'id': einzelspiel_id}), dbc.Modal([ dbc.ModalHeader(id='delete_einzelspiel_modal_header'), dbc.ModalBody(html.Div(id='delete_einzelspiel_modal_body')), dbc.ModalFooter([ dbc.Button('Schließen', id='delete_einzelspiel_modal_close', color='primary', block=True), dbc.Button('Schließen', id='delete_einzelspiel_modal_close_reload', color='primary', block=True, href=f'/{current}', external_link=True) ]), ], id='delete_einzelspiel_modal', size='xl', scrollable=True), dbc.Container([ wrap_empty_dbc_row(), dbc.Row([ dbc.Col([ dbc.ListGroup([ dbc.ListGroupItem(f'{runde.name}'), dbc.ListGroupItem(tt), dbc.ListGroupItem( f'{einzelspiel.spielart.capitalize()}'), ]) ], xl=6, xs=12), ]), wrap_empty_dbc_row(), Presenter.get_result_message(dict, row_wise=True), wrap_empty_dbc_row(), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.Button('Spiel löschen', id='delete_einzelspiel_modal_open', color='primary', block=True), ]) ], xl=6, xs=12) ]), wrap_footer_row() ]), ]) else: return html.Div([ dbc.Container([ wrap_empty_dbc_row(), wrap_alert(['Bisher wurden keine Spiele gespielt.']), wrap_footer_row() ]) ])
def wrap_runde_anlegen_layout(): current = pathlib.Path(__file__).name.split('.')[0] namen = get_runden( dataframe=True).sort_values("name")["name"].unique().tolist() orte = get_runden( dataframe=True).sort_values("ort")["ort"].unique().tolist() return html.Div([ dcc.Store(id='create_runde_modal_open_n_clicks', data={'n_clicks': 0}), dcc.Store(id='create_runde_modal_close_n_clicks', data={'n_clicks': 0}), dbc.Modal([ dbc.ModalHeader(id='create_runde_modal_header'), dbc.ModalBody(html.Div(id='create_runde_modal_body')), dbc.ModalFooter([ dbc.Button('Schließen', id='create_runde_modal_close', color='primary', block=True), dbc.Button('Schließen', id='create_runde_modal_close_reload', color='primary', block=True, href=f'/{current}', external_link=True) ]), ], id='create_runde_modal', size='xl', scrollable=True), dbc.Container([ wrap_empty_dbc_row(), dbc.Row([dbc.Col([html.Div(html.H5('Runde anlegen'))])], justify='start'), html.Datalist(id='name_list', children=[html.Option(value=name) for name in namen]), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.FormText('Name der neuen Runde'), dbc.Input(id='runde_new_name', placeholder='', maxLength=40, list='name_list'), ]) ], xl=6, xs=12), ]), html.Datalist(id='ort_list', children=[html.Option(value=ort) for ort in orte]), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.FormText('Ort der neuen Runde'), dbc.Input(id='runde_new_ort', placeholder='', maxLength=20, list='ort_list'), ]) ], xl=6, xs=12), ]), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.FormText('Datum der neuen Runde'), dbc.Input(id='runde_new_date', type='Date', value=dt.date.today()), ]) ], xl=6, xs=12), ]), dbc.Row([ dbc.Col([ dbc.FormGroup([ dbc.Button('Neue Runde erstellen', id='create_runde_modal_open', color='primary', block=True), ]) ], xl=6, xs=12) ]), wrap_footer_row() ]), ])