Subversion Repositories SmartDukaan

Rev

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

Rev 20108 Rev 20111
Line 10146... Line 10146...
10146
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10146
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10147
    if not returnOrder:
10147
    if not returnOrder:
10148
        return None
10148
        return None
10149
    return returnOrder
10149
    return returnOrder
10150
 
10150
 
-
 
10151
def refund_return_order(returnOrderInfo, attrList):
-
 
10152
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderInfo.id)
-
 
10153
    if returnOrder.returnStatus not in (OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_INVALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_LOST_IN_TRANSIT],OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_DAMAGED] ,OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_LOST_IN_TRANSIT], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_UNUSABLE], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_USABLE],OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_DAMAGED]):
-
 
10154
        print "************returnig false staus check"
-
 
10155
        return False
-
 
10156
    if returnOrder.returnAction == ReturnAction.REFUND:
-
 
10157
        returnOrder.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REFUND_IN_PROCESS]
-
 
10158
    else:
-
 
10159
        returnOrder.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
-
 
10160
    detailsMap = {}
-
 
10161
    if returnOrder.refundedAt or returnOrder.replacementOrderId:
-
 
10162
        raise TransactionServiceException(145, "Refund/Replacemet already in Process for this return order")
-
 
10163
    if returnOrder.receivedQuantity != returnOrder.returnQuantity:
-
 
10164
        raise TransactionServiceException(145, "Quantity mismatch Return vs Received")
-
 
10165
    detailsMap['RefundReason'] = returnOrderInfo.refundReason
-
 
10166
    detailsMap['RefundType'] = returnOrderInfo.refundType
-
 
10167
    detailsMap['RefundedBy'] = returnOrderInfo.refundedBy
-
 
10168
    detailsMap['RefundAmount'] = returnOrderInfo.refundAmount
-
 
10169
    detailsMap['RefundDescription'] = returnOrderInfo.refundDescription
-
 
10170
    print detailsMap
-
 
10171
    print "*************************8"
-
 
10172
    if(not __process_return_order(returnOrder, detailsMap)):
-
 
10173
        raise TransactionServiceException(145, "Issue in __process_return_order")
-
 
10174
    returnOrder.processedAt = datetime.datetime.now()
-
 
10175
    __markReturnTransactionAsProcessed(returnOrder.returnTransaction_id)
-
 
10176
    set_order_attributes(returnOrder.orderId, attrList)
-
 
10177
    return True
-
 
10178
 
-
 
10179
def __markReturnTransactionAsProcessed(returnTransactionId):
-
 
10180
    returnTransaction = ReturnTransaction.get_by(id=returnTransactionId)
-
 
10181
    if returnTransaction is None:
-
 
10182
        raise TransactionServiceException(101, "No Return Transaction Found")
-
 
10183
    unprocessedOrders = []
-
 
10184
    for retOrder in returnTransaction.returnOrders:
-
 
10185
        if retOrder.reshippedAt is None and retOrder.refundedAt is None:
-
 
10186
            unprocessedOrders.append(retOrder)
-
 
10187
    if len(unprocessedOrders) == 0:
-
 
10188
        returnTransaction.processedAt = datetime.datetime.now()
-
 
10189
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.PROCESSED]
-
 
10190
        session.commit()
-
 
10191
 
-
 
10192
 
10151
def get_return_orders_info_map(order_ids=None, statuses=None):
10193
def get_return_orders_info_map(order_ids=None, statuses=None):
10152
    returnOrdersInfoQuery = ReturnOrderInfo.query
10194
    returnOrdersInfoQuery = ReturnOrderInfo.query
10153
    if order_ids is not None and len(order_ids)>0:
10195
    if order_ids is not None and len(order_ids)>0:
10154
        returnOrdersInfoQuery = returnOrdersInfoQuery.filter(ReturnOrderInfo.orderId.in_(tuple(order_ids)))
10196
        returnOrdersInfoQuery = returnOrdersInfoQuery.filter(ReturnOrderInfo.orderId.in_(tuple(order_ids)))
10155
    if statuses is not None:
10197
    if statuses is not None:
Line 10320... Line 10362...
10320
 
10362
 
10321
def get_return_transaction(transaction_id):
10363
def get_return_transaction(transaction_id):
10322
    transaction = ReturnTransaction.get_by(id=transaction_id)
10364
    transaction = ReturnTransaction.get_by(id=transaction_id)
10323
    if not transaction:
10365
    if not transaction:
10324
        raise TransactionServiceException(108, "no such transaction")
10366
        raise TransactionServiceException(108, "no such transaction")
10325
    
-
 
10326
    return transaction
10367
    return transaction
10327
 
10368
 
10328
def get_return_orders_for_return_transaction(returnTransactionId):
10369
def get_return_orders_for_return_transaction(returnTransactionId):
10329
    returnOrders = ReturnOrderInfo.query.filter_by(returnTransactionId=returnTransactionId).all()
10370
    returnOrders = ReturnOrderInfo.query.filter_by(returnTransactionId=returnTransactionId).all()
10330
    
10371
    
Line 10555... Line 10596...
10555
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10596
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10556
    elif new_status == ReturnTransactionStatus.PROCESSED:
10597
    elif new_status == ReturnTransactionStatus.PROCESSED:
10557
        if returnOrdersIds and len(returnOrdersIds)>0:
10598
        if returnOrdersIds and len(returnOrdersIds)>0:
10558
            unprocessedOrders = []   
10599
            unprocessedOrders = []   
10559
            for retOrder in returnTransaction.returnOrders:
10600
            for retOrder in returnTransaction.returnOrders:
10560
                if retOrder.reshippedAt is None and retOrder.refundedAt is None:
10601
                if retOrder.reshippedAt is None or retOrder.refundedAt is None:
10561
                    unprocessedOrders.append(retOrder)
10602
                    unprocessedOrders.append(retOrder)
10562
            if len(returnOrdersIds) < len(returnTransaction.returnOrders):
10603
            if len(returnOrdersIds) < len(returnTransaction.returnOrders):
10563
                if len(returnOrdersIds) == len(unprocessedOrders):
10604
                if len(returnOrdersIds) == len(unprocessedOrders):
10564
                    for ret_Order in unprocessedOrders:
10605
                    for ret_Order in unprocessedOrders:
10565
                        if ret_Order.returnAction == ReturnAction.REFUND:
10606
                        if ret_Order.returnAction == ReturnAction.REFUND:
Line 10575... Line 10616...
10575
                    else:
10616
                    else:
10576
                        ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
10617
                        ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
10577
                returnTransaction.processedAt = datetime.datetime.now()
10618
                returnTransaction.processedAt = datetime.datetime.now()
10578
                returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status]
10619
                returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status]
10579
            for returnOrderId in returnOrdersIds:
10620
            for returnOrderId in returnOrdersIds:
10580
                __process_return_order(get_return_order_info(returnOrderId), returnOrdersAttrMap.get(returnOrderId)) 
10621
                __process_return_order(get_return_order_info(returnOrderId), returnOrdersAttrMap.get(returnOrderId))
-
 
10622
                
-
 
10623
    elif new_status == ReturnTransactionStatus.COMPLETED:
-
 
10624
        mark_return_transaction_complete(returnTransaction.id)            
-
 
10625
     
-
 
10626
    elif new_status == ReturnTransactionStatus.CLOSED:
10581
    elif new_status == ReturnTransactionStatus.CLOSED and mark_return_transaction_complete(returnTransaction.id):
10627
        if not returnTransaction.status == ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.COMPLETED]:
-
 
10628
            raise
10582
        returnTransaction.closedAt = datetime.datetime.now()
10629
        returnTransaction.closedAt = datetime.datetime.now()
10583
        for ret_Order in returnTransaction.returnOrders:
10630
        for ret_Order in returnTransaction.returnOrders:
10584
            ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.CLOSED]
10631
            ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.CLOSED]
10585
        __communicate_customer_for_closed_transaction(returnTransaction)
10632
        __communicate_customer_for_closed_transaction(returnTransaction)
10586
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10633
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10587
     
10634
     
10588
    session.commit()
10635
    session.commit()
10589
    return True
10636
    return True
-
 
10637
 
10590
    
10638
    
10591
def create_return_pickup_request(returnOrderIds, providerId):
10639
def create_return_pickup_request(returnOrderIds):
10592
    returnPickupRequest = ReturnPickupRequest()
10640
    returnPickupRequest = ReturnPickupRequest()
10593
    returnPickupRequest.logisticsProviderId = providerId
-
 
10594
    returnPickupRequest.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_REQUESTED]
10641
    returnPickupRequest.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PENDING]
10595
    
10642
 
10596
    if len(returnOrderIds) > 0:
10643
    if len(returnOrderIds) > 0:
10597
        for returnOrderId in returnOrderIds:
10644
        for returnOrderId in returnOrderIds:
10598
            returnOrder = get_return_order_info(returnOrderId)
10645
            returnOrder = get_return_order_info(returnOrderId)
10599
            returnOrder.logisticsRequestId = returnPickupRequest.id
10646
            returnOrder.logisticsRequestId = returnPickupRequest.id
10600
        session.commit()
10647
        session.commit()
10601
        return True
10648
        return returnPickupRequest.id
10602
    
10649
 
10603
    return False
10650
    return 0
10604
 
10651
 
10605
def update_return_pickup_request(returnPickupRequest):
10652
def update_return_pickup_request(returnPickupRequest):
-
 
10653
    print returnPickupRequest
10606
    try:
10654
    try:
10607
        returnPickupReq = ReturnPickupRequest.get_by(id=returnPickupRequest.id)
10655
        returnPickupReq = ReturnPickupRequest.get_by(id=returnPickupRequest.id)
-
 
10656
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_REQUESTED:
-
 
10657
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
-
 
10658
        
10608
        if returnPickupRequest.pickupRequestNo:
10659
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_CONFIRMED:
-
 
10660
            returnPickupReq.logisticsProviderId = returnPickupRequest.logisticsProviderId
10609
            returnPickupReq.pickupRequestNo = returnPickupRequest.pickupRequestNo
10661
            returnPickupReq.pickupRequestNo = returnPickupRequest.pickupRequestNo
10610
            returnPickupReq.confirmedAt = datetime.datetime.now()
10662
            returnPickupReq.confirmedAt = datetime.datetime.now()
10611
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_CONFIRMED]
10663
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
10612
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10664
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10613
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED]:
10665
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED]:
10614
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]
10666
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]
10615
                else:
10667
                else:
10616
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED]
10668
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED]
10617
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_SCHEDULED:
10669
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_SCHEDULED:
10618
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
10670
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
10619
            returnPickupReq.promised_pickup_timestamp = datetime.datetime.now()+timedelta(days=2)
10671
            returnPickupReq.promised_pickup_timestamp = to_py_date(returnPickupRequest.promised_pickup_timestamp)
10620
            returnOrdersMap = {}
10672
            returnOrdersMap = {}
10621
            returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all()
10673
            returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all()
10622
            for returnOrder in returnOrders:
10674
            for returnOrder in returnOrders:
10623
                returnTxn = returnOrders[0].returnTransaction
10675
                returnTxn = returnOrders[0].returnTransaction
10624
                if returnOrdersMap.has_key(returnTxn.address_id):
10676
                if returnOrdersMap.has_key(returnTxn.address_id):
Line 10632... Line 10684...
10632
            for returnOrdersList in returnOrdersMap.values():
10684
            for returnOrdersList in returnOrdersMap.values():
10633
                try:
10685
                try:
10634
                    communicate_pickup_details_to_customer(returnPickupReq, returnOrdersList)
10686
                    communicate_pickup_details_to_customer(returnPickupReq, returnOrdersList)
10635
                except:
10687
                except:
10636
                    print "Customer Communication Failed for the pickup Information"
10688
                    print "Customer Communication Failed for the pickup Information"
10637
        if returnPickupRequest.pickedUpAt:
10689
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_IN_TRANSIT:
10638
            returnPickupReq.pickedUpAt = to_py_date(returnPickupRequest.pickedUpAt)
10690
            returnPickupReq.pickedUpAt = to_py_date(returnPickupRequest.pickedUpAt)
10639
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_IN_TRANSIT]
10691
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_IN_TRANSIT]
10640
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10692
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10641
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]:
10693
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]:
10642
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RETURN_IN_TRANSIT]
10694
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RETURN_IN_TRANSIT]
10643
                else:
10695
                else:
-
 
10696
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RETURN_IN_TRANSIT]
-
 
10697
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_RECEIVED:
-
 
10698
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_RECEIVED]
-
 
10699
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10644
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RETURN_IN_TRANSIT]            
10700
                if returnOrder.returnStatus not in (OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_INVALID], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_LOST_IN_TRANSIT], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_DAMAGED],OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID],OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_LOST_IN_TRANSIT], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_UNUSABLE], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_USABLE], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_DAMAGED]):
-
 
10701
                    return False
-
 
10702
                returnOrder.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.QUALITY_CHECK]
10645
        session.commit()
10703
        session.commit()
10646
        return True
10704
        return True
10647
    except:
10705
    except:
-
 
10706
        traceback.print_exc()
10648
        return False 
10707
        return False 
10649
    
10708
 
10650
def receive_return_pickup(returnOrdersMap, req_id):
10709
def receive_return_pickup(returnOrdersMap, req_id):
10651
    returnPickupReq = ReturnPickupRequest.get_by(id=req_id)
10710
    #returnPickupReq = ReturnPickupRequest.get_by(id=req_id)
10652
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==req_id).all()
10711
    #returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==req_id).all()
10653
    if len(returnOrders)!=len(returnOrdersMap.keys()):
10712
    #if len(returnOrders)!=len(returnOrdersMap.keys()):
10654
        raise TransactionServiceException(101, "All Returns Orders  Information Missing. Please Fill All Orders Info")
10713
    #    raise TransactionServiceException(101, "All Returns Orders  Information Missing. Please Fill All Orders Info")
-
 
10714
    
10655
    for returnOrder in returnOrders:
10715
    for returnOrderId in returnOrdersMap.iterkeys():
-
 
10716
        returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
-
 
10717
        if returnOrder is None:
-
 
10718
            raise TransactionServiceException(101, "Return order missing")
10656
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10719
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10657
        receiveCondition = ReceivedReturnType._NAMES_TO_VALUES[returnOrderDetails.get('ReceiveCondition')]
10720
        receiveCondition = ReceivedReturnType._NAMES_TO_VALUES[returnOrderDetails.get('ReceiveCondition')]
10658
        quantity = int(returnOrderDetails.get('Quantity'))
10721
        quantity = int(returnOrderDetails.get('Quantity'))
-
 
10722
        returnOrder.receivedReturnType = receiveCondition 
10659
        
10723
        returnOrder.receivedReturnType = receiveCondition 
10660
        if returnOrder.returnStatus in [OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_PICKUP_CONFIRMED], OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_RETURN_IN_TRANSIT]]:
10724
        if returnOrder.returnStatus in [OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED], OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RETURN_IN_TRANSIT]]:
10661
            if receiveCondition == ReceivedReturnType.PRESTINE:
10725
            if receiveCondition == ReceivedReturnType.PRESTINE:
10662
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_RECEIVED_PRESTINE]
10726
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_PRESTINE]
10663
            elif receiveCondition == ReceivedReturnType.DAMAGED:
10727
            elif receiveCondition == ReceivedReturnType.DAMAGED:
10664
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_RECEIVED_DAMAGED]
10728
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_DAMAGED]
10665
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
10729
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
10666
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.DOA_LOST_IN_TRANSIT]
10730
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_LOST_IN_TRANSIT]
10667
            returnOrder.receivedAt = datetime.datetime.now()
10731
            returnOrder.receivedAt = datetime.datetime.now()
10668
            returnOrder.receivedQuantity = quantity
10732
            returnOrder.receivedQuantity = quantity
10669
        elif returnOrder.returnStatus in [OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_PICKUP_CONFIRMED], OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_RETURN_IN_TRANSIT]]:
10733
        elif returnOrder.returnStatus in [OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED], OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RETURN_IN_TRANSIT]]:
10670
            if receiveCondition == ReceivedReturnType.PRESTINE:
10734
            if receiveCondition == ReceivedReturnType.PRESTINE:
10671
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_RECEIVED_PRESTINE]
10735
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_PRESTINE]
10672
            elif receiveCondition == ReceivedReturnType.DAMAGED:
10736
            elif receiveCondition == ReceivedReturnType.DAMAGED:
10673
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_RECEIVED_DAMAGED]
10737
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_DAMAGED]
10674
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
10738
            elif receiveCondition == ReceivedReturnType.LOST_IN_TRANSIT:
10675
                returnOrder.returnStatus = OrderStatus._NAMES_TO_VALUES[OrderStatus.RET_LOST_IN_TRANSIT]
10739
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_LOST_IN_TRANSIT]
10676
            returnOrder.receivedAt = datetime.datetime.now()
10740
            returnOrder.receivedAt = datetime.datetime.now()
10677
            returnOrder.receivedQuantity = quantity
10741
            returnOrder.receivedQuantity = quantity
10678
        else:
10742
        else:
10679
            return False
10743
            return False
10680
    
10744
    
Line 10682... Line 10746...
10682
            "RET_RECEIVED_PRESTINE" : ScanType.SALE_RET,
10746
            "RET_RECEIVED_PRESTINE" : ScanType.SALE_RET,
10683
            "RET_RECEIVED_DAMAGED"  : ScanType.SALE_RET_UNUSABLE,
10747
            "RET_RECEIVED_DAMAGED"  : ScanType.SALE_RET_UNUSABLE,
10684
            "RET_LOST_IN_TRANSIT"   : ScanType.LOST_IN_TRANSIT,
10748
            "RET_LOST_IN_TRANSIT"   : ScanType.LOST_IN_TRANSIT,
10685
            "DOA_RECEIVED_PRESTINE" : ScanType.DOA_IN,
10749
            "DOA_RECEIVED_PRESTINE" : ScanType.DOA_IN,
10686
            "DOA_RECEIVED_DAMAGED"  : ScanType.DOA_IN,
10750
            "DOA_RECEIVED_DAMAGED"  : ScanType.DOA_IN,
10687
            "DOA_LOST_IN_TRANSI"   : ScanType.LOST_IN_TRANSIT
10751
            "DOA_LOST_IN_TRANSIT"   : ScanType.LOST_IN_TRANSIT
10688
        }
10752
        }
10689
    inventoryClient = InventoryClient().get_client()
10753
    #inventoryClient = InventoryClient().get_client()
10690
    warehouse = inventoryClient.getWarehouse(returnOrders[0].warehouse_id)
10754
    #warehouse = inventoryClient.getWarehouse(returnOrder.warehouse_id)
10691
    warehouseClient = WarehouseClient().get_client()
10755
    #warehouseClient = WarehouseClient().get_client()
10692
    
10756
 
10693
    for returnOrder in returnOrders:
10757
    for returnOrderId in returnOrdersMap.iterkeys():
-
 
10758
        returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)    
10694
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10759
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10695
        warehouse = None
10760
        #warehouse = inventoryClient.getWarehouse(returnOrder.warehouse_id) 
10696
        
10761
        
10697
        serialNumbers = []
10762
        serialNumbers = []
10698
        if returnOrderDetails.has_key('SerialNumbers'):  
10763
        if returnOrderDetails.has_key('SerialNumbers'):  
10699
            serialNumbers = returnOrderDetails.get('SerialNumbers').split(',')
10764
            serialNumbersSplitted = returnOrderDetails.get('SerialNumbers').split(',')
-
 
10765
            serialNumbers = []
-
 
10766
            for t in serialNumbersSplitted:
-
 
10767
                if t.strip() !="":
-
 
10768
                    serialNumbers.append(t.strip())
10700
            
10769
                    
10701
        scanFreebie = False
10770
        scanFreebie = False
10702
        if returnOrderDetails.has_key('ScanFreebie') and returnOrderDetails.get('ScanFreebie')=='yes':
10771
        if returnOrderDetails.has_key('ScanFreebie') and returnOrderDetails.get('ScanFreebie')=='yes':
10703
            scanFreebie = True
10772
            scanFreebie = True
10704
        quantity = int(returnOrderDetails.get('Quantity'))
10773
        quantity = int(returnOrderDetails.get('Quantity'))
10705
           
10774
           
10706
        if warehouse is not None and warehouse.billingType == BillingType.OURS or warehouse.billingType == BillingType.OURS_EXTERNAL:
10775
#         if warehouse is not None and warehouse.billingType == BillingType.OURS or warehouse.billingType == BillingType.OURS_EXTERNAL:
10707
            if scanMap.has_key(returnOrder.returnStatus):
10776
#             if scanMap.has_key(returnOrder.returnStatus):
10708
                scanType = scanMap[returnOrder.returnStatus]
10777
#                 scanType = scanMap[returnOrder.returnStatus]
10709
                lineitem = returnOrder.lineitem
10778
#                 lineitem = returnOrder.lineitem
10710
                return_qty = lineitem.returnQty - returnOrder.returnQuantity + quantity
10779
#                 return_qty = lineitem.returnQty - returnOrder.returnQuantity + quantity
10711
                lineitem.returnQty = lineitem.returnQty - returnOrder.returnQuantity + quantity
10780
#                 lineitem.returnQty = lineitem.returnQty - returnOrder.returnQuantity + quantity
10712
                order = get_order(returnOrder.orderId)
10781
#                 order = get_order(returnOrder.orderId)
10713
                if return_qty < order.lineitems[0].quantity:
10782
#                 if return_qty < order.lineitems[0].quantity:
10714
                    order.status = OrderStatus.PARTIAL_RETURN
10783
#                     order.status = OrderStatus.PARTIAL_RETURN
10715
                if return_qty == order.lineitems[0].quantity:
10784
#                 if return_qty == order.lineitems[0].quantity:
10716
                    order.status = OrderStatus.COMPLETE_RETURN
10785
#                     order.status = OrderStatus.COMPLETE_RETURN
10717
                if warehouse.billingType == BillingType.OURS or scanType != ScanType.SALE_RET:
10786
#                 if warehouse.billingType == BillingType.OURS or scanType != ScanType.SALE_RET:
10718
                    if lineitem.serial_number is not None:
10787
#                     if lineitem.serial_number is not None:
10719
                        if serialNumbers is None or len(serialNumbers)==0 or len(serialNumbers)<quantity:
10788
#                         if serialNumbers is None or len(serialNumbers)==0 or len(serialNumbers)<quantity:
10720
                            return False
10789
#                             return False
10721
                        else:
10790
#                         else:
10722
                            for serialNumber in serialNumbers:
10791
#                             for serialNumber in serialNumbers:
10723
                                try:
10792
#                                 try:
10724
                                    warehouseClient.scanSerializedItemForOrder(serialNumber, scanType, order.id, order.fulfilmentWarehouseId, 1, order.warehouse_id)
10793
#                                     warehouseClient.scanSerializedItemForOrder(serialNumber, scanType, order.id, order.fulfilmentWarehouseId, 1, order.warehouse_id)
10725
                                except:
10794
#                                 except:
10726
                                    warehouseClient = WarehouseClient().get_client()
10795
#                                     warehouseClient = WarehouseClient().get_client()
10727
                                    warehouseClient.scanSerializedItemForOrder(serialNumber, scanType, order.id, order.fulfilmentWarehouseId, 1, order.warehouse_id)
10796
#                                     warehouseClient.scanSerializedItemForOrder(serialNumber, scanType, order.id, order.fulfilmentWarehouseId, 1, order.warehouse_id)
10728
                    else:
10797
#                     else:
10729
                        try:
10798
#                         try:
10730
                            warehouseClient.scanForOrder(None, scanType, quantity, order.id, order.fulfilmentWarehouseId, order.warehouse_id)
10799
#                             warehouseClient.scanForOrder(None, scanType, quantity, order.id, order.fulfilmentWarehouseId, order.warehouse_id)
10731
                        except:
10800
#                         except:
10732
                            warehouseClient = WarehouseClient().get_client()
10801
#                             warehouseClient = WarehouseClient().get_client()
10733
                            warehouseClient.scanForOrder(None, scanType, quantity, order.id, order.fulfilmentWarehouseId, order.warehouse_id)
10802
#                             warehouseClient.scanForOrder(None, scanType, quantity, order.id, order.fulfilmentWarehouseId, order.warehouse_id)
10734
                if warehouse.billingType == BillingType.OURS_EXTERNAL and scanType == ScanType.SALE_RET:
10803
#                 if warehouse.billingType == BillingType.OURS_EXTERNAL and scanType == ScanType.SALE_RET:
10735
                    try:
10804
#                     try:
10736
                        warehouseClient.scanForOursExternalSaleReturn(order.id, lineitem.transfer_price)
10805
#                         warehouseClient.scanForOursExternalSaleReturn(order.id, lineitem.transfer_price)
10737
                    except:
10806
#                     except:
10738
                        warehouseClient = WarehouseClient().get_client()
10807
#                         warehouseClient = WarehouseClient().get_client()
10739
                        warehouseClient.scanForOursExternalSaleReturn(order.id, lineitem.transfer_price)
10808
#                         warehouseClient.scanForOursExternalSaleReturn(order.id, lineitem.transfer_price)
10740
                if scanFreebie:
10809
#                 if scanFreebie:
10741
                    try:
10810
#                     try:
10742
                        warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
10811
#                         warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
10743
                    except:
10812
#                     except:
10744
                        warehouseClient = WarehouseClient().get_client()
10813
#                         warehouseClient = WarehouseClient().get_client()
10745
                        warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
10814
#                         warehouseClient.scanfreebie(order.id, order.freebieItemId, 0, scanType)
-
 
10815
#     
10746
    
10816
    
-
 
10817
        isValid = returnOrderDetails.get('productUsable')
10747
    returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_RECEIVED]
10818
        if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_RECEIVED_PRESTINE]:
-
 
10819
            if isValid == "true":
-
 
10820
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_VALID]
-
 
10821
            else:
-
 
10822
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_CERT_INVALID]
-
 
10823
                
-
 
10824
        elif returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_RECEIVED_PRESTINE]:
-
 
10825
            if isValid == "true":
-
 
10826
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_USABLE]
-
 
10827
            else:
-
 
10828
                returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PRODUCT_UNUSABLE]
10748
    session.commit()  
10829
    session.commit()  
10749
    return True
10830
    return True
-
 
10831
    
10750
 
10832
 
10751
def validate_return_pickup(returnPickupId, returnOrdersMap):
10833
def validate_return_pickup(returnPickupId, returnOrdersMap):
10752
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupId).all()
10834
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupId).all()
10753
    if len(returnOrders)!=len(returnOrdersMap.keys()):
10835
    if len(returnOrders)!=len(returnOrdersMap.keys()):
10754
        raise TransactionServiceException(101, "All Returns Orders Information Missing. Please Fill All Orders Info")
10836
        raise TransactionServiceException(101, "All Returns Orders Information Missing. Please Fill All Orders Info")
Line 10831... Line 10913...
10831
    if not overrideWarranty and itemCondition is not None:
10913
    if not overrideWarranty and itemCondition is not None:
10832
        if itemCondition == 'DAMAGED':
10914
        if itemCondition == 'DAMAGED':
10833
            query = query.filter(LineItem.damaged_expiry_timestamp > datetime.datetime.now())
10915
            query = query.filter(LineItem.damaged_expiry_timestamp > datetime.datetime.now())
10834
        elif itemCondition == 'DEFECTIVE':
10916
        elif itemCondition == 'DEFECTIVE':
10835
            query = query.filter(LineItem.warranty_expiry_timestamp > datetime.datetime.now())
10917
            query = query.filter(LineItem.warranty_expiry_timestamp > datetime.datetime.now())
10836
            
10918
 
10837
    orders = query.order_by(desc(Order.delivery_timestamp)).all()
10919
    orders = query.order_by(desc(Order.delivery_timestamp)).all()
10838
    return orders
10920
    return orders
10839
        
10921
        
10840
def get_eligible_return_orders_for_pickup(customerId):
10922
def get_eligible_return_orders_for_pickup(customerId):
10841
    return session.query(ReturnOrderInfo).join((ReturnTransaction,ReturnOrderInfo.returnTransaction_id==ReturnTransaction.id)).filter(ReturnTransaction.customer_id==customerId).filter(or_(ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_REQUEST_RAISED], ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED])).filter(ReturnOrderInfo.logisticsRequestId==None).all()     
10923
    return session.query(ReturnOrderInfo).join((ReturnTransaction,ReturnOrderInfo.returnTransaction_id==ReturnTransaction.id)).filter(ReturnTransaction.customer_id==customerId).filter(or_(ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_REQUEST_RAISED], ReturnOrderInfo.returnStatus==OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_REQUEST_RAISED])).filter(ReturnOrderInfo.logisticsRequestId==None).all()
10842
 
10924
 
10843
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
10925
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
10844
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
10926
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
10845
    
10927
 
10846
    ordersMap = {}
10928
    ordersMap = {}
10847
    for order in eligibleOrders:
10929
    for order in eligibleOrders:
10848
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
10930
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
10849
    
10931
 
10850
    for orderId, returnOrderQty in returnOrdersMap.items():
10932
    for orderId, returnOrderQty in returnOrdersMap.items():
10851
        if returnOrderQty > ordersMap.get(orderId):
10933
        if returnOrderQty > ordersMap.get(orderId):
10852
            return False
10934
            return False
10853
    return True
10935
    return True
10854
 
10936
 
10855
def get_return_pickup_request(returnPickupId):
10937
def get_return_pickup_request(returnPickupId):
10856
    return ReturnPickupRequest.get_by(id=returnPickupId)
10938
    return ReturnPickupRequest.get_by(id=returnPickupId)
10857
 
10939
 
-
 
10940
def mark_return_not_required_orders_as_processed(t_returnOrderInfo):
-
 
10941
    returnOrderInfo = ReturnOrderInfo.get_by(id=t_returnOrderInfo.id)
-
 
10942
    if returnOrderInfo is None:
-
 
10943
        raise TransactionServiceException(101, "No Return Order Found")
-
 
10944
 
-
 
10945
    if returnOrderInfo.returnPickupType == ReturnPickupType.NOT_REQUIRED:
-
 
10946
        if returnOrderInfo.returnAction == ReturnAction.REPLACEMENT  or t_returnOrderInfo.refundType!= RefundType.WALLET:
-
 
10947
            raise TransactionServiceException(101, "Refund Type not Defined for return order:- "+str(returnOrderInfo.id))
-
 
10948
 
-
 
10949
    detailsMap = {}
-
 
10950
    if returnOrderInfo.refundedAt :
-
 
10951
        raise TransactionServiceException(145, "Refund already in Process for this return order")
-
 
10952
    detailsMap['RefundReason'] = "As per Customer Request"
-
 
10953
    detailsMap['RefundType'] = t_returnOrderInfo.refundType
-
 
10954
    detailsMap['RefundedBy'] = t_returnOrderInfo.refundedBy
-
 
10955
    detailsMap['RefundAmount'] = t_returnOrderInfo.refundAmount
-
 
10956
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REFUND_IN_PROCESS]
-
 
10957
    if(not __process_return_order(returnOrderInfo, detailsMap)):
-
 
10958
        raise TransactionServiceException(145, "Issue in __process_return_order")
-
 
10959
    returnOrderInfo.processedAt = datetime.datetime.now()
-
 
10960
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REFUND_DONE]
-
 
10961
    session.commit()
-
 
10962
    __markReturnTransactionAsProcessed(returnOrderInfo.returnTransaction_id)
-
 
10963
    return True
10858
 
10964
 
10859
def mark_return_not_required_orders_as_processed(returnTransactionId):
-
 
10860
    returnTransaction = ReturnTransaction.get_by(id=returnTransactionId)
-
 
10861
    if returnTransaction is None:
-
 
10862
        raise TransactionServiceException(101, "No Return Transaction Found")
-
 
10863
    
-
 
10864
    eligibleOrders = []
-
 
10865
    for returnOrder in returnTransaction.returnOrders:
-
 
10866
        if returnOrder.returnPickupType == ReturnPickupType.NOT_REQUIRED:
-
 
10867
            if returnOrder.returnAction and returnOrder.refundType == RefundType.INIT:
-
 
10868
                raise TransactionServiceException(101, "Refund Type not Defined for return order:- "+str(returnOrder.id))
-
 
10869
            eligibleOrders.append(returnOrder)
-
 
10870
        
-
 
10871
        
-
 
10872
    returnOrdersAttrMap = {}
-
 
10873
    returnOrderIds = []
-
 
10874
    
-
 
10875
    for returnOrder in eligibleOrders:
-
 
10876
        returnOrderIds.append(returnOrder.id)
-
 
10877
        if returnOrder.returnAction:
-
 
10878
            detailsMap = {}
-
 
10879
            if returnOrder.refundedAt:
-
 
10880
                raise TransactionServiceException(145, "Refund already in Process for this return order")
-
 
10881
            detailsMap['RefundReason'] = "As per Customer Request"
-
 
10882
            detailsMap['RefundType'] = returnOrder.refundType
-
 
10883
            detailsMap['RefundedBy'] = "CRM Executive"
-
 
10884
            detailsMap['RefundAmount'] = returnOrder.refundAmount
-
 
10885
            returnOrdersAttrMap[returnOrder.id] = detailsMap
-
 
10886
    
-
 
10887
    
-
 
10888
    return change_return_transaction_status(returnTransactionId, ReturnTransactionStatus.PROCESSED, returnOrderIds, returnOrdersAttrMap)
-
 
10889
 
10965
 
10890
def get_all_return_orders_for_return_pickup_request(logisticsRequestId):
10966
def get_all_return_orders_for_return_pickup_request(logisticsRequestId):
10891
    return ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==logisticsRequestId).all()
10967
    return ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==logisticsRequestId).all()
10892
 
10968
 
10893
def __clone_return_order(returnOrder, splitReturnOrderQty):
10969
def __clone_return_order(returnOrder, splitOrderQty):
-
 
10970
    if returnOrder.returnQuantity <= splitOrderQty or splitOrderQty<=0:
-
 
10971
        raise TransactionServiceException(101, "SplitQty canot be equal to or greater than parent return order returnQty")
-
 
10972
    returnOrder.returnQuantity = returnOrder.returnQuantity - splitOrderQty 
10894
    new_returnOrder = ReturnOrderInfo()
10973
    new_return_order = ReturnOrderInfo()
-
 
10974
    new_return_order.returnTransaction = returnOrder.returnTransaction
-
 
10975
    new_return_order.masterOrderId = returnOrder.masterOrderId
10895
    returnOrderInfo.orderId = returnOrder.orderId
10976
    new_return_order.orderId = returnOrder.orderId
10896
    returnOrderInfo.lineItemId = returnOrder.lineItemId
10977
    new_return_order.lineItemId = returnOrder.lineItemId
-
 
10978
    new_return_order.logisticsRequestId = returnOrder.logisticsRequestId
10897
    returnOrderInfo.returnQuantity = splitReturnOrderQty
10979
    new_return_order.returnQuantity = splitOrderQty
-
 
10980
    new_return_order.receivedQuantity = returnOrder.receivedQuantity
10898
    returnOrderInfo.createdAt = datetime.datetime.now()
10981
    new_return_order.createdAt = returnOrder.createdAt
10899
    if itemCondition=="DAMAGED":
10982
    new_return_order.processedAt = returnOrder.processedAt
10900
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_REQUEST_RECEIVED]
10983
    new_return_order.returnStatus = returnOrder.returnStatus
10901
    else:
10984
    new_return_order.reshippedAt = returnOrder.reshippedAt
-
 
10985
    new_return_order.receivedAt = returnOrder.receivedAt
10902
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_REQUEST_RECEIVED]
10986
    new_return_order.refundReason = returnOrder.refundReason
-
 
10987
    new_return_order.refundedBy = returnOrder.refundedBy
10903
    returnOrderInfo.masterOrderId = order.logisticsTransactionId
10988
    new_return_order.refundedAt = returnOrder.refundedAt
10904
    returnOrderInfo.warehouse_id = order.warehouse_id
10989
    new_return_order.warehouse_id = returnOrder.warehouse_id
-
 
10990
    new_return_order.refundAmount = returnOrder.refundAmount
-
 
10991
    new_return_order.refundType = returnOrder.refundType
10905
    returnOrderInfo.returnAction = returnInfo.returnAction
10992
    new_return_order.refundDescription = returnOrder.refundDescription
-
 
10993
    new_return_order.returnPickupType = returnOrder.returnPickupType
-
 
10994
    new_return_order.shippingType = returnOrder.shippingType
-
 
10995
    new_return_order.replacementOrderId = returnOrder.replacementOrderId
-
 
10996
    new_return_order.receivedReturnType = returnOrder.receivedReturnType
10906
    returnOrderInfo.freebieItemId = order.freebieItemId
10997
    new_return_order.freebieItemId = returnOrder.freebieItemId
-
 
10998
    new_return_order.returnAction = returnOrder.returnAction
10907
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.PENDING]
10999
    new_return_order.returnTxnResolutionStatus = returnOrder.returnTxnResolutionStatus
-
 
11000
    new_return_order.lineitem = returnOrder.lineitem
-
 
11001
    new_return_order.returnPickUpRequest = returnOrder.returnPickUpRequest
-
 
11002
    return new_return_order
-
 
11003
 
10908
    
11004
    
10909
def get_seller_info(sellerId):
11005
def get_seller_info(sellerId):
10910
    sellerInfo = SellerInfo()
11006
    sellerInfo = SellerInfo()
10911
    seller = Seller.get_by(id=sellerId)
11007
    seller = Seller.get_by(id=sellerId)
10912
    if seller is None:
11008
    if seller is None:
Line 10927... Line 11023...
10927
 
11023
 
10928
def get_warehouse_address(addressId):
11024
def get_warehouse_address(addressId):
10929
    address = WarehouseAddressMaster.get_by(id=addressId)
11025
    address = WarehouseAddressMaster.get_by(id=addressId)
10930
    return to_t_warehouse_address(address)
11026
    return to_t_warehouse_address(address)
10931
 
11027
 
10932
def split_return_order_info(returnOrderId, splitReturnOrderQty):
11028
def split_return_order_info(returnOrderId, splitOrderQty):
10933
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
11029
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10934
    if returnOrder is None:
11030
    if returnOrder is None:
10935
        raise TransactionServiceException(101, "No Return Order is there with this Order Id")
11031
        raise TransactionServiceException(101, "No Return Order is there with this Order Id")
-
 
11032
    new_return_order = __clone_return_order(returnOrder, splitOrderQty)
-
 
11033
    session.commit()
-
 
11034
    return new_return_order
10936
 
11035
 
10937
#Seller would be used to get tin number
11036
#Seller would be used to get tin number
10938
def __get_seller(warehouse_id):
11037
def __get_seller(warehouse_id):
10939
        #As of now we have hardcoded the company and 
11038
    #As of now we have hardcoded the company and 
10940
        #seller would be returned on basis warehouse and company
11039
    #seller would be returned on basis warehouse and company
10941
        orgId=2
11040
    orgId=2
10942
        (sellerId,) = session.query(Seller.id).join((SellerWarehouse, Seller.id==SellerWarehouse.seller_id)).filter(Seller.organisation_id==orgId).filter(SellerWarehouse.warehouse_id==warehouse_id).first()
11041
    (sellerId,) = session.query(Seller.id).join((SellerWarehouse, Seller.id==SellerWarehouse.seller_id)).filter(Seller.organisation_id==orgId).filter(SellerWarehouse.warehouse_id==warehouse_id).first()
10943
        return sellerId
11042
    return sellerId
10944
 
11043
 
10945
def add_shipment_delay(shipmentDelayDetail):
11044
def add_shipment_delay(shipmentDelayDetail):
10946
    returnList = []
11045
    returnList = []
10947
    for delayObj in shipmentDelayDetail:
11046
    for delayObj in shipmentDelayDetail:
10948
        print delayObj.orderId
-
 
10949
        print delayObj.delayReason
-
 
10950
        print delayObj.delayReasonText
-
 
10951
        print delayObj.delay
-
 
10952
        order = get_order(delayObj.orderId)
11047
        order = get_order(delayObj.orderId)
10953
        if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.ACCEPTED]:
11048
        if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.ACCEPTED]:
10954
            returnList.append(delayObj.orderId)
11049
            returnList.append(delayObj.orderId)
10955
            continue
11050
            continue
10956
        try:
11051
        try:
Line 10959... Line 11054...
10959
            returnList.append(delayObj.orderId)
11054
            returnList.append(delayObj.orderId)
10960
            continue
11055
            continue
10961
        if not result:
11056
        if not result:
10962
            returnList.append(delayObj.orderId)
11057
            returnList.append(delayObj.orderId)
10963
    return returnList
11058
    return returnList
10964
            
-
 
10965
 
-
 
10966
 
11059
 
10967
#Buyer can be anyone based on logic
11060
#Buyer can be anyone based on logic
10968
def __get_buyer(warehouse_id):
11061
def __get_buyer(warehouse_id):
10969
        #As of now we have hardcoded the company and 
11062
        #As of now we have hardcoded the company and 
10970
        #seller would be returned on basis warehouse and company
11063
        #seller would be returned on basis warehouse and company