01 Acrescentar campo 'meio_pag' no objeto "Compra". Por enquanto só um string cujo valor pode ser 'boleto', 'Visa', 'PayPal', etc. Alterar todos os módulos que usam compra e são afetados por esse novo campo.
02 O atributo {endereco} de ObjUsuario e ObjCompra é um string de tres linhas separadas por "\n". Portanto o Campo "Endereço" no formulário de cadastramento e de alteração de endereço de entrega deve ter 3 linhas, definir esses atributos de acordo.
03 Fazer funcionar o cadastramento de usuário.
04 Consertar gera_html_elem.bloco_de_produto. O botão "Excluir" deve emitir um comando para excluir o produto da compra. O botão de quantidade deve ter setas para aumentar/diminiur a quantidade. Qualquer alteração no campo de quantidade deve emitir um comando para alterar a quantidade do produto na compra.
05 Consertar a busca de produtos com 'AND'. O operador AND deve ser em maiúsculas apenas; se for minúsculas, deve tratar como outra palavra qualquer.
06 Melhorar formato do bloco produzido por {gera_html_elem.bloco_de_produto}. Se {detalhe=False}: Economizar espaço de tela. Tirar a lógica de 2 produtos por linha e as linhas pretas. Em vez disso, cada produto deve ser formatado como um bloco de largura limitada, de modo que se a tela for grande saem naturalmente 2 blocos por linha. Colocar uma moldura em volta de cada bloco. Melhorar a aparência do indicador de "Oferta", que deve aparece em qualquer caso. Se {detalhe=True}: mostrar o preço unitário E o preço total para a quantidade especificada. O preço total deve vir depois da quantidade. O código do produto não deve gasta uma linha inteira e não deve parecer editável. O peso e volume devem ficar em baixo da descrição detalhada, no mesmo fonte. Tirar esse "1" azul.
07 Corrigir o cálculo do custo do frete no módulo {compra}. O peso e volume não são campos do item de compra, mas atributos do {ObjProduto}. Definir um novo módulo {frete.py,frete_IMP.py} com uma única função {calcula(CEP, peso, volume)}. O custo deve ser {F(A + Bvolume + C*peso)}, onde os coeficientes {A}, {B}, e {C} são fixos e {F} depende dos dois primeiros dígitos do CEP, definido por um dicionário.
08 Corrigir a alteração de dados do usuário através do botão "Minha conta".
09 Corrigir a função {itens_de_compra.busca_por_produto} Os comentários da interface, que não fazem sentido. Obviamente TODAS as entradas devolvidas terão o mesmo produto! A função deve devolver a lista dos IDENTIFICADORES das COMPRAS que tem o produto dado, não uma lista de ITENS de compra. A implementação deve usar {tabela_generica.busca_por_campo}, e não {base_sql} diretamente.
10 Consertar {gera_html_elem.bloco_de_compra}. O formato está horrível. O endereço de entrega é um string de 3 linhas separadas por "\n"; deve ser exibido como tal. Oa botões "Alterar meio de pagamento" e "Alterar endereço de entrega" devem emitir fornecer o ID da compra como argumento do comando emitido. Deve haver um botão "Finalizar" que emite o comando adequado com o ID da compra como argumento.
11 Implementar o {comando_mudar_status_de_compra} que recebe argumentos 'id_compra' e 'novo_status'. Corrigir a implementação da função {compra.modifica_status} mudando o nome para {compra.muda_status}.
12 Corrigir {gera_html_elem.menu_geral}, criando a segunda linha de botões se o usuário for adminitrador. Acrescentar nessa linha o campo de busca "Compras de produto" que emite o comando 'buscar_compras_por_produto". Quebrar a implementação em funções menores.
13 Quando um usuário faz login, procurar nas compras desse usuário se há alguma compra com status {aberto}. Se houver, usa essa compra como carrinhio, em vez de criar uma compra nova.
14 Começar a implementação de "produtos agregados". Acrescentar ao {ObjProduto} dois novos atributos: um booleano 'variado', um string 'grupo' (um identificador de produto), e um string 'variedade' (uma descrição super-curta do produto, relativa ao grupo). Alterar todas as funções e módulos que precisam saber desses dois novos campos, como {produto.cria}. Por enquanto, no {gera_html_elem.bloco_de_produto}, a 'variedade' deve ser mostrada logo abixo da descrição curta, mesmo quando {detalhe=False}. O atributo 'grupo' deve ser mostrado só se {detalhe=True}.
15 Melhorar a aparência geral das páginas. Em particular, melhorar a página principal, mostrando as ofertas em vez dessa mensagem boba com data corrente. Consertar {gera_html_botao.simples} e {gera_html_botao.submit} de modo que a cor especificada seja usada DENTRO do botão, e não em volta dele.
16 No menu geral, se o usuário for adminitrador, acrescentar um campo onde ele pode digitar o identificador de um objeto de qualquer tipo ("{L}-{NNNNNNNN}", onde {L} pode ser "P", "C", "S", ou "U") e um botão "Ver" que emite um comando "ver_objeto" com esse identificador como argumento 'id_objeto'. Não implemente esse comando
17 Implementar um nov módulo "comando_ver_objeto", que recebe como argumento um 'id_objeto' ("{L}-{NNNNNNNN}", onde {L} pode ser "P", "C", "S", ou "U") e mostra esse objeto usando o formulário apropriado: {gera_html_pag.mostra_usuario}, {gera_html_pag.mostra_produto}, {gera_html_pag.mostra_compra}, e {gera_html_pag.mostra_sessao}. Implementar esta última função gerando uma mensagem de erro "Não implementada".
18 Acrescentar ao {ObjProduto} um novo atributo 'palavras' cujo valor é um string de até 1000 caracters contendo sinônimos e termos relacionados, para fins de busca. Alterar todas as funções e módulos que precisam saber desses dois novos campos, como {produto.cria}. Alterar a função {produto.busca_por_palavra} de modo a fazer a busca também nesse campo. Alterar {gera_html_elem.bloco_de_compra} para mostrar essa linha com fonte minúsculo se {detalhe=True}.
01 Acrescentar campo 'meio_pag' no objeto "Compra". Por enquanto só um string cujo valor pode ser 'boleto', 'Visa', 'PayPal', etc. Alterar todos os módulos que usam compra e são afetados por esse novo campo.
02 O atributo {endereco} de ObjUsuario e ObjCompra é um string de tres linhas separadas por "\n". Portanto o Campo "Endereço" no formulário de cadastramento e de alteração de endereço de entrega deve ter 3 linhas, definir esses atributos de acordo.
03 Fazer funcionar o cadastramento de usuário.
04 Consertar gera_html_elem.bloco_de_produto. O botão "Excluir" deve emitir um comando para excluir o produto da compra. O botão de quantidade deve ter setas para aumentar/diminiur a quantidade. Qualquer alteração no campo de quantidade deve emitir um comando para alterar a quantidade do produto na compra.
05 Consertar a busca de produtos com 'AND'. O operador AND deve ser em maiúsculas apenas; se for minúsculas, deve tratar como outra palavra qualquer.
06 Melhorar formato do bloco produzido por {gera_html_elem.bloco_de_produto}. Se {detalhe=False}: Economizar espaço de tela. Tirar a lógica de 2 produtos por linha e as linhas pretas. Em vez disso, cada produto deve ser formatado como um bloco de largura limitada, de modo que se a tela for grande saem naturalmente 2 blocos por linha. Colocar uma moldura em volta de cada bloco. Melhorar a aparência do indicador de "Oferta", que deve aparece em qualquer caso. Se {detalhe=True}: mostrar o preço unitário E o preço total para a quantidade especificada. O preço total deve vir depois da quantidade. O código do produto não deve gasta uma linha inteira e não deve parecer editável. O peso e volume devem ficar em baixo da descrição detalhada, no mesmo fonte. Tirar esse "1" azul.
07 Corrigir o cálculo do custo do frete no módulo {compra}. O peso e volume não são campos do item de compra, mas atributos do {ObjProduto}. Definir um novo módulo {frete.py,frete_IMP.py} com uma única função {calcula(CEP, peso, volume)}. O custo deve ser {F(A + Bvolume + C*peso)}, onde os coeficientes {A}, {B}, e {C} são fixos e {F} depende dos dois primeiros dígitos do CEP, definido por um dicionário.
08 Corrigir a alteração de dados do usuário através do botão "Minha conta".
09 Corrigir a função {itens_de_compra.busca_por_produto} Os comentários da interface, que não fazem sentido. Obviamente TODAS as entradas devolvidas terão o mesmo produto! A função deve devolver a lista dos IDENTIFICADORES das COMPRAS que tem o produto dado, não uma lista de ITENS de compra. A implementação deve usar {tabela_generica.busca_por_campo}, e não {base_sql} diretamente.
10 Consertar {gera_html_elem.bloco_de_compra}. O formato está horrível. O endereço de entrega é um string de 3 linhas separadas por "\n"; deve ser exibido como tal. Oa botões "Alterar meio de pagamento" e "Alterar endereço de entrega" devem emitir fornecer o ID da compra como argumento do comando emitido. Deve haver um botão "Finalizar" que emite o comando adequado com o ID da compra como argumento.
11 Implementar o {comando_mudar_status_de_compra} que recebe argumentos 'id_compra' e 'novo_status'. Corrigir a implementação da função {compra.modifica_status} mudando o nome para {compra.muda_status}.
12 Corrigir {gera_html_elem.menu_geral}, criando a segunda linha de botões se o usuário for adminitrador. Acrescentar nessa linha o campo de busca "Compras de produto" que emite o comando 'buscar_compras_por_produto". Quebrar a implementação em funções menores.
13 Quando um usuário faz login, procurar nas compras desse usuário se há alguma compra com status {aberto}. Se houver, usa essa compra como carrinhio, em vez de criar uma compra nova.
14 Começar a implementação de "produtos agregados". Acrescentar ao {ObjProduto} dois novos atributos: um booleano 'variado', um string 'grupo' (um identificador de produto), e um string 'variedade' (uma descrição super-curta do produto, relativa ao grupo). Alterar todas as funções e módulos que precisam saber desses dois novos campos, como {produto.cria}. Por enquanto, no {gera_html_elem.bloco_de_produto}, a 'variedade' deve ser mostrada logo abixo da descrição curta, mesmo quando {detalhe=False}. O atributo 'grupo' deve ser mostrado só se {detalhe=True}.
15 Melhorar a aparência geral das páginas. Em particular, melhorar a página principal, mostrando as ofertas em vez dessa mensagem boba com data corrente. Consertar {gera_html_botao.simples} e {gera_html_botao.submit} de modo que a cor especificada seja usada DENTRO do botão, e não em volta dele.
16 No menu geral, se o usuário for adminitrador, acrescentar um campo onde ele pode digitar o identificador de um objeto de qualquer tipo ("{L}-{NNNNNNNN}", onde {L} pode ser "P", "C", "S", ou "U") e um botão "Ver" que emite um comando "ver_objeto" com esse identificador como argumento 'id_objeto'. Não implemente esse comando
17 Implementar um nov módulo "comando_ver_objeto", que recebe como argumento um 'id_objeto' ("{L}-{NNNNNNNN}", onde {L} pode ser "P", "C", "S", ou "U") e mostra esse objeto usando o formulário apropriado: {gera_html_pag.mostra_usuario}, {gera_html_pag.mostra_produto}, {gera_html_pag.mostra_compra}, e {gera_html_pag.mostra_sessao}. Implementar esta última função gerando uma mensagem de erro "Não implementada".
18 Acrescentar ao {ObjProduto} um novo atributo 'palavras' cujo valor é um string de até 1000 caracters contendo sinônimos e termos relacionados, para fins de busca. Alterar todas as funções e módulos que precisam saber desses dois novos campos, como {produto.cria}. Alterar a função {produto.busca_por_palavra} de modo a fazer a busca também nesse campo. Alterar {gera_html_elem.bloco_de_compra} para mostrar essa linha com fonte minúsculo se {detalhe=True}.