Beispiel #1
0
def processa(ses, args):
  try:

    if not sessao.eh_administrador(ses):
      raise ErroAtrib("Precisa ser administrador para executar esse comando.")

    campos = ['email', 'CPF']
    if not verifica_pelo_menos_um_campo(campos, args):
        raise ErroAtrib("Pelo menos ou o CPF ou o email precisa estar preenchido")

    # Em virtude da função {verifica_pelo_menos_um_campo}, temos a garantia de haver pelos menos o CPF ou o email
    if 'email' in args:
      id_usuario = usuario.busca_por_email(args['email'])
    else:
      id_usuario = usuario.busca_por_CPF(args['CPF'])

    if id_usuario is None:
      raise ErroAtrib("Não foi encontrado um usuário com os dados fornecidos")

    bloco = html_lista_de_usuarios.gera([id_usuario])
    pag = html_pag_generica.gera(ses, bloco, None)
    return pag

  except ErroAtrib as ex:
    erros = ex.args[0]
    # Repete a página com mensagem de erro:
    pag = html_pag_buscar_usuarios.gera(ses, args, sessao.eh_administrador(ses), erros)
    return pag
def gera(ses, atrs, admin, erros):
  # Constrói formulário com dados:
  ht_dados = html_form_buscar_trechos.gera(atrs, admin)
  conteudo = ht_dados
  # Monta a página:
  pagina = html_pag_generica.gera(ses, conteudo, erros)
  return pagina
Beispiel #3
0
def processa(ses, args):
    assert ses != None
    assert sessao.aberta(ses)
    usr_ses = sessao.obtem_usuario(ses)
    id_usr_ses = usuario.obtem_identificador(usr_ses)
    assert usr_ses != None
    if 'id' in args:
        # Alguém quer ver sessões de usuário específico:
        id_usr = args['id']
        assert (id_usr == id_usr_ses) or sessao.eh_administrador(
            ses)  # Deveria ser o caso.
        bt_ver = True
        bt_fechar = True
    else:
        # Usuário da sessão {ses} uer ver as próprias sessões:
        usr = usr_ses
        id_usr = id_usr_ses
        bt_ver = True
        bt_fechar = True

    # Com o id do usuário, podemos buscar suas sessões no banco:
    ids_sessoes = sessao.busca_por_campo('usr', id_usr)
    ht_conteudo = html_lista_de_sessoes.gera(ids_sessoes, bt_ver, bt_fechar)
    pag = html_pag_generica.gera(ses, ht_conteudo, None)
    return pag
Beispiel #4
0
def gera(ses, cpr, erros):
  id_compra = compra.obtem_identificador(cpr);
  ht_form = html_form_escolher_pagamento.gera(cpr)
  ht_cancelar = html_botao_simples.gera("Cancelar", "principal", None, "#ffff00")
  ht_conteudo = html_form.gera(ht_form + " " + ht_cancelar)
  pag = html_pag_generica.gera(ses, ht_conteudo, erros)
  return pag
def gera(ses, rot, erros):
  ver_roteiro = False # Já estamos vendo o roteiro.
  campos_resumo = html_resumo_de_roteiro.gera(rot, ver_roteiro)
  ht_resumo = "".join(str(campos_resumo))
  
  # ??? EXPANDIR COMO {html_pag_ver_compra}
  
  alterar_trcs = False # Não deve ter botões de "Alterar".
  ht_trechos = html_lista_de_trechos.gera(rot, alterar_trcs)
  
  ht_conteudo = ht_resumo + "<br/>" + ht_trechos

  ids_trechos = roteiro.obtem_identificadores_de_trechos(rot)
  ids_trechos_txt = ",".join(ids_trechos)

  # verifica se todos os trechos estao disponivels
  roteiro_disponivel = True
  for id_trc in ids_trechos:
    trc = trecho.busca_por_identificador(id_trc)
    roteiro_disponivel = roteiro_disponivel and not trecho.obtem_atributo(trc, 'encerrado')

  if roteiro_disponivel:
    atrs_comprar =  {'ids_trechos': ids_trechos_txt}
    ht_comprar = html_botao_simples.gera("Comprar", "comprar_roteiro", atrs_comprar, "#22ff22")
    ht_conteudo += "<br/>" + ht_comprar

  pag = html_pag_generica.gera(ses, ht_conteudo, erros)
  return pag
def gera(ses, trcs, erros):
    ht_cabe = html_cabecalho.gera("Ofertas", False)
    ht_trechos = html_lista_de_trechos.gera(trcs, alterar=False)

    ht_conteudo = \
      ht_cabe + "<br/>\n" + \
      ht_trechos

    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag
def processa(ses, args):
    if ses == None or not sessao.aberta(ses):
        return html_pag_mensagem_de_erro.gera(ses,
                                              "Sessão deveria estar aberta")

    try:
        carrinho = sessao.obtem_carrinho(ses)
        id_carrinho = compra.obtem_identificador(
            carrinho) if carrinho != None else None
        if not sessao.eh_administrador(ses):
            # Usuário comum só pode buscar as próprias compras:
            usr = sessao.obtem_usuario(ses)  # Dono da sessao.
            usr_id = usuario.obtem_identificador(usr)
            if not (args['cliente'] == None or args['cliente'] == usr_id):
                raise ErroAtrib("Você não tem acesso a essa informação")
            args['cliente'] = usr_id

        # Se recebeu parâmetro genérico "passageiro", converte ele para "doc_pass" ou
        # "nome_pass"
        if 'passageiro' in args:
            matchList = re.findall(
                "([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})",
                args['passageiro'])

            # É um documento
            if len(matchList) > 0:
                args['doc_pass'] = args['passageiro']
            # É um nome
            else:
                args['nome_pass'] = args['passageiro']

            del args['passageiro']

        campos = ['cliente', 'status', 'nome_pass', 'doc_pass']
        verifica_campos(args, campos)

        cprs_ids = compra.busca_por_campos(args)
        cprs = map(lambda id_compra: compra.busca_por_identificador(id_compra),
                   cprs_ids)
        ver = True if sessao.eh_administrador(
            ses) or args['cliente'] == sessao.obtem_usuario(ses) else False
        bloco = html_lista_de_compras.gera(cprs, ver, id_carrinho)
        pag = html_pag_generica.gera(ses, bloco, None)
        return pag

    except ErroAtrib as ex:
        erros = ex.args[0]
        # Repete a página com mensagem de erro:
        pag = html_pag_buscar_compras.gera(ses, args,
                                           sessao.eh_administrador(ses), erros)
        return pag
Beispiel #8
0
def gera(ses, erros):
    #conteudo = html_form_contato.gera()
    #texto1 = "Entre em contato no telefone (11)99999-9999"
    #cor_texto = "#000488"
    #cor_fundo = "#eeeeee"
    #bloco_texto1 =  html_span.gera(None, texto1)

    # Constrói formulário com dados:
    admin = False
    ht_dados = html_form_contato.gera({}, admin)
    conteudo = ht_dados

    pagina = html_pag_generica.gera(ses, conteudo, erros)
    return pagina
def processa(ses, args):
    try:
        # Por via das dúvidas:
        if args == None: args = {}.copy()

        erros = [].copy()

        # Obtem os campos sem defaults:
        origem = args['origem'] if 'origem' in args else None
        dia_partida = args['dia_partida'] if 'dia_partida' in args else None
        destino = args['destino'] if 'destino' in args else None
        dia_chegada = args['dia_chegada'] if 'dia_chegada' in args else None

        # Verifica campos obrigatórios:
        if origem == None and destino == None:
            erros.append(
                "um dos campos 'origem' e 'destino' deve ser especificado")
        if dia_partida == None:
            erros.append("o campo 'dia_partida' deve ser especificado")
        if dia_chegada == None:
            erros.append("o campo 'dia_chegada' deve ser especificado")

        # Obtem horas e providencia defaults:
        hora_partida = args[
            'hora_partida'] if 'hora_partida' in args else "00:00"
        hora_chegada = args[
            'hora_chegada'] if 'hora_chegada' in args else "00:00"

        if len(erros) > 0: raise ErroAtrib(erros)

        # Monta datas completas:
        data_min = dia_partida + " " + hora_partida + " UTC"
        data_max = dia_chegada + " " + hora_chegada + " UTC"

        # Busca trechos:
        trcs_ids = trecho.busca_por_origem_e_destino(origem, destino, data_min,
                                                     data_max)
        trcs = map(lambda id_trecho: trecho.busca_por_identificador(id_trecho),
                   trcs_ids)
        alterar_trcs = sessao.eh_administrador(ses)
        bloco = html_lista_de_trechos.gera(trcs, alterar_trcs)
        pag = html_pag_generica.gera(ses, bloco, None)
        return pag

    except ErroAtrib as ex:
        erros = ex.args[0]
        # Repete a página com mensagens de erro:
        admin = sessao.eh_administrador(ses)
        pag = html_pag_buscar_trechos.gera(ses, args, admin, erros)
        return pag
Beispiel #10
0
def processa(ses, args):
    assert ses != None
    pag = html_pag_mensagem_de_erro.gera(ses, "sessão corrente")
    assert sessao.aberta(ses)
    ids_compras = compra.busca_por_cliente(args['id'])

    ids_poltronas = []
    for i in range(len(ids_compras)):
        cpr = compra.busca_por_identificador(ids_compras[i])
        ids_poltronas += poltrona.busca_por_compra(cpr)

    ht_conteudo = html_lista_de_poltronas_de_usuario.gera(ids_poltronas)

    pag = html_pag_generica.gera(ses, ht_conteudo, None)

    return pag
def processa(ses, args):
  try:
    # Por via das dúvidas:
    if args == None: args = {}.copy()
    
    erros = [].copy()
    
    # Verifica e obtem campos obrigatórios:
    for ch in ('origem', 'dia_min', 'destino', 'dia_max'):
      if not ch in args: 
        erros.append("O campo '%s' deve ser preenchido" % ch)
        
    # Obtem parâmetros obrigatórios da busca:
    origem = args['origem'] if 'origem' in args else None;
    dia_min = args['dia_min'] if 'dia_min' in args else None;
    destino = args['destino'] if 'destino' in args else None;
    dia_max = args['dia_max'] if 'dia_max' in args else None;

    # Obtem parãmetros opcionais, com defaults:
    hora_min = args['hora_min'] if 'hora_min' in args else "00:00";
    hora_max = args['hora_max'] if 'hora_max' in args else "23:59";
    
    # Monta as datas para busca:
    data_min = dia_min + " " + hora_min + " UTC"
    data_max = dia_max + " " + hora_max + " UTC"

    # Verifica se intervalo é razoável: !!! Deveria exigir mais que 1 minuto !!!
    if data_min >= data_max:
      erros.append("Intervalo de datas inválido")
    
    if len(erros) > 0: raise ErroAtrib(erros)
      
    # Chamando a busca recursiva:
    soh_disponiveis = True
    roteiros = roteiro.descobre_todos(origem, data_min, destino, data_max, soh_disponiveis)

    # Monta página com resposta:
    roteiros_html = html_lista_de_roteiros.gera(roteiros)
    pag = html_pag_generica.gera(ses, roteiros_html, None)
    return pag

  except ErroAtrib as ex:
    erros = ex.args[0]
    # Repete a página com mensagens de erro:
    pag = html_pag_sugerir_roteiros.gera(ses, erros)
    return pag
Beispiel #12
0
def processa(ses, args):
    assert ses != None
    assert sessao.aberta(ses)

    # request para ver sessões do próprio user
    usr = sessao.obtem_usuario(ses)
    assert usr != None

    # com o id do usuário da sessao, podemos buscar suas sessões no banco
    sessoes = usuario.sessoes_abertas(usr)
    ids_sessoes = []
    for i in sessoes:
        if (i != ses):
            ids_sessoes.append(sessao.obtem_identificador(i))

    ht_conteudo = html_lista_de_sessoes.gera(ids_sessoes, True, True)
    pag = html_pag_generica.gera(ses, ht_conteudo, None)

    return pag
def processa(ses, args):
    assert ses != None
    pag = html_pag_mensagem_de_erro.gera(ses, "sessão corrente")
    assert sessao.aberta(ses)
    usr = sessao.obtem_usuario(ses)
    assert usr != None
    id_usr = usuario.obtem_identificador(usr)
    ids_compras = compra.busca_por_cliente(id_usr)
    ver_compra = True  # Queremos botão "Ver" em cada compra.

    carrinho = sessao.obtem_carrinho(ses)
    assert not (
        (carrinho != None) and sessao.eh_administrador(ses))  # Paranóia.
    id_carrinho = compra.obtem_identificador(
        carrinho) if carrinho != None else None

    ht_conteudo = html_lista_de_compras.gera(ids_compras, ver_compra,
                                             id_carrinho)
    pag = html_pag_generica.gera(ses, ht_conteudo, None)
    return pag
Beispiel #14
0
def gera(ses, dados):

    # Converte dados no formato gerado por {trecho.resumo_de_trafego} para
    # formato aceito por {html_table}
    estilo_item = "font-family:Courier;font-size:20;"
    ht_linhas_dados = [].copy()
    for dado in dados:
        linha_porto = [].copy()
        # Codigo do aeroporto
        linha_porto.append(html_span.gera(estilo_item, str(dado[0])))

        # Infos de chegada
        for ch_item in dado[1]:
            linha_porto.append(html_span.gera(estilo_item, str(ch_item)))

        # Infos de saida
        for sa_item in dado[2]:
            linha_porto.append(html_span.gera(estilo_item, str(sa_item)))

        ht_linha_porto = [html_span.gera(estilo_item, x) for x in linha_porto]

        ht_linhas_dados.append(ht_linha_porto)

    linha_cab = [].copy()
    linha_cab.append("Aeroporto")
    for lado in ("chegada", "saida"):
        for tt in ( \
            "# de trechos",  \
            "# total de poltronas", \
            "# de poltronas reservadas",  \
            "Total dos preços das poltronas reservadas",  \
            "# de passageiros que fizeram checkin" \
          ):
            linha_cab.append(tt + " (" + lado + ")")

    estilo_cab = html_estilo_cabecalho_de_tabela.gera()
    ht_linha_cab = map(lambda x: html_span.gera(estilo_cab, x), linha_cab)

    ht_table = html_table.gera(ht_linhas_dados, ht_linha_cab)
    return html_pag_generica.gera(ses, ht_table, None)
def processa(ses, args):
    assert ses != None
    assert sessao.aberta(ses)
    usr_ses = sessao.obtem_usuario(ses)
    if 'id_sessao' in args:
        id_sessao = args['id_sessao']
        sesaux = sessao.busca_por_identificador(id_sessao)
        if sesaux == None or sessao.obtem_usuario(sesaux) != usr_ses:
            pag = html_erro.gera('id de sessão inválido')

        else:
            ht_conteudo = html_form_dados_de_sessao.gera(sesaux)
            args_bt = {'id_sessao': id_sessao}
            ht_conteudo += html_botao_simples.gera("Fechar sessão",
                                                   'fechar_sessao', args_bt,
                                                   '#FFA700')
            pag = html_pag_generica.gera(ses, ht_conteudo, None)

    else:
        pag = html_erro.gera('Chamada sem argumentos')

    return pag
Beispiel #16
0
def gera(ses, erros):
  if ses !=None:
    usr = sessao.obtem_usuario(ses)
    atrs = usuario.obtem_atributos(usr)
    nome = atrs['nome']
    texto1 = "Olá <b>"+nome+"</b>!"
  else:
    texto1 = None
  texto2 = "Bem vindo(a) ao nosso site de viagens!"
  now = datetime.now(timezone.utc)
  data = now.strftime("%Y-%m-%d %H:%M:%S %z")
  texto3 = "<hr/><i>DATA CORRENTE </i><b>" + data + "</b><br/>TUDO EM ORDEM NESTE SERVIDOR<hr/>"
  cor_texto = "#000488"
  cor_fundo = "#eeeeee"
  estilo = f"font-family: Courier; font-size: 16px; font-weight: normal; padding: "\
           f"5px; text-align: center; color: {cor_texto}; background-color: {cor_fundo}"

  bloco_texto1 = html_span.gera(estilo, texto1)
  bloco_texto2 = html_span.gera(estilo, texto2)
  bloco_texto3 = html_span.gera(estilo, texto3)
  conteudo = bloco_texto1 + bloco_texto2 + bloco_texto3
  pagina = html_pag_generica.gera(ses, conteudo, erros)
  return pagina
def processa(ses, args):
  assert ses != None

  pag = html_pag_mensagem_de_erro.gera(ses, "sessão corrente")
  assert sessao.aberta(ses)

  usr_ses = sessao.obtem_usuario(ses)
  assert usr_ses != None
  id_usr_ses = usuario.obtem_identificador(usr_ses)

  admin = sessao.eh_administrador(ses)

  # Usuário a examinar:
  if 'id' in args:
    id_usr = args['id']
    usr = usuario.busca_por_identificador(id_usr)
  else:
    usr = usr_ses
    id_usr = id_usr_ses
    
  if (id_usr != id_usr_ses) and not admin:
    pag = html_pag_mensagem_de_erro.gera(ses, ["Apenas administradores podem ver sessões por este comando"])
    return pag

  # Compra a identificar como "Seu carrinho":
  if id_usr == id_usr_ses:
    carrinho = sessao.obtem_carrinho(ses)
    id_carrinho = compra.obtem_identificador(carrinho) if carrinho != None else None
  else:
    carrinho = None  # Usuário pode ter várias sessões, não vale a pena marcar carrinho(s).
    id_carrinho = None

  ids_compras = compra.busca_por_cliente(id_usr)
  ver_compra = True  # Queremos botão "Ver" em cada compra.
  ht_conteudo = html_lista_de_compras.gera(ids_compras, ver_compra, id_carrinho)
  pag = html_pag_generica.gera(ses, ht_conteudo, None)
  return pag
def gera(ses, ses_ver, erros):

    # Validação dos parâmetros:
    assert ses != None  # Paranóia (cliente deslogado não deve poder ver compra nenhuma).
    assert sessao.aberta(ses)  # Paranóia.
    usr_ses = sessao.obtem_usuario(ses)
    assert usr_ses != None  # Paranóia.
    admin = usuario.obtem_atributo(usr_ses, 'administrador')

    assert ses_ver != None  # Paranóia.
    assert type(ses_ver) is sessao.Objeto_Sessao
    usr_ses_ver = sessao.obtem_usuario(ses_ver)
    assert admin or (usr_ses_ver == usr_ses
                     )  # Usuário comum só pode ver sessões suas.

    # Botões de acão:
    ht_submit = ""
    ht_bt_cancel = ""
    ht_dados_da_sessao = ""

    id_ses_ver = sessao.obtem_identificador(ses_ver)
    assert id_ses_ver != None  # Paranóia.

    # Título da página:
    if ses_ver == ses:
        titulo = f"Sua sessao corrente {id_sessao}"
    elif usr_ses_ver == usr_ses:
        titulo = f"Sua sessao {id_sessao}"
    else:
        titulo = f"Sessao {id_sessao}"

    # Botoes de ação:
    # O submit por enquanto é só "Fechar":
    args_bt = {'id_sessao': id_ses_ver}
    ht_submit += html_botao_submit.gera("Fechar", "fechar_sessao", None,
                                        "#ff0000")
    ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None,
                                           "#ff2200")

    ht_titulo = "<h2>" + titlulo + "</h2>"

    # Completa {atrs} com atributos de {ses_ver}:
    atrs = {}
    args_ses_ver = sessao.obtem_atributos(ses_ver)
    assert atrs_ses_ver != None  # Paranóia
    for ch, val in atrs_ses_ver.items():
        if not ch in atrs: atrs[ch] = val

    # Constrói formulário com dados do trecho:
    ht_dados_da_sessao = html_form_dados_de_sessao.gera(
        id_ses_ver, atrs, admin, ht_submit)

    ht_conteudo = \
      ht_titulo + "\n" + \
      ht_dados_da_sessao + "<br/>" + \
      ht_bt_cancel

    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag

    ht_bloco_ses = html_form_dados_de_sessao.gera(ses_ver)

    # Somente gera botão caso o usuário da sessao atual seja administrador e a sessão selecionada esteja aberta
    if (sessao.eh_administrador(ses) and sessao.aberta(ses_ver)):
        args = {}
        args['id_sessao'] = sessao.obtem_identificador(ses_ver)

        # TODO: escolher cores melhores para os botões
        fecha_btn = html_botao_simples.gera('Fechar sessão', 'fechar_sessao',
                                            args, 'green')
        ht_bloco_ses += fecha_btn

    pag = html_pag_generica.gera(ses, ht_bloco_ses, erros)
    return pag
def gera(ses, usr, atrs, erros):

    # Obtem usuário da sessão, determina privilégios:
    usr_ses = None if ses == None else sessao.obtem_usuario(ses)
    if usr_ses == None:
        # Usuário que pediu não está logado:
        admin = False
        mesmo = False
    else:
        assert type(usr_ses) is usuario.Objeto_Usuario
        admin = usuario.obtem_atributo(usr_ses, "administrador")
        mesmo = (usr_ses == usr)

    if atrs == None: atrs = {}.copy()  # Por via das dúvidas.

    ht_submit = ""
    ht_bt_cancel = ""
    if usr == None:
        # Cadastramento de novo usuário:
        id_usr = None
        ht_submit += html_botao_submit.gera("Cadastrar", "cadastrar_usuario",
                                            None, "#ff0000")
        titulo = "Novo usuário"
    else:
        # Visualização/alteração de usuário existente:
        assert usr_ses != None, "operação não autorizada sem login"
        assert admin or mesmo, "usuário não está autorizado a efetuar esta operação"
        assert type(usr) is usuario.Objeto_Usuario
        id_usr = usuario.obtem_identificador(usr)
        assert id_usr != None  # Paranóia.

        if mesmo:
            titulo = f"Sua conta"
        else:
            titulo = f"Usuário {id_usr}"

        # Completa {atrs} com atributos de {usr}:
        atrs_usr = usuario.obtem_atributos(usr)
        assert atrs_usr != None  # Paranóia
        for ch, val in atrs_usr.items():
            if not ch in atrs: atrs[ch] = val

        # Botoes de ação:
        ht_submit += html_botao_submit.gera("Alterar", "alterar_usuario", None,
                                            "#ff0000")

    ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None,
                                           "#ff2200")

    ht_titulo = "<h2>" + titulo + "</h2>"

    # Cria formulário:
    ht_form = html_form_dados_de_usuario.gera(id_usr, atrs, admin, ht_submit)

    # Botoes adicionais:
    ht_bt_linhas = [].copy()
    if usr != None and not mesmo:
        # Botões para administrador ver objetos associados a usuário:
        args_bt = {'id': id_usr}
        estilo_n = "font-family:\"Courier\";font-size:20;"

        n_compras = len(usuario.compras_abertas(usr))
        ht_n_compras = html_span.gera(estilo_n, str(n_compras))
        ht_bt_compras = html_botao_simples.gera("Ver compras",
                                                "ver_compras_de_usuario",
                                                args_bt, '#eeee55')
        ht_bt_linhas.append((
            html_label.gera("Compras abertas", ":"),
            ht_n_compras,
            ht_bt_compras,
        ))

        n_sessoes = len(usuario.sessoes_abertas(usr))
        ht_n_sessoes = html_span.gera(estilo_n, str(n_sessoes))
        ht_bt_sessoes = html_botao_simples.gera("Ver sessões",
                                                "ver_sessoes_de_usuario",
                                                args_bt, '#eeee55')
        ht_bt_linhas.append((
            html_label.gera("Sessoes abertas", ":"),
            ht_n_sessoes,
            ht_bt_sessoes,
        ))

        n_poltronas = len(usuario.poltronas_abertas(usr))
        ht_n_poltronas = html_span.gera(estilo_n, str(n_poltronas))
        ht_bt_poltronas = html_botao_simples.gera("Ver poltronas",
                                                  "ver_poltronas_de_usuario",
                                                  args_bt, '#eeee55')
        ht_bt_linhas.append((
            html_label.gera("Poltronas abertas", ":"),
            ht_n_poltronas,
            ht_bt_poltronas,
        ))

    ht_bts_ver_coisas = html_table.gera(ht_bt_linhas, (
        "",
        "",
    ))

    ht_conteudo = \
      ht_titulo + \
      ht_form + "<br/>\n" + \
      ht_bts_ver_coisas + "<br/>" + \
      ht_bt_cancel

    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag
Beispiel #20
0
def gera(ses, erros):
    conteudo = html_form_sugerir_roteiros.gera()
    pag = html_pag_generica.gera(ses, conteudo, erros)
    return pag
def gera(ses, erros):
    ht_botao = html_botao_simples.gera("OK", 'principal', None, '#55ee55')
    pagina = html_pag_generica.gera(ses, ht_botao, erros)
    return pagina
Beispiel #22
0
def gera(ses, atrs, admin, erros):
    ht_form = html_form_buscar_usuarios.gera(atrs, admin)
    pag = html_pag_generica.gera(ses, ht_form, erros)
    return pag
Beispiel #23
0
def gera(ses, cpr, atrs, erros):

    # Validação dos parâmetros:
    assert ses != None  # Paranóia (cliente deslogado não deve poder ver compra nenhuma).
    assert sessao.aberta(ses)  # Paranóia.
    usr_ses = sessao.obtem_usuario(ses)
    assert usr_ses != None  # Paranóia.
    admin = usuario.obtem_atributo(usr_ses, 'administrador')
    carr = None if admin or ses == None else sessao.obtem_carrinho(ses)

    if atrs == None: atrs = {}.copy()  # Por via das dúvidas.

    # Botões de acão:
    ht_submit = ""
    ht_bt_def_carr = ""
    ht_bt_cancel = ""
    args_bt = {'id_compra': id_cpr}

    if cpr == None:
        # Nova compra:
        assert not admin  # Paranóia (administrador não deve poder criar novas compras).
        id_cpr = None
        novo = True
        titulo = "Nova compra"
    else:
        assert type(cpr) is compra.Objeto_Compra
        usr_cpr = compra.obtem_cliente(cpr)
        assert usr_cpr != None  # Paranóia.
        assert admin or (
            usr_ses == usr_cpr
        )  # Paranóia (cliente comum só pode ver compras suas).

        id_cpr = compra.obtem_identificador(cpr)
        assert id_cpr != None  # Paranóia.

        # Título da página:
        if admin:
            titulo = f"Compra {id_compra}"
        elif cpr == carr:
            titulo = "Seu carrinho de compras"
        else:
            titulo = f"Sua compra {id_compra}"
            ht_bt_def_carr = html_botao_simples.gera("Definir como carrinho",
                                                     "definir_carrinho",
                                                     args_bt, "#44ff00")

        # Completa {atrs} com atributos de {cpr}:
        atrs_cpr = compra.obtem_atributos(cpr)
        assert atrs_cpr != None  # Paranóia
        for ch, val in atrs_cpr.items():
            if not ch in atrs: atrs[ch] = val

        # Botoes de ação:
        # O submit é "Alterar":
        ht_submit += html_botao_submit.gera("Alterar", "alterar_compra", None,
                                            "#ff0000")
        if not admin and (compra.obtem_status(cpr) == 'comprando'):
            # Tem botão submit de "Finalizar compra" que aplica alterações:
            ht_submit += html_botao_submit.gera("Finalizar",
                                                "finalizar_compra", None,
                                                "#55ff00")
            ht_bt_cancel = html_botao_simples.gera("Continuar comprando",
                                                   'principal', None,
                                                   "#ff2200")
        else:
            ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None,
                                                   "#ff2200")

    ht_titulo = "<h2>" + titulo + "</h2>"

    # Constrói formulário com dados da compra:
    ht_dados_da_compra = html_form_dados_de_compra.gera(
        id_cpr, atrs, admin, ht_submit)

    # Constrói a lista de poltronas da compra:
    if novo:
        ht_dados_das_poltronas = ""
    else:
        ids_pols = poltrona.busca_por_compra(cpr)

        if len(ids_pols) == 0:
            # Não há poltronas a mostrar.
            estilo_aviso = "color:red;font-size:20;"
            ht_dados_das_poltronas = "<br/>" + html_span.gera(
                estilo_aviso, "Não há poltronas disponíveis")
        else:
            ht_dados_das_poltronas = html_lista_de_poltronas_de_compra.gera(
                ids_pols, usr_ses, carr)

        # Verifica tempos de baldeação:
        poltronas_invalidas = compra.verificar_baldeacao(cpr)
        if erros is None: erros = [].copy()
        for id_poltrona in poltronas_invalidas:
            erros.append(f'Poltrona sem tempo para baldeação: {id_poltrona}')

    ht_conteudo = \
      ht_titulo + "\n" + \
      ht_dados_da_compra + "<br/>\n" + \
      ht_bt_def_carr + "\n" + \
      ht_bt_cancel + "<br/>\n" + \
      ht_dados_das_poltronas

    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag
Beispiel #24
0
def gera(ses, pol, atrs, erros):
    # Obtem dados da sessão e seu usuário:
    usr_ses = None if ses == None else sessao.obtem_usuario(ses)
    admin = sessao.eh_administrador(ses)
    carr = None if (ses == None) or admin else sessao.obtem_carrinho(ses)

    # Obtem dados correntes da poltrona:
    assert pol != None, "poltrona deve ser especificada"
    assert type(pol) is poltrona.Objeto_Poltrona
    id_pol = poltrona.obtem_identificador(pol)
    assert id_pol != None  # Paranóia.

    # Completa {atrs} com atributos correntes de {pol}:
    if atrs == None: atrs = {}.copy()  # Por via das dúvidas.
    atrs_pol = poltrona.obtem_atributos(pol)
    assert atrs_pol != None  # Paranóia
    for ch, val in atrs_pol.items():
        if not ch in atrs: atrs[ch] = val

    # Obtem compra {cpr} da poltrona, se houver:
    id_cpr = poltrona.obtem_atributo(pol, 'id_compra')
    cpr = None if id_cpr == None else compra.busca_por_identificador(id_cpr)
    cpr_aberta = False if cpr == None else compra.obtem_status(
        cpr) == 'comprando'
    usr_cpr = None if cpr == None else compra.obtem_cliente(cpr)

    # Obtem trecho {trc} da poltrona:
    id_trc = poltrona.obtem_atributo(pol, 'id_trecho')
    assert id_trc != None  # Paranóia.
    trc = trecho.busca_por_identificador(id_trc)
    assert trc != None  # Paranóia.
    encerrado = trecho.obtem_atributo(trc, 'encerrado')

    # Gera botões da página:
    ht_submit = ""
    # Tem botão "Alterar" para alterar dados?
    if admin:
        ht_submit += html_botao_submit.gera("Alterar", "alterar_poltrona",
                                            None, "#ff0000")

    # Tem botão "Excluir" para excluir a poltrona de {cpr}?
    if poltrona.pode_excluir(usr_ses, pol):
        ht_submit += html_botao_simples.gera("Excluir", "excluir_poltrona",
                                             {'id_poltrona': id_pol},
                                             "#ff4400")

    # Tem botão "Comprar" para comprar a poltrona?
    if poltrona.pode_comprar(usr_ses, pol, carr):
        ht_submit += html_botao_simples.gera("Comprar", "comprar_poltrona",
                                             {'id_poltrona': id_pol},
                                             "#ff4400")

    # Tem botão "Trocar" para trocar a poltrona?
    if poltrona.pode_trocar(usr_ses, pol):
        ht_submit += html_botao_simples.gera("Trocar", "trocar_poltrona",
                                             {'id_poltrona': id_pol},
                                             "#ff4400")

    # Botão de cancelar alteração:
    if admin:
        ht_submit += html_botao_simples.gera("Cancelar", "principal", None,
                                             "#00ff00")

    ht_conteudo = html_form_dados_de_poltrona.gera(id_pol, atrs, admin,
                                                   ht_submit)
    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag
def gera(ses, erros):
  conteudo = html_form_login.gera()
  pagina = html_pag_generica.gera(ses, conteudo, erros)
  return pagina
Beispiel #26
0
def gera(ses, trc, atrs, erros):
    # Obtem usuário da sessão, determina privilégios:
    usr_ses = None if ses == None else sessao.obtem_usuario(ses)
    admin = sessao.eh_administrador(ses)

    if atrs == None: atrs = {}.copy()  # Por via das dúvidas.

    # Botões de acão:
    ht_submit = ""
    if trc == None:
        # Acrescentando novo trecho:
        id_trc = None
        novo = True
        # O submit é "Acrescentar":
        ht_submit += html_botao_submit.gera("Acrescentar",
                                            "acrescentar_trecho", None,
                                            "#ff0000")
    else:
        # Visualização/alteração de trecho existente:
        assert type(trc) is trecho.Objeto_Trecho
        novo = False

        id_trc = trecho.obtem_identificador(trc)
        assert id_trc != None  # Paranóia.

        # Completa {atrs} com atributos de {trc}:
        atrs_trc = trecho.obtem_atributos(trc)
        assert atrs_trc != None  # Paranóia
        for ch, val in atrs_trc.items():
            if not ch in atrs: atrs[ch] = val

        # Botoes de ação:
        if admin:
            # O submit é "Alterar":
            ht_submit += html_botao_submit.gera("Alterar", "alterar_trecho",
                                                None, "#ff0000")
            # Tem tamém botão "Clonar":
            ht_submit += html_botao_simples.gera("Clonar", "clonar_trecho",
                                                 {'id_trecho': id_trc},
                                                 "#ff0000")

    # Constrói formulário com dados do trecho:
    ht_dados_trecho = html_form_dados_de_trecho.gera(id_trc, atrs, admin,
                                                     ht_submit)

    # Constrói a lista de poltronas do trecho:
    if novo:
        ht_dados_poltronas = ""
    else:
        # Formata a lista de poltronas:
        ids_pols_todas = poltrona.busca_por_trecho(trc)
        if admin:
            # Mostra todas as poltronas do trecho:
            ids_pols_ver = ids_pols_todas
        else:
            # Mostra só as poltronas disponíveis ou reservadas para compras do usuário {usr}:
            trc_encerrado = atrs_trc['encerrado']
            ids_pols_ver = [].copy()
            for id_pol in ids_pols_todas:
                assert id_pol != None  # Paranóia.
                pol = poltrona.busca_por_identificador(id_pol)
                assert pol != None  # Paranóia.
                id_cpr_pol = poltrona.obtem_atributo(pol, 'id_compra')
                cpr_pol = None if id_cpr_pol == None else compra.busca_por_identificador(
                    id_cpr_pol)
                usr_pol = None if cpr_pol == None else compra.obtem_cliente(
                    cpr_pol)
                # Verifica relevância de {pol} para o usuário:
                livre = (cpr_pol == None)
                if (livre and (not trc_encerrado)) or ((usr_ses != None) and
                                                       (usr_pol == usr_ses)):
                    ids_pols_ver.append(id_pol)

        if len(ids_pols_ver) == 0:
            # Não há poltronas a mostrar.
            estilo_aviso = "color:red;font-size:20;"
            ht_dados_poltronas = "<br/>" + html_span.gera(
                estilo_aviso, "Não há poltronas disponíveis")
        else:
            # Formata a lista de poltronas:
            fazer_checkin = admin  # Deve ter botão de "Checkin" em cada poltrona?
            # sys.stderr.write(" ids_pols = %s\n" % str(ids_pols))
            # sys.stderr.write(" id_trc = %s\n" % str(id_trc))

            carr = None if ses == None else sessao.obtem_carrinho(ses)
            ht_dados_poltronas = html_lista_de_poltronas_de_trecho.gera(
                ids_pols_ver, usr_ses, carr)

    # Botão "Voltar":
    ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None,
                                           "#ff2200")

    # Monta a página:
    ht_conteudo = \
      ht_dados_trecho + "<br/>" +  \
      ht_dados_poltronas + "<br/>" +  \
      ht_bt_cancel

    pagina = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pagina