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