Files
controles/functions/controle.py

84 lines
2.6 KiB
Python

from datetime import datetime, UTC
from sqlalchemy.exc import SQLAlchemyError
from functions.database import get_db_connection, Controle as ControleModel
class Controle:
def __init__(self):
self.db = get_db_connection()
def registrar_controle(self, militante_id: int, tipo: str, valor: float, observacao: str = None) -> bool:
"""
Registra um novo controle no sistema
Args:
militante_id: ID do militante
tipo: Tipo do controle (ex: 'pagamento', 'cota')
valor: Valor do controle
observacao: Observação opcional sobre o controle
Returns:
bool: True se o controle foi registrado com sucesso, False caso contrário
"""
try:
data_registro = datetime.now(UTC)
novo_controle = ControleModel(
militante_id=militante_id,
tipo=tipo,
valor=valor,
data_registro=data_registro,
observacao=observacao
)
self.db.add(novo_controle)
self.db.commit()
return True
except SQLAlchemyError as e:
self.db.rollback()
print(f"Erro ao registrar controle: {str(e)}")
return False
finally:
self.db.close()
def listar_controles(self, militante_id: int = None) -> list:
"""
Lista os controles registrados no sistema
Args:
militante_id: ID do militante para filtrar (opcional)
Returns:
list: Lista de controles encontrados
"""
try:
query = self.db.query(ControleModel)
if militante_id:
query = query.filter(ControleModel.militante_id == militante_id)
return query.all()
except SQLAlchemyError as e:
print(f"Erro ao listar controles: {str(e)}")
return []
finally:
self.db.close()
def buscar_controle(self, controle_id: int) -> ControleModel:
"""
Busca um controle específico pelo ID
Args:
controle_id: ID do controle
Returns:
ControleModel: Objeto do controle encontrado ou None
"""
try:
return self.db.query(ControleModel).filter(ControleModel.id == controle_id).first()
except SQLAlchemyError as e:
print(f"Erro ao buscar controle: {str(e)}")
return None
finally:
self.db.close()