https://github.com/trkotovicz/inventory-report
Gerador de relatórios que recebe como entrada arquivos com dados de um estoque e gera, como saída, um relatório em cima desses dados. Desenvolvido em Python com POO e testes com Pytest. Lê arquivos CSV, XML e JSON.
https://github.com/trkotovicz/inventory-report
csv docker json poo pytest python xml
Last synced: about 1 year ago
JSON representation
Gerador de relatórios que recebe como entrada arquivos com dados de um estoque e gera, como saída, um relatório em cima desses dados. Desenvolvido em Python com POO e testes com Pytest. Lê arquivos CSV, XML e JSON.
- Host: GitHub
- URL: https://github.com/trkotovicz/inventory-report
- Owner: trkotovicz
- Created: 2023-02-08T00:56:06.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-02-09T22:30:01.000Z (about 3 years ago)
- Last Synced: 2025-01-30T07:44:06.870Z (about 1 year ago)
- Topics: csv, docker, json, poo, pytest, python, xml
- Language: Python
- Homepage:
- Size: 32.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Inventory Report
Inventory reports é um gerador de relatórios que recebe como entrada arquivos com dados de um estoque e gera, como saída, um relatório acerca destes dados.
Esses dados de estoque poderão ser obtidos de diversas fontes:
- Através da importação de um arquivo CSV;
- Através da importação de um arquivo JSON;
- Através da importação de um arquivo XML.
Além disso, o relatório final possui duas versões: simples e completa.
## Habilidades desenvolvidas:
Aplicar conceitos de Orientação a Objetos em Python;
Aplicar padrões de projeto;
Leitura e escrita de arquivos (XML, CSV, JSON).
## Relatórios
### Versão simplificada do relatório
O método retorna uma string de saída com o seguinte formato:
```
Data de fabricação mais antiga: YYYY-MM-DD
Data de validade mais próxima: YYYY-MM-DD
Empresa com mais produtos: NOME DA EMPRESA
A data de validade mais próxima, somente considera itens que ainda não venceram.
```
### Versão completa do relatório
O método retorna uma string de saída com o seguinte formato:
```
Data de fabricação mais antiga: YYYY-MM-DD
Data de validade mais próxima: YYYY-MM-DD
Empresa com mais produtos: NOME DA EMPRESA
Produtos estocados por empresa:
- Physicians Total Care, Inc.: QUANTIDADE
- Newton Laboratories, Inc.: QUANTIDADE
- Forces of Nature: QUANTIDADE
```
### Versão do relatório em cores
Uma versão deste relatório será exibida em letreiros em Led, estes letreiros são coloridos, para isso, já implementamos o método responsável por retornar este relatório em cores.
Representação abaixo de como será a disposição das cores:
🟩Data de fabricação mais antiga:🟩 🟦10-05-2022🟦
🟩Data de validade mais próxima:🟩 🟦14-06-2021🟦
🟩Empresa com mais produtos:🟩 🟥Farinini🟥
---
💻 Ambiente Virtual
O Python oferece um recurso chamado de ambiente virtual, onde permite sua máquina rodar sem conflitos, diferentes tipos de projetos com diferentes versões de bibliotecas.
Criar o ambiente virtual
```
$ python3 -m venv .venv
```
Ativar o ambiente virtual
```
$ source .venv/bin/activate
```
Instalar as dependências no ambiente virtual
```
$ python3 -m pip install -r dev-requirements.txt
```
Com o seu ambiente virtual ativo, as dependências serão instaladas neste ambiente.
Quando precisar desativar o ambiente virtual, execute o comando "deactivate".
O arquivo `dev-requirements.txt` contém todas as dependências que serão utilizadas no projeto.
🛠 Testes
Para executar os testes certifique-se de que você está com o ambiente virtual ativado.
Executar os testes
```
$ python3 -m pytest
```
O arquivo pyproject.toml já configura corretamente o pytest. Entretanto, caso você tenha problemas com isso e queira explicitamente uma saída completa, o comando é:
```
python3 -m pytest -s -vv
```
Caso precise executar apenas um arquivo de testes basta executar o comando:
```
python3 -m pytest tests/nomedoarquivo.py
```
Caso precise executar apenas uma função de testes basta executar o comando:
```
python3 -m pytest -k nome_da_func_de_tests
```
Se desejar que os testes parem de ser executados quando acontecer o primeiro erro, use o parâmetro -x
```
python3 -m pytest -x tests/test_simple_report.py
```
Caso queria executar um teste especifico de um arquivo basta executar o comando:
```
python3 -m pytest -x tests/nomedoarquivo.py::test_nome_do_teste
```
📟 Executando o Projeto
O programa é executável via linha de comando. O comando a ser executado será `inventory_report`.
Para que ele funcione em seu ambiente é preciso antes instalar o próprio código como um pacote pip: pip install .
Agora você poderá chamar o comando inventory_report passando seus argumentos:
```
inventory_report argumento1 argumento2
```
argumento1 deve receber o caminho de um arquivo a ser importado. O arquivo pode ser um csv, json ou xml.
argumento2 pode receber duas strings: simples ou completo, cada uma gerando o respectivo relatório.
Outra opção é invocar o comando assim:
```
python3 -m inventory_report.main argumento1 argumento2
```
🗃️ Arquivos com os dados de entrada
Três formatos de importação estão disponíveis no diretório data dentro do diretório inventory_report. Confira o exemplo de formato deles:
Arquivos CSV
Os arquivos **CSV** são separados por vírgula, como no exemplo abaixo:
```CSV
id,nome_do_produto,nome_da_empresa,data_de_fabricacao,data_de_validade,numero_de_serie,instrucoes_de_armazenamento
1,cadeira,Target Corporation,2021-02-18,2025-09-17,CR25,empilhadas
2,mesa,"Galena Madeira, Inc.",2022-12-06,2026-12-25,FR29,desmontadas
3,abajur,Keen Iluminação,2019-12-22,2025-11-07,CZ09,em caixas
```
Arquivos JSON
Os arquivos JSON seguem o seguinte modelo:
```json
[
{
"id":1,
"nome_do_produto":"Borracha",
"nome_da_empresa":"Papelaria Solar",
"data_de_fabricacao":"2021-07-04",
"data_de_validade":"2029-02-09",
"numero_de_serie":"FR48",
"instrucoes_de_armazenamento":"Ao abrigo de luz solar"
}
]
```
Arquivos XML
Os arquivos **XML** seguem o seguinte modelo:
```xml
1
Microfone
Tecno Uau LTDA
2021-10-27
2032-08-31
MT08
Longe de fonte de calor
```
---
Projeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).