Ejemplo n.º 1
0
def pode_trocar(usr, pol):
  global cache, nome_tb, letra_tb, colunas, diags

  if usr == None or pol == None: return False

  assert type(usr) is usuario.Objeto_Usuario
  assert type(pol) is poltrona.Objeto_Poltrona
  
  # A poltrona {pol} está reservada a alguma compra?
  id_cpr = poltrona.obtem_atributo(pol, 'id_compra'); 
  if id_cpr == None: return False
  
  # A compra {cpr} ainda está aberta?
  cpr = compra.busca_por_identificador(id_cpr)
  assert cpr != None # Paranóia.
  if compra.obtem_atributo(cpr, 'status') != 'comprando': return False

  # O trecho da poltrona {pol} ainda não foi encerrado?
  id_trc_pol = poltrona.obtem_atributo(pol, 'id_trecho');
  trc_pol = None if id_trc_pol == None else trecho.busca_por_identificador(id_trc_pol)
  assert trc_pol != None # Paranóia.
  if trecho.obtem_atributo(trc_pol, 'encerrado'): return False
  
  # O usuário tem direito de excluir e comprar nessa compra?
  dono = (compra.obtem_cliente(cpr) == usr)
  if not dono: return False
  
  # Pode trocar, parece:
  return True
Ejemplo n.º 2
0
def pode_comprar(usr, pol, cpr):
  global cache, nome_tb, letra_tb, colunas, diags
  
  if cpr == None or pol == None or cpr == None: return False

  assert type(usr) is usuario.Objeto_Usuario
  assert type(pol) is poltrona.Objeto_Poltrona
  assert type(cpr) is compra.Objeto_Compra
  
  # A compra {cpr} ainda está aberta?
  if compra.obtem_atributo(cpr, 'status') != 'comprando': return False
  
  # A poltrona {pol} está livre?
  id_cpr_pol = poltrona.obtem_atributo(pol, 'id_compra');
  if id_cpr_pol != None: return False
  
  # O trecho da poltrona {pol} ainda está disponível?
  id_trc_pol = poltrona.obtem_atributo(pol, 'id_trecho');
  trc_pol = None if id_trc_pol == None else trecho.busca_por_identificador(id_trc_pol)
  assert trc_pol != None # Paranóia.
  if trecho.obtem_atributo(trc_pol, 'encerrado'): return False
  
  # Há incompatibilidade de horários com as poltronas já em {cpr}?
  if not compra.trecho_eh_compativel(cpr, trc_pol): return False
  
  # Pode comprar, parece:
  return True
def testa_novo_passageiro():
    # Valores originais
    id_cpr = 'C-00000001'
    cpr = compra.busca_por_identificador(id_cpr)
    status = compra.obtem_atributo(cpr, 'status')

    # Novos valores
    nome_pass = '******'
    args = {'id_compra': id_cpr, 'status': status, 'nome_pass': nome_pass}

    testa("NovoPass", ses, args)

    # Valores atualizados
    cpr_mod = compra.busca_por_identificador('C-00000001')
    nome_pass_mod = compra.obtem_atributo(cpr_mod, 'nome_pass')
    assert nome_pass_mod == nome_pass, "Compra não atualizada"
def testa_nome_passageiro_null():
    # Valores originais
    id_cpr = 'C-00000001'
    cpr = compra.busca_por_identificador(id_cpr)
    usr = compra.obtem_cliente(cpr)
    id_usr = usuario.obtem_identificador(usr)
    status = compra.obtem_atributo(cpr, 'status')
    nome_pass_org = compra.obtem_atributo(cpr, 'nome_pass')

    # Novos valores
    args = {'id_compra': id_cpr, 'id_usr': id_usr, 'status': status}

    testa("NoPass", ses, args)

    # Valores atualizados
    cpr_mod = compra.busca_por_identificador('C-00000001')
    nome_pass_mod = compra.obtem_atributo(cpr_mod, 'nome_pass')

    assert nome_pass_mod == nome_pass_org, "Compra não atualizada"
( False, True,   False,  False, ),
( False, False,  True,   False, ),
          )

for id_pol in ("A-00000001", "A-00000002", "A-00000003", "A-00000004"):
    for alterar, comprar, excluir, fazer_checkin in testes:
        embarcar = fazer_checkin
        rot = id_pol

        # Estamos garantindo que a poltrona A-00000001 está com status pago e
        # checkin não realizado, para testar o botão de checkin
        if id_pol == "A-00000001":
            ptr = poltrona.busca_por_identificador(id_pol)
            poltrona.muda_atributos(ptr, {'fez_checkin': False})
            id_compra = poltrona.obtem_atributo(ptr, "id_compra")
            if id_compra != None:
                cpr = compra.busca_por_identificador(id_compra)
                estado = compra.obtem_atributo(cpr, 'status')
                compra.muda_atributos(cpr, {'status': 'pago'})

        pol = poltrona.busca_por_identificador(id_pol)
        assert pol != None
        rot += "-alter" + str(alterar)[0]
        rot += "-compr" + str(comprar)[0]
        rot += "-exclu" + str(excluir)[0]
        rot += "-fzchk" + str(fazer_checkin)[0]
        testa_gera_cabecalho(rot, fazer_checkin)
        testa_gera(rot, pol, alterar, comprar, excluir, fazer_checkin,
                   embarcar)
        testa_gera_legenda(rot, fazer_checkin)
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