def obtem_poltronas(cpr): global cache, nome_tb, letra_tb, colunas, diags assert cpr != None and type(cpr) is compra.Objeto_Compra ids_pols = poltrona.busca_por_compra(cpr) ids_pols.sort(key=lambda id: poltrona.obtem_dia_e_hora_de_partida( poltrona.busca_por_identificador(id))) return ids_pols
def gera(cpr, ver, id_carrinho): id_cpr = compra.obtem_identificador(cpr) usr = compra.obtem_cliente(cpr) id_usr = usuario.obtem_identificador(usr) atrs_compra = compra.obtem_atributos(cpr) preco_tot = compra.calcula_preco(cpr) nome_pass = atrs_compra['nome_pass'] doc_pass = atrs_compra['doc_pass'] ids_poltronas = poltrona.busca_por_compra(cpr) num_poltronas = len(ids_poltronas) icone_carrinho = "<b>🛒</b>" if id_cpr == id_carrinho else "" # !!! Definir um estilo decente para os campos? Ou definir fora do {html_table}? !!! ht_carrinho = icone_carrinho ht_cpr = id_cpr ht_usr = id_usr ht_num_poltronas = str(num_poltronas) ht_preco_tot = str(preco_tot) ht_nome_pass = nome_pass ht_doc_pass = doc_pass campos = [ ht_carrinho, ht_cpr, ht_usr, ht_num_poltronas, ht_nome_pass, ht_doc_pass, ht_preco_tot ] if ver: ht_ver = html_botao_simples.gera("Ver", "ver_compra", {'id_compra': id_cpr}, "#22ff22") campos.append(ht_ver) return campos
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 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
import poltrona import utils_testes import sessao import compra import trecho import sys sys.stderr.write("Conectando com base de dados...\n") res = base_sql.conecta("DB",None,None) assert res == None sys.stderr.write("Criando alguns objetos...\n") tabelas.cria_todos_os_testes(False) def testa(rotulo, *args): """Testa {funcao(*args)}, grava resultado em "testes/saida/{modulo}.{funcao}.{rotulo}.html".""" modulo = html_lista_de_poltronas_de_compra funcao = modulo.gera frag = True # {True} se for apenas um fragmento HTML, {False} se for página completa. pretty = False # Se {True}, formata HTML para legibilidate (mas introduz brancos nos textos). utils_testes.testa_gera_html(modulo, funcao, rotulo, frag, pretty, *args) cpr1_id = "C-00000001" cpr1 = compra.busca_por_identificador(cpr1_id) cpr1_pols_ids = poltrona.busca_por_compra(cpr1) testa("eF", cpr1_pols_ids, cpr1_id, False,) testa("eT", cpr1_pols_ids, cpr1_id, True, )