Files
eamco_authorize/app/crud.py
2025-09-08 14:30:40 -04:00

61 lines
2.5 KiB
Python

from sqlalchemy.orm import Session
from . import models, schemas
def get_customer(db: Session, customer_id: int):
return db.query(models.Customer).filter(models.Customer.id == customer_id).first()
def get_customer_by_email(db: Session, email: str):
return db.query(models.Customer).filter(models.Customer.customer_email == email).first()
def get_customers(db: Session, skip: int = 0, limit: int = 100):
return db.query(models.Customer).offset(skip).limit(limit).all()
def create_transaction(db: Session, transaction: schemas.TransactionBase, customer_id: int, status: int, auth_net_transaction_id: str = None):
db_transaction = models.Transaction(
preauthorize_amount=transaction.preauthorize_amount,
charge_amount=transaction.charge_amount,
transaction_type=transaction.transaction_type,
customer_id=customer_id,
status=status,
auth_net_transaction_id=auth_net_transaction_id,
service_id=transaction.service_id,
delivery_id=transaction.delivery_id,
card_id=transaction.card_id,
payment_gateway=transaction.payment_gateway,
rejection_reason=transaction.rejection_reason
)
db.add(db_transaction)
db.commit()
db.refresh(db_transaction)
return db_transaction
def get_transaction_by_delivery_id(db: Session, delivery_id: int):
return db.query(models.Transaction).filter(
models.Transaction.delivery_id == delivery_id,
models.Transaction.transaction_type == 1, # auth transactions
models.Transaction.status == 0 # approved
).first()
# --- THIS IS THE FIX ---
# This function was missing, causing the AttributeError.
# It finds a transaction using the unique Authorize.Net transaction ID.
def get_transaction_by_auth_id(db: Session, auth_net_transaction_id: str):
return db.query(models.Transaction).filter(
models.Transaction.auth_net_transaction_id == auth_net_transaction_id
).first()
# --- END OF FIX ---
def update_transaction_for_capture(db: Session, auth_net_transaction_id: str, charge_amount: float, status: int, rejection_reason: str = None):
transaction = db.query(models.Transaction).filter(models.Transaction.auth_net_transaction_id == auth_net_transaction_id).first()
if not transaction:
return None
transaction.charge_amount = charge_amount
transaction.transaction_type = 3 # capture
transaction.status = status
if rejection_reason:
transaction.rejection_reason = rejection_reason
db.commit()
db.refresh(transaction)
return transaction