Subversion Repositories SmartDukaan

Rev

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

Rev 23468 Rev 23493
Line 3642... Line 3642...
3642
            #__create_return_order(order)
3642
            #__create_return_order(order)
3643
            order.statusDescription = "Lost in Transit Refunded"
3643
            order.statusDescription = "Lost in Transit Refunded"
3644
        elif order.status in [OrderStatus.DOA_CERT_INVALID, OrderStatus.DOA_CERT_VALID, OrderStatus.DOA_RECEIVED_DAMAGED, OrderStatus.DOA_LOST_IN_TRANSIT] :
3644
        elif order.status in [OrderStatus.DOA_CERT_INVALID, OrderStatus.DOA_CERT_VALID, OrderStatus.DOA_RECEIVED_DAMAGED, OrderStatus.DOA_LOST_IN_TRANSIT] :
3645
            if order.status != OrderStatus.DOA_LOST_IN_TRANSIT:
3645
            if order.status != OrderStatus.DOA_LOST_IN_TRANSIT:
3646
                __create_return_order(order)
3646
                __create_return_order(order)
3647
            __create_refund(order)
3647
            __create_refund(order, 0, 'Should be unreachable for now')
3648
            order.statusDescription = "DOA Refunded"
3648
            order.statusDescription = "DOA Refunded"
3649
        elif order.status in [OrderStatus.RET_PRODUCT_UNUSABLE, OrderStatus.RET_PRODUCT_USABLE, OrderStatus.RET_RECEIVED_DAMAGED, OrderStatus.RET_LOST_IN_TRANSIT] :
3649
        elif order.status in [OrderStatus.RET_PRODUCT_UNUSABLE, OrderStatus.RET_PRODUCT_USABLE, OrderStatus.RET_RECEIVED_DAMAGED, OrderStatus.RET_LOST_IN_TRANSIT] :
3650
            if order.status != OrderStatus.RET_LOST_IN_TRANSIT:
3650
            if order.status != OrderStatus.RET_LOST_IN_TRANSIT:
3651
                __create_return_order(order)
3651
                __create_return_order(order)
3652
            __create_refund(order)
3652
            __create_refund(order, 0, 'Should be unreachable for now')
3653
            order.statusDescription = "Return Refunded"
3653
            order.statusDescription = "Return Refunded"
3654
        elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
3654
        elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
3655
            if order.previousStatus in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
3655
            if order.previousStatus in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
3656
                __update_inventory_reservation(order, refund=True)
3656
                __update_inventory_reservation(order, refund=True)
3657
                order.statusDescription = "Order Cancelled on customer request"
3657
                order.statusDescription = "Order Cancelled on customer request"
3658
            elif order.previousStatus == OrderStatus.BILLED:
3658
            elif order.previousStatus == OrderStatus.BILLED:
3659
                __create_return_order(order)
3659
                __create_return_order(order)
3660
                order.statusDescription = "Order Cancelled on customer request"
3660
                order.statusDescription = "Order Cancelled on customer request"
3661
                order.received_return_timestamp = datetime.datetime.now()
3661
                order.received_return_timestamp = datetime.datetime.now()
3662
        
3662
        
3663
        if order.transaction.payment_option == capitalFloatPayMethod and order.status in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED, OrderStatus.CANCEL_REQUEST_CONFIRMED]:
3663
#        if order.transaction.payment_option == capitalFloatPayMethod and order.status in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED, OrderStatus.CANCEL_REQUEST_CONFIRMED]:
3664
            total_amount = order.total_amount + order.shippingCost - order.gvAmount
3664
#            total_amount = order.total_amount + order.shippingCost - order.gvAmount
3665
            shipping_id = str(order.id)
3665
#            shipping_id = str(order.id)
3666
            if order.logisticsTransactionId is not None:
3666
#            if order.logisticsTransactionId is not None:
3667
                shipping_id = order.logisticsTransactionId
3667
#                shipping_id = order.logisticsTransactionId
3668
            creditObj = __creditHistoryObj(order.customer_id, 1, order.transaction.id, total_amount, CreditTxnType.BLOCKED_REVERSED, shipping_id)
3668
#            creditObj = __creditHistoryObj(order.customer_id, 1, order.transaction.id, total_amount, CreditTxnType.BLOCKED_REVERSED, shipping_id)
3669
            creditTxns = []
3669
#            creditTxns = []
3670
            creditTxns.append(creditObj)
3670
#            creditTxns.append(creditObj)
3671
            try:
3671
#            try:
3672
                process_credit_transaction(order.transaction.id, order.customer_id, 1, creditTxns)
3672
#                process_credit_transaction(order.transaction.id, order.customer_id, 1, creditTxns)
3673
            except:
3673
#            except:
3674
                traceback.print_exc()
3674
#                traceback.print_exc()
3675
                session.rollback()
3675
#                session.rollback()
3676
                return False  
3676
#                return False  
3677
    else:
3677
    else:
3678
        status_transition = {OrderStatus.LOST_IN_TRANSIT : OrderStatus.LOST_IN_TRANSIT_REFUNDED,
3678
        status_transition = {OrderStatus.LOST_IN_TRANSIT : OrderStatus.LOST_IN_TRANSIT_REFUNDED,
3679
                     OrderStatus.RTO_RECEIVED_PRESTINE : OrderStatus.RTO_REFUNDED,
3679
                     OrderStatus.RTO_RECEIVED_PRESTINE : OrderStatus.RTO_REFUNDED,
3680
                     OrderStatus.RTO_RECEIVED_DAMAGED : OrderStatus.RTO_DAMAGED_REFUNDED,
3680
                     OrderStatus.RTO_RECEIVED_DAMAGED : OrderStatus.RTO_DAMAGED_REFUNDED,
3681
                     OrderStatus.RTO_LOST_IN_TRANSIT : OrderStatus.RTO_LOST_IN_TRANSIT_REFUNDED,
3681
                     OrderStatus.RTO_LOST_IN_TRANSIT : OrderStatus.RTO_LOST_IN_TRANSIT_REFUNDED,
Line 3701... Line 3701...
3701
            raise TransactionServiceException(114, "This order can't be refunded")
3701
            raise TransactionServiceException(114, "This order can't be refunded")
3702
    
3702
    
3703
        if order.status in [OrderStatus.RTO_RECEIVED_PRESTINE, OrderStatus.RTO_RECEIVED_DAMAGED, OrderStatus.RTO_LOST_IN_TRANSIT] :
3703
        if order.status in [OrderStatus.RTO_RECEIVED_PRESTINE, OrderStatus.RTO_RECEIVED_DAMAGED, OrderStatus.RTO_LOST_IN_TRANSIT] :
3704
            if order.status != OrderStatus.RTO_LOST_IN_TRANSIT:
3704
            if order.status != OrderStatus.RTO_LOST_IN_TRANSIT:
3705
                __create_return_order(order)
3705
                __create_return_order(order)
3706
            __create_refund(order)
3706
            __create_refund(order, order.wallet_amount, 'Order #{0} is RTO refunded'.format(order.id))
3707
            order.statusDescription = "RTO Refunded"
3707
            order.statusDescription = "RTO Refunded"
3708
            #Start:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013
3708
            #Start:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013
3709
            try: 
3709
            try: 
3710
                crmServiceClient = CRMClient().get_client()
3710
                crmServiceClient = CRMClient().get_client()
3711
                ticket =Ticket()
3711
                ticket =Ticket()
Line 3743... Line 3743...
3743
            except:
3743
            except:
3744
                print "Ticket for RTO Refund is not created."
3744
                print "Ticket for RTO Refund is not created."
3745
            #End:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013
3745
            #End:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013
3746
        elif order.status in [OrderStatus.LOST_IN_TRANSIT]:
3746
        elif order.status in [OrderStatus.LOST_IN_TRANSIT]:
3747
            #__create_return_order(order)
3747
            #__create_return_order(order)
3748
            __create_refund(order)
3748
            __create_refund(order, order.wallet_amount, 'Order #{0} is Lost in Transit'.format(order.id))
3749
            order.statusDescription = "Lost in Transit Refunded"
3749
            order.statusDescription = "Lost in Transit Refunded"
3750
        elif order.status in [OrderStatus.DOA_CERT_INVALID, OrderStatus.DOA_CERT_VALID, OrderStatus.DOA_RECEIVED_DAMAGED, OrderStatus.DOA_LOST_IN_TRANSIT] :
3750
        elif order.status in [OrderStatus.DOA_CERT_INVALID, OrderStatus.DOA_CERT_VALID, OrderStatus.DOA_RECEIVED_DAMAGED, OrderStatus.DOA_LOST_IN_TRANSIT] :
3751
            if order.status != OrderStatus.DOA_LOST_IN_TRANSIT:
3751
            if order.status != OrderStatus.DOA_LOST_IN_TRANSIT:
3752
                __create_return_order(order)
3752
                __create_return_order(order)
3753
            __create_refund(order)
3753
            __create_refund(order, 0, 'This should be unreachable')
3754
            order.statusDescription = "DOA Refunded"
3754
            order.statusDescription = "DOA Refunded"
3755
        elif order.status in [OrderStatus.RET_PRODUCT_UNUSABLE, OrderStatus.RET_PRODUCT_USABLE, OrderStatus.RET_RECEIVED_DAMAGED, OrderStatus.RET_LOST_IN_TRANSIT] :
3755
        elif order.status in [OrderStatus.RET_PRODUCT_UNUSABLE, OrderStatus.RET_PRODUCT_USABLE, OrderStatus.RET_RECEIVED_DAMAGED, OrderStatus.RET_LOST_IN_TRANSIT] :
3756
            if order.status != OrderStatus.RET_LOST_IN_TRANSIT:
3756
            if order.status != OrderStatus.RET_LOST_IN_TRANSIT:
3757
                __create_return_order(order)
3757
                __create_return_order(order)
3758
            __create_refund(order)
3758
            __create_refund(order, 0, 'This should be unreachable')
3759
            order.statusDescription = "Return Refunded"
3759
            order.statusDescription = "Return Refunded"
3760
        elif order.status in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
3760
        elif order.status in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
3761
            __update_inventory_reservation(order, refund=True)
3761
            __update_inventory_reservation(order, refund=True)
3762
            order.statusDescription = "Order Refunded"
3762
            order.statusDescription = "Order Refunded"
3763
        elif order.status == OrderStatus.BILLED:
-
 
3764
            if order.source == OrderSource.SNAPDEAL or order.source == OrderSource.EBAY or order.source == OrderSource.FLIPKART or order.source == OrderSource.HOMESHOP18:
-
 
3765
                order.statusDescription = "Order Cancelled"
-
 
3766
                order.received_return_timestamp = datetime.datetime.now()
-
 
3767
        elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
3763
        elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
3768
            if order.previousStatus in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.PAYMENT_FLAGGED, OrderStatus.ACCEPTED]:
3764
            if order.previousStatus in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.PAYMENT_FLAGGED, OrderStatus.ACCEPTED]:
3769
                if order.previousStatus == OrderStatus.ACCEPTED:
3765
                if order.previousStatus == OrderStatus.ACCEPTED:
3770
                    __create_refund(order)
3766
                    __create_refund(order, order.wallet_amount, 'Order #{0} is refunded due to low inventory'.format(order.id))
3771
                __update_inventory_reservation(order, refund=True)
3767
                __update_inventory_reservation(order, refund=False)
3772
                order.statusDescription = "Order Cancelled on customer request"
3768
                order.statusDescription = "Order Cancelled on customer request"
3773
            elif order.previousStatus == OrderStatus.BILLED:
3769
            elif order.previousStatus == OrderStatus.BILLED:
3774
                __create_return_order(order)
3770
                __create_return_order(order)
3775
                __create_refund(order)
3771
                __create_refund(order, order.wallet_amount,  'Order #{0} Cancelled on customer request'.format(order.id))
3776
                order.statusDescription = "Order Cancelled on customer request"
3772
                order.statusDescription = "Order Cancelled on customer request"
3777
                order.received_return_timestamp = datetime.datetime.now()
3773
                order.received_return_timestamp = datetime.datetime.now()
3778
            
3774
            
3779
        elif order.status == OrderStatus.PAYMENT_FLAGGED:
3775
        elif order.status == OrderStatus.PAYMENT_FLAGGED:
3780
            __update_inventory_reservation(order, refund=True)
3776
            __update_inventory_reservation(order, refund=True)
Line 3897... Line 3893...
3897
    '''
3893
    '''
3898
    
3894
    
3899
    if refund:
3895
    if refund:
3900
        if order.wallet_amount > 0:
3896
        if order.wallet_amount > 0:
3901
            refund_to_wallet(order.customer_id, order.wallet_amount, order.transaction.id, WalletReferenceType.PURCHASE, "Refunded angainst cancellation of Order Id -" + str(order.id))
3897
            refund_to_wallet(order.customer_id, order.wallet_amount, order.transaction.id, WalletReferenceType.PURCHASE, "Refunded angainst cancellation of Order Id -" + str(order.id))
3902
        if order.cod == False and order.status == OrderStatus.PAYMENT_FLAGGED_DENIED:
-
 
3903
            order.net  
-
 
3904
    try:
3898
    try:
3905
        inventoryClient = InventoryClient().get_client()
3899
        inventoryClient = InventoryClient().get_client()
3906
        for lineitem in order.lineitems:
3900
        for lineitem in order.lineitems:
3907
            inventoryClient.reduceReservationCount(lineitem.item_id, order.fulfilmentWarehouseId, sourceId, order.id, lineitem.quantity)
3901
            inventoryClient.reduceReservationCount(lineitem.item_id, order.fulfilmentWarehouseId, sourceId, order.id, lineitem.quantity)
3908
    except:
3902
    except:
Line 4100... Line 4094...
4100
 
4094
 
4101
def __create_return_order(order):
4095
def __create_return_order(order):
4102
    ret_order = ReturnOrder(order)
4096
    ret_order = ReturnOrder(order)
4103
    return ret_order
4097
    return ret_order
4104
 
4098
 
4105
def __create_refund(order):
4099
def __create_refund(order, refundAmount, reason="Order Refunded"):
-
 
4100
    if order.wallet_amount > 0:
-
 
4101
        refund_to_wallet(order.customer_id, refundAmount, order.transaction.id, WalletReferenceType.PURCHASE, reason)
4106
    if order.net_payable_amount > 0:
4102
    if order.net_payable_amount > 0:
4107
        payment_client = PaymentClient().get_client()
4103
        payment_client = PaymentClient().get_client()
4108
        payment_client.createRefund(order.id, order.transaction.id, order.net_payable_amount)
4104
        payment_client.createRefund(order.id, order.transaction.id, order.net_payable_amount)
4109
    return
4105
    return
4110
 
4106
 
Line 10515... Line 10511...
10515
            else:
10511
            else:
10516
                returnOrder.refundDescription = "No Pickup Required for this item. Refund in Process. It takes 7-10 working days to be in actual credit."
10512
                returnOrder.refundDescription = "No Pickup Required for this item. Refund in Process. It takes 7-10 working days to be in actual credit."
10517
        else:
10513
        else:
10518
            raise TransactionServiceException(114, "This order can't be refunded")
10514
            raise TransactionServiceException(114, "This order can't be refunded")
10519
        
10515
        
10520
        __create_refund(order)
10516
        __create_refund(order, refundAmount, 'Refunded against #{0} {}pc(s)'.format(order.id, returnOrder.receivedQuantity))
10521
                
10517
                
10522
        returnOrder.refundedAt = datetime.datetime.now()
10518
        returnOrder.refundedAt = datetime.datetime.now()
10523
        returnOrder.refundedBy = refundedBy
10519
        returnOrder.refundedBy = refundedBy
10524
        returnOrder.refundReason = refundReason
10520
        returnOrder.refundReason = refundReason
10525
        returnOrder.refundAmount = refundAmount
10521
        returnOrder.refundAmount = refundAmount