def testa_cria_poltrona(rotulo, ident, atrs):
    """Testa criação de poltrona com atributos com {atrs}. Retorna a poltrona."""
    pol = poltrona.cria(atrs)
    assert poltrona.obtem_identificador(pol) == ident
    assert poltrona.obtem_atributo(
        pol, 'id_trecho') == atrs['id_trecho'], "epa, trecho errado"
    assert poltrona.obtem_atributo(
        pol, 'id_compra') == atrs['id_compra'], "epa, pedido de compra errado"
    verifica_poltrona(rotulo, pol, ident, atrs)
    return pol
예제 #2
0
def gera(pol, id_compra, ver, excluir):

    # Atributos da poltrona:
    id_pol = poltrona.obtem_identificador(pol)
    atrs_pol = poltrona.obtem_atributos(pol)
    assert atrs_pol['id_compra'] == id_compra

    preco_pol = atrs_pol['preco']
    numero_pol = atrs_pol['numero']

    # Atributos do trecho da poltrona
    id_trecho = atrs_pol['id_trecho']
    trc = trecho.busca_por_identificador(id_trecho)
    atrs_trc = trecho.obtem_atributos(trc)
    origem_trc = atrs_trc['origem']
    dt_partida_trc = atrs_trc['dia_partida'] + ' ' + atrs_trc['hora_partida']
    destino_trc = atrs_trc['destino']
    dt_chegada_trc = atrs_trc['dia_chegada'] + ' ' + atrs_trc['hora_chegada']

    # Campos da linha para {html_table.gera}:
    ht_trecho = html_span.gera(None, id_trecho)
    ht_origem = html_span.gera(None, origem_trc)
    ht_dt_partida = html_span.gera(None, dt_partida_trc)
    ht_destino = html_span.gera(None, destino_trc)
    ht_dt_chegada = html_span.gera(None, dt_chegada_trc)

    ht_numero = html_span.gera(None, numero_pol)
    ht_preco = html_span.gera(None, preco_pol)

    linha = [ \
      ht_trecho, ht_origem, ht_dt_partida, ht_destino, ht_dt_chegada,
      ht_numero, ht_preco
    ]
    ver = True  # Por enquanto.
    if ver:
        args_ver = {'id_poltrona': id_pol}
        ht_ver = html_botao_simples.gera("Ver", 'ver_poltrona', args_ver,
                                         '#60a3bc')
        linha.append(ht_ver)
        linha.append("</form>")

    if excluir:
        args_excluir = {'id_poltrona': id_pol, 'id_compra': id_compra}
        ht_excluir = html_botao_simples.gera("Excluir", 'excluir_poltrona',
                                             args_excluir, '#ff4422')
        linha.append(ht_excluir)

    return linha
예제 #3
0
def livre_mais_proxima(pol, preco_max):
  global cache, nome_tb, letra_tb, colunas, diags
  dist_pol_desejada = -1
  id_trc = poltrona.obtem_atributo(pol, 'id_trecho')
  trc = trecho.busca_por_identificador(id_trc)
  ids_livres = lista_livres(trc)
  id_pol = poltrona.obtem_identificador(pol)
  pol_desejada = None
  if len(ids_livres) != 0:
    for id in ids_livres:
        if (id != id_pol):
            pol_aux = poltrona.busca_por_identificador(id)
            dist_aux = distancia(pol, pol_aux)
            preco_aux = obtem_atributo(pol_aux, 'preco')
            if (dist_pol_desejada == -1 and preco_aux <= preco_max):
                pol_desejada = pol_aux
                dist_pol_desejada = dist_aux
            else:
                if (dist_aux < dist_pol_desejada and preco_aux <= preco_max):
                    pol_desejada = pol_aux
                    dist_pol_desejada = dist_aux
  return pol_desejada
예제 #4
0
def cria_testes(verb):
  global cache, nome_tb, letra_tb, colunas, diags
  inicializa(True)
  lista_atrs = \
    [
      # Poltrona "A-00000001":
      { 'id_trecho':   "T-00000001",
        'numero':      "01A",
        'oferta':      True,
        'id_compra':   "C-00000001",
        'preco':       10.00,
        'bagagens':    0,
        'fez_checkin': True, 
        'embarcou': True,
      },
      # Poltrona "A-00000002":
      { 'id_trecho':   "T-00000001",
        'numero':      "02A",
        'oferta':      True,
        'id_compra':   None,
        'preco':       60.00,
        'bagagens':    None,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000003":
      { 'id_trecho':   "T-00000001",
        'numero':      "02B",
        'oferta':      False,
        'id_compra':   "C-00000002",
        'preco':       11.00,
        'bagagens':    1,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000004":
      { 'id_trecho':   "T-00000002",
        'numero':      "31",
        'oferta':      False,
        'id_compra':   None,
        'preco':       20.00,
        'bagagens':    None,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000005":
      { 'id_trecho':   "T-00000002",
        'numero':      "32",
        'oferta':      False,
        'id_compra':   None,
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000006":
      { 'id_trecho':   "T-00000002",
        'numero':      "33",
        'oferta':      False,
        'id_compra':   "C-00000001",
        'preco':       12.00,
        'bagagens':    2,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000007":
      { 'id_trecho':   "T-00000003",
        'numero':      "31",
        'oferta':      True,
        'id_compra':   None,
        'preco':       50.00,
        'bagagens':    None,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000008":
      { 'id_trecho':   "T-00000003",
        'numero':      "33",
        'oferta':      False,
        'id_compra':   "C-00000003",
        'preco':       13.00,
        'bagagens':    3,
        'fez_checkin': False, 
        'embarcou': False,
      },
      # Poltrona "A-00000009":
      { 'id_trecho':   "T-00000001",
        'numero':      "50",
        'oferta':      True,
        'id_compra':   "C-00000005",
        'preco':       15.00,
        'bagagens':    2,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000010":
      { 'id_trecho':   "T-00000002",
        'numero':      "51",
        'oferta':      False,
        'id_compra':   "C-00000006",
        'preco':       10.00,
        'bagagens':     4,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000011":
      { 'id_trecho':   "T-00000003",
        'numero':      "52",
        'oferta':      True,
        'id_compra':   "C-00000007",
        'preco':       18.00,
        'bagagens':    5,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000012":
      { 'id_trecho':   "T-00000002",
        'numero':      "53",
        'oferta':      False,
        'id_compra':   "C-00000008",
        'preco':       25.00,
        'bagagens':    2,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000013":
      { 'id_trecho':   "T-00000003",
        'numero':      "54",
        'oferta':      True,
        'id_compra':   "C-00000009",
        'preco':       8.00,
        'bagagens':    1,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000014":
      { 'id_trecho':   "T-00000001",
        'numero':      "55",
        'oferta':      False,
        'id_compra':   "C-00000010",
        'preco':       20.00,
        'bagagens':    5,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000015":
      { 'id_trecho':   "T-00000004",
        'numero':      "56",
        'oferta':      False,
        'id_compra':   None,
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000016":
      { 'id_trecho':   "T-00000005",
        'numero':      "57",
        'oferta':      False,
        'id_compra':   "C-00000010",
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000017":
      { 'id_trecho':   "T-00000006",
        'numero':      "58",
        'oferta':      False,
        'id_compra':   None,
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000018":
      { 'id_trecho':   "T-00000007",
        'numero':      "59",
        'oferta':      False,
        'id_compra':   None,
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000019":
      { 'id_trecho':   "T-00000008",
        'numero':      "60",
        'oferta':      False,
        'id_compra':   "C-00000001",
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000020":
      { 'id_trecho':   "T-00000009",
        'numero':      "61",
        'oferta':      False,
        'id_compra':   "C-00000002",
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': True,
        'embarcou': True,
      },
      # Poltrona "A-00000021":
      { 'id_trecho':   "T-00000010",
        'numero':      "62",
        'oferta':      False,
        'id_compra':   "C-00000003",
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000022":
      { 'id_trecho':   "T-00000011",
        'numero':      "63",
        'oferta':      False,
        'id_compra':   "C-00000004",
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': True,
        'embarcou': True,
      },
      # Poltrona "A-00000023":
      { 'id_trecho':   "T-00000012",
        'numero':      "64",
        'oferta':      False,
        'id_compra':   None,
        'preco':       30.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000024":
      { 'id_trecho':   "T-00000001",
        'numero':      "01B",
        'oferta':      True,
        'id_compra':   "C-00000004",
        'preco':       25.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
      # Poltrona "A-00000025":
      { 'id_trecho':   "T-00000004",
        'numero':      "01B",
        'oferta':      True,
        'id_compra':   "C-00000002",
        'preco':       25.00,
        'bagagens':    None,
        'fez_checkin': True,
        'embarcou': True,
      },
      # Poltrona "A-00000026":
      { 'id_trecho':   "T-00000005",
        'numero':      "01B",
        'oferta':      True,
        'id_compra':   None,
        'preco':       25.00,
        'bagagens':    None,
        'fez_checkin': False,
        'embarcou': False,
      },
    ]
  for atrs in lista_atrs:
    pol = cria(atrs)
    assert pol != None and type(pol) is poltrona.Objeto_Poltrona
    id_ass = poltrona.obtem_identificador(pol)
    id_trc = poltrona.obtem_atributo(pol, 'id_trecho')
    id_cpr = poltrona.obtem_atributo(pol, 'id_compra')
    if id_cpr == None: id_cpr = "LIVRE"
    if verb: sys.stderr.write("poltrona %s no trecho %s (compra %s) criado\n" % (id_ass, id_trc, id_cpr))
  return
예제 #5
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
                   ('1122', '90.50')]
lista_de_pares2 = [('10B', '100'), ('1B', '100'), ('3B', '100'), ('1', '20.0')]
lista_de_pares3 = [('1', '10.0'), ('2', '20.0'), ('3', '30.0')]

representacao_str1 = poltrona.resume_numeros_e_precos(lista_de_pares1)
representacao_str2 = poltrona.resume_numeros_e_precos(lista_de_pares2)
representacao_str3 = poltrona.resume_numeros_e_precos(lista_de_pares3)

sys.stderr.write(representacao_str1 + "\n")
sys.stderr.write(representacao_str2 + "\n")
sys.stderr.write(representacao_str3 + "\n")

# ----------------------------------------------------------------------
sys.stderr.write("testando {poltrona.obtem_dia_e_hora_de_partida}:\n")
pol3 = pol[3]
assert poltrona.obtem_identificador(pol3) == "A-00000004"
assert poltrona.obtem_atributo(
    pol3, 'id_trecho') == "T-00000002", "epa, trecho errado"
pol3_dhp_res = poltrona.obtem_dia_e_hora_de_partida(pol3)
pol3_dhp_esp = "2020-05-08 19:45 UTC"
if pol3_dhp_res != pol3_dhp_esp:
    sys.stderr.write("{poltrona.obtem_dia_e_hora_de_partida(pol3)}:")
    sys.stderr.write(" devolveu %s, esperado %s\n" %
                     (pol3_dhp_res, pol3_dhp_esp))
    ok_global = False

# ----------------------------------------------------------------------
sys.stderr.write("testando {poltrona.obtem_dia_e_hora_de_chegada}:\n")
pol3_dhc_res = poltrona.obtem_dia_e_hora_de_chegada(pol3)
pol3_dhc_esp = "2020-05-08 20:40 UTC"
if pol3_dhc_res != pol3_dhc_esp:
def gera(pol, alterar, comprar, excluir, fazer_checkin, embarcar):
  
  assert int(alterar) + int(comprar) + int(excluir) <= 1 # No máximo um deve ser "True"

  campos = [].copy() # Campos a devolver

  estilo = "font-size:20px;font-weight:bold;" 

  # Obtem atributos da poltrona:
  id_pol = poltrona.obtem_identificador(pol)
  atrs_pol = poltrona.obtem_atributos(pol)

  numero = atrs_pol['numero']
  preco = atrs_pol['preco']
  oferta = atrs_pol['oferta'] # Se a poltrona está em oferta.
  id_cpr = atrs_pol['id_compra'] # Pedido de compra que reservou a poltrona, ou {None}
  fez_checkin = atrs_pol['fez_checkin'] # Passageiro já fez checkin?
  embarcou = atrs_pol['embarcou'] # Passageiro já embarcou?
  if id_cpr != None:
    # Poltrona está reservada.  Determina a compra:
    cpr = compra.busca_por_identificador(id_cpr)
    assert cpr != None # Paranóia.
  else:
    # Poltrona está livre:
    cpr = None

  args_cmd = { 'íd_poltrona': id_pol } # Argumentos para os comandos.

  # Número da poltrona sempre aparece:
  ht_numero = html_span.gera(estilo, numero)
  campos.append(ht_numero)

  # Preço da poltrona senmpre aparece:
  ht_preco = html_span.gera(estilo, preco)
  campos.append(ht_preco)

  # Indicação de oferta sempre aparece:
  ht_oferta = html_span.gera(estilo + "color:'#ffbb00';", "&#9733;" if oferta else "")
  campos.append(ht_oferta)

  # Coluna de identificador da compra sempre aparece:
  ht_id_cpr = html_span.gera(estilo, id_cpr if cpr != None else "LIVRE")
  campos.append(ht_id_cpr);

  # Coluna de "fez checkin" sempre aparece:
  ht_fez_checkin = html_span.gera(estilo, "CK" if fez_checkin else "")
  campos.append(ht_fez_checkin);

  # Coluna de "embarcou" sempre aparece:
  ht_embarcou = html_span.gera(estilo, "EM" if embarcou else "")
  campos.append(ht_embarcou);

  # Coluna do botão "Ver" sempre aparece:
  ht_bt_ver = html_botao_simples.gera("Ver", "ver_poltrona", {'id_poltrona': id_pol}, "55ee55")
  campos.append(ht_bt_ver);

  # Coluna do botão de ação:
  if alterar:
    ht_bt_acao = html_botao_simples.gera("Alterar", "solicitar_pag_alterar_poltrona", args_cmd, '#bca360')
  elif comprar:
    ht_bt_acao = html_botao_simples.gera("Comprar", 'comprar_poltrona', args_cmd, '#ff0000')
  elif excluir:
    ht_bt_acao = html_botao_simples.gera("Excluir", 'excluir_poltrona', args_cmd, '#ff0000')
  else:
    ht_bt_acao = ""
  campos.append(ht_bt_acao);

  if fazer_checkin:
    # Campos para checkin:
    if cpr != None:
      # Nome e documento do passageiro, e botão de fazer checkin:
      nome_pass = compra.obtem_atributo(cpr, 'nome_pass')
      doc_pass = compra.obtem_atributo(cpr, 'doc_pass')

      ht_nome_pass = html_span.gera(estilo, nome_pass)
      campos.append(ht_nome_pass);

      ht_doc_pass = html_span.gera(estilo, doc_pass)
      campos.append(ht_doc_pass);

      if fez_checkin:
        ht_bt_checkin = ""
      else:
        # Apresentando o botão fazer checkin somente quando o status é pago
        if compra.obtem_atributo(cpr, 'status') == 'pago':
          ht_bt_checkin = html_botao_simples.gera("Checkin", 'fazer_checkin', args_cmd, '#55ee55')
          campos.append(ht_bt_checkin);
    else:
      # Campos em branco:
      campos.append("");
      campos.append("");
      campos.append("");

  if embarcar:
    ht_bt_embarcar = ""
    if fez_checkin:
      ht_bt_embarcar = html_botao_simples.gera("Embarcar", 'embarcar', args_cmd, '#55ee55')
    campos.append(ht_bt_embarcar);

  return campos