Subversion Repositories SmartDukaan

Rev

Rev 7127 | Rev 7141 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6147 rajveer 1
#!/usr/bin/python
2
'''
3
It is used to process transactions for which the payment 
4
was received but the order was not processed.
5
 
6
@author: Rajveer
7
'''
8
import optparse
9
import sys
6219 rajveer 10
import datetime
6235 rajveer 11
from elixir import *
6147 rajveer 12
 
13
 
14
 
6219 rajveer 15
 
6147 rajveer 16
if __name__ == '__main__' and __package__ is None:
17
    import os
18
    sys.path.insert(0, os.getcwd())
19
 
20
from shop2020.thriftpy.model.v1.order.ttypes import RechargeOrderStatus
6254 rajveer 21
from shop2020.model.v1.order.impl.DataAccessors import get_recharge_orders_for_status, update_recharge_order_status,\
7127 rajveer 22
    update_amount_in_wallet, update_recharge_transaction_status
7128 rajveer 23
from shop2020.model.v1.order.impl import DataService
24
from shop2020.model.v1.order.impl.DataService import RechargeTransaction
6235 rajveer 25
from shop2020.model.v1.order.impl.model.RechargeOrder import RechargeOrder
26
from shop2020.model.v1.order.impl.RechargeService import checkTransactionStatus, getRefunds
6147 rajveer 27
 
28
 
29
def main():
30
    parser = optparse.OptionParser()
31
    parser.add_option("-H", "--host", dest="hostname",
32
                      default="localhost",
33
                      type="string", help="The HOST where the DB server is running",
34
                      metavar="HOST")
6235 rajveer 35
    parser.add_option("-r", "--refund", dest="refund",
36
                      action="store_true",
37
                      help="")
38
    parser.add_option("-u", "--unknown", dest="unknown",
39
                      action="store_true",
40
                      help="")
6452 rajveer 41
    parser.add_option("-a", "--authorized", dest="authorized",
6451 rajveer 42
                      action="store_true",
43
                      help="")
44
    parser.add_option("-t", "--txn-id", dest="txn_id",
45
                   type="int",
46
                   help="mark the transaction(recharge order id) TXN_ID as successful",
47
                   metavar="TXN_ID")
6235 rajveer 48
 
6147 rajveer 49
    (options, args) = parser.parse_args()
50
    if len(args) != 0:
51
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
6254 rajveer 52
    DataService.initialize(db_hostname=options.hostname, echoOn=True)
53
 
6235 rajveer 54
    if options.refund:
55
        processRefunds()
56
    if options.unknown:
57
        processUnknownTransactions()
6451 rajveer 58
    if options.authorized:
59
        processAuthorizedTransactions(options.txn_id)
6235 rajveer 60
 
61
def processRefunds():
62
    todate = datetime.datetime.now()
63
    for i in range(15):
64
        orderDate = todate + datetime.timedelta(days= -i)
65
        refunds = getRefunds(orderDate)
66
        for key in refunds.keys():
67
            refund = refunds.get(key)
68
            refundAmount = refund[0]
69
            refundDate = refund[1]
70
            order = RechargeOrder.get_by(spiceTID = key)
7127 rajveer 71
            if order:
72
                amount = order.totalAmount
73
                isStoreOrder = False
74
            else:
75
                order = RechargeTransaction.get_by(spiceTID = key)
76
                isStoreOrder = True
77
                amount = order.amount
6235 rajveer 78
            if order.status == RechargeOrderStatus.RECHARGE_FAILED_REFUNDED:
79
                print "Refund is already processed."
80
                continue
7075 rajveer 81
            if order.status not in (RechargeOrderStatus.RECHARGE_SUCCESSFUL, RechargeOrderStatus.PAYMENT_SUCCESSFUL):
82
                print "Recharge/Payment is not successful. There is something wrong."
6235 rajveer 83
                continue
7127 rajveer 84
            if amount != refundAmount:
6235 rajveer 85
                print "Refund amount is not same as transaction amount"
86
                continue
7127 rajveer 87
            if isStoreOrder:
88
                update_recharge_transaction_status(order.id, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, refundDate)
89
            else:
90
                update_recharge_order_status(order.id, RechargeOrderStatus.RECHARGE_FAILED_REFUNDED, refundDate)
6235 rajveer 91
 
92
def processUnknownTransactions():    
93
    orders = get_recharge_orders_for_status(RechargeOrderStatus.PAYMENT_SUCCESSFUL)
6219 rajveer 94
    for order in orders:
6276 rajveer 95
        try:
96
            if order.creationTimestamp + datetime.timedelta(minutes=10) < datetime.datetime.now():
97
                status, description = checkTransactionStatus('', str(order.id))
98
                print status, description
99
                if status:
100
                    update_recharge_order_status(order.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
101
                else:
102
                    update_recharge_order_status(order.id, RechargeOrderStatus.RECHARGE_FAILED)
103
        except:
104
            print "Do Nothing"
6451 rajveer 105
 
106
def processAuthorizedTransactions(txn_id):
107
    update_recharge_order_status(txn_id, RechargeOrderStatus.PAYMENT_SUCCESSFUL)
6235 rajveer 108
 
6147 rajveer 109
if __name__ == '__main__':
110
    main()