Source code for jengahq.send_money

"""Send Money Module."""
TransferTypes = {
    "InternalFundsTransfer": "InternalFundsTransfer",
    "MobileWallet": "MobileWallet",
    "RTGS": "RTGS",
    "SWIFT": "SWIFT",
    "EFT": "EFT",
    "PesaLink": "PesaLink",
}
DestinationTypes = {
    "mobile": "mobile",
    "bank": "bank",
}


[docs]class Source: """Funds Transfer Source.""" def __init__(self, account_number, name, country_code="KE"): """Create Source object.""" self.accountNumber = account_number self.name = name self.countryCode = country_code
[docs] def to_json(self): """Convert to json.""" return { "source": { "countryCode": self.countryCode, "name": self.name, "accountNumber": self.accountNumber, }, }
[docs]class Dest: """Destination for send money.""" def __init__(self, account_number, name, country_code="KE", type="bank"): """Create Dest object.""" self.accountNumber = account_number self.name = name self.countryCode = country_code self.type = type
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "accountNumber": self.accountNumber, "type": self.type, }, }
[docs]class Transfer: """Funds Transfer.""" def __init__( self, amount, reference, currencyCode, date, description, type="InternalFundsTransfer", ): """Create Transfer object.""" self.currencyCode = currencyCode self.amount = amount self.reference = reference self.date = date self.description = description self.type = type
[docs] def to_json(self): """Convert to json.""" return { "transfer": { "currencyCode": self.currencyCode, "reference": self.reference, "date": self.date, "description": self.description, "amount": self.amount, "type": self.type, }, }
[docs]class PesalinkMobileDest(Dest): """PesalinkMobile Destination.""" def __init__(self, mobile_number, name, bankCode, country_code="KE"): """Create Dest object.""" self.mobileNumber = mobile_number self.name = name self.countryCode = country_code self.type = "mobile" self.bankCode = bankCode
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "mobileNumber": self.mobileNumber, "bankCode": self.bankCode, "type": self.type, }, }
[docs]class MobileDest(Dest): """Mobile Destination.""" def __init__( self, mobile_number, name, walletName="Mpesa", country_code="KE", ): """Create Dest object.""" self.mobileNumber = mobile_number self.name = name self.countryCode = country_code self.type = "mobile" self.walletName = walletName
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "mobileNumber": self.mobileNumber, "walletName": self.walletName, "type": self.type, }, }
[docs]class PesalinkTransfer(Transfer): """PesaLink Mobile Transfer.""" def __init__( self, amount, reference, currencyCode, date, description, ): """Create Transfer object.""" super().__init__( amount, reference, currencyCode, date, description, type="PesaLink", )
[docs]class MobileTransfer(Transfer): """Mobile Transfer.""" def __init__( self, amount, reference, currencyCode, date, description, ): """Create Transfer object.""" super().__init__( amount, reference, currencyCode, date, description, type="MobileWallet", )
[docs]class EFTTransfer(Transfer): """EFT Transfer.""" def __init__( self, amount, reference, currencyCode, date, description, ): """Create Transfer object.""" super().__init__( amount, reference, currencyCode, date, description, type="EFT", )
[docs]class SWIFTTransfer(Transfer): """SWIFT Transfer.""" def __init__( self, amount, reference, currencyCode, date, description, chargeOption="OTHER", type="SWIFT", ): """Create SWIFT Transfer object.""" super().__init__( amount, reference, currencyCode, date, description, type=type, ) self.chargeOption = chargeOption
[docs] def to_json(self): """Convert to json.""" return { "transfer": { "currencyCode": self.currencyCode, "reference": self.reference, "date": self.date, "description": self.description, "amount": self.amount, "type": self.type, "chargeOption": self.chargeOption, }, }
[docs]class RTGSDest(Dest): """RTGS Destination.""" def __init__(self, account_number, name, bankCode, country_code="KE"): """Create Dest object.""" self.accountNumber = account_number self.name = name self.countryCode = country_code self.type = "bank" self.bankCode = bankCode
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "accountNumber": self.accountNumber, "type": self.type, "bankCode": self.bankCode, }, }
[docs]class EFTDest(Dest): """EFT Destination.""" def __init__( self, account_number, name, bankCode, branchCode, country_code="KE", ): """Create Dest object.""" self.accountNumber = account_number self.name = name self.countryCode = country_code self.type = "bank" self.bankCode = bankCode self.branchCode = branchCode
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "accountNumber": self.accountNumber, "type": self.type, "bankCode": self.bankCode, "branchCode": self.branchCode, }, }
[docs]class PesalinkDest(Dest): """Pesa Link Bank Account Destination.""" def __init__( self, account_number, mobile_number, name, bankCode, country_code="KE", ): """Create Dest object.""" self.accountNumber = account_number self.name = name self.countryCode = country_code self.type = "bank" self.bankCode = bankCode self.mobileNumber = mobile_number
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "accountNumber": self.accountNumber, "mobileNumber": self.mobileNumber, "type": self.type, "bankCode": self.bankCode, }, }
[docs]class SWIFTDest(Dest): """SWIFT Destination.""" def __init__( self, account_number, name, bankBic, addressline1, country_code="KE", ): """Create Dest object.""" self.accountNumber = account_number self.name = name self.countryCode = country_code self.type = "bank" self.bankBic = bankBic self.addressline1 = addressline1
[docs] def to_json(self): """Convert to json.""" return { "destination": { "countryCode": self.countryCode, "name": self.name, "accountNumber": self.accountNumber, "type": self.type, "bankBic": self.bankBic, "addressline1": self.addressline1, }, }
[docs]def transfer_payload(src: Source, dst: Dest, transfer: Transfer) -> dict: """Return internal funds transfer payload.""" payload = {} payload.update(src.to_json()) payload.update(dst.to_json()) payload.update(transfer.to_json()) return payload
[docs]class IFT: """Within Equity bank Funds Tranfer.""" def __init__(self, source: Source, dest: Dest, transfer: Transfer): """Create IFT.""" self.source = source self.dest = dest self.transfer = transfer @property def body_payload(self): """Return Body Payload.""" payload = {} payload.update(self.source.to_json()) payload.update(self.dest.to_json()) payload.update(self.transfer.to_json()) return payload @property def sigkey(self): """Return text to generate signature.""" return ( self.source.accountNumber, self.transfer.amount, self.transfer.currencyCode, self.transfer.reference, )
[docs]class IFTMobile(IFT): """Within Equity to mobile funds transfer.""" def __init__(self, source: Source, dest: MobileDest, transfer: Transfer): """Create IFT.""" self.source = source self.dest = dest self.transfer = transfer @property def sigkey(self): """Return text to generate signature.""" if self.dest.walletName != "Equitel": return ( self.transfer.amount, self.transfer.currencyCode, self.transfer.reference, self.source.accountNumber, ) return ( self.source.accountNumber, self.transfer.amount, self.transfer.currencyCode, self.transfer.reference, )
[docs]class RTGS(IFT): """RTGS Funds Transfer.""" @property def sigkey(self): """Return text to generate signature.""" return ( self.transfer.reference, self.transfer.date, self.source.accountNumber, self.dest.accountNumber, self.transfer.amount, )
[docs]class SWIFT(RTGS): """SWIFT Funds Transfer.""" pass
[docs]class EFT(IFT): """EFT Funds Transfer.""" def __init__(self, source: Source, dest: EFTDest, transfer: Transfer): """Create IFT.""" self.source = source self.dest = dest self.transfer = transfer @property def sigkey(self): """Return text to generate signature.""" return ( self.transfer.reference, self.source.accountNumber, self.dest.accountNumber, self.transfer.amount, self.dest.bankCode, )