Subversion Repositories SmartDukaan

Rev

Rev 15367 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/usr/bin/python

from elixir import *
import optparse
import sys
import traceback
if __name__ == '__main__' and __package__ is None:
    import os
    sys.path.insert(0, os.getcwd())
from datetime import timedelta, datetime
from shop2020.thriftpy.model.v1.order.ttypes import RechargeOrderStatus
from shop2020.model.v1.order.impl.DataAccessors import update_recharge_order_status,\
    update_recharge_transaction_status
from shop2020.model.v1.order.impl import DataService, RechargeService
from shop2020.model.v1.order.impl.DataService import RechargeTransaction
from shop2020.model.v1.order.impl.model.RechargeOrder import RechargeOrder

def processRechargeTransactions(deltaTime):
    #Lets first get all recharge unknown orders irrespective of recharge mode in delta minutes time window
    try:
        timeFilter = datetime.now() -timedelta(minutes=deltaTime)
        unknownOrders = RechargeTransaction.query.filter(RechargeTransaction.status.in_([RechargeOrderStatus.RECHARGE_UNKNOWN, RechargeOrderStatus.INIT])).filter(RechargeTransaction.transactionTime >=timeFilter).all()
        for unknownOrder in unknownOrders:
            try:
                status, description = RechargeService.checkTransactionStatus('', str(unknownOrder.id))
                print status, description
                if status:
                    update_recharge_transaction_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
                else:
                    update_recharge_transaction_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_FAILED)
            except:
                print "Still unknown"
    finally:
        session.close()
    
    try:
        timeFilter = datetime.now() -timedelta(minutes=2,seconds=30)
        inprocessOrders = RechargeTransaction.query.filter(RechargeTransaction.status == RechargeOrderStatus.RECHARGE_IN_PROCESS).filter(RechargeTransaction.responseTime < timeFilter).all()
        #Lets mark all recharges in process in above time window as payment successful
        for inprocessOrder in inprocessOrders:
            inprocessOrder.status = RechargeOrderStatus.RECHARGE_UNKNOWN
            inprocessOrder.responseTime = datetime.now()
        session.commit()
        
        for inprocessOrder in inprocessOrders:
            try:
                status, description = RechargeService.checkTransactionStatus('', str(inprocessOrder.id))
                print status, description
                if status:
                    update_recharge_transaction_status(inprocessOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
                else:
                    update_recharge_transaction_status(inprocessOrder.id, RechargeOrderStatus.RECHARGE_FAILED)
            except:
                print "Still unknown"
    finally:
        session.close()
        
def processRechargeOrders(deltaTime):
    #Lets first get all payment successful orders irrespective of recharge mode in delta minutes time window
    try:
        paymentSuccessfulOrders = RechargeOrder.query.filter(RechargeOrder.status == RechargeOrderStatus.PAYMENT_SUCCESSFUL).all()
        for paymentSuccessfulOrder in paymentSuccessfulOrders:
            try:
                status, description = RechargeService.checkTransactionStatus('', str(paymentSuccessfulOrder.id))
                print status, description
                if status:
                    update_recharge_order_status(paymentSuccessfulOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
                else:
                    update_recharge_order_status(paymentSuccessfulOrder.id, RechargeOrderStatus.RECHARGE_FAILED)
            except:
                traceback.print_exc()
                print "Still unknown"
    finally:
        session.close()
    
    try:
        timeFilter = datetime.now() -timedelta(minutes=5)
        unknownOrders = RechargeOrder.query.filter(RechargeOrder.status == RechargeOrderStatus.RECHARGE_UNKNOWN).filter(RechargeOrder.responseTimestamp < timeFilter).all()
        #Lets mark all recharges unknown in above time window as payment successful
        for unknownOrder in unknownOrders:
            unknownOrder.status = RechargeOrderStatus.PAYMENT_SUCCESSFUL
            unknownOrder.responseTimestamp = datetime.now()
        session.commit()
        
        for unknownOrder in unknownOrders:
            try:
                status, description = RechargeService.checkTransactionStatus('', str(unknownOrder.id))
                print status, description
                if status:
                    update_recharge_order_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_SUCCESSFUL)
                else:
                    update_recharge_order_status(unknownOrder.id, RechargeOrderStatus.RECHARGE_FAILED)
            except:
                print "Still unknown"
    finally:
        session.close()

def main():
    parser = optparse.OptionParser()
    parser.add_option("-H", "--host", dest="hostname",
                      default="localhost",
                      type="string", help="The HOST where the DB server is running",
                      metavar="HOST")
    parser.add_option("-T", "--time", dest="time",
                      default=60,
                      type="int", help="Time in minutes to filter recharge orders/transaction",
                      metavar="TIME")
    (options, args) = parser.parse_args()
    if len(args) != 0:
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
    DataService.initialize(db_hostname=options.hostname, echoOn=True)
    processRechargeOrders(options.time)
    processRechargeTransactions(options.time)

if __name__=='__main__':
    main()