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
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';", "★" 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