Subversion Repositories SmartDukaan

Rev

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

Rev 19736 Rev 19817
Line 74... Line 74...
74
    RechargeType, RechargeStatistics, DeviceNumberInfo, EmiChargeType, PayMethod, \
74
    RechargeType, RechargeStatistics, DeviceNumberInfo, EmiChargeType, PayMethod, \
75
    OrderSource, StorePaymentStatus, ProductCondition, TaxType, \
75
    OrderSource, StorePaymentStatus, ProductCondition, TaxType, \
76
    AmazonFCWarehouseLocation, RechargeMode, CreditTxnType, CreditHistory as TCreditHistory, \
76
    AmazonFCWarehouseLocation, RechargeMode, CreditTxnType, CreditHistory as TCreditHistory, \
77
    LoanHistory as TLoanHistory, ShipmentLogisticsCostDetail as TShipmentLogisticsCostDetail, \
77
    LoanHistory as TLoanHistory, ShipmentLogisticsCostDetail as TShipmentLogisticsCostDetail, \
78
    ReturnTransactionStatus, ReturnAction, ReturnTxnResolutionStatus, ReplacementShippingType, \
78
    ReturnTransactionStatus, ReturnAction, ReturnTxnResolutionStatus, ReplacementShippingType, \
79
    ReturnTxnPickupStatus, ReceivedReturnType, ReturnPickupType
79
    ReturnTxnPickupStatus, ReceivedReturnType, ReturnPickupType, RefundType
80
from shop2020.thriftpy.model.v1.user.ttypes import VoucherType, CouponCategory, \
80
from shop2020.thriftpy.model.v1.user.ttypes import VoucherType, CouponCategory, \
81
    User, Sex
81
    User, Sex
82
from shop2020.thriftpy.payments.ttypes import PaymentException
82
from shop2020.thriftpy.payments.ttypes import PaymentException
83
from shop2020.thriftpy.utils.ttypes import UserSmsInfo, SmsType
83
from shop2020.thriftpy.utils.ttypes import UserSmsInfo, SmsType
84
from shop2020.thriftpy.warehouse.ttypes import ScanType, \
84
from shop2020.thriftpy.warehouse.ttypes import ScanType, \
Line 10068... Line 10068...
10068
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_REQUEST_RECEIVED]
10068
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_REQUEST_RECEIVED]
10069
    else:
10069
    else:
10070
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_REQUEST_RECEIVED]
10070
        returnOrderInfo.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_REQUEST_RECEIVED]
10071
    returnOrderInfo.masterOrderId = order.logisticsTransactionId
10071
    returnOrderInfo.masterOrderId = order.logisticsTransactionId
10072
    returnOrderInfo.warehouse_id = order.warehouse_id
10072
    returnOrderInfo.warehouse_id = order.warehouse_id
10073
    returnOrderInfo.returnAction = ReturnAction._VALUES_TO_NAMES[returnInfo.returnAction]
10073
    returnOrderInfo.returnAction = returnInfo.returnAction
10074
    returnOrderInfo.freebieItemId = order.freebieItemId
10074
    returnOrderInfo.freebieItemId = order.freebieItemId
10075
    returnOrderInfo.returnAction = returnOrderInfo.returnAction
-
 
10076
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.PENDING]
10075
    returnOrderInfo.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.PENDING]
10077
    session.commit()
10076
    session.commit()
10078
    
10077
    
10079
    return returnOrderInfo
10078
    return returnOrderInfo
10080
 
10079
 
10081
def get_return_order_info(returnOrderId):
10080
def get_return_order_info(returnOrderId):
10082
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10081
    returnOrder = ReturnOrderInfo.get_by(id=returnOrderId)
10083
    if not returnOrder:
10082
    if not returnOrder:
10084
        return None
10083
        return None
10085
    return order
10084
    return returnOrder
10086
 
10085
 
10087
def get_return_orders_info_map(order_ids=None, statuses=None):
10086
def get_return_orders_info_map(order_ids=None, statuses=None):
10088
    returnOrdersInfoQuery = ReturnOrderInfo.query
10087
    returnOrdersInfoQuery = ReturnOrderInfo.query
10089
    if order_ids is not None and len(order_ids)>0:
10088
    if order_ids is not None and len(order_ids)>0:
10090
        returnOrdersInfoQuery = returnOrdersInfoQuery.filter(ReturnOrderInfo.orderId.in_(tuple(order_ids)))
10089
        returnOrdersInfoQuery = returnOrdersInfoQuery.filter(ReturnOrderInfo.orderId.in_(tuple(order_ids)))
Line 10180... Line 10179...
10180
    for tOrder in t_orders:
10179
    for tOrder in t_orders:
10181
        returnOrdersMap[tOrder.orderId] = tOrder.returnQuantity
10180
        returnOrdersMap[tOrder.orderId] = tOrder.returnQuantity
10182
    
10181
    
10183
    if validate_return_transaction(returnTransaction.customer_id, returnOrdersMap, itemCondition, overrideWarranty):
10182
    if validate_return_transaction(returnTransaction.customer_id, returnOrdersMap, itemCondition, overrideWarranty):
10184
        returnTxn = ReturnTransaction()
10183
        returnTxn = ReturnTransaction()
10185
        singleOrder = get_order(t_orders[0].orderId)
-
 
10186
        returnTxn.customer_id = returnTransaction.customer_id
10184
        returnTxn.customer_id = returnTransaction.customer_id
10187
        returnTxn.status = ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.INITIATED]
10185
        returnTxn.status = ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.INITIATED]
10188
        returnTxn.customer_email = singleOrder.customer_email
10186
        returnTxn.customer_email = returnTransaction.customer_email
10189
        returnTxn.customer_name = singleOrder.customer_name
10187
        returnTxn.customer_name = returnTransaction.customer_name
10190
        returnTxn.createdAt = datetime.datetime.now()
10188
        returnTxn.createdAt = datetime.datetime.now()
10191
        returnTxn.address_id = returnTransaction.address_id
10189
        returnTxn.address_id = returnTransaction.address_id
10192
        returnTxn.customerAddress = returnTransaction.customerAddress
10190
        returnTxn.customerAddress = returnTransaction.customerAddress
10193
        returnTxn.customerCity = returnTransaction.customerCity
10191
        returnTxn.customerCity = returnTransaction.customerCity
10194
        returnTxn.customerPhone = returnTransaction.customerPhone
10192
        returnTxn.customerPhone = returnTransaction.customerPhone
Line 10201... Line 10199...
10201
            lineitem = order.lineitems[0]
10199
            lineitem = order.lineitems[0]
10202
            lineitem.returnQty = lineitem.returnQty + returnOrder.returnQuantity
10200
            lineitem.returnQty = lineitem.returnQty + returnOrder.returnQuantity
10203
            order.status = OrderStatus.PARTIAL_RETURN_IN_PROCESS
10201
            order.status = OrderStatus.PARTIAL_RETURN_IN_PROCESS
10204
            order.statusDescription = "Partial Return In Process"
10202
            order.statusDescription = "Partial Return In Process"
10205
        
10203
        
10206
        try: 
-
 
10207
            crmServiceClient = CRMClient().get_client()
10204
            crmServiceClient = CRMClient().get_client()
10208
            ticket =Ticket()
10205
            ticket =Ticket()
10209
            activity = Activity()
10206
            activity = Activity()
10210
            
10207
            
10211
            description = "Creating Ticket for return requested by customer:- " + str(returnTransaction.customer_name)  + " Return Transaction Id:- "+ str(returnTxn.id)
10208
            description = "Creating Ticket for return requested by customer:- " + str(returnTransaction.customer_name)  + " Return Transaction Id:- "+ str(returnTxn.id)
Line 10234... Line 10231...
10234
            activity.customerEmailId = returnTransaction.customer_email
10231
            activity.customerEmailId = returnTransaction.customer_email
10235
            activity.customerMobileNumber = returnTransaction.customerPhone
10232
            activity.customerMobileNumber = returnTransaction.customerPhone
10236
            activity.customerName = returnTransaction.customer_name
10233
            activity.customerName = returnTransaction.customer_name
10237
            
10234
            
10238
            returnTxn.ticketId = crmServiceClient.insertTicket(ticket, activity)
10235
            returnTxn.ticketId = crmServiceClient.insertTicket(ticket, activity)
10239
            
10236
 
10240
        except:
-
 
10241
            print "Ticket for RTO Refund is not created."
-
 
10242
        session.commit()
10237
        session.commit()
10243
        return returnTxn.id
10238
        return returnTxn
10244
    return 0
10239
    return ReturnTransaction()
10245
 
10240
 
10246
def get_return_transactions_for_customer(statusList, customerMobile, customerEmail, returnTransactionId, customer_id):
10241
def get_return_transactions_for_customer(statusList, customerMobile, customerEmail, returnTransactionId, customer_id):
10247
    query = ReturnTransaction.query
10242
    query = ReturnTransaction.query
10248
    if statusList is not None and len(statusList) >0:
10243
    if statusList is not None and len(statusList) >0:
10249
        statuses = []
10244
        statuses = []
Line 10516... Line 10511...
10516
                        ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
10511
                        ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.REPLACEMENT_ORDER_CREATED]
10517
                returnTransaction.processedAt = datetime.datetime.now()
10512
                returnTransaction.processedAt = datetime.datetime.now()
10518
                returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status]
10513
                returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status]
10519
            for returnOrderId in returnOrdersIds:
10514
            for returnOrderId in returnOrdersIds:
10520
                __process_return_order(get_return_order_info(returnOrderId), returnOrdersAttrMap.get(returnOrderId)) 
10515
                __process_return_order(get_return_order_info(returnOrderId), returnOrdersAttrMap.get(returnOrderId)) 
10521
    elif new_status == ReturnTransactionStatus.CLOSED:
10516
    elif new_status == ReturnTransactionStatus.CLOSED and mark_return_transaction_complete(returnTransaction.id):
10522
        returnTransaction.closedAt = datetime.datetime.now()
10517
        returnTransaction.closedAt = datetime.datetime.now()
10523
        for ret_Order in returnTransaction.returnOrders:
10518
        for ret_Order in returnTransaction.returnOrders:
10524
            ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.CLOSED]
10519
            ret_Order.returnTxnResolutionStatus = ReturnTxnResolutionStatus._VALUES_TO_NAMES[ReturnTxnResolutionStatus.CLOSED]
10525
        __communicate_customer_for_closed_transaction(returnTransaction)
10520
        __communicate_customer_for_closed_transaction(returnTransaction)
10526
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
10521
        returnTransaction.status = ReturnTransactionStatus._VALUES_TO_NAMES[new_status] 
Line 10530... Line 10525...
10530
    
10525
    
10531
def create_return_pickup_request(returnOrderIds, providerId):
10526
def create_return_pickup_request(returnOrderIds, providerId):
10532
    returnPickupRequest = ReturnPickupRequest()
10527
    returnPickupRequest = ReturnPickupRequest()
10533
    returnPickupRequest.logisticsProviderId = providerId
10528
    returnPickupRequest.logisticsProviderId = providerId
10534
    returnPickupRequest.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_REQUESTED]
10529
    returnPickupRequest.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_REQUESTED]
10535
    session.commit()
-
 
10536
    
10530
    
-
 
10531
    if len(returnOrderIds) > 0:
10537
    for returnOrderId in returnOrderIds:
10532
        for returnOrderId in returnOrderIds:
10538
        returnOrder = get_return_order_info(returnOrderId)
10533
            returnOrder = get_return_order_info(returnOrderId)
10539
        returnOrder.logisticsRequestId = returnPickupRequest.id
10534
            returnOrder.logisticsRequestId = returnPickupRequest.id
10540
    session.commit()
10535
        session.commit()
-
 
10536
        return True
10541
    
10537
    
10542
    return True
10538
    return False
10543
 
10539
 
10544
def update_return_pickup_request(returnPickupRequest):
10540
def update_return_pickup_request(returnPickupRequest):
10545
    try:
10541
    try:
10546
        returnPickupReq = ReturnPickupRequest.get_by(id=returnPickupRequest.id)
10542
        returnPickupReq = ReturnPickupRequest.get_by(id=returnPickupRequest.id)
10547
        if returnPickupRequest.pickupRequestNo:
10543
        if returnPickupRequest.pickupRequestNo:
Line 10628... Line 10624...
10628
    inventoryClient = InventoryClient().get_client()
10624
    inventoryClient = InventoryClient().get_client()
10629
    warehouse = inventoryClient.getWarehouse(returnOrders[0].warehouse_id)
10625
    warehouse = inventoryClient.getWarehouse(returnOrders[0].warehouse_id)
10630
    warehouseClient = WarehouseClient().get_client()
10626
    warehouseClient = WarehouseClient().get_client()
10631
    
10627
    
10632
    for returnOrder in returnOrders:
10628
    for returnOrder in returnOrders:
-
 
10629
        returnOrderDetails = returnOrdersMap.get(returnOrder.id)
10633
        warehouse = None
10630
        warehouse = None
10634
        
10631
        
10635
        serialNumbers = []
10632
        serialNumbers = []
10636
        if returnOrderDetails.has_key('SerialNumbers'):  
10633
        if returnOrderDetails.has_key('SerialNumbers'):  
10637
            serialNumbers = returnOrderDetails.get('SerialNumbers').split(',')
10634
            serialNumbers = returnOrderDetails.get('SerialNumbers').split(',')
Line 10774... Line 10771...
10774
            
10771
            
10775
    orders = query.order_by(desc(Order.delivery_timestamp)).all()
10772
    orders = query.order_by(desc(Order.delivery_timestamp)).all()
10776
    return orders
10773
    return orders
10777
        
10774
        
10778
def get_eligible_return_orders_for_pickup(customerId):
10775
def get_eligible_return_orders_for_pickup(customerId):
10779
    return ReturnOrderInfo.query.filter(ReturnOrderInfo.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])).all()     
10776
    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()     
10780
 
10777
 
10781
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
10778
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
10782
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
10779
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
10783
    
10780
    
10784
    ordersMap = {}
10781
    ordersMap = {}
10785
    for order in eligibleOrders:
10782
    for order in eligibleOrders:
10786
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
10783
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
10787
    
10784
    
-
 
10785
    print ordersMap
-
 
10786
    
-
 
10787
    print "++++++++++++"
-
 
10788
    
-
 
10789
    print returnOrdersMap
-
 
10790
    
10788
    for orderId, returnOrderQty in returnOrdersMap.items():
10791
    for orderId, returnOrderQty in returnOrdersMap.items():
10789
        if returnOrderQty > ordersMap.get(orderId):
10792
        if returnOrderQty > ordersMap.get(orderId):
-
 
10793
            print "ret false*********";
10790
            return False
10794
            return False
10791
    return True
10795
    return True
10792
 
10796
 
-
 
10797
def get_return_pickup_request(returnPickupId):
-
 
10798
    return ReturnPickupRequest.query.filter(ReturnPickupRequest.id==returnPickupId).first()
-
 
10799
 
-
 
10800
 
-
 
10801
def mark_return_not_required_orders_as_processed(returnTransactionId):
-
 
10802
    returnTransaction = ReturnTransaction.get_by(id=returnTransactionId)
-
 
10803
    if returnTransaction is None:
-
 
10804
        raise TransactionServiceException(101, "No Return Transaction Found")
-
 
10805
    
-
 
10806
    eligibleOrders = []
-
 
10807
    for returnOrder in returnTransaction.returnOrders:
-
 
10808
        if returnOrder.returnPickupType == ReturnPickupType.NOT_REQUIRED:
-
 
10809
            if returnOrder.returnAction and returnOrder.refundType == RefundType.INIT:
-
 
10810
                raise TransactionServiceException(101, "Refund Type not Defined for return order:- "+str(returnOrder.id))
-
 
10811
            eligibleOrders.append(returnOrder)
-
 
10812
        
-
 
10813
        
-
 
10814
    returnOrdersAttrMap = {}
-
 
10815
    returnOrderIds = []
-
 
10816
    
-
 
10817
    for returnOrder in eligibleOrders:
-
 
10818
        returnOrderIds.append(returnOrder.id)
-
 
10819
        if returnOrder.returnAction:
-
 
10820
            detailsMap = {}
-
 
10821
            if returnOrder.refundedAt:
-
 
10822
                raise TransactionServiceException(145, "Refund already in Process for this return order")
-
 
10823
            detailsMap['RefundReason'] = "As per Customer Request"
-
 
10824
            detailsMap['RefundType'] = returnOrder.refundType
-
 
10825
            detailsMap['RefundedBy'] = "CRM Executive"
-
 
10826
            detailsMap['RefundAmount'] = returnOrder.refundAmount
-
 
10827
            returnOrdersAttrMap[returnOrder.id] = detailsMap
-
 
10828
    
-
 
10829
    
-
 
10830
    return change_return_transaction_status(returnTransactionId, ReturnTransactionStatus.PROCESSED, returnOrderIds, returnOrdersAttrMap)   
-
 
10831
    
10793
if __name__ == '__main__':
10832
if __name__ == '__main__':
10794
    print get_orders_by_mobile_number("9650889334")
10833
    print get_orders_by_mobile_number("9650889334")