estoque.sh - Gerenciamento de estoque/almoxarifado

Publicado por Ricardo Sabaliauskas (última atualização em 26/03/2013)

[ Hits: 5.687 ]

Download .estoque.sh

Download estoque.sh (versão 2)




Este script que uso diariamente tem por objetivo gerenciar de um modo simples um estoque/almoxarifado. Basicamente os materiais entram como "+x", onde "x" é um número inteiro e saem com "-x". Também existem várias maneiras de exibir o saldo, como por exemplo, saldo unitário, saldo de um conjunto, saldo total, saldo por funcionários, saldo de saídas semanal (para fornecer uma base para quantidade de reposição), etc...

Está licenciado sob GLP, seu uso é de sua inteira responsabilidade e não se deve alterar/remover a menção do autor.

###########################################################
##########  1.0) INFORMAÇÕES BÁSICAS
###########  ************************************************

Nome deste script:
.estoque.sh

Objetivo deste script:
Gerenciamento de materiais de estoque

Autor:
Ricardo Sabaliauskas

Licença:
GLP (Sem nenhuma garantia direta ou indireta). Uso e risco por sua conta.

Versão:
1.0

Notas da versão:
Esta versão, "1.0" do shell-script ".estoque.sh" acrescentou novas funcionalidades referentes ao testes das respostas. Agora é necessário adicionar todos funcionários e também todos os materiais em seus respectivos diretórios e se na solicitação de materiais ou funcionários houver uma resposta que não coincida com os dados já fornecidos então a pergunta será refeita para que haja a devida correção.

Também houve uma melhor padronização e limpeza do código e também suporte à cores.

Dependências:
- bash em versão recente.
- Configuração e criação dos diretórios para os itens de materiais, funcionários e talvez observações.
- unix2dos (dependendo da configuração)


###########################################################
##########  2.0) FUNCIONAMENTO
###########  ************************************************
Existe um software, muito bem falado, chamado "Stoq" e este tem por objetivo a gerência de estoque no GNU/Linux. É um software com muitas funções para uso empresarial. Este script foi feito para um uso mais limitado, com muitas menos funções, basicamente registra "+x" ou "-x" (onde "x" é um número) de material e também fornece o saldo dos materiais em estoque. Ele funciona em modo texto e possui um recurso para que haja a menor quantidade possível de digitação resultando um funcionamento de ações rápidas.

Com respeito a este recurso é necessário ressaltar como funcionam a ações de copiar e colar no GNU/Linux. No GNU/Linux não existe a necessidade, em muitos casos, de usar o "Ctrl + C" e o "Ctrl + V" para copiar alguma coisa e colá-la em outro lugar. Basta selecionar a frase a ser copiada com o mouse e depois clicar o roler para colá-la apenas usando a seta do mouse para indicar o local (roler é aquela rodinha que é usada para subir ou descer uma página, sem que haja necessidade de usar a "seta" do mouse). Sim, é isto mesmo, o roler também tem a função de clicar além de subir ou descer a página do navegador de Internet (o "Ctrl + C" e o "Ctrl + V" funcionam no GNU/Linux similarmente ao Windows, mas para este script é muito mais prático usar este sistema através do roler do mouse).

Com isto em mente, ao se fazer um registro de entrada ou saída de material do estoque, será exibido, durante os questionários de material, .funcionários .., uma listagem e através deste método devemos selecionar com mouse o item desejado, teclar "q" para sair da listagem, ("q" minúsculo), e depois com a seta do mouse "mirar" na linha abaixo da pergunta e clicar o roler do mouse. Com isto você digitará menos e também permitirá manter um padrão único nas referências à aquele material.

NOTE: Quando a listagem de itens for muito grande e ficar incômodo ficar procurando determinado item, o comando "less", que é responsável pela exibição desta listagem, tem um recurso de filtragem para podemos localizar mais rapidamente o item procurado. Vamos supor que você esteja procurando por algum item que se chama "sapato_qualquer-coisa", então você digitaria "/sapato" e teclaria o "ENTER" e o comando "less" vai realçar todos os item que tem a palavra "sapato".

Um outro ponto a ser comentado é os nomes de materiais no estoque. Seria interessante usar nomes padronizados. Eu, particularmente, sigo a seguinte fórmula:

- nome de materiais começam com as letras minúsculas.
(Isso facilita a digitação no caso acima mencionado, na filtragem do comando less)

- Não uso espaço em branco.
NOTE: Eu não recomendo o uso de espaço em branco, embora talvez isso não seja um problema. O uso de espaço em branco pode causar erros e este script não foi testado usando-os.

- A separação dos nomes é feita por uma letra maiúscula.
Exemplo:
botinaDeProtecao
vassouraDeJardineiro

- Comece sempre por um nome básico e depois acrescente alguma característica.
Exemplo:
botina
botinaPreta
botinaPretaDeProtecaoBicoDeMetal
botinaMarromDeProtecaoBicoDePlastico

- O nome do fabricante aparece depois do "-" (hífen). Exemplo:
botinaDeProteção-MarcaChule
vassouraDeJardineiro-SemMarca

- O "_" (underline) separa as medidas, tamanho... Exemplo:
botinaDeProteção-MarcaChule_40
botinaDeProteção-MarcaChule_41
fioDeCobreFlexivel-Cobrecom_1x25mm2

Você pode usar do modo que quiser mas lembre-se que certas funções, como a de "Saldo De Estoque De Um Conjunto", dependem de uma parte do nome para formar este conjunto.

Se executar o script "agenda.sh" seguido da letra "h" será exibido estas informações aqui. (Ou ainda; "-h", "help", "--help".)

Também é possível usar um outro parâmetro na execução deste script. Quando feito isso o retorno será o saldo de todos itens que conterem a palavra passada como parâmetro. Apenas lembre-se que no Linux letra maiúscula e minúscula são entendidas como palavras diferentes. Exemplo, "Casa" é diferente de "casa".


###########################################################
##########  3.0) CONFIGURAÇÃO DAS VARIÁVEIS
###########  ************************************************


NOME DESTE SCRIPT

O nome deste script é "estoque.sh" e recomendo-o deixá-lo assim. Porém você é livre para mudar seu nome conforme sua necessidade.

Para que uma mudança de nome não prejudique algumas funções deste script foi criada a variável abaixo.

Renomeie conforme exemplos:

Default:
NameSHEstoque=".estoque.sh"
NOTE: O "." (ponto) no início do nome serve para tornar o arquivo oculto. Desta forma ele não aparece em listagem comuns com o comando "ls" nem no navegador de arquivos. Para visualiza-los será necessário usar o parâmetro "-a" no comando "ls" ou descriminar a opção "Mostrar arquivos ocultos" nos navegadores de arquivos.

Supondo que o novo nome seja "Saldo_de_Estoque.sh":
NameSHEstoque="Saldo_de_Estoque.sh"

LOCALIZAÇÃO DO DIRETÓRIO AONDE ARQUIVOS GERADOS POR ESTE SCRIPT SERÃO ENVIADOS.

Este script permite a formação de arquivos ".txt" com certos dados referentes ao estoque. Por exemplo, você quer uma listagem apenas com os itens sapatos_qualquer_coisa, para enviar a alguém. Neste caso, após você digitar 2 na opção; "2) Saldo De Estoque." e depois 2 na opção; "2) Saldo De Estoque De Um Conjunto." e depois escolher parte do nome de item, (neste caso "sapato") e após ser exibido todos saldos dos itens que contém a palavra sapato (tudo em letra minúscula, exemplo; sapatoProtecao_42, sapatoProtecao_44, sapatoSocial_43...) você terá um menu e neste menu você terá a opção "1) Enviar Para Um Arquivo.". Escolhendo a opção "1" neste ponto será criado um arquivo "/algum_lugar/SaldoConjunto-sapato.txt" com a listagem que exibida anteriormente.

Esse "algum_lugar" é definido aqui.

Default:
PathHome="/home/"$USER""

LOCALIZAÇÃO DO DIRETÓRIO AONDE OS ARQUIVOS/DIRETÓRIOS COM OS NOMES DOS MATERIAIS DE ESTOQUE SERÃO CRIADOS.

NOTE: O script ".estoque.sh" pode localizar-se aonde você quiser, mas por padrão ele se localiza neste diretório também.

Default:
PathDir="$PathHome/ESTOQUE"

LOCALIZAÇÃO DO DIRETÓRIO AONDE OS ARQUIVOS/DIRETÓRIOS COM OS NOMES DOS FUNCIONÁRIOS SERÃO CRIADOS.

Default:
PathFuncionarios="$PathHome/FUNCIONARIOS"

LOCALIZAÇÃO DO DIRETÓRIO AONDE OS ARQUIVOS/DIRETÓRIOS COM OS NOMES DAS OBSERVAÇÕES SERÃO CRIADOS.

Default:
PathOBS="$PathHome/OBSERVAÇÕES"

CASO não pretenda fazer um diretório para este fim então deixe a variável "PathOBS=" assim:
PathOBS="XxXxXxXxXxX"

DIRETÓRIOS OU ARQUIVOS

É necessário criar um diretório para os materiais e outro diretório para os solicitantes (Usuários). Nesses diretórios serão colocados os nomes de todos os possíveis solicitantes e dos todos os materiais que serão usados em seu estoque, em forma de arquivos ou diretórios, respectivamente. Para o funcionamento deste script é indiferente esta opção desde que o seu arquivo "bashrc" esteja configurado para uma listagem comum de diretórios e aquivos (ou seja, ao executar o comando "ls" ele não exibará arquivos executáveis com o "*" no final do nome, nem o "/" no final dos nomes de diretórios [Se você não entendeu o que estou dizendo, então deixe a opção em sua configuração default]). Essa configuração existe para o caso de você resolver guardas fotos, manuais ou qualquer outra informação dos materiais usado no estoque e queira aproveitar o diretório de materiais já usado por este script, tornando desnecessário a recriação de um novo diretório para este fim.

Para Diretórios:
Faca=mkdir

Para Arquivos (Default):
Faca=touch

LOCALIZAÇÃO E NOME DO ARQUIVO QUE SERÁ USADO COMO BANCO DE DADOS.

Default:
PathDirFile="$PathDir/.estoque.txt"

NOTE: O padrão também é um arquivo oculto (seu nome começa com ".")

NOME DE ARQUIVOS DE SAÍDA:

Este script permite a formação de arquivos .txt  (tanto na formatação Unix como na formatação Windows, configuração disponível logo abaixo) com um conteúdo filtrado ou não. Para estes arquivos que serão formados é necessário um nome e esta configuração de nomes é feita aqui.

NOTE: Não coloque a extensão ".txt" porque esta será inserido automaticamente.

Para arquivos de "Saldo Unitários" de estoque:
Default:
SaldoUnitarioFile=SaldoUnitario

Para arquivos de "Saldo de Conjuntos" de estoque:
Default:
SaldoUnitarioFile=SaldoConjunto

Para arquivos de "Saldo Total" de estoque:
Default:
SaldoTotalFile=SaldoTotal

Para arquivos de "Saldo de itens por um Funcionário":
Default:
SaldoFuncionarioFile=SaldoFunionario

Para arquivos de "Saldo de itens de todos Funcionários":
Default:
SaldoFuncionariosFile=SaldoFunionarioS

Para arquivos com materiais maior que certa quantidade:
Default:
SaldoQuantidadeMaiorFile=SaldoQuantitativoMaior

Para arquivos com materiais iguai a certa quantidade:
Default:
SaldoQuantidadeIgualFile=SaldoQuantitativoIgual

Para arquivos com materiais menores que certa quantidade:
Default:
SaldoQuantidadeMenorFile=SaldoQuantitativoMenor

Para arquivo de "listagem de registros de movimentação completa".
Default:
ListagemCompleta=ListagemCompleta

Para arquivos de "listagem de registros de movimentação completa".
Default:
ListagemParcial=ListagemParcial

Para arquivos de "Saldo Semanais".
Default:
SaldoSemanalfile=SaldoSemanalfile

FORMATO DE SAÍDA DE ARQUIVOS.

Os formatos da saída dos arquivos são ".txt" na formatação Unix. Porém eles podem ser formatados para o .txt do Windows, desde que você tenha o pacote "unix2dos" instalado em seu sistema (Debian e derivados).

Default:
FormateTXT=""

Opcional:
FormateTXT=windows

COR INDICADORA DE QUANTIDADE:

Este script tem suporte a cores e este é usado para realçar as quantidades de materiais na função saldo. Quando as funções de saldo forem efetuadas os itens que possuírem a quantidade especificada serão realçadas com a cor indicada (para essa situação), os item com maiores quantidades com uma outra cor indicativa de maior quantidade e os itens com menores quantidades com a outra cor indicativa de menor quantidade. O número, ou essa base quantitativa, para o cálculo das cores (igual, maior ou menor) é indicada abaixo.

Default:
QuantidadeAlerta=1

CORES INDICATIVA DE QUANTIDADE NO SALDO ESTOQUE:

Conforme explicação nas linhas anteriores você pode escolher as cores indicativas, ou alertas, de quantidade.

As cores disponíveis são:

- Para rosa use $ROSA
- Para verde use $VERDE
- Para amarelo use $AMARELO
- Para azul escuro use $AZUL_ESCURO
- Para lilas use $LILAS
- Para azul claro use $AZUL_CLARO
- Para branco use $BRANCO
- Para vermelho use $VERMELHO
- Para branco bold use $BRANCO_BOLD

Veja os exemplos e depois configure a seu gosto.

- Para anular efeito de cores:
COR_MAIOR_UM=""
COR_IGUAL_UM=""
COR_MENOR_UM=""

- Para indicar somente com a cor vermelha apenas os itens menor que a base quantitativa:
COR_MAIOR_UM=""
COR_IGUAL_UM=""
COR_MENOR_UM=$VERMELHO

- Para indicar cor verde para maior e cor amarela para igual que a base quantitativa, e a cor vermelha para menor:
COR_MAIOR_UM=$VERDE
COR_IGUAL_UM=$AMARELO
COR_MENOR_UM=$VERMELHO

Default:
COR_MAIOR_UM=""
COR_IGUAL_UM=$AMARELO
COR_MENOR_UM=$VERMELHO

CASO NÃO IDENTIFIQUE O SOLICITANTE

Quando registramos uma entrada de material nem sempre queremos descriminar o fornecedor, que neste caso seria descriminado na opção "solicitante", e é por isso que este script permite o lançamento de solicitantes vazios ou nulos. Nesses casos a configuração de um nome para representar esses solicitantes nulos é feita aqui.

SolicitanteNulo=???

A QUANTIDADE DE REGISTROS DO HISTÓRICO DE LANÇAMENTOS A SEREM EXIBIDOS NOS LANÇAMENTOS DE ENTRADA E SAÍDA DE MATERIAIS.

Ao fazer um registro de entrada e saída de material é exibido um resumo do histórico do solicitante, se este não estiver vazio, ou do material ( caso o solicitante esteja vazio). Este resumo é simplesmente os últimos "X" quantidade de registro do material ou do solicitante. Este "X" números é configurado aqui. Se colocar "0" nada será exibido.

NumeroDeExibicoesNoLancamento=5

Este script permite você saber a média de saídas de um produto por semana. Esta função existe primariamente para auxiliar a obtenção de novos materiais, porque assim é possível ter uma base de consumo daquele material e calcular um consumo de quantidade por um período específico.

A semanas e o ano do qual se começará a calcular a média é setada aqui. O ano tem 53 semanas (1 a 53) e o número da semana é descrita nos dois últimos dígitos da data (por exemplo: 2013-02-25_Seg_08 o número 08 se refere à oitava semana do ano 2013).

AnoDaSemana=2013
NumeroDaSemana=08

Ao fazer a média normalmente o número resultante é fracionado. Para setar a quantidade de dígitos depois da vírgula (ou melhor, o ponto) acerte a variável abaixo conforme exemplos:

- Para dois dígitos após a virgula (ponto).
scale=2

- Para três dígitos após a virgula (ponto).
scale=3

  



Versões atualizadas deste script

Versão 2 - Enviado por Ricardo Sabaliauskas em 21/03/2013

Changelog: Versão '1.1', corrigido um problema do saldo conjunto eliminando o 'grep -w' e substituindo por 'grep -P \\t'. Este problema causava soma incorreta do saldo quando o nome do material era parecido e continha '-' (hífen). Exemplo:

calcaJeans_48
calcaJeans_48-usada

Download estoque.sh


Esconder código-fonte

NOTE: Não foi possível colocar todo o script aqui, porque tem mais de 3500 linhas.

Scripts recomendados

ping alarme - avisa quando o ip esta offline e gera log

Ajuste Dinâmico do Governador de CPU no Linux

Monitore vários servidores ao mesmo tempo com Apache + shellscript

FingerPrint

Init Service for Slackware


  

Comentários
[1] Comentário enviado por removido em 30/03/2013 - 00:16h

Quanto tempo levou prá talhar esse monumento?

[2] Comentário enviado por ricken em 01/04/2013 - 19:16h

Listeiro 037,

foi um bom tempo, mas como este script eu uso em meu trabalho e eu fui fazendo aos poucos não tenho uma precisão de tempo. Pelo menos para mim tá funcionando bem e o esforço valeu a pena.

[3] Comentário enviado por ivandroconradi em 01/08/2016 - 11:00h

Oi Ricken, por acaso com o seu script eu consigo listar todos os produtos de um fornecedor X trazendo a data da ultima compra realizada, a quantidade adquirida na ultima compra, a quantidade atual em estoque os preços de custo e venda? Obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts