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 if status == 0 else 0, # Only save pre-auth amount if approved charge_amount=transaction.charge_amount if transaction.transaction_type != 0 or status == 0 else 0, # Only save charge amount for charges if approved 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 # Set charge_amount only if approved (status == 0), otherwise set to 0 transaction.charge_amount = charge_amount if status == 0 else 0 transaction.transaction_type = 3 # capture transaction.status = status if rejection_reason: transaction.rejection_reason = rejection_reason db.commit() db.refresh(transaction) return transaction