Skip to content

FrogDevs/equilibrionatural-controle_estoque

Repository files navigation

Equilíbrio Natural - Controle de Estoque

Languages TopLanguage Files RepoSize LinesCode MIT License Logos

>>> Read also in English

Sistema de gerenciamento de estoque para a empresa Equilíbrio Natural. Aplicação multiplataforma para o controle de 2 unidades físicas com opções importantes, como, cadastro de produtos, registro de histórico e prazo de validade automático.

Capturas de tela

App Screenshot App Screenshot

Apêndice

Agradecimentos

Deixamos essa dedicatória à empresa Equilíbrio Natural a qual confiou em nossas habilidades para divulgação, gestão e automação de seu empreendimento. E a ETEC Jardim Ângela por nos proporcionar a busca pelo conhecimento necessário na realização deste trabalho.

Atribuições

Recursos

  • ✨ Cards interativos
  • 🔒 Acesso de ADMIN e Visitante
  • 🏪 Escolha de unidade
  • 🔠 Categorias
  • 📦 Cadastrar, editar e excluir produtos
  • 🔎 Pesquisar produtos
  • 📖 Registro no histórico de mudanças
  • 🕔 Prazo de validade automático
  • 😎 Multiplataforma: Windows, Linux e Android

Tech Stack

Front-end: Vite, VueJs, TailwindCSS, Capacitor e Electron

Back-end: Vue Router, Pinia e Firebase

Lições aprendidas

Quais desafios foram enfrentados e como foram sobressaídos?

Com foco em garantir uma melhor experiência ao usuário optamos por usar sistema de design unificado e coeso. Com base em pesquisas, escolhemos o Material Design da Google em sua terceira e nova versão denominada Material You. Com esse sistema de design é possível criar produtos elegantes e utilizáveis. O Material Design oferece uma rica biblioteca de estilos e componentes, possuindo versões de desenvolvimento para Android, Flutter e Web. Porém até esse momento o suporte ao Material Web 3 é apenas planejado e como não existem bibliotecas que também ofereçam suporte, decidimos criar a nossa. Com o auxílio da documentação oficial, do kit de desing no Figma e do framework TailwindCSS construímos toda a interface do sistema que possui 13 componentes e 9 páginas com base nesse sistema de desing.

De forma geral, sistemas precisam ser consistentes e ao mesmo tempo dinâmicos. Isso significa exibir as informações em lugares certos e permitir que essas informações se modifiquem continuamente. Em um controle de estoque onde novas informações são gravadas constantemente, não é diferente. Porém, não é viável criar páginas diferentes para cada loja, categoria e produto toda vez que um produto novo é cadastrado. A melhor escolha é usar páginas já definidas e permitir que as informações nessas páginas sejam dinâmicas para cada loja, categoria e produto. Para isso utilizamos rotas, cada rota navega para uma página, mas por estarmos usando páginas fixas, usamos rotas dinâmicas. Em uma rota dinâmica você especifica as informações usando parâmetros. Usamos o Vue Router nesse processo.

Salvar as imagens dos produtos era um desafio. A solução foi usar a Web API FileReader(). Com essa API nativa de navegadores é possível extrair a URL da imagem. Usando essa URL conseguimos renderizar a imagem para o cliente. O empecilho é que imagens pesadas significam URL's maiores e URL' maiores significam maiores tempos de espera para renderizar as imagens, levando a um travamento no sistema até que a imagem seja finalizada. Há ainda outro problema, imagens maiores consomem mais espaço no banco de dados. Como resolvemos esses problemas? Simples, comprimido as imagens! Comprimir imagens é o processo de diminuir a qualidade da foto sem que a mesma seja indistinguível. CompressorJs é uma biblíoteca que fornece uma solução fácil e leve para esse problema.

O prazo de validade dos produtos é calculado de forma automática. Para isso usamos uma lógica que consulta o dia atual e subtrai do dia de vencimento, resultando em quantos dias faltam para o produto vencer. O dia de vencimento é obtido através da data selecionada no calendário Vue datepicker. Com esses valores, o sistema notifica o usuário com os produtos que estão próximos de seus vencimentos.

Para uma maior segurança sobre o que ocorre, o sistema possui um histórico de mudanças. Cada mudança é registrada, o que também permite ao usuário ter conhecimento sobre os valores dos produtos no estoque. O histórico exibe a última ação feita no produto, tais como: Registrado, editado ou excluído, a data e o horário que essa ação foi realizada e outras informações. O preço total do produto é calculado com base na quantidade x preço. E o preço total em estoque é a soma do preço total de todos os produtos.

Para que o usuário acesse o estoque com privilégios de administrador ele precisa inserir uma chave de acesso. A chave de acesso está no banco dados online e é carregada no sistema para a confirmação de entrada quando o usuário está conectado a internet. Contudo há um impasse, carregar a chave de maneira explicita possibilita que qualquer um tenha acesso ao sistema. Por isso essa chave é carregada de maneira criptografada, ou seja, de maneira cifrada e só é decifrada para a confirmação da senha. Dessa forma garantimos que o acesso ao sistema seja seguro. Usamos a SimpleCrypto que simplifica esse processo.

Otimizações

Que otimizações foram feitas no código?

O gerenciador de pacotes Pnpm foi escolhido para o projeto por oferecer cold e hot cache. Pnpm é 3x mais rápido e eficiente do que o Npm e mais rápido do que o Yarn. Lidar com inúmeras bibliotecas e módulos foi uma tarefa mais fácil e segura com essa ferramenta.

Vite é uma ferramenta com a utilidade de cuidar do bundle da aplicação. Fornece melhores técnicas de otimização, resultando em uma maior performance na aplicação tanto em forma de desenvolvimento quanto de produção para o usuário final.

O sistema foi construído usando o conceito de Mobile First. Esse conceito se refere a criação de qualquer projeto que prioriza a experiência em dispositivos móveis, enquanto são feitas adaptações para resoluções maiores. Isso permite que o sistema seja completamente responsivo e adaptável a outras resoluções de telas, permitindo que o cliente tenha opção de usar a versão mobile e/ou a versão desktop.

Além de mudanças na resolução, cada categoria no App mobile possui uma imagem que a identifica. Para acelerar o tempo que essas imagens são renderizadas na tela sem que o App fique congestionado o formato moderno de imagem .AVIF foi usado. AVIF permite que o tamanho da imagem seja reduzido sem que a mesma perca qualidade, o que por sua vez acelera o tempo de carregamento para milésimos de segundos.

Carregar dados não é uma tarefa fácil pois exige processamento, ainda mais se tratando de muitos dados a serem carregados. Ficar esperando em uma tela vazia até que todos os dados sejam carregados pode acabar frustrando o usuário. É importante que um sistema seja user friendly ou que possua usabilidade, nesse caso, informando que os dados necessários estão sendo carregados. Suspense API está disponível de forma nativa no Vue.js e é uma das formas de retornar essa informação ao usuário.

Demo

Versões para

Obs: Para abrir o programa em uma distribuição Linux é necessário:

  1. Clicar com o botão direito no arquivo equilibrio_natural-1.0.0.AppImage
  2. Ir em propriedades
  3. Marcar executar como programa

Requisitos de sistema

Windows:

SO: Windows 7 ou mais novo
Processador: 2.5Ghz ou superior
Memória: 512 MB de RAM
Armazenamento: 71.7 MB de espaço disponível

Distribuição Linux:

Processador: 2.5Ghz ou superior
Memória: 512 MB de RAM
Armazenamento: 92.1 MB de espaço disponível

Mobile Android:

SO: Android 5.1 ou mais novo
Memória: 2 MB de RAM
Armazenamento: 25 MB de espaço disponível

Rodar localmente

Nota: É necessário pussuir o gerenciador de pacotes Pnpm. Veja como instalar.

Clone o projeto

  git clone https://github.com/FrogDevs/Equilibrio-Natural-ControleEstoque.git

Vá ao diretório do projeto

  cd Equilibrio-Natural-ControleEstoque

Instale as depêndencias

  pnpm i

Inicie o servidor

  pnpm dev

Inicie a aplicação em electron

  pnpm cap open @capacitor-community/electron

Usado por

Este projeto é usado pela seguinte companhia

Relacionados

Veja outro projeto relacionado

Membros responsáveis

Licença

“Você deve ter paixão por uma ideia ou problema que quer resolver. Se você não tem paixão suficiente desde o começo, não vai aguentar a pressão.”

Steve Jobs