コード例 #1
0
def define_carrinho(usr, id_usuario):
  """Esta função busca por compras em aberto do usuário {usr}. Se houver alguma nessa 
  condição, então a com o MENOR indice contida no identificador sera usada como carrinho, 
  caso contrário será criado um novo carrinho vazio.
  Identificador é dado por'C-{NNNNNNNN}'"""
  lista_ids_compras = compra.busca_por_cliente(id_usuario)

  # inicializo todos os identificadores com compras em aberto
  lista_ids_compras_abertos = []

  if not lista_ids_compras:
    return compra.cria(usr)
  else:
    # define a posicao do elemento na lista_ids_compras_abertos comecando da posicao 0
    posicao = 0

    for id_compra in lista_ids_compras:
      obj_compra = compra.busca_por_identificador(id_compra)

      # pega a substring NNNNNNNN do identificador C-{NNNNNNNN}'
      substring_indice_compra = id_compra[2:10]

      if compra.obtem_status(obj_compra) == 'comprando':
        lista_ids_compras_abertos.insert(posicao, substring_indice_compra)
        posicao = posicao + 1

    # seleciono o menor indice   
    indice_minimo = min(lista_ids_compras_abertos)
    # monto o parametro
    identificador = "C-" + str(indice_minimo)
    # busco a compra em aberto com o menor indice no identificador
    obj_compra_identificador_min = compra.busca_por_identificador(identificador)

    return obj_compra_identificador_min
  return compra.cria(usr)
コード例 #2
0
def compras_abertas(usr):
    id_usr = usuario.obtem_identificador(usr)
    ids_compras_usr = compra.busca_por_cliente(
        id_usr)  # IDs das compras deste usuário.
    compras_usr = map(lambda id: compra.busca_por_identificador(id),
                      ids_compras_usr)  # Pega objetos.
    # Filtra apenas as compras que não estao finalizadas:
    abertas_usr = list(
        filter(lambda cpr: compra.obtem_status(cpr) != 'fechado', compras_usr))
    return abertas_usr
コード例 #3
0
def verifica_compra(rotulo, cpr, ident, cliente, status, nome_pass, doc_pass):
    """Testes básicos de consistência do objeto {cpr} da classe {Objeto_Compra}, dados
  {ident} e {atrs} esperados."""
    global ok_global

    sys.stderr.write("%s\n" % ("-" * 70))
    sys.stderr.write("verificando compra %s\n" % rotulo)
    atrs = {
        'cliente': cliente,
        'status': status,
        'nome_pass': nome_pass,
        'doc_pass': doc_pass
    }
    ok = compra.verifica(cpr, ident, atrs)

    if cpr != None and type(cpr) is compra.Objeto_Compra:

        sys.stderr.write("testando {obtem_cliente()}:\n")
        usr1 = compra.obtem_cliente(cpr)
        if usr1 != cliente:
            aviso_prog(
                "retornou " + str(usr1) + ", deveria ter retornado " +
                str(cliente), True)
            ok = False

        sys.stderr.write("testando {obtem_status()}:\n")
        status1 = compra.obtem_status(cpr)
        if status1 != status:
            aviso_prog(
                "retornou " + str(status1) + ", deveria ter retornado " +
                str(status), True)
            ok = False

        # erro na implementação de poltrona
        # sys.stderr.write("testando {obtem_poltronas()}:\n")
        # itens1 = compra.obtem_poltronas(cpr)
        # if itens1 != usr:
        #   aviso_prog("retornou " + str(itens1) + ", deveria ter retornado " + str(usr),True)
        #   ok = False

    if not ok:
        aviso_prog("teste falhou", True)
        ok_global = False

    sys.stderr.write("%s\n" % ("-" * 70))
    return
コード例 #4
0
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
コード例 #5
0
import compra
import tabelas
import base_sql
import utils_testes
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)

# Testes das funções de {html_form}:


def testa(rotulo, *args):
    """Testa {funcao()}, grava resultado 
  em "testes/saida/{modulo}.{funcao}.{rotulo}.html"."""

    modulo = html_form_escolher_pagamento
    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 = compra.busca_por_identificador("C-00000002")
assert compra.obtem_status(cpr1) == 'comprando'
testa("N", cpr1)
コード例 #6
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
コード例 #7
0
# Dados para testes:

# Um cliente comum:
usrC_id = "U-00000001"
usrC = usuario.busca_por_identificador(usrC_id)
assert not usuario.obtem_atributo(usrC, 'administrador')

# Um administrador:
usrA_id = "U-00000003"
usrA = usuario.busca_por_identificador(usrA_id)
assert usuario.obtem_atributo(usrA, 'administrador')

# Uma compra em aberto do cliente 1:
cprC_id = "C-00000001"
cprC = compra.busca_por_identificador(cprC_id)
assert compra.obtem_status(cprC) == 'comprando'
assert compra.obtem_cliente(cprC) == usrC

# Uma compra fechada:
cprF_id = "C-00000004"
cprF = compra.busca_por_identificador(cprF_id)
assert compra.obtem_status(cprF) != 'comprando'

# Sessão do cliente 1:
sesC = sessao.busca_por_identificador("S-00000001")
assert sessao.obtem_usuario(sesC) == usrC

# Sessão de outro cliente comum:
sesO = sessao.busca_por_identificador("S-00000003")
assert sessao.obtem_usuario(sesO) != None
assert sessao.obtem_usuario(sesO) != usrC