Skip to content

Commit

Permalink
feat: adiciona cobraça extra por ovo
Browse files Browse the repository at this point in the history
  • Loading branch information
fernandohtr committed Sep 3, 2023
1 parent 02937a8 commit 661e3da
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 17 deletions.
37 changes: 25 additions & 12 deletions src/gerador_relatorio.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
from collections import namedtuple
import csv
import re

from typing import List
from unicodedata import normalize

Dados_Pedidos = namedtuple('Dados_Pedidos', ['data', 'nome', 'valor', 'quantidade'])

VALORES_MARMITA = {
'p': '9',
'g': '12'
'p': 9,
'g': 12,
'ovo': 2,
}


Expand All @@ -32,6 +36,7 @@ def obtem_pedidos_mes(arquivo: str, mes: int, ano: int) -> List[tuple]:
r'\*(.+?)\*.*?' # nome
r'\((.+?)\).*?' # tamanho
r'\((\d+?)\)' # quantidade
r'(.+)$' # comida
)
return re.findall(
regex,
Expand All @@ -51,15 +56,15 @@ def _ajusta_formatacao_data(texto: str, mes: int, ano: int) -> str:
return rf'({mes}/\d{{1,2}}/{ano})'


def sanitiza_dados(pedidos_mes: List[tuple]) -> List[tuple]:
def sanitiza_dados(pedidos_mes: List[tuple]) -> List[Dados_Pedidos]:
dados_sanitizados = []

for pedido in pedidos_mes:
dados_pedidos = (
pedido[0],
_sanitiza_nome(pedido[1]),
_converte_valor(pedido[2]),
pedido[3],
dados_pedidos = Dados_Pedidos(
data=pedido[0],
nome=_sanitiza_nome(pedido[1]),
valor=_converte_valor(pedido),
quantidade=pedido[3],
)

dados_sanitizados.append(dados_pedidos)
Expand All @@ -69,18 +74,26 @@ def sanitiza_dados(pedidos_mes: List[tuple]) -> List[tuple]:
def _sanitiza_nome(nome: str) -> str:
nome = nome.strip().capitalize()
nome = re.sub(r'(?:\.|:|,)', '', nome)

def _remove_acentos(texto: str) -> str:
return normalize('NFKD', texto).encode('ASCII', 'ignore').decode('ASCII')

return _remove_acentos(nome)


def _converte_valor(tamanho: str) -> str:
return VALORES_MARMITA.get(tamanho.strip()[0].lower())
def _converte_valor(pedido: tuple) -> str:
tamanho = pedido[2]
tem_ovo = VALORES_MARMITA.get('ovo') if _verifica_se_tem_ovo(pedido[4]) else 0
return VALORES_MARMITA.get(tamanho.strip()[0].lower()) + tem_ovo


def _verifica_se_tem_ovo(comida: str) -> bool:
regex = r'\W[Oo][Vv][Oo]'
match = re.search(regex, comida)
return bool(match)


def imprime_relatorio(dados_sanitizados: List[tuple]) -> None:
def imprime_relatorio(dados_sanitizados: List[Dados_Pedidos]) -> None:
for pedido in dados_sanitizados:
print(pedido)
print('-' * 30)
Expand Down
2 changes: 1 addition & 1 deletion src/tests/fixture/conversa_whatsapp_test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
6/1/21, 10:42 - Charmander: Cardápio: tropeiro e caldo, arroz, macarrão, mandioca ensopada, maxixe, cenoura, carne cozida, churrasco, frango frito, carne de porco, saladas
6/1/21, 10:43 - Caterpie: Bom dia
6/1/21, 10:43 - Pidgey: bom dia
6/1/21, 10:44 - Pidgey: *Pidgey*: (pequeno) (1); arroz, mandioca ensopada, cenoura, salpicão, frango frito.
6/1/21, 10:44 - Pidgey: *Pidgey*: (pequeno) (1); arroz, mandioca ensopada, cenoura, salpicão, frango frito, ovo.
6/1/21, 10:44 - Caterpie: *Caterpie:* (grande) (1): tropeiro, arroz, mandioca, frango frito e saladas
6/1/21, 10:44 - Sandshrew: Bom dia.
6/1/21, 10:45 - Sandshrew: *Sandshrew*: (grande) (1): tropeiro, *sem arroz*, mandioca, maxixe, carne de porco, salpicão, beterraba, cenoura com chuchu.
Expand Down
26 changes: 22 additions & 4 deletions src/tests/test_gerador_relatorio.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@ def test_sanitiza_nome(self):
self.assertEqual('Pikachu', gerador_relatorio._sanitiza_nome(nome))

def test_converte_valor(self):
self.assertEqual('12', gerador_relatorio._converte_valor('Grande'))
self.assertEqual('9', gerador_relatorio._converte_valor('Pequeno'))
self.assertEqual(12, gerador_relatorio._converte_valor(('6/30/21', 'Caterpie:', 'Grande', '1', '')))
self.assertEqual(9, gerador_relatorio._converte_valor(('6/30/21', 'Caterpie:', 'Pequeno', '1', '')))

def test_converte_valor_com_ovo(self):
self.assertEqual(14, gerador_relatorio._converte_valor(('6/30/21', 'Caterpie:', 'Grande', '1', ' beterraba,oVo, mandioca')))
self.assertEqual(11, gerador_relatorio._converte_valor(('6/30/21', 'Caterpie:', 'Pequeno', '1', ':ovo, beterraba, mandioca')))

def test_sanitiza_dados_com_erro_de_padrão(self):
pedidos_mes = [('6/30/21', 'Ca.terpie:', 'Grande', '2')]
pedidos_mes = [('6/30/21', 'Ca.terpie:', 'Grande', '2', ': tropeiro, arroz, batatinha ensopada')]
dados_sanitizados = gerador_relatorio.sanitiza_dados(pedidos_mes)
valor_marmita = '12'
valor_marmita = 12

self.assertIn('Caterpie', dados_sanitizados[0])
self.assertIn(valor_marmita, dados_sanitizados[0])
Expand All @@ -44,3 +48,17 @@ def test_ajusta_formatacao_data(self):
'(\\d{2}/06/2021)',
gerador_relatorio._ajusta_formatacao_data(conversa_data_longa, 6, 21)
)

def test_verifica_se_tem_ovo_encontra_ovo(self):
pedido_comida = ': tropeiro, arroz, batatinha ensopada, churrasco, beterraba, mandioca, ovo'
tem_ovo = gerador_relatorio._verifica_se_tem_ovo(pedido_comida)
self.assertTrue(tem_ovo)

def test_verifica_se_tem_ovo_nao_encontra_ovo(self):
pedido_comida = ': tropeiro, arroz, batatinha ensopada, churrasco, beterraba, mandioca'
nao_tem_ovo = gerador_relatorio._verifica_se_tem_ovo(pedido_comida)
self.assertFalse(nao_tem_ovo)


if __name__ == '__main__':
unittest.main()

0 comments on commit 661e3da

Please sign in to comment.