Durante o módulo 3 do curso Jovem Programador Senac, aprendemos sobre desenvolvimento Web, e um dos desafios durante o curso foi o desenvolvimento de um sistema de controle de estoque, que tivesse os seguintes requisitos:
- Sistema de controle de acesso com login e senha
- Opção de cadastro de usuário
- Opção de alteração de senha de acesso
- Barra de pesquisa
- Cadastro de produtos
- Página de informações do produto
- Opções para movimentação de estoque (entradas e saídas)
- Controle de estoque do produto
Além desses requisitos, a regra que o professor exigiu nesse desafio, era que cada usuário fosse independente, ou seja, cada usuário iria cadastrar os seus produtos e fazer as suas movimentações, os registros de todos os usuários ficariam no mesmo banco de dados, porém, cada usuário só teria acesso aos seus registros.
Esses acima eram os requisitos que o desafio exigia, e também, foi sugerido de utilizarmos o máximo de conhecimentos que tínhamos até aquele momento do curso, como por exemplo, no cadastro de produtos tivesse a opção de colocar uma imagem para o produto.
Além disso, também era necessário que fosse possível fazer o CRUD, e que também tivesse um dashboard do produto, mostrando as suas posições de estoque, e algumas informações a respeito da movimentação do estoque.
Com isso, pensei em um sistema que de uma forma simples, simulasse um sistema de vendas, com entradas e saídas para poder controlar o estoque.
Além disso, criei categorias para classificar os produtos e unidades de medida para controlar as entradas e saídas do estoque.
Outra coisa que criei para ser um diferencial no dashboard do produto no meu sistema, foi o cálculo de preço médio de compra e preço médio de venda.
Mas para isso, tive que imaginar duas situações, a primeira é a situação de operação comercial que é a compra e a venda do produto, que são operações que devem ser levadas em conta para calcular um preço médio de compra e um preço médio de venda, assim como entrada e saída do estoque.
A segunda situação é a operação que é apenas contábil, que seria as devoluções para fornecedor, e também devoluções de clientes, que são operações que devem ser levadas em conta para a movimentação do estoque, porém não devem ser levadas em conta para calcular o preço médio de compra e venda.
Para resolver esse problema, criei um cadastro de tipos de movimentação, onde podem ser criados os tipos de movimentação necessários de acordo com a regra de negócio, como por exemplo, uma operação de venda a consumidor final, essa operação seria uma operação de saída e uma operação comercial. Já a compra de um item pra estoque seria uma operação de entrada e também uma operação comercial. Por outro lado, a devolução de um item que um cliente comprou e devolveu seria uma operação de entrada, mas que seria apenas contábil, da mesma forma que um produto que fosse devolvido para o fornecedor seria uma operação de saída, e somente contábil.
O cadastro de produtos, fiz bem simples, ele tem apenas os seguintes campos:
- Nome do produto
- Preço de venda
- Descrição detalhada do produto (opcional)
- Categoria (eletrônicos, bazar, alimento, etc.)
- Unidade de medida (kg, caixa, un, pacote, etc.)
- Imagem do produto (opcional)
Na barra de pesquisa na página inicial, é possível pesquisar por um termo e o sistema retornará se encontrar esse termo, no nome do produto ou na sua descrição.
Na tela inicial também vamos ter um atalho para o cadastro de produtos, e para os cadastros auxiliares (cadastro de categorias, cadastro de medidas e cadastro de tipos de movimentação)
Nesta mesma tela, também temos um botão para mais consultas, nessa opção é possível efetuar a consulta por categoria, e também verificar os itens com pouco estoque (inicialmente ele trará os itens cujo estoque estiver zerado, mas tem um campo onde pode ser informado abaixo de quantas unidades você quer que liste, exemplo: ver todos os itens com menos de 10 unidades em estoque).
Assim como a opção de consultar itens com pouco estoque, há também a opção de consultar itens com muito estoque, para isso é só entrar na opção consultar itens com muito estoque, e informar a quantidade acima de qual você considera que é muito estoque (por padrão ele começará mostrando os itens com mais de 10 unidades, mas você pode informar outra quantidade se preferir)
Na página inicial, vai aparecer todos os itens cadastrados (são 5 itens por página, sendo que aparece sempre os últimos cadastrados) clicando no nome do produto, ou no Id, vai abrir a página de informações do produto, por essa página é possível ver todos os detalhes do produto e também lançar movimentações de entrada e saída.
Clicando no ícone da lupa, vai abrir a tela de movimentação desse produto, nessa tela, vai aparecer os dados do produto, como por exemplo, a quantidade em estoque, preço da última compra, preço de venda, data da última compra e data da última venda. E também a sua movimentação com opção de eliminar o registro de movimentação.
Nessa tela também vai ter a opção de lançar entradas ou saídas do produto.
Na tela de relatório do produto, existe o botão de acesso ao dashboard do produto, nesse dashboard será possível ver com mais detalhes diversas informações relevantes sobre esse produto, como por exemplo:
- Dados do produto
- Quantidade em estoque
- Preço de venda
- Preço da última compra
- Data da última venda
- Data da última compra
- Quantidade de produtos vendidos
- Total de valor das vendas do produto (faturamento)
- Preço médio de venda do produto
- Quantidade de produtos devolvidos/estornados para o fornecedor
- Total de valor contabil dos itens devolvidos/estornados para o fornecedor
- Quantidade de produtos comprados
- Total de valor das compras do produto
- Preço médio de compra do produto
- Quantidade de produtos devolvidos ou com vendas canceladas
- Total de valor contabil dos itens devolvidos ou com vendas canceladas
- Lucro total na venda pelo preço médio
- Lucro médio por item na venda das Unidade(s) vendidas
- Margem de lucro baseada no preço médio
- Projeção de estimativa de faturamento com a venda do estoque
- Estimativa de lucro na venda do estoque
Nesse sistema também, aproveitei para exercitar e fazer diversas validações, como por exemplo: caso não tenha estoque suficiente, não permitir a venda, caso o produto tenha em estoque, não permitir desativação, caso não tenha sido realizada nenhuma movimentação o sistema não permite acessar o dashboard financeiro do produto, ao fazer movimentações, se a movimentação for entrada aparece apenas as opções que são do tipo entrada, da mesma forma, ao fazer saída só aparecem as movimentações do tipo saída.
Movimentações do tipo entrada somente contábil vão dar entrada no estoque, mas não vão influenciar no preço médio, assim como saídas do tipo somente contábil vão dar saídas no estoque mas não vão influenciar no preço médio.
Finalmente, após o projeto ser concluído, fiz o deploy dele em minha VPS.