Beispiel #1
0
def rereservar_reservas(app, reservas):
    actions = 0
    app.reservas.selection_set(*[])
    app.linhas.selection_set(*[])
    for indice, reserva in reservas:
        estado.reservas.add(reserva)
        app.reservas.insert(parent='',
                            index=indice,
                            values=campos_reserva_formatados(reserva),
                            iid=reserva)
        app.reservas.selection_add(reserva)

        onibus = reserva[:-6]
        linha = onibus[:-7]
        if onibus in estado.linhas_entradas[linha].onibus:
            info_reserva = decodificar_id_reserva(reserva)
            assento, passagem = info_reserva.assento, info_reserva.passagem.tipo
            estado.linhas_entradas[linha].onibus[onibus][assento] = passagem

            prev_values = app.linhas.set(onibus)
            prev_values['assentos livres'] = int(
                prev_values['assentos livres']) - 1
            app.linhas.see(onibus)
            app.linhas.selection_add(onibus)
            app.linhas.item(onibus, values=tuple(prev_values.values()))
        actions += 1

    app.contador_reservas['text'] = fm.form_cont_reservas(len(estado.reservas))

    return actions
Beispiel #2
0
    def finalizar():
        '''
            Realiza a reserva. Chamado quando o usuário clica no botão Reservar.
        '''
        nonlocal selected
        assento = int(selected['text'])
        if len(estado.linhas_entradas[linha].onibus[onibus]) == 0:
            shift = (sum(coordenadas_assento(assento)) + 1) % 2
            assentos_invisiveis = {
                assento_coordenadas(i, 2 * j + (i + shift) % 2)
                for j in range(2) for i in range(num_fileiras)
            }
            for assento_indisponivel in assentos_invisiveis:
                labels[assento_indisponivel].grid_remove()
        tipo = passagem.get()
        estado.linhas_entradas[linha].onibus[onibus][assento] = tipo
        reserva = gerar_id_reserva(onibus, assento, tipo)
        estado.reservas.add(reserva)
        # insere essa reserva na aba de reservas
        app.reservas.insert(parent='',
                            index=0,
                            values=campos_reserva_formatados(reserva),
                            iid=reserva)
        prev_values = linhas.set(onibus)
        prev_values['assentos livres'] = int(
            prev_values['assentos livres']) - 1
        linhas.item(onibus, values=tuple(prev_values.values()))
        labels[assento]['cursor'] = 'X_cursor'
        labels[assento]['style'] = estilo[tipo]
        labels[assento].unbind('<Button-1>')
        selected = ttk.Label(painel_assentos, text='None')

        historico_undo = monitoradas.historico_undo
        historico_redo = monitoradas.historico_redo
        historico_redo.clear()
        historico_undo.append(['book', reserva])
        button_state()
        app.contador_reservas['text'] = fm.form_cont_reservas(
            len(estado.reservas))
        ctrl.update_action(app, 'book')
Beispiel #3
0
def povoar_treeviews(app):
    '''
        Inicializa a interface gráfica com os dados persistidos.
    '''
    onibus_invisiveis = set()
    for linha in estado.ordem_inicial_linhas:
        onibus_invisiveis.update(reinsert_linha(app, linha))
    estado.ordem_inicial_linhas = tuple()
    for linha in estado.linhas_entradas.keys() - estado.linhas_visiveis:
        onibus_invisiveis.update(reinsert_linha(app, linha, False))
    for reserva in estado.ordem_inicial_reservas:
        app.reservas.insert(parent='',
                            index=0,
                            values=campos_reserva_formatados(reserva),
                            iid=reserva)
    estado.onibus_invisiveis = onibus_invisiveis
    app.contador_linhas['text'] = fm.form_cont_linhas(
        len(estado.linhas_visiveis))
    app.contador_onibus['text'] = fm.form_cont_onibus(
        len(monitoradas.onibus_visiveis))
    app.contador_reservas['text'] = fm.form_cont_reservas(len(estado.reservas))
    print('Dados persistentes carregados.')
Beispiel #4
0
def recadastrar_linhas(app, dados):
    actions = 0
    reservas_changed = False

    app.linhas.selection_set(*[])
    app.reservas.selection_set(*[])

    for dados_linha, reservas in dados:
        linha = gerar_id_linha(*dados_linha[:2])

        estado.linhas_entradas[linha] = cte.ESTRUTURA_LINHA(
            *dados_linha[:-1], dict())

        for reserva in reservas:
            estado.reservas.add(reserva)
            app.reservas.insert(parent='',
                                index=0,
                                values=campos_reserva_formatados(reserva),
                                iid=reserva)
            reservas_changed = True

        app.contador_reservas['text'] = fm.form_cont_reservas(
            len(estado.reservas))

        t = minutos_dia(dados_linha.horario)
        estado.linhas_possiveis.remove((dados_linha.destino.title(), t))

        estado.horarios_linhas[t] = estado.horarios_linhas.get(t, set()).union(
            {linha})
        estado.linhas_visiveis.add(linha)
        app.contador_linhas['text'] = fm.form_cont_linhas(
            len(estado.linhas_visiveis))

        app.linhas.insert(parent='',
                          index=0,
                          values=campos_linha_formatados(dados_linha),
                          iid=linha)

        data_atual = monitoradas.data_atual.replace(second=0, microsecond=0)
        minutos_atual = data_atual.hour * 60 + data_atual.minute

        if t == minutos_atual:
            periodo = range(cte.MAXIMO_NUMERO_DE_DIAS_ATE_RESERVA + 1)
        elif t < minutos_atual:
            periodo = range(1, cte.MAXIMO_NUMERO_DE_DIAS_ATE_RESERVA + 1)
        else:
            periodo = range(cte.MAXIMO_NUMERO_DE_DIAS_ATE_RESERVA)

        for d in periodo:
            partida = (data_atual + dt.timedelta(d)).replace(
                hour=dados_linha.horario.hour,
                minute=dados_linha.horario.minute)
            onibus = gerar_id_onibus(linha, partida)
            assentos = dados_linha.onibus.get(onibus, dict())
            app.linhas.insert(
                parent=linha,
                index='end',
                values=('-', fm.form_data(partida),
                        2 * int(dados_linha.fileiras) - len(assentos), '-'),
                iid=onibus)
            monitoradas.onibus_visiveis.add(onibus)
            app.contador_onibus['text'] = fm.form_cont_onibus(
                len(monitoradas.onibus_visiveis))
            estado.linhas_entradas[linha].onibus[onibus] = assentos

        app.linhas.selection_add(linha)
        app.reservas.selection_add(*reservas)

        actions += 1

    if not reservas_changed:
        app.abas.select(app.aba_linhas)

    return actions