Subversion Repositories SmartDukaan

Rev

Rev 20876 | Rev 20928 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 20876 Rev 20927
Line 100... Line 100...
100
    AmazonFCWarehouseLocation, RechargeMode, CreditTxnType, \
100
    AmazonFCWarehouseLocation, RechargeMode, CreditTxnType, \
101
    CreditHistory as TCreditHistory, LoanHistory as TLoanHistory, \
101
    CreditHistory as TCreditHistory, LoanHistory as TLoanHistory, \
102
    ShipmentLogisticsCostDetail as TShipmentLogisticsCostDetail, \
102
    ShipmentLogisticsCostDetail as TShipmentLogisticsCostDetail, \
103
    ReturnTransactionStatus, ReturnAction, ReturnTxnResolutionStatus, \
103
    ReturnTransactionStatus, ReturnAction, ReturnTxnResolutionStatus, \
104
    ReplacementShippingType, ReturnTxnPickupStatus, ReceivedReturnType, \
104
    ReplacementShippingType, ReturnTxnPickupStatus, ReceivedReturnType, \
105
    ReturnPickupType, RefundType, SellerInfo, BuyerInfo
105
    ReturnPickupType, RefundType, SellerInfo, BuyerInfo, WalletReferenceType
106
from shop2020.thriftpy.model.v1.user.ttypes import VoucherType, CouponCategory, \
106
from shop2020.thriftpy.model.v1.user.ttypes import VoucherType, CouponCategory, \
107
    User, Sex
107
    User, Sex
108
from shop2020.thriftpy.payments.ttypes import PaymentException
108
from shop2020.thriftpy.payments.ttypes import PaymentException
109
from shop2020.thriftpy.utils.ttypes import UserSmsInfo, SmsType
109
from shop2020.thriftpy.utils.ttypes import UserSmsInfo, SmsType
110
from shop2020.thriftpy.warehouse.ttypes import ScanType, \
110
from shop2020.thriftpy.warehouse.ttypes import ScanType, \
Line 339... Line 339...
339
        transaction.totalShippingCost = t_transaction.totalShippingCost
339
        transaction.totalShippingCost = t_transaction.totalShippingCost
340
    if t_transaction.totalCodCharges:
340
    if t_transaction.totalCodCharges:
341
        transaction.totalCodCharges = t_transaction.totalCodCharges
341
        transaction.totalCodCharges = t_transaction.totalCodCharges
342
 
342
 
343
    totalAmount = 0
343
    totalAmount = 0
-
 
344
    wallet_amount = 0.0
344
    for t_order in t_orders:
345
    for t_order in t_orders:
345
        order = create_order(t_order)
346
        order = create_order(t_order)
346
        totalAmount = totalAmount + order.total_amount
347
        totalAmount = totalAmount + order.total_amount
-
 
348
        wallet_amount = wallet_amount + order.wallet_amount
347
        order.transaction = transaction 
349
        order.transaction = transaction 
348
        for line_item in t_order.lineitems:
350
        for line_item in t_order.lineitems:
349
            litem = LineItem()
351
            litem = LineItem()
350
            litem.item_id = line_item.item_id
352
            litem.item_id = line_item.item_id
351
            litem.productGroup = line_item.productGroup
353
            litem.productGroup = line_item.productGroup
Line 398... Line 400...
398
            session.commit()
400
            session.commit()
399
    # EMI charges can not be charged by merchant as per RBI guidelines. 
401
    # EMI charges can not be charged by merchant as per RBI guidelines. 
400
    #Now we do not have any other charges, So commenting it out.
402
    #Now we do not have any other charges, So commenting it out.
401
    #generateOtherCharges(transaction, t_transaction.emiSchemeId, totalAmount)
403
    #generateOtherCharges(transaction, t_transaction.emiSchemeId, totalAmount)
402
    
404
    
-
 
405
    
-
 
406
    """Update amount in wallet"""
-
 
407
    
403
    return transaction.id
408
    return transaction.id
404
 
409
 
405
def generateOtherCharges(transaction, emiSchemeId, totalAmount):
410
def generateOtherCharges(transaction, emiSchemeId, totalAmount):
406
    emiScheme = EmiScheme.get_by(id=emiSchemeId)
411
    emiScheme = EmiScheme.get_by(id=emiSchemeId)
407
    if not emiScheme:
412
    if not emiScheme:
Line 471... Line 476...
471
    transaction.status = new_status
476
    transaction.status = new_status
472
    transaction.status_message = description
477
    transaction.status_message = description
473
    expectedDelayMap = {}
478
    expectedDelayMap = {}
474
    billingWarehouseIdMap = {}
479
    billingWarehouseIdMap = {}
475
    billingWarehouseTxnMap = {}
480
    billingWarehouseTxnMap = {}
-
 
481
    
-
 
482
    if new_status in (TransactionStatus.AUTHORIZED, TransactionStatus.FLAGGED, TransactionStatus.COD_IN_PROCESS):
-
 
483
        wallet_amount_used = 0.0
-
 
484
        for order in transaction.orders:
-
 
485
            wallet_amount_used = wallet_amount_used + order.wallet_amount
-
 
486
        if wallet_amount_used > 0:
-
 
487
            user_wallet = get_user_wallet(transaction.orders[0].customer_id)
-
 
488
            if user_wallet and user_wallet.amount < wallet_amount_used:
-
 
489
                return False
-
 
490
            payment_client = PaymentClient().get_client()
-
 
491
            payments = payment_client.getPaymentForTxnId(order.transaction_id)
-
 
492
            wallet_payment_exist = False
-
 
493
            for payment in payments:
-
 
494
                if payment.gatewayId == walletGatewayId:
-
 
495
                    wallet_payment_exist = True
-
 
496
                    payment_client.updatePaymentDetails(payment.paymentId, "", "", "SUCCESS", "Payment Received", "", "", "", "", PaymentStatus.SUCCESS, "", None);
-
 
497
            if not wallet_payment_exist:
-
 
498
                return False
-
 
499
            consume_wallet(transaction.orders[0].customer_id, wallet_amount_used, transaction_id, WalletReferenceType.PURCHASE)
-
 
500
    
476
    ## Assign runner in case of delhi pincodes
501
    ## Assign runner in case of delhi pincodes
477
    if transaction.orders[0].pickupStoreId:
502
    if transaction.orders[0].pickupStoreId:
478
        logistics_client = LogisticsClient().get_client() 
503
        logistics_client = LogisticsClient().get_client() 
479
        store = logistics_client.getPickupStore(transaction.orders[0].pickupStoreId)
504
        store = logistics_client.getPickupStore(transaction.orders[0].pickupStoreId)
480
        if delhi_pincodes.__contains__(store.pin):
505
        if delhi_pincodes.__contains__(store.pin):
Line 2094... Line 2119...
2094
def __capture_txn(order):
2119
def __capture_txn(order):
2095
    txnId = order.transaction_id
2120
    txnId = order.transaction_id
2096
    logging.info("Capturing payment for merchant txn:" + str(txnId))
2121
    logging.info("Capturing payment for merchant txn:" + str(txnId))
2097
    try:
2122
    try:
2098
        payment_client = PaymentClient().get_client()
2123
        payment_client = PaymentClient().get_client()
2099
        payment = payment_client.getPaymentForTxnId(order.transaction_id)
2124
        payments = payment_client.getPaymentForTxnId(order.transaction_id)
2100
        if payment[0].gatewayId == 9:
2125
        for payment in payments:
-
 
2126
            if payment.gatewayId in (gvGatewayId, walletGatewayId):
2101
            return
2127
                continue
2102
        capture_result = payment_client.capturePayment(txnId, False)
2128
            capture_result = payment_client.capturePayment(txnId, False)
2103
        if capture_result:
2129
            if capture_result:
2104
            logging.info("Successfully captured payment for merchant txn:" + str(txnId))
2130
                logging.info("Successfully captured payment for merchant txn:" + str(txnId))
2105
            change_transaction_status(txnId, TransactionStatus.IN_PROCESS, "Payment received", PickUpType.COURIER, order.orderType, order.source)
2131
                change_transaction_status(txnId, TransactionStatus.IN_PROCESS, "Payment received", PickUpType.COURIER, order.orderType, order.source)
2106
        else:
2132
            else:
2107
            raise TransactionServiceException(115, "Payment capture failed.")
2133
                raise TransactionServiceException(115, "Payment capture failed.")
2108
    except PaymentException as e:
2134
    except PaymentException as e:
2109
        if e.error_code == 106:
2135
        if e.error_code == 106:
2110
            order.status = OrderStatus.CAPTURE_IN_PROCESS
2136
            order.status = OrderStatus.CAPTURE_IN_PROCESS
2111
            session.commit()
2137
            session.commit()
2112
            raise TransactionServiceException(122, "Unable to capture payment due to connection issue.")
2138
            raise TransactionServiceException(122, "Unable to capture payment due to connection issue.")
Line 5658... Line 5684...
5658
        if recharge_order.status == RechargeOrderStatus.RECHARGE_FAILED:
5684
        if recharge_order.status == RechargeOrderStatus.RECHARGE_FAILED:
5659
            return True
5685
            return True
5660
        recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED
5686
        recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED
5661
        recharge_order.responseTimestamp = datetime.datetime.now()
5687
        recharge_order.responseTimestamp = datetime.datetime.now()
5662
        session.commit()
5688
        session.commit()
5663
        update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5689
        #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
-
 
5690
        reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5664
        update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5691
        #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
-
 
5692
        add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE, False, True)
5665
        enqueue_recharge_info_email(recharge_order)
5693
        enqueue_recharge_info_email(recharge_order)
5666
        return True
5694
        return True
5667
    
5695
    
5668
    if rechargeOrderStatus == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
5696
    if rechargeOrderStatus == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
5669
        if recharge_order.status == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
5697
        if recharge_order.status == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
Line 5680... Line 5708...
5680
        if recharge_order.status == RechargeOrderStatus.RECHARGE_FAILED_REFUNDED:
5708
        if recharge_order.status == RechargeOrderStatus.RECHARGE_FAILED_REFUNDED:
5681
            return True
5709
            return True
5682
        recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED_REFUNDED
5710
        recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED_REFUNDED
5683
        recharge_order.responseTimestamp = datetime.datetime.now()
5711
        recharge_order.responseTimestamp = datetime.datetime.now()
5684
        session.commit()
5712
        session.commit()
5685
        update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5713
        #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5686
        update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5714
        #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
-
 
5715
        reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
-
 
5716
        add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE, False, True)
5687
        enqueue_recharge_info_email(recharge_order)
5717
        enqueue_recharge_info_email(recharge_order)
5688
        return True
5718
        return True
5689
            
5719
            
5690
    if rechargeOrderStatus == RechargeOrderStatus.PAYMENT_SUCCESSFUL:
5720
    if rechargeOrderStatus == RechargeOrderStatus.PAYMENT_SUCCESSFUL:
5691
        gvs = {}
5721
        gvs = {}
5692
        recharge_order.status = RechargeOrderStatus.PAYMENT_SUCCESSFUL
5722
        recharge_order.status = RechargeOrderStatus.PAYMENT_SUCCESSFUL
5693
        session.commit()
5723
        session.commit()
5694
        if recharge_order.walletAmount > 0:
5724
        if recharge_order.walletAmount > 0:
5695
            wallet = get_user_wallet(recharge_order.userId)
5725
            wallet = get_user_wallet(recharge_order.userId)
5696
            if wallet and wallet.amount >= recharge_order.walletAmount:
5726
            if wallet and wallet.amount >= recharge_order.walletAmount:
5697
                update_amount_in_wallet(recharge_order.userId, -recharge_order.walletAmount, recharge_order.id, 1)
5727
                #update_amount_in_wallet(recharge_order.userId, -recharge_order.walletAmount, recharge_order.id, 1)
-
 
5728
                consume_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5698
            else:
5729
            else:
5699
                ## User is trying to play smart. Let us first mark his recharge failed and then credit payment amount to his wallet.
5730
                ## User is trying to play smart. Let us first mark his recharge failed and then credit payment amount to his wallet.
5700
                recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED
5731
                recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED
5701
                recharge_order.responseTimestamp = datetime.datetime.now()
5732
                recharge_order.responseTimestamp = datetime.datetime.now()
5702
                session.commit()
5733
                session.commit()
5703
                update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5734
                #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
-
 
5735
                consume_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5704
                raise TransactionServiceException(103, 'Wallet amount has already been used')
5736
                raise TransactionServiceException(103, 'Wallet amount has already been used')
5705
    
5737
    
5706
        try:
5738
        try:
5707
            if activate_recharge_txn(recharge_order):
5739
            if activate_recharge_txn(recharge_order):
5708
                recharge_order.invoiceNumber = get_next_invoice_number(OrderType.RECHARGE)
5740
                recharge_order.invoiceNumber = get_next_invoice_number(OrderType.RECHARGE)
5709
                session.commit()
5741
                session.commit()
5710
                gvs = allocate_gift_voucher(recharge_order)
5742
                gvs = allocate_gift_voucher(recharge_order)
5711
                return True
5743
                return True
5712
            else:
5744
            else:
5713
                update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5745
                #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5714
                update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5746
                #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
-
 
5747
                reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
-
 
5748
                add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE, False, True)
5715
                session.commit()
5749
                session.commit()
5716
                return False
5750
                return False
5717
        except:
5751
        except:
5718
            if isinstance(recharge_order, MobileRechargeOrder):
5752
            if isinstance(recharge_order, MobileRechargeOrder):
5719
                if recharge_order.mobileOperatorId not in (getSyncOperatorsForRecharge()):
5753
                if recharge_order.mobileOperatorId not in (getSyncOperatorsForRecharge()):
Line 5826... Line 5860...
5826
    wallet = UserWallet.get_by(userId = userId)
5860
    wallet = UserWallet.get_by(userId = userId)
5827
    if not wallet:
5861
    if not wallet:
5828
        wallet = UserWallet()
5862
        wallet = UserWallet()
5829
        wallet.amount = 0
5863
        wallet.amount = 0
5830
        wallet.userId = userId
5864
        wallet.userId = userId
-
 
5865
        wallet.refundable_amount = 0
5831
    return wallet
5866
    return wallet
5832
 
5867
 
5833
def get_user_wallet_history(userId):
5868
def get_user_wallet_history(userId):
5834
    wallet = get_user_wallet(userId)
5869
    wallet = get_user_wallet(userId)
5835
    if wallet.id:
5870
    if wallet.id:
Line 5947... Line 5982...
5947
    return "SUCCESS"
5982
    return "SUCCESS"
5948
    
5983
    
5949
def get_previous_transactions(clientAddress):
5984
def get_previous_transactions(clientAddress):
5950
    limittime = datetime.datetime.now() - datetime.timedelta(hours=24)
5985
    limittime = datetime.datetime.now() - datetime.timedelta(hours=24)
5951
    totalSuccessfulRechargeAmount = session.query(func.sum(RechargeOrder.totalAmount)).filter(RechargeOrder.status == 5).filter(RechargeOrder.ipAddress == clientAddress).filter(RechargeOrder.creationTimestamp  > limittime).scalar()
5986
    totalSuccessfulRechargeAmount = session.query(func.sum(RechargeOrder.totalAmount)).filter(RechargeOrder.status == 5).filter(RechargeOrder.ipAddress == clientAddress).filter(RechargeOrder.creationTimestamp  > limittime).scalar()
5952
    return totalSuccessfulRechargeAmount    
5987
    return totalSuccessfulRechargeAmount
-
 
5988
 
-
 
5989
 
5953
    
5990
 
5954
def update_amount_in_wallet(userId, amount, orderId, updateType):
5991
def add_amount_in_wallet(userId, amount, reference, reference_type, isPromotional, commit_session=False):
5955
    """
5992
    """
5956
    UpdateType 1 is for wallet amounts
-
 
5957
    and 0 is for payment amounts
5993
    Commit to be executed by caller
5958
    """
5994
    """
-
 
5995
    if not amount > 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
-
 
5996
        return 
-
 
5997
    wallet = get_user_wallet(userId)
-
 
5998
    wallet.amount = wallet.amount + amount
-
 
5999
    history = UserWalletHistory()
-
 
6000
    if not isPromotional:
-
 
6001
        wallet.refundable_amount = wallet.refundable_amount + amount
5959
    if amount == 0:
6002
    history.amount = amount
-
 
6003
    history.refundable_amount = amount
-
 
6004
    history.reference = reference
-
 
6005
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
-
 
6006
    history.wallet = wallet
-
 
6007
    history.timestamp = datetime.datetime.now()
-
 
6008
    if commit_session:
-
 
6009
        session.commit()
-
 
6010
    
-
 
6011
def consume_wallet(userId, amount, reference, reference_type):
-
 
6012
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
-
 
6013
        return
-
 
6014
    wallet = get_user_wallet(userId)
-
 
6015
    if wallet.amount < amount:
-
 
6016
        return
-
 
6017
    refundable_amount = wallet.refundable_amount
-
 
6018
    promotional_amount = wallet.amount - wallet.refundable_amount
-
 
6019
    refundable_amount_used = 0
-
 
6020
    
-
 
6021
    if promotional_amount < amount:
-
 
6022
        refundable_amount = refundable_amount - (amount - promotional_amount)
-
 
6023
        promotional_amount = 0
-
 
6024
        refundable_amount_used = amount - promotional_amount
-
 
6025
    else:
-
 
6026
        promotional_amount = promotional_amount - amount
-
 
6027
    
-
 
6028
    wallet.amount = promotional_amount + refundable_amount
-
 
6029
    wallet.refundable_amount = refundable_amount
-
 
6030
    history = UserWalletHistory()
-
 
6031
    history.amount = -amount
-
 
6032
    history.refundable_amount = -refundable_amount_used
-
 
6033
    history.reference = reference
-
 
6034
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
-
 
6035
    history.wallet = wallet
-
 
6036
    history.timestamp = datetime.datetime.now()
-
 
6037
    session.commit()
-
 
6038
 
-
 
6039
def refund_amount_from_wallet(userId, amount, reference, reference_type):
-
 
6040
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
-
 
6041
        return
-
 
6042
    wallet = get_user_wallet(userId)
-
 
6043
    if wallet.refundable_amount < amount or wallet.amount < amount:
-
 
6044
        return
-
 
6045
    
-
 
6046
    wallet.amount = wallet.amount - amount
-
 
6047
    wallet.refundable_amount = wallet.refundable_amount - amount
-
 
6048
    history = UserWalletHistory()
-
 
6049
    history.amount = -amount
-
 
6050
    history.refundable_amount = -amount
-
 
6051
    history.reference = reference
-
 
6052
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
-
 
6053
    history.wallet = wallet
-
 
6054
    history.timestamp = datetime.datetime.now()
-
 
6055
    session.commit()
-
 
6056
 
-
 
6057
def reverse_money_to_wallet(userId, amount, reference, reference_type):
-
 
6058
    
-
 
6059
    """To only reverse wallet payments, check add_amount_in_wallet to add new amount"""
-
 
6060
    
-
 
6061
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
5960
        return
6062
        return
5961
    
6063
    
5962
    history = None
6064
    history = None
5963
    if updateType == 1 and amount > 0 :
6065
    if reference_type==WalletReferenceType.RECHARGE:
5964
        history = UserWalletHistory.query.filter_by(orderId = orderId).filter_by(amount = -amount).order_by(UserWalletHistory.id.desc()).first()
6066
        history = UserWalletHistory.query.filter_by(reference = reference).filter_by(reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)).filter_by(amount = -amount).order_by(UserWalletHistory.id.desc()).first()
5965
        if history is None:
6067
        if history is None:
5966
            print 'No amount was debited from wallet for recharge Id : ' + str(orderId)
6068
            print 'No amount was debited from wallet for recharge Id : ' + str(reference)
5967
            return
6069
            return
5968
 
-
 
5969
    """
6070
    
5970
    TODO check if successful payment available or Not
6071
    elif reference_type==WalletReferenceType.PURCHASE:
5971
    elif updateType == 0 :
-
 
5972
        baseorder = BaseOrder.query.filter_by(id = orderId).first()
6072
        history = UserWalletHistory.query.filter_by(reference = reference).filter_by(reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)).filter_by(amount = -amount).order_by(UserWalletHistory.id.desc()).first()
5973
        if baseorder :
6073
        if history is None:
5974
            try :
-
 
5975
                pc = PaymentClient().get_client()
-
 
5976
                payments = pc.getPaymentForRechargeTxnId(baseorder.transaction.id)
6074
            print 'No amount was debited from wallet for purchase : ' + str(reference)
5977
            except Exception as e:
-
 
5978
                print e
-
 
5979
                return
-
 
5980
            for payment in payments :
-
 
5981
                if payment.status == 2 :
-
 
5982
                    break
-
 
5983
        else :
-
 
5984
            return
6075
            return
-
 
6076
    
-
 
6077
    else:
-
 
6078
        print "Reference is not valid"
5985
      """  
6079
        return
-
 
6080
    
-
 
6081
    
5986
    wallet = get_user_wallet(userId)
6082
    wallet = get_user_wallet(userId)
5987
    wallet.amount = wallet.amount + amount
6083
    wallet.amount = wallet.amount + amount
-
 
6084
    wallet.refundable_amount = wallet.refundable_amount -history.refundable_amount
5988
    
6085
    
5989
    history = UserWalletHistory()
6086
    history = UserWalletHistory()
5990
    history.amount = amount
6087
    history.amount = amount
-
 
6088
    history.refundable_amount = -history.refundable_amount
5991
    history.orderId = orderId
6089
    history.reference = reference
-
 
6090
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type) 
5992
    history.wallet = wallet
6091
    history.wallet = wallet
5993
    history.timestamp = datetime.datetime.now()
6092
    history.timestamp = datetime.datetime.now()
5994
    session.commit()
6093
    session.commit()
-
 
6094
    
-
 
6095
    
-
 
6096
#def update_amount_in_wallet(userId, amount, orderId, updateType):
-
 
6097
#    return
-
 
6098
#    """
-
 
6099
#    UpdateType 1 is for wallet amounts
-
 
6100
#    and 0 is for payment amounts
-
 
6101
#    """
-
 
6102
#    if amount == 0:
-
 
6103
#        return
-
 
6104
#    
-
 
6105
#    history = None
-
 
6106
#    if updateType == 1 and amount > 0 :
-
 
6107
#        history = UserWalletHistory.query.filter_by(orderId = orderId).filter_by(amount = -amount).order_by(UserWalletHistory.id.desc()).first()
-
 
6108
#        if history is None:
-
 
6109
#            print 'No amount was debited from wallet for recharge Id : ' + str(orderId)
-
 
6110
#            return
-
 
6111
#
-
 
6112
#    """
-
 
6113
#    TODO check if successful payment available or Not
-
 
6114
#    elif updateType == 0 :
-
 
6115
#        baseorder = BaseOrder.query.filter_by(id = orderId).first()
-
 
6116
#        if baseorder :
-
 
6117
#            try :
-
 
6118
#                pc = PaymentClient().get_client()
-
 
6119
#                payments = pc.getPaymentForRechargeTxnId(baseorder.transaction.id)
-
 
6120
#            except Exception as e:
-
 
6121
#                print e
-
 
6122
#                return
-
 
6123
#            for payment in payments :
-
 
6124
#                if payment.status == 2 :
-
 
6125
#                    break
-
 
6126
#        else :
-
 
6127
#            return
-
 
6128
#      """  
-
 
6129
#    wallet = get_user_wallet(userId)
-
 
6130
#    wallet.amount = wallet.amount + amount
-
 
6131
#    
-
 
6132
#    history = UserWalletHistory()
-
 
6133
#    history.amount = amount
-
 
6134
#    history.orderId = orderId
-
 
6135
#    history.wallet = wallet
-
 
6136
#    history.timestamp = datetime.datetime.now()
-
 
6137
#    session.commit()
5995
 
6138
 
5996
def get_recharge_orders_for_device(deviceNumber):
6139
def get_recharge_orders_for_device(deviceNumber):
5997
    orders = MobileRechargeOrder.query.filter_by(mobileNumber = deviceNumber).all()
6140
    orders = MobileRechargeOrder.query.filter_by(mobileNumber = deviceNumber).all()
5998
    if orders is None:
6141
    if orders is None:
5999
        orders = DTHRechargeOrder.query.filter_by(dthAccountNumber = deviceNumber).all()
6142
        orders = DTHRechargeOrder.query.filter_by(dthAccountNumber = deviceNumber).all()
Line 6240... Line 6383...
6240
        return False
6383
        return False
6241
    
6384
    
6242
    paidAmount = rechargeOrder.totalAmount - rechargeOrder.walletAmount - rechargeOrder.couponAmount
6385
    paidAmount = rechargeOrder.totalAmount - rechargeOrder.walletAmount - rechargeOrder.couponAmount
6243
    amountToRefund = 0
6386
    amountToRefund = 0
6244
    status = None
6387
    status = None
6245
    if (paidAmount <= wallet.amount) :
6388
    if (paidAmount <= wallet.refundable_amount) :
6246
        amountToRefund = paidAmount
6389
        amountToRefund = paidAmount
6247
        status = RechargeOrderStatus.REFUNDED
6390
        status = RechargeOrderStatus.REFUNDED
6248
    else :
6391
    else :
6249
        amountToRefund = wallet.amount
6392
        amountToRefund = wallet.refundable_amount
6250
        status = RechargeOrderStatus.PARTIALLY_REFUNDED
6393
        status = RechargeOrderStatus.PARTIALLY_REFUNDED
6251
        
6394
        
6252
    update_amount_in_wallet(rechargeOrder.userId, -amountToRefund, rechargeOrderId, 1)
6395
    #update_amount_in_wallet(rechargeOrder.userId, -amountToRefund, rechargeOrderId, 1)
-
 
6396
    refund_amount_from_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE)
6253
    
6397
    
6254
    try:    
6398
    try:    
6255
        pc = PaymentClient().get_client()
6399
        pc = PaymentClient().get_client()
6256
        if pc.refundPayment(rechargeOrder.transaction_id, amountToRefund, True) :
6400
        if pc.refundPayment(rechargeOrder.transaction_id, amountToRefund, True) :
6257
            rechargeOrder.status = status
6401
            rechargeOrder.status = status
6258
            rechargeOrder.refundTimestamp = datetime.datetime.now()
6402
            rechargeOrder.refundTimestamp = datetime.datetime.now()
6259
            session.commit()
6403
            session.commit()
6260
            return True
6404
            return True
6261
        else :
6405
        else :
6262
            update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
6406
            #update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
-
 
6407
            add_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE, False, True)
6263
            
6408
            
6264
    except:
6409
    except:
6265
        update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
6410
        #update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
-
 
6411
        add_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE, False, True)
6266
        
6412
        
6267
    return False 
6413
    return False 
6268
    
6414
    
6269
def get_physical_orders(from_date, to_date):
6415
def get_physical_orders(from_date, to_date):
6270
    query = Order.query.filter(Order.created_timestamp >from_date).filter(Order.created_timestamp < to_date).filter(~Order.status.in_([0,1,6,11,14,15,18,19,31,34,28,53,54,55,56,20,21,77,79,78]))
6416
    query = Order.query.filter(Order.created_timestamp >from_date).filter(Order.created_timestamp < to_date).filter(~Order.status.in_([0,1,6,11,14,15,18,19,31,34,28,53,54,55,56,20,21,77,79,78]))
Line 11184... Line 11330...
11184
    if gv_amount > 0:
11330
    if gv_amount > 0:
11185
        paymentId = payment_client.createPayment(userId, gv_amount, gvGatewayId, txnId, False);
11331
        paymentId = payment_client.createPayment(userId, gv_amount, gvGatewayId, txnId, False);
11186
        payment_client.updatePaymentDetails(paymentId, "", "", "SUCCESS", "Payment Received", "", "", "", "", PaymentStatus.SUCCESS, "", None);
11332
        payment_client.updatePaymentDetails(paymentId, "", "", "SUCCESS", "Payment Received", "", "", "", "", PaymentStatus.SUCCESS, "", None);
11187
    if wallet_amount > 0:
11333
    if wallet_amount > 0:
11188
        paymentId = payment_client.createPayment(userId, wallet_amount, walletGatewayId, txnId, False);
11334
        paymentId = payment_client.createPayment(userId, wallet_amount, walletGatewayId, txnId, False);
11189
        payment_client.updatePaymentDetails(paymentId, "", "", "SUCCESS", "Payment Received", "", "", "", "", PaymentStatus.SUCCESS, "", None);
-
 
11190
    if total_payable_amount > 0:
11335
    if total_payable_amount > 0:
11191
        paymentId = payment_client.createPayment(userId, total_payable_amount, gatewayId, txnId, False);
11336
        paymentId = payment_client.createPayment(userId, total_payable_amount, gatewayId, txnId, False);
11192
    return paymentId
11337
    return paymentId
11193
    
11338
    
11194
 
11339