70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
from datetime import timedelta
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import User
|
|
|
|
from regluit.payment import baseprocessor
|
|
from regluit.payment.baseprocessor import BasePaymentRequest
|
|
from regluit.payment.parameters import *
|
|
|
|
def pledge_transaction(t,user,amount):
|
|
"""commit <amount> from a <user>'s credit to a specified transaction <t>"""
|
|
|
|
if t.amount and t.host == PAYMENT_HOST_CREDIT:
|
|
#changing the pledge_transaction
|
|
success = user.credit.add_to_pledged(amount-t.amount)
|
|
else:
|
|
success = user.credit.add_to_pledged(amount)
|
|
if success:
|
|
t.type = PAYMENT_TYPE_AUTHORIZATION
|
|
t.max_amount=amount
|
|
t.set_credit_approved(amount)
|
|
return success
|
|
|
|
def credit_transaction(t,user,amount):
|
|
'''user has new credit, use it to fund the transaction'''
|
|
# first, credit the user's account
|
|
success = user.credit.add_to_balance(amount)
|
|
if success:
|
|
# now pledge to the transaction
|
|
pledge_amount = t.max_amount if t.max_amount <= user.credit.available else amount
|
|
success = user.credit.add_to_pledged(pledge_amount)
|
|
if success:
|
|
t.set_credit_approved(pledge_amount)
|
|
return success
|
|
|
|
def pay_transaction(t, user, to_user, amount):
|
|
'''user has credit, transfer it to rh account'''
|
|
success = user.credit.transfer_to(to_user , amount)
|
|
if success:
|
|
t.type = PAYMENT_TYPE_INSTANT
|
|
t.set_executed()
|
|
return success
|
|
|
|
class Processor(baseprocessor.Processor):
|
|
class CancelPreapproval(BasePaymentRequest):
|
|
'''
|
|
Cancels an exisiting token.
|
|
'''
|
|
|
|
def __init__(self, transaction):
|
|
self.transaction = transaction
|
|
if transaction.user.credit.add_to_pledged(-transaction.amount):
|
|
#success
|
|
transaction.status=TRANSACTION_STATUS_CANCELED
|
|
transaction.save()
|
|
else:
|
|
self.errorMessage="couldn't cancel the transaction"
|
|
self.status = 'Credit Cancel Failure'
|
|
|
|
class PreapprovalDetails(BasePaymentRequest):
|
|
status = None
|
|
approved = None
|
|
currency = None
|
|
amount = None
|
|
def __init__(self, transaction):
|
|
self.status = transaction.status
|
|
self.approved = transaction.approved
|
|
self.currency = transaction.currency
|
|
self.amount = transaction.amount
|