128 lines
No EOL
4.1 KiB
Python
128 lines
No EOL
4.1 KiB
Python
# models/c_caixa_item_model.py
|
|
|
|
from firebird.driver.types import DatabaseError # Importe esta exceção específica
|
|
from core.database import get_connection
|
|
# Se você tiver core.configs, pode ser útil para logs ou configurações
|
|
# from core.configs import settings
|
|
|
|
class CCaixaItemModel:
|
|
"""
|
|
Classe responsável por interagir diretamente com o banco de dados Firebird.
|
|
Nenhuma validação ou sanitização deve ser feita aqui.
|
|
"""
|
|
|
|
@staticmethod
|
|
def get_by_id(caixa_item_id: int) -> dict | None:
|
|
"""
|
|
Retorna um usuário com base no ID, ou None se não encontrado.
|
|
Lança exceções em caso de falha no banco de dados.
|
|
"""
|
|
conn = None
|
|
cur = None
|
|
try:
|
|
conn = get_connection()
|
|
cur = conn.cursor()
|
|
|
|
cur.execute("""
|
|
SELECT CAIXA_ITEM_ID,
|
|
DESCRICAO,
|
|
DATA_PAGAMENTO,
|
|
VALOR_SERVICO,
|
|
VALOR_PAGO,
|
|
APRESENTANTE
|
|
FROM C_CAIXA_ITEM
|
|
WHERE CAIXA_ITEM_ID = ?
|
|
""", (caixa_item_id,))
|
|
row = cur.fetchone()
|
|
|
|
if row:
|
|
return {
|
|
"caixa_item_id": row[0],
|
|
"descricao": row[1],
|
|
"data_pagamento": row[2],
|
|
"valor_servico": row[3],
|
|
"valor_pago": row[4],
|
|
"apresentante": row[5],
|
|
}
|
|
return None
|
|
except DatabaseError as e:
|
|
print(f"Database error in get_by_id: {e}")
|
|
raise RuntimeError(f"Erro ao buscar item por ID no banco de dados: {e}")
|
|
except Exception as e:
|
|
print(f"Unexpected error in get_by_id: {e}")
|
|
raise RuntimeError(f"Erro inesperado ao buscar item por ID: {e}")
|
|
finally:
|
|
if cur:
|
|
cur.close()
|
|
if conn:
|
|
conn.close()
|
|
|
|
@staticmethod
|
|
def count_items() -> int:
|
|
"""
|
|
Retorna a quantidade de usuários.
|
|
"""
|
|
try:
|
|
conn = get_connection()
|
|
cur = conn.cursor()
|
|
cur.execute("SELECT COUNT(*) FROM C_CAIXA_ITEM")
|
|
total = cur.fetchone()[0]
|
|
return total
|
|
except Exception as e:
|
|
raise RuntimeError(f"Erro ao contar itens: {e}")
|
|
finally:
|
|
if cur:
|
|
cur.close()
|
|
if conn:
|
|
conn.close()
|
|
|
|
|
|
@staticmethod
|
|
def get_all_caixa_itens(skip: int = 0, limit: int = 10) -> list[dict]:
|
|
"""
|
|
Retorna todos os itens cadastrados no banco de dados.
|
|
Lança exceções em caso de falha no banco de dados.
|
|
"""
|
|
conn = None
|
|
cur = None
|
|
try:
|
|
conn = get_connection()
|
|
cur = conn.cursor()
|
|
|
|
query = f"""
|
|
SELECT FIRST {limit} SKIP {skip}
|
|
CAIXA_ITEM_ID,
|
|
DESCRICAO,
|
|
DATA_PAGAMENTO,
|
|
VALOR_SERVICO,
|
|
VALOR_PAGO,
|
|
APRESENTANTE
|
|
FROM C_CAIXA_ITEM
|
|
ORDER BY CAIXA_ITEM_ID
|
|
"""
|
|
|
|
cur.execute(query)
|
|
rows = cur.fetchall()
|
|
|
|
return [
|
|
{
|
|
"caixa_item_id": r[0],
|
|
"descricao": r[1],
|
|
"data_pagamento": r[2],
|
|
"valor_servico": r[3],
|
|
"valor_pago": r[4],
|
|
"apresentante": r[5],
|
|
}
|
|
for r in rows
|
|
]
|
|
except DatabaseError as e:
|
|
print(f"Database error in get_all: {e}")
|
|
raise RuntimeError(f"Erro ao buscar todos os itens no banco de dados: {e}")
|
|
except Exception as e:
|
|
print(f"Unexpected error in get_all: {e}")
|
|
raise RuntimeError(f"Erro inesperado ao buscar todos os itens: {e}")
|
|
finally:
|
|
if cur:
|
|
cur.close()
|
|
if conn:
|
|
conn.close() |