Source code for cardinity.models.settlement

"""
Cardinity Settlement Models

This module contains models for settlement operations.
"""

from typing import Any, Dict, Optional

from ..validation.constraints import Constraints
from .base import BaseModel, ReadOnlyModel


[docs] class Settlement(BaseModel): """Model for creating settlement requests. Settlements allow merchants to capture funds from previously authorized payments. """
[docs] def __init__(self, payment_id: str, **kwargs: Any) -> None: """Initialize Settlement model. Args: payment_id: The ID of the payment to settle **kwargs: Settlement data as keyword arguments containing amount and description """ self._payment_id = str(payment_id) super().__init__(**kwargs)
[docs] def get_constraints(self) -> Dict[str, Any]: """Get validation constraints for settlement creation. Returns: Dict[str, Any]: Cerberus validation schema for settlement data """ return Constraints.create_settlement_schema()
[docs] def get_endpoint(self) -> str: """Get the API endpoint for settlement creation. Returns: str: The payment-specific settlement endpoint """ return f"/payments/{self._payment_id}/settlements"
[docs] def get_method(self) -> str: """Get the HTTP method for settlement creation. Returns: str: Always returns POST for settlement creation """ return "POST"
[docs] def get_payment_id(self) -> str: """Get the payment ID being settled. Returns: str: The payment ID """ return self._payment_id
[docs] def get_amount(self) -> str: """Get the settlement amount. Returns: str: Settlement amount in decimal format (e.g., "10.50") """ return self.get_field("amount")
[docs] def get_description(self) -> str: """Get the settlement description. Returns: str: Settlement description """ return self.get_field("description", "")
[docs] class GetSettlement(ReadOnlyModel): """Model for retrieving settlement information. This model supports both single settlement retrieval and listing all settlements for a payment. """
[docs] def __init__(self, payment_id: str, settlement_id: Optional[str] = None) -> None: """Initialize GetSettlement model. Args: payment_id: The ID of the payment settlement_id: Optional specific settlement ID to retrieve """ self._payment_id = str(payment_id) self._settlement_id = settlement_id super().__init__()
[docs] def get_constraints(self) -> Dict[str, Any]: """Get validation constraints for settlement retrieval. Returns: Dict[str, Any]: Empty constraints for read-only operations """ return {}
[docs] def get_endpoint(self) -> str: """Get the API endpoint for settlement retrieval. Returns: str: The appropriate endpoint based on retrieval mode """ if self._settlement_id: return f"/payments/{self._payment_id}/settlements/{self._settlement_id}" else: return f"/payments/{self._payment_id}/settlements/"
[docs] def get_method(self) -> str: """Get the HTTP method for settlement retrieval. Returns: str: Always returns GET for settlement retrieval """ return "GET"
[docs] def get_payment_id(self) -> str: """Get the payment ID. Returns: str: The payment ID """ return self._payment_id
[docs] def get_settlement_id(self) -> Optional[str]: """Get the settlement ID for single settlement retrieval. Returns: Optional[str]: Settlement ID or None if listing mode """ return self._settlement_id
[docs] def is_listing(self) -> bool: """Check if this is a settlement listing request. Returns: bool: True if listing settlements, False if retrieving single settlement """ return self._settlement_id is None