63 lines
2.8 KiB
Python
63 lines
2.8 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 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
|