Projeto E-commerce

Esse projeto foi um desafio proposto pelo curso Jovem Programador Senac módulo 3, que consiste em explorar um pouco do que aprendemos durante o curso englobando as principais stacks estudadas no curso.

Este trabalho era individual e o tema proposto pelo desafio era um E-commerce de uma loja de livros, para isso deveríamos usar o framework Django para desenvolver este projeto.

Basicamente este projeto deveria ter ao menos o seguinte:

Esses acima eram os requisitos mínimos do projeto.

Como pensei e desenvolvi esse projeto

Para fazer o Front End, eu utilizei o Bootstrap para aproveitar suas funcionalidades e também a responsividade.

Quanto ao conteúdo do site, fiz um cadastro básico de livros que é feito utilizando a interface administrativa do próprio Django. Criei também um cadastro de categorias para dividir os livros por categoria, pensando em facilitar as consultas.

Os principais campos de cadastro do livro são: 

Na barra de navegação coloquei o campo de pesquisa, onde é possível pesquisar por um termo e o sistema retorna se aquele termo está presente no título, autor, ou categoria.

Nesta barra de navegação também tem um pequeno menu com as categorias, onde, ao clicar em uma delas o sistema retornará todos os livros daquela categoria em uma lista.

Quando o usuário estiver autenticado, vai ter também um menu com algumas funções que o usuário pode fazer, sendo elas:

Além disso, nessa mesma barra de navegação terá também o ícone para o carrinho de compras, e a indicação de quantos itens estão no carrinho, e também a opção para fazer logout.

Barra de navegação sem o usuário logado
Barra de navegação com o usuário logado

Na página inicial coloquei um carrossel que mostra os cinco livros com a melhor média de classificação, e logo abaixo uma galeria com as  novidades, que são os oito últimos livros adicionados ao sistema.

Exemplo da tela inicial

Acessando o botão “mais títulos” no final da página inicial, vai abrir uma lista com todos os títulos cadastrados em ordem alfabética pelo título, com uma paginação apresentando 5 livros por página.

Exemplo da lista de produtos

Esse exemplo de tela também é a que aparece para as categorias, ou então para as consultas feitas pela barra de pesquisa.

Nessa lista aparecem as informações do livro como:

Selecionando algum item da lista, vai aparecer os dados detalhados desse item, como por exemplo, sua sinopse, sua média de avaliação, seu preço, se o produto está em estoque e também as opções de adicionar ao carrinho, deixar uma avaliação, ou ver todas as avaliações.

As avaliações podem ser anônimas caso a pessoa não queira se identificar, ou não esteja autenticada no sistema.

Se o produto não estiver em estoque não vai aparecer a opção de adicionar ao carrinho, ao invés disso vai aparecer a opção “Avise me quando estiver disponível”.

Exemplo da tela de informações do produto

Se o usuário não estiver devidamente autenticado e clicar em “Adicionar ao carrinho”, será direcionado a tela de login para fazer autenticação, e logo após, poderá retornar e adicionar o item ao seu carrinho, caso ele já esteja autenticado, poderá diretamente adicionar o item ao seu carrinho.

Carrinho de compras

Ao entrar na tela do carrinho, o usuário verá todos os itens adicionados em seu carrinho, tendo a possibilidade de adicionar, ou remover unidades daquele item, e também as opções de finalizar pedido ou adicionar mais produtos.

Ainda nesta tela, tem a opção de calcular o frete (como é apenas um trabalho didático, considerei como regra de negócio que o frete de cada livro custa R$ 4,99 e se comprar acima de 10 unidades, o frete é grátis).

Caso o usuário tente finalizar o pedido sem calcular o frete o sistema não vai permitir, solicitando que calcule o frete para prosseguir.

Exemplo da tela de carrinho de compras

Após calcular o frete já é possível finalizar o pedido, com isso, o usuário será direcionado para a tela de finalização do pedido.

Ao finalizar o pedido, caso o usuário não tenha nenhum endereço de entrega cadastrado, ele será redirecionado a tela de cadastro de endereço, e se já tiver algum endereço cadastrado, será direcionado para a tela de conclusão do pedido.

Caso ele queira adicionar um novo endereço de entrega, também haverá a opção nessa tela para cadastrar um novo endereço.

Exemplo da tela de seleção de endereço e forma de pagamento

Após isso, o usuário deverá selecionar o endereço de entrega que prefere, e também a forma de pagamento, e então será possível prosseguir para a última parte que é a finalização do pedido.

Nesta parte basta o usuário conferir se está tudo de acordo, caso não esteja ele pode retornar e fazer as correções necessárias, e se estiver tudo de acordo, basta confirmar a compra.

Exemplo da tela de confirmação da compra

Após isso, o sistema já vai dar baixa no estoque dos livros, e o usuário já poderá acessar no seu painel os dados de seus pedidos.

Conclusão final do projeto

Vale lembrar que como se trata de um projeto didático, foram abstraídas diversas funcionalidades que sei que um E-commerce de verdade deve ter.

O desafio era apenas a lógica básica de um E-commerce, com o carrinho de compras, os pedidos e o controle de estoque.

Foi um projeto bastante desafiador para um programador de nível inicial como eu, mas que serviu para colocar em prática e exercitar bastante a lógica de um E-commerce.

Neste projeto foi exercitado bastante a parte dos models e das views do Django, inclusive, como fiz deploy deste projeto em minha VPS, tive que utilizar o Cloudinary para hospedar as imagens das capas dos livros.

Vou postar abaixo um link para o deploy em minha VPS e também um link para o projeto no meu Github.

Projeto salão de beleza

Esse foi meu projeto final do Jovem Programador módulo 2.

O projeto foi feito em duplas, e eu desenvolvi ele junto com minha colega Eduarda Bittencourt. A Eduarda ficou responsável pela escolha das cores, e da parte visual do sistema, enquanto eu fiquei responsável pela lógica e desenvolvimento.

Esse projeto na verdade é uma evolução natural do projeto da padaria, pois me baseei bastante no projeto da padaria para desenvolver este projeto com inúmeras melhorias e também para que ele ficasse com um nível mais avançado do que o anterior (projeto da padaria).

Principais evoluções em relação ao projeto da padaria:

O projeto consiste basicamente em:

É utilizado o banco de dados Sqlite3.

Regra de negócio deste projeto

O usuário deve ser cadastrado apenas pelo ROOT ou por algum usuário com permissões de ROOT, este por sua vez poderá, no momento do cadastro, ou a qualquer momento, setar as permissões dos demais usuários, incluindo dar a eles permissão de ROOT, as permissões possíveis são:

OBS: Um usuário pode acumular várias permissões de acordo com o que for setado pelo ROOT.

Assim como no projeto da oficina e da padaria, existe um superusuário que através dele poderá ser setado ao primeiro usuário cadastrado a permissão de ROOT e após isso esse primeiro usuário já pode setar as permissões aos demais usuários.

Ao entrar no sistema o usuário deve receber uma mensagem de boas vindas informando suas permissões. De acordo com suas permissões será as opções que ele deve ter disponível na tela.

Caso seja apenas cadastro ele terá acesso apenas ao menu de cadastros de forma parcial, pois algumas funções não ficarão disponíveis, como por exemplo o cadastro de usuários, e também ele não poderá fazer desligamento ou reativação de registros, nem fidelização ou desfidelização de clientes, pois essas são prerrogativas apenas do ROOT.

Se a permissão for faturamento, ele vai poder, além das opções de cadastro, acessar a área de faturamento.

Se a permissão for estatísticas, ele vai poder, além das opções de cadastro, acessar a área de estatísticas.

Se a permissão for agenda, ele vai poder, além das opções de cadastro, acessar a área de agenda.

Caso o usuário tenha permissão de ROOT ele poderá setar as permissões para ele mesmo e os demais usuários, portanto se ele tiver a permissão de ROOT ele consegue fazer o que quiser no sistema.

Área de faturamento:

É a área responsável pelo registro das vendas, as opções são:

Quanto aos registros de venda (notas fiscais):

Para emitir o registro de venda avulsa, o usuário seleciona o cliente, e em seguida ele é direcionado para a tela onde vai adicionar os serviços e os funcionários que efetuaram os serviços, após adicionar todos os itens ele tem duas opções, uma delas é terminar a nota e emitir ela (nesse caso o processo já fica concluído e a nota passa para o status de “Emitida”) e a outra opção é de fechar a tela de emissão de notas, e com isso a nota ficaria com status de “Pendente”, pois ela não foi emitida de fato, enquanto ela estiver pendente é considerado que a venda não se realizou ainda, e portanto o usuário pode entrar nela novamente, incluindo ou excluindo serviços, alterando dados da nota, após o usuário concluir ele deve emitir a nota, e com isso a nota passará pro status de “Emitida”, e passará a constar como registro para as estatísticas, e a partir disso não será mais possível fazer nenhuma alteração na nota, a não ser o seu cancelamento (se o usuário tiver essa permissão). Ao cancelar a nota fiscal o seu status passa para “Cancelada”, seu valor é zerado e ela automaticamente não é mais considerada nas estatísticas, porém seu registro permanece no sistema.

Para emitir o registro de venda por agendamento, o sistema aproveita os dados do agendamento para o registro da venda, bastando para isso que o setor de agendamento sinalize que o serviço já foi efetuado.

Detalhe importante: O ideal é que não hajam notas pendentes, pois o objetivo da nota é ser emitida, portanto, sempre que o usuário com permissões de faturamento entrar no sistema, ou fizer logout, o sistema verifica se existe alguma nota pendente e informa o usuário para que ele corrija.

Quanto a agenda:

Nesta área é possível fazer o agendamento de serviços, para isso deve informar a data prevista e então o sistema vai mostrar todos os serviços agendados a partir daquela data selecionada, é possível também ver a agenda dos profissionais, e também ver todos os agendamentos pendentes.

O que são agendamentos pendentes?

Ao entrar no sistema, o sistema checa automaticamente todos os agendamentos anteriores a data atual do sistema que estejam com status de “Agendado”, e altera seu status para “Pendente”, pois por algum motivo a pessoa responsável por cuidar da agenda não alterou o status daquele agendamento até a data prevista para sua execução, pois quando o serviço é efetuado deve ser alterado o status da agenda de “Agendado” para “Serviço efetuado”, ou caso o serviço não tenha sido efetuado por algum motivo, setar o status que justifique o agendamento.

Os status de agendamento possível são:

Detalhe importante: Sempre que o usuário com status de agenda acessa o sistema, ou faz logout ele recebe o aviso se tem algo pendente, semelhante a como acontece com o usuário de faturamento, caso o usuário tenha as duas permissões, ele recebe ambos os avisos, do faturamento e da agenda.

Quanto as estatísticas:

As opções de estatísticas são:

Todas as opções de estatísticas têm opções de consulta por todo o período, ou por intervalo de datas.

Opções das estatísticas de vendas realizadas:

OBS: Essas opções podem ser selecionadas para todo o período, que vai levar em conta todos os registros do banco de dados, ou apenas por um intervalo de datas que levará em conta apenas os registros que estão naquele intervalo de datas.

Opções das estatísticas de projeções futuras:

Nesta opção é necessário selecionar o intervalo de datas que deseja ver a previsão baseada na agenda, a data inicial precisa ser igual ou superior a data do sistema, e também selecionar a data final da estatística. Com isso o sistema vai mostrar os seguintes dados:

Também vai mostrar na última aba uma “lista negra” de clientes que cancelaram ou não apareceram em agendamentos, e esta informação pode ser útil para definir se o cliente pode perder o status de fidelizado, perdendo assim os descontos.

Estatísticas por gênero:

No caso das vendas realizadas vai mostrar o total por gênero, baseado nas vendas realizadas, e tem a opção de escolher intervalo de datas. No caso das projeções futuras, a mesma coisa, porém baseado nos agendamentos futuros.

Fidelização de clientes:

O ROOT tem a prerrogativa de fidelizar ou desfidelizar os clientes, de acordo com as regras de negócio estabelecida e também os dados estatísticos que o sistema fornece. Quando o cliente é fidelizado ele possui a possibilidade de receber um desconto especial, que deve ser definido na hora do registro da venda pelo faturamento, esse desconto pode ser de 0 até 20% dependendo da regra de negócio. Caso o cliente não seja fidelizado, no momento da emissão da nota não haverá a opção do desconto, mas caso ele seja fidelizado, no momento da emissão da nota vai aparecer um slider permitindo setar o percentual de desconto para o serviço a ser faturado.

Assim como no projeto da padaria, existem várias opções de consultas de vendas, que podem ser acessadas no menu faturamento, na opção manutenção de notas, são elas:

  • Todas as notas (mostra as últimas 50 notas)
    • Todas as notas emitidas (mostra as últimas 50 notas emitidas)
    • Todas as notas pendentes (mostra as últimas 50 notas pendentes)
    • Todas as notas canceladas (mostra as últimas 50 notas canceladas)
  • Notas por data da venda (selecionar a data desejada)
    • Todas as notas por data de venda
    • Notas emitidas por data de venda
    • Notas pendentes por data de venda
    • Notas canceladas por data de venda
  • Notas por cliente (selecionar o cliente desejado)
    • Todas as notas por cliente
    • Notas emitidas por cliente
    • Notas pendentes por cliente
    • Notas canceladas por cliente
  • Notas por intervalo de notas (informar o intervalo de notas que deseja)
    • Todas as notas por intervalo de notas
    • Notas emitidas por intervalo de notas
    • Notas pendentes por intervalo de notas
    • Notas canceladas por intervalo de notas
  • Notas por intervalo de datas (informar o intervalo de datas desejado)
    • Todas as notas por intervalo de datas
    • Notas emitidas por intervalo de datas
    • Notas pendentes por intervalo de datas
    • Notas canceladas por intervalo de datas

Em resumo, podemos ver que esse sistema é relativamente complexo, e é uma grande evolução em relação ao sistema da oficina e da padaria, pois já possui uma complexidade considerável e grandes evoluções. Neste projeto consegui explorar bastante a linguagem SQL para fazer as consultas e as estatísticas do banco de dados, mas o que achei um pouco mais complexo de desenvolver é a lógica das vendas levando em consideração a fidelização do cliente.

Também esse sistema foi super importante para exercitar a lógica de permissão, do que os usuários podem ou não podem fazer, dependendo de suas permissões, e também a lógica dos registros de vendas e dos dados para formação das estatísticas.

Um grande desafio foi fazer a emissão de nota automaticamente através do agendamento, e também o controle dos agendamentos pendentes que é feito unico e exclusivamente pelo sistema, tanto no login quanto no logout do usuário, levando em consideração suas permissões.

Esse projeto foi um grande desafio, mas consegui a nota máxima ao apresentar ele como projeto integrador no final do curso no Senac.

Quem quiser ver como ficou basta baixar esse projeto, e instalar as dependências (basicamente pyqt5) e o Python na versão 3.x

Para poder cadastrar um usuário e setar suas permissões deve utilizar inicialmente o superusuário ROOT e a senha manager.

Para executar o sistema utilize o arquivo menu.py, que vai abrir a tela de login, onde você poderá logar com o superusuário ROOT, cadastrar um usuário, setar suas permissões e em seguida logar novamente com o usuário que você cadastrou e testar para ver como ficou esse meu projeto final do Jovem Programador Senac módulo 2.

Projeto padaria

Esse foi meu segundo projeto do Jovem Programador módulo 2.

Esse projeto na verdade é uma evolução natural do projeto da oficina, pois me baseei bastante no projeto da oficina para desenvolver este projeto com inúmeras melhorias e também para que ele ficasse com um nível mais avançado do que o primeiro (projeto da oficina).

Principais evoluções em relação ao projeto da oficina:

O projeto consiste basicamente em:

É utilizado o banco de dados Sqlite3.

Regra de negócio do projeto

O usuário deve ser cadastrado apenas pelo ROOT ou por algum usuário com permissões de ROOT, este por sua vez poderá, no momento do cadastro, ou a qualquer momento, setar as permissões dos demais usuários, incluindo dar a eles permissão de ROOT, as permissões possíveis são:

Assim como no projeto da oficina, existe um superusuário que através dele poderá ser setado ao primeiro usuário cadastrado a permissão de ROOT e após isso esse primeiro usuário já pode setar as permissões aos demais usuários.

Ao entrar no sistema o usuário deve receber uma mensagem de boas vindas informando suas permissões. De acordo com suas permissões será as opções que ele deve ter disponível na tela.

Caso seja apenas consulta ele terá acesso a parte das estatísticas e a todo restante do sistema apenas como consulta, não podendo fazer alterações, iclusões ou qualquer outra ação que não seja consulta.

Se a permissão for criar, vai poder cadastrar produtos e clientes, e também emitir notas, além de poder ter acesso as estatísticas, porém não poderá alterar dados existentes, pois para isso é necessário a permissão de editar, com exceção de notas que ainda estejam com status pendente.

Se a permissão for editar, ele poderá apenas editar os registros e se for criar e editar vai poder criar e editar, mas não poderá desligar registros, pois para isso é necessário a permissão de excluir.

Se a permissão for excluir, então ele poderá também desligar registros, e se for criar, editar e excluir ele poderá fazer o CRUD completo, apenas não poderá setar permissões aos usuários, ou cadastrar funcionários, pois para isso é necessário a permissão de ROOT.

Caso o usuário tenha permissão de ROOT ele poderá setar as permissões para ele mesmo e os demais usuários, portanto se ele tiver a permissão de ROOT ele consegue fazer o que quiser no sistema.

Quanto aos registros de venda (notas fiscais)

Para emitir o registro de venda, o usuário seleciona o funcionário que efetuou a venda e o cliente que fez a compra, e em seguida ele é direcionado para a tela onde vai adicionar os itens vendidos. Após adicionar todos os itens ele tem a opção de fechar a tela de emissão de notas, e com isso a nota ficaria com status de pendente, pois ela não foi emitida de fato.

Enquanto ela estiver pendente é considerado que a venda não se realizou ainda, e portanto o usuário pode entrar nela novamente, incluindo ou excluindo produtos, alterando dados da nota, após o usuário concluir ele deve emitir a nota, e com isso a nota passará pro status de emitida, e passará a constar como registro para as estatísticas, e a partir disso não será mais possível fazer nenhuma alteração na nota, a não ser o seu cancelamento (se o usuário tiver essa permissão).

Ao cancelar a nota fiscal o seu status passa para cancelada, seu valor é zerado e ela automaticamente não é mais considerada nas estatísticas.

Quanto as estatísticas

Esse, na minha opinião é o principal diferencial do sistema em relação ao sistema da oficina. Ao entrar na seção das estatísticas o usuário deverá informar o período o qual ele deseja consultar, ao informar o intervalo de datas ele terá as seguintes opções de consulta:

Opções de consulta de registros

Outro diferencial em relação ao projeto da oficina, é a quantidade de opções de consultas de vendas.

Opções de consultas de vendas:

  • Todas as notas
  • Todas as notas emitidas
  • Todas as notas pendentes
  • Todas as notas canceladas
  • Notas por data da venda
    • Todas as notas por data de venda
    • Notas emitidas por data de venda
    • Notas pendentes por data de venda
    • Notas canceladas por data de venda
  • Notas por cliente
    • Todas as notas por cliente
    • Notas emitidas por cliente
    • Notas pendentes por cliente
    • Notas canceladas por cliente
  • Notas por funcionário
    • Todas as notas por funcionário
    • Notas emitidas por funcionário
    • Notas pendentes por funcionário
    • Notas canceladas por funcionário

Resumo geral do projeto

Em resumo, podemos ver que esse sistema já foi uma evolução em relação ao sistema da oficina, pois já possui uma complexidade considerável e grandes evoluções. Neste projeto consegui explorar bastante a linguagem SQL para fazer as consultas e as estatísticas do banco de dados, mas o que achei um pouco mais complexo de desenvolver é a lógica das vendas.

Também esse sistema foi super importante para exercitar a lógica de permissão, do que os usuários podem ou não podem fazer, dependendo de suas permissões, e também a lógica dos registros de vendas e dos dados para formação das estatísticas.

Quem quiser ver como ficou basta baixar esse projeto, e instalar as dependências (basicamente pyqt5) e o Python na versão 3.x

Para poder cadastrar um usuário e setar suas permissões deve utilizar inicialmente o superusuário ROOT e a senha manager.

Para executar o sistema utilize o arquivo padaria.py, que vai abrir a tela de login, onde você poderá logar com o superusuário ROOT, cadastrar um usuário, setar suas permissões e em seguida logar novamente com o usuário que você cadastrou e testar para ver como ficou esse meu segundo projeto do Jovem Programador Senac módulo 2.

Jovem Programador Senac módulo 3

Após o encerramento do módulo 2 do curso Jovem Programador, fui aprovado para participar do módulo 3, onde estudei sobre programação Web.

Esta etapa do curso teve duração de 240 horas e foi do dia 21/02/2022 até 08/06/2022, e neste curso aprendemos o seguinte:

No geral, assim como no módulo 2, foi uma excelente experiência pra mim, e pude aprofundar ainda mais os meus conhecimentos, inclusive, durante essa etapa do curso, desenvolvi alguns projetos, utilizando Python e o framework Django, entre eles:

Certificado de conclusão do curso
Carga horária do curso

Jovem Programador Senac módulo 2

Após passar na seleção pelo módulo 1 de lógica de programação, iniciei o módulo 2 do curso.

O módulo 2 consiste basicamente em desenvolvimento de software e aplicativos desktop, utilizando a linguagem Python, o PyQT5, o QT design e o banco de dados Sqlite.

Este módulo do curso se iniciou no dia 02/08/2021 e terminou no dia 10/12/2021 com 200 horas de aulas teóricas e práticas, esse módulo 2 do curso era a princípio híbrido, com aulas online e presenciais, e devido a pandemia, o aluno que desejasse (como foi o meu caso) poderia fazer esse módulo 100% online.

Certificado de conclusão do curso.
Carga horária do curso.

Neste módulo começamos aprendendo o básico da linguagem Python utilizando linhas de comando e o terminal.

Após isso, aprendemos também a utilizar o Qt design e o PyQt5 para construção de interfaces gráficas. Aprendemos também um básico da linguagem SQL e de trabalhar com o banco de dados Sqlite3.

Com as habilidades que aprendi nesse curso, desenvolvi alguns projetos para colocar em prática o meu aprendizado, foram eles:

Finalizamos esse módulo do curso com um Hackathon 100% online que ocorreu entre os dias 11/12/2021 e 18/12/2021, foi uma intensa semana com várias oficinas e workshops e muito aprendizado, onde os mais de 400 alunos desse módulo foram divididos em grupos de 5 a 7 integrantes e tiveram a oportunidade de escolher entre 8 eixos, cada um com uma tarefa, onde apenas 14 equipes seriam classificadas para a grande final.

Com muito orgulho minha equipe conseguiu ficar entre as 14 classificadas, apesar de não chegar entre os 3 primeiros, foi uma experiência muito importante para nosso aprendizado.