26 lines
1.3 KiB
Python
26 lines
1.3 KiB
Python
from sqlalchemy import Column, String, DateTime, Numeric, ForeignKey
|
|
from sqlalchemy.sql import func
|
|
from app.core.database.db_session import Base
|
|
|
|
class ServicePayment(Base):
|
|
__tablename__ = "service_payments"
|
|
|
|
payment_id = Column(String(26), primary_key=True)
|
|
service_job_id = Column(String(26), ForeignKey("service_jobs.job_id"), nullable=False, index=True)
|
|
quote_id = Column(String(26), ForeignKey("service_job_quotes.quote_id"), nullable=True)
|
|
payment_type = Column(String(20), nullable=False) # ADVANCE, ADDITIONAL, FINAL, REFUND
|
|
amount = Column(Numeric(10, 2), nullable=False)
|
|
status = Column(String(20), default="PENDING") # PENDING, CAPTURED, FAILED, REFUNDED
|
|
provider = Column(String(50), nullable=True) # RAZORPAY, CASH, UPI, etc.
|
|
provider_order_id = Column(String(100), nullable=True)
|
|
provider_payment_id = Column(String(100), unique=True, nullable=True, index=True)
|
|
provider_signature = Column(String(255), nullable=True)
|
|
transaction_reference = Column(String(100), nullable=True)
|
|
|
|
# Refund Tracking Audit Columns
|
|
provider_refund_id = Column(String(100), nullable=True, index=True)
|
|
refund_reason = Column(String(255), nullable=True)
|
|
refunded_at = Column(DateTime, nullable=True)
|
|
|
|
created_at = Column(DateTime, server_default=func.now())
|
|
paid_at = Column(DateTime, nullable=True)
|