84 lines
2.6 KiB
Python
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() |