Subversion Repositories SmartDukaan

Rev

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

Rev 21363 Rev 21367
Line 483... Line 483...
483
            user_wallet = get_user_wallet(transaction.orders[0].customer_id)
483
            user_wallet = get_user_wallet(transaction.orders[0].customer_id)
484
            if user_wallet and user_wallet.amount < wallet_amount_used:
484
            if user_wallet and user_wallet.amount < wallet_amount_used:
485
                if new_status == TransactionStatus.AUTHORIZED:
485
                if new_status == TransactionStatus.AUTHORIZED:
486
                    try:
486
                    try:
487
                        captured_amount = __capture_txn(transaction_id)
487
                        captured_amount = __capture_txn(transaction_id)
488
                        add_amount_in_wallet(transaction.customer_id, captured_amount, transaction_id, WalletReferenceType.PURCHASE, False, True)
488
                        add_amount_in_wallet(transaction.customer_id, captured_amount, transaction_id, WalletReferenceType.PURCHASE, False, "Amount added against failed Purchase", commit_session=True)
489
                    except:
489
                    except:
490
                        pass
490
                        pass
491
                return False
491
                return False
492
            payment_client = PaymentClient().get_client()
492
            payment_client = PaymentClient().get_client()
493
            payments = payment_client.getPaymentForTxnId(order.transaction_id)
493
            payments = payment_client.getPaymentForTxnId(order.transaction_id)
Line 496... Line 496...
496
                if payment.gatewayId == walletGatewayId:
496
                if payment.gatewayId == walletGatewayId:
497
                    wallet_payment_exist = True
497
                    wallet_payment_exist = True
498
                    payment_client.updatePaymentDetails(payment.paymentId, "", "", "SUCCESS", "Payment Received", "", "", "", "", PaymentStatus.SUCCESS, "", None);
498
                    payment_client.updatePaymentDetails(payment.paymentId, "", "", "SUCCESS", "Payment Received", "", "", "", "", PaymentStatus.SUCCESS, "", None);
499
            if not wallet_payment_exist:
499
            if not wallet_payment_exist:
500
                return False
500
                return False
501
            consume_wallet(transaction.orders[0].customer_id, wallet_amount_used, transaction_id, WalletReferenceType.PURCHASE)
501
            consume_wallet(transaction.orders[0].customer_id, wallet_amount_used, transaction_id, WalletReferenceType.PURCHASE, "Against Order purchase")
502
    
502
    
503
    
503
    
504
    transaction.status = new_status
504
    transaction.status = new_status
505
    transaction.status_message = description
505
    transaction.status_message = description
506
    expectedDelayMap = {}
506
    expectedDelayMap = {}
Line 5702... Line 5702...
5702
        recharge_order.responseTimestamp = datetime.datetime.now()
5702
        recharge_order.responseTimestamp = datetime.datetime.now()
5703
        session.commit()
5703
        session.commit()
5704
        #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5704
        #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5705
        reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5705
        reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5706
        #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5706
        #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5707
        add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE, False, True)
5707
        add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 
-
 
5708
                             WalletReferenceType.RECHARGE, False, "Recharge failed, Refunded", commit_session=True)
5708
        enqueue_recharge_info_email(recharge_order)
5709
        enqueue_recharge_info_email(recharge_order)
5709
        return True
5710
        return True
5710
    
5711
    
5711
    if rechargeOrderStatus == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
5712
    if rechargeOrderStatus == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
5712
        if recharge_order.status == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
5713
        if recharge_order.status == RechargeOrderStatus.RECHARGE_SUCCESSFUL:
Line 5726... Line 5727...
5726
        recharge_order.responseTimestamp = datetime.datetime.now()
5727
        recharge_order.responseTimestamp = datetime.datetime.now()
5727
        session.commit()
5728
        session.commit()
5728
        #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5729
        #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5729
        #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5730
        #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5730
        reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5731
        reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5731
        add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE, False, True)
5732
        add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 
-
 
5733
                             WalletReferenceType.RECHARGE, False, "Recharge failed, Refunded", commit_session=True)
5732
        enqueue_recharge_info_email(recharge_order)
5734
        enqueue_recharge_info_email(recharge_order)
5733
        return True
5735
        return True
5734
            
5736
            
5735
    if rechargeOrderStatus == RechargeOrderStatus.PAYMENT_SUCCESSFUL:
5737
    if rechargeOrderStatus == RechargeOrderStatus.PAYMENT_SUCCESSFUL:
5736
        gvs = {}
5738
        gvs = {}
Line 5738... Line 5740...
5738
        session.commit()
5740
        session.commit()
5739
        if recharge_order.walletAmount > 0:
5741
        if recharge_order.walletAmount > 0:
5740
            wallet = get_user_wallet(recharge_order.userId)
5742
            wallet = get_user_wallet(recharge_order.userId)
5741
            if wallet and wallet.amount >= recharge_order.walletAmount:
5743
            if wallet and wallet.amount >= recharge_order.walletAmount:
5742
                #update_amount_in_wallet(recharge_order.userId, -recharge_order.walletAmount, recharge_order.id, 1)
5744
                #update_amount_in_wallet(recharge_order.userId, -recharge_order.walletAmount, recharge_order.id, 1)
5743
                consume_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5745
                consume_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE, "Against recharge")
5744
            else:
5746
            else:
5745
                ## User is trying to play smart. Let us first mark his recharge failed and then credit payment amount to his wallet.
5747
                ## User is trying to play smart. Let us first mark his recharge failed and then credit payment amount to his wallet.
5746
                recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED
5748
                recharge_order.status = RechargeOrderStatus.RECHARGE_FAILED
5747
                recharge_order.responseTimestamp = datetime.datetime.now()
5749
                recharge_order.responseTimestamp = datetime.datetime.now()
5748
                session.commit()
5750
                session.commit()
5749
                #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5751
                #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5750
                add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE,False, True)
5752
                add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 
-
 
5753
                                     WalletReferenceType.RECHARGE, False, "Refunded against failed recharge", commit_session=True)
5751
                raise TransactionServiceException(103, 'Wallet amount has already been used')
5754
                raise TransactionServiceException(103, 'Wallet amount has already been used')
5752
    
5755
    
5753
        try:
5756
        try:
5754
            if activate_recharge_txn(recharge_order):
5757
            if activate_recharge_txn(recharge_order):
5755
                recharge_order.invoiceNumber = get_next_invoice_number(OrderType.RECHARGE)
5758
                recharge_order.invoiceNumber = get_next_invoice_number(OrderType.RECHARGE)
Line 5758... Line 5761...
5758
                return True
5761
                return True
5759
            else:
5762
            else:
5760
                #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5763
                #update_amount_in_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, 1)
5761
                #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5764
                #update_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 0)
5762
                reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5765
                reverse_money_to_wallet(recharge_order.userId, recharge_order.walletAmount, recharge_order.id, WalletReferenceType.RECHARGE)
5763
                add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, WalletReferenceType.RECHARGE, False, True)
5766
                add_amount_in_wallet(recharge_order.userId, recharge_order.totalAmount - recharge_order.walletAmount - recharge_order.couponAmount, recharge_order.id, 
-
 
5767
                                     WalletReferenceType.RECHARGE, False, commit_session=True)
5764
                session.commit()
5768
                session.commit()
5765
                return False
5769
                return False
5766
        except:
5770
        except:
5767
            if isinstance(recharge_order, MobileRechargeOrder):
5771
            if isinstance(recharge_order, MobileRechargeOrder):
5768
                if recharge_order.mobileOperatorId not in (getSyncOperatorsForRecharge()):
5772
                if recharge_order.mobileOperatorId not in (getSyncOperatorsForRecharge()):
Line 6001... Line 6005...
6001
    totalSuccessfulRechargeAmount = session.query(func.sum(RechargeOrder.totalAmount)).filter(RechargeOrder.status == 5).filter(RechargeOrder.ipAddress == clientAddress).filter(RechargeOrder.creationTimestamp  > limittime).scalar()
6005
    totalSuccessfulRechargeAmount = session.query(func.sum(RechargeOrder.totalAmount)).filter(RechargeOrder.status == 5).filter(RechargeOrder.ipAddress == clientAddress).filter(RechargeOrder.creationTimestamp  > limittime).scalar()
6002
    return totalSuccessfulRechargeAmount
6006
    return totalSuccessfulRechargeAmount
6003
 
6007
 
6004
 
6008
 
6005
 
6009
 
6006
def add_amount_in_wallet(userId, amount, reference, reference_type, isPromotional, commit_session=False):
6010
def add_amount_in_wallet(userId, amount, reference, reference_type, isPromotional, description=None, commit_session=False):
6007
    """
6011
    """
6008
    Commit to be decided by caller
6012
    Commit to be decided by caller
6009
    """
6013
    """
6010
    if not amount > 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
6014
    if not amount > 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
6011
        return 
6015
        return 
Line 6018... Line 6022...
6018
        history.refundable_amount = amount
6022
        history.refundable_amount = amount
6019
    history.amount = amount
6023
    history.amount = amount
6020
    history.reference = reference
6024
    history.reference = reference
6021
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
6025
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
6022
    history.wallet = wallet
6026
    history.wallet = wallet
-
 
6027
    history.description = description
6023
    history.timestamp = datetime.datetime.now()
6028
    history.timestamp = datetime.datetime.now()
6024
    if commit_session:
6029
    if commit_session:
6025
        session.commit()
6030
        session.commit()
6026
    
6031
    
6027
def consume_wallet(userId, amount, reference, reference_type):
6032
def consume_wallet(userId, amount, reference, reference_type, description):
6028
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
6033
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
6029
        return
6034
        return
6030
    wallet = get_user_wallet(userId)
6035
    wallet = get_user_wallet(userId)
6031
    refundable_amount = wallet.refundable_amount
6036
    refundable_amount = wallet.refundable_amount
6032
    promotional_amount = wallet.amount - wallet.refundable_amount
6037
    promotional_amount = wallet.amount - wallet.refundable_amount
Line 6045... Line 6050...
6045
    history.amount = -amount
6050
    history.amount = -amount
6046
    history.refundable_amount = -refundable_amount_used
6051
    history.refundable_amount = -refundable_amount_used
6047
    history.reference = reference
6052
    history.reference = reference
6048
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
6053
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
6049
    history.wallet = wallet
6054
    history.wallet = wallet
-
 
6055
    history.description = description
6050
    history.timestamp = datetime.datetime.now()
6056
    history.timestamp = datetime.datetime.now()
6051
    session.commit()
6057
    session.commit()
6052
 
6058
 
6053
def refund_amount_from_wallet(userId, amount, reference, reference_type):
6059
def refund_amount_from_wallet(userId, amount, reference, reference_type, description=None):
6054
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
6060
    if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
6055
        return
6061
        return
6056
    wallet = get_user_wallet(userId)
6062
    wallet = get_user_wallet(userId)
6057
    
6063
    
6058
    wallet.amount = wallet.amount - amount
6064
    wallet.amount = wallet.amount - amount
Line 6061... Line 6067...
6061
    history.amount = -amount
6067
    history.amount = -amount
6062
    history.refundable_amount = -amount
6068
    history.refundable_amount = -amount
6063
    history.reference = reference
6069
    history.reference = reference
6064
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
6070
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
6065
    history.wallet = wallet
6071
    history.wallet = wallet
-
 
6072
    history.description = "Refunded to customer"
6066
    history.timestamp = datetime.datetime.now()
6073
    history.timestamp = datetime.datetime.now()
6067
    session.commit()
6074
    session.commit()
6068
 
6075
 
6069
def reverse_money_to_wallet(userId, amount, reference, reference_type):
6076
def reverse_money_to_wallet(userId, amount, reference, reference_type):
6070
    
6077
    
Line 6100... Line 6107...
6100
    history.refundable_amount = -previous_debit_history.refundable_amount
6107
    history.refundable_amount = -previous_debit_history.refundable_amount
6101
    history.reference = reference
6108
    history.reference = reference
6102
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type) 
6109
    history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type) 
6103
    history.wallet = wallet
6110
    history.wallet = wallet
6104
    history.timestamp = datetime.datetime.now()
6111
    history.timestamp = datetime.datetime.now()
-
 
6112
    history.description = "Wallet amount reversed"
6105
    session.commit()
6113
    session.commit()
6106
    
6114
    
6107
    
6115
    
6108
#def update_amount_in_wallet(userId, amount, orderId, updateType):
6116
#def update_amount_in_wallet(userId, amount, orderId, updateType):
6109
#    return
6117
#    return
Line 6414... Line 6422...
6414
            rechargeOrder.refundTimestamp = datetime.datetime.now()
6422
            rechargeOrder.refundTimestamp = datetime.datetime.now()
6415
            session.commit()
6423
            session.commit()
6416
            return True
6424
            return True
6417
        else :
6425
        else :
6418
            #update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
6426
            #update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
6419
            add_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE, False, True)
6427
            add_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE, False, "Reversed while refunding to gateway", commit_session=True)
6420
            
6428
            
6421
    except:
6429
    except:
6422
        #update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
6430
        #update_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, 1)
6423
        add_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE, False, True)
6431
        add_amount_in_wallet(rechargeOrder.userId, amountToRefund, rechargeOrderId, WalletReferenceType.RECHARGE, False, "Reversed while refunding to gateway", commit_session=True)
6424
        
6432
        
6425
    return False 
6433
    return False 
6426
    
6434
    
6427
def get_physical_orders(from_date, to_date):
6435
def get_physical_orders(from_date, to_date):
6428
    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]))
6436
    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 11552... Line 11560...
11552
    ap.amount = amount
11560
    ap.amount = amount
11553
    ap.cash_back = cash_back
11561
    ap.cash_back = cash_back
11554
    ap.cash_back_type = "PERCENTAGE"
11562
    ap.cash_back_type = "PERCENTAGE"
11555
    ap.cash_back_amount = int(math.floor(amount * (cash_back/100)))
11563
    ap.cash_back_amount = int(math.floor(amount * (cash_back/100)))
11556
    session.commit()
11564
    session.commit()
-
 
11565
    if cash_back:
-
 
11566
        description = "Paid in advance Rs.{0} + {1}% advance cashback".format(amount, cash_back)
-
 
11567
    else:
-
 
11568
        description = "Paid in advance"
11557
    add_amount_in_wallet(userId, ap.amount + ap.cash_back_amount, ap.id, WalletReferenceType.ADVANCE_AMOUNT, True, True)
11569
    add_amount_in_wallet(userId, ap.amount + ap.cash_back_amount, ap.id, WalletReferenceType.ADVANCE_AMOUNT, description, True, commit_session=True)
11558
    return True    
11570
    return True    
11559
 
11571
 
11560
#refund complete shipping if type is list else as per map
11572
#refund complete shipping if type is list else as per map
11561
def __refund_shipping(orders, commit=True):
11573
def __refund_shipping(orders, commit=True):
11562
    if type(orders) is list:
11574
    if type(orders) is list:
11563
        for order in orders:
11575
        for order in orders:
11564
            if order.shippingRefund < order.shippingCost:
11576
            if order.shippingRefund < order.shippingCost:
11565
                diff = order.shippingCost - order.shippingRefund
11577
                diff = order.shippingCost - order.shippingRefund
11566
                order.shippingRefund = order.shippingCost
11578
                order.shippingRefund = order.shippingCost
11567
                add_amount_in_wallet(order.customer_id, diff, order.transaction_id, WalletReferenceType.SHIPPING_REFUND, False, False)
11579
                add_amount_in_wallet(order.customer_id, diff, order.transaction_id, WalletReferenceType.SHIPPING_REFUND, False, "Refunded shipping charges", commit_session=False)
11568
        if commit:
11580
        if commit:
11569
            session.commit()
11581
            session.commit()
11570
            
11582
            
11571
def mark_order_for_selfpickup(transaction_ids):
11583
def mark_order_for_selfpickup(transaction_ids):
11572
    for transaction_id in transaction_ids:
11584
    for transaction_id in transaction_ids: