コード例 #1
0
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
コード例 #2
0
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>&#128722;</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
コード例 #3
0
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
コード例 #4
0
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, )