Subversion Repositories SmartDukaan

Rev

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

Rev 19733 Rev 19735
Line 10056... Line 10056...
10056
    returnOrderInfo.warehouse_id = order.warehouse_id
10056
    returnOrderInfo.warehouse_id = order.warehouse_id
10057
    session.commit()
10057
    session.commit()
10058
    
10058
    
10059
    return returnOrderInfo
10059
    return returnOrderInfo
10060
 
10060
 
10061
def create_return_order_info(returnInfo, order=None):
10061
def create_return_order_info(returnInfo, order=None, itemCondition="DAMAGED"):
10062
    returnOrderInfo = ReturnOrderInfo()
10062
    returnOrderInfo = ReturnOrderInfo()
10063
    returnOrderInfo.orderId = returnInfo.orderId
10063
    returnOrderInfo.orderId = returnInfo.orderId
10064
    returnOrderInfo.lineItemId = order.lineitems[0].id
10064
    returnOrderInfo.lineItemId = order.lineitems[0].id
10065
    returnOrderInfo.returnQuantity = returnInfo.returnQuantity
10065
    returnOrderInfo.returnQuantity = returnInfo.returnQuantity
10066
    returnOrderInfo.createdAt = datetime.datetime.now()
10066
    returnOrderInfo.createdAt = datetime.datetime.now()
Line 10166... Line 10166...
10166
    all_return_orders_as_per_warehouse = ReturnOrderInfo.query.filter(ReturnOrderInfo.processedAt==None).filter(ReturnOrderInfo.warehouse_id <= warehouseId).all()
10166
    all_return_orders_as_per_warehouse = ReturnOrderInfo.query.filter(ReturnOrderInfo.processedAt==None).filter(ReturnOrderInfo.warehouse_id <= warehouseId).all()
10167
    if all_return_orders_as_per_warehouse is None:
10167
    if all_return_orders_as_per_warehouse is None:
10168
        all_return_orders_as_per_warehouse = []
10168
        all_return_orders_as_per_warehouse = []
10169
    return all_return_orders_as_per_warehouse
10169
    return all_return_orders_as_per_warehouse
10170
 
10170
 
10171
def create_return_transaction(returnTransaction):
10171
def create_return_transaction(returnTransaction, itemCondition, overrideWarranty):
10172
    t_orders = returnTransaction.returnOrders
10172
    t_orders = returnTransaction.returnOrders
10173
    if not t_orders:
10173
    if not t_orders:
10174
        raise TransactionServiceException(101, "Return Orders missing from the transaction")
10174
        raise TransactionServiceException(101, "Return Orders missing from the transaction")
10175
    
10175
    
-
 
10176
    returnOrdersMap = {}
-
 
10177
    for tOrder in t_orders:
-
 
10178
        returnOrdersMap[tOrder.orderId] = tOrder.returnQuantity
-
 
10179
    
-
 
10180
    if validate_return_transaction(returnTransaction.customer_id, returnOrdersMap, itemCondition, overrideWarranty):
10176
    returnTxn = ReturnTransaction()
10181
        returnTxn = ReturnTransaction()
10177
    singleOrder = get_order(t_orders[0].orderId)
10182
        singleOrder = get_order(t_orders[0].orderId)
10178
    returnTxn.customer_id = returnTransaction.customer_id
10183
        returnTxn.customer_id = returnTransaction.customer_id
10179
    returnTxn.status = ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.INITIATED]
10184
        returnTxn.status = ReturnTransactionStatus._VALUES_TO_NAMES[ReturnTransactionStatus.INITIATED]
10180
    returnTxn.customer_email = singleOrder.customer_email
10185
        returnTxn.customer_email = singleOrder.customer_email
10181
    returnTxn.customer_name = singleOrder.customer_name
10186
        returnTxn.customer_name = singleOrder.customer_name
10182
    returnTxn.createdAt = datetime.datetime.now()
10187
        returnTxn.createdAt = datetime.datetime.now()
10183
    returnTxn.address_id = returnTransaction.address_id
10188
        returnTxn.address_id = returnTransaction.address_id
10184
    returnTxn.ticketId = returnTransaction.ticketId
-
 
10185
    returnTxn.customerAddress = returnTransaction.customerAddress
10189
        returnTxn.customerAddress = returnTransaction.customerAddress
10186
    returnTxn.customerCity = returnTransaction.customerCity
10190
        returnTxn.customerCity = returnTransaction.customerCity
10187
    returnTxn.customerPhone = returnTransaction.customerPhone
10191
        returnTxn.customerPhone = returnTransaction.customerPhone
10188
    returnTxn.customerState = returnTransaction.customerState
10192
        returnTxn.customerState = returnTransaction.customerState
10189
    returnTxn.pincode = returnTransaction.pincode
10193
        returnTxn.pincode = returnTransaction.pincode
10190
    for t_order in t_orders:
10194
        for t_order in t_orders:
10191
        order = get_order(t_order.orderId)
10195
            order = get_order(t_order.orderId)
10192
        returnOrder = create_return_order_info(t_order, order)
10196
            returnOrder = create_return_order_info(t_order, order, itemCondition)
10193
        returnOrder.returnTransaction = returnTxn
10197
            returnOrder.returnTransaction = returnTxn
10194
        lineitem = order.lineitems[0]
10198
            lineitem = order.lineitems[0]
10195
        lineitem.returnQty = lineitem.returnQty + returnOrder.returnQuantity
10199
            lineitem.returnQty = lineitem.returnQty + returnOrder.returnQuantity
10196
        order.status = OrderStatus.PARTIAL_RETURN_IN_PROCESS
10200
            order.status = OrderStatus.PARTIAL_RETURN_IN_PROCESS
10197
        order.statusDescription = "Partial Return In Process"
10201
            order.statusDescription = "Partial Return In Process"
10198
    session.commit()
-
 
10199
    
10202
        
10200
    try: 
10203
        try: 
10201
        crmServiceClient = CRMClient().get_client()
10204
            crmServiceClient = CRMClient().get_client()
10202
        ticket =Ticket()
10205
            ticket =Ticket()
10203
        activity = Activity()
10206
            activity = Activity()
10204
        
10207
            
10205
        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)
10206
        ticket.creatorId = 1
10209
            ticket.creatorId = 1
10207
        ticket.assigneeId = 34
10210
            ticket.assigneeId = 34
10208
        ticket.category = TicketCategory.RETURN_FORM
10211
            ticket.category = TicketCategory.RETURN_FORM
10209
        ticket.priority = TicketPriority.HIGH
10212
            ticket.priority = TicketPriority.HIGH
10210
        ticket.status = TicketStatus.OPEN
10213
            ticket.status = TicketStatus.OPEN
10211
        ticket.description = description
10214
            ticket.description = description
10212
        ticket.orderId = order.id
10215
            ticket.orderId = order.id
10213
        
10216
            
10214
        activity.creatorId = 1
10217
            activity.creatorId = 1
10215
        activity.ticketAssigneeId = ticket.assigneeId
10218
            activity.ticketAssigneeId = ticket.assigneeId
10216
        activity.type = ActivityType.OTHER
10219
            activity.type = ActivityType.OTHER
10217
        activity.description = description
10220
            activity.description = description
10218
        activity.ticketCategory = ticket.category
10221
            activity.ticketCategory = ticket.category
10219
        activity.ticketDescription = ticket.description
10222
            activity.ticketDescription = ticket.description
10220
        activity.ticketPriority = ticket.priority
10223
            activity.ticketPriority = ticket.priority
10221
        activity.ticketStatus = ticket.status
10224
            activity.ticketStatus = ticket.status
10222
        
10225
            
10223
        ticket.customerId= returnTransaction.customer_id
10226
            ticket.customerId= returnTransaction.customer_id
10224
        ticket.customerEmailId = returnTransaction.customer_email
10227
            ticket.customerEmailId = returnTransaction.customer_email
10225
        ticket.customerMobileNumber = returnTransaction.customerPhone
10228
            ticket.customerMobileNumber = returnTransaction.customerPhone
10226
        ticket.customerName = returnTransaction.customer_name
10229
            ticket.customerName = returnTransaction.customer_name
10227
        activity.customerId = ticket.customerId
10230
            activity.customerId = ticket.customerId
10228
        activity.customerEmailId = returnTransaction.customer_email
10231
            activity.customerEmailId = returnTransaction.customer_email
10229
        activity.customerMobileNumber = returnTransaction.customerPhone
10232
            activity.customerMobileNumber = returnTransaction.customerPhone
10230
        activity.customerName = returnTransaction.customer_name
10233
            activity.customerName = returnTransaction.customer_name
10231
        
10234
            
10232
        crmServiceClient.insertTicket(ticket, activity)
10235
            returnTxn.ticketId = crmServiceClient.insertTicket(ticket, activity)
10233
        
10236
            
10234
    except:
10237
        except:
10235
        print "Ticket for RTO Refund is not created."
10238
            print "Ticket for RTO Refund is not created."
-
 
10239
        session.commit()
10236
    return returnTxn.id
10240
        return returnTxn.id
-
 
10241
    return 0
10237
 
10242
 
10238
def get_return_transactions_for_customer(statusList, customerMobile, customerEmail, returnTransactionId, customer_id):
10243
def get_return_transactions_for_customer(statusList, customerMobile, customerEmail, returnTransactionId, customer_id):
10239
    query = ReturnTransaction.query
10244
    query = ReturnTransaction.query
10240
    if statusList is not None and len(statusList) >0:
10245
    if statusList is not None and len(statusList) >0:
10241
        statuses = []
10246
        statuses = []
Line 10390... Line 10395...
10390
            return True
10395
            return True
10391
        else:
10396
        else:
10392
            session.commit()
10397
            session.commit()
10393
            return True
10398
            return True
10394
 
10399
 
10395
def communicate_pickup_details_to_customer(returnPickupRequest):
10400
def communicate_pickup_details_to_customer(returnPickupRequest, returnOrders):
10396
    returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all()
10401
    returnTxn = returnOrders[0].returnTransaction
10397
    subject = 'Pickup details'
10402
    subject = 'Pickup details for '+str(returnTxn.id)
10398
    filename = "/PickupDetails/" +  str(returnPickupRequest.pickupRequestNo) +".pdf" 
10403
    filename = "/PickupDetails/" +  str(returnPickupRequest.pickupRequestNo) +".pdf" 
10399
    
10404
    
10400
    try:
10405
    try:
10401
        inventory_client = InventoryClient().get_client()
10406
        inventory_client = InventoryClient().get_client()
10402
        warehouse = inventory_client.getWarehouse(returnOrders[0].warehouse_id)
10407
        warehouse = inventory_client.getWarehouse(returnOrders[0].warehouse_id)
10403
        
10408
        
10404
        logistics_client = LogisticsClient().get_client()
10409
        logistics_client = LogisticsClient().get_client()
10405
        provider = logistics_client.getProvider(returnPickupRequest.logisticsProviderId)
10410
        provider = logistics_client.getProvider(returnPickupRequest.logisticsProviderId)
10406
        provider_name = provider.name
10411
        provider_name = provider.name
10407
        
10412
        
10408
        returnTxn = returnOrders[0].returnTransaction
-
 
10409
        to_addr = returnTxn.customer_email
10413
        to_addr = returnTxn.customer_email
10410
        promised_pickup_time = returnPickupRequest.promised_pickup_timestamp.date().strftime("%d-%B-%Y (%A)")
10414
        promised_pickup_time = returnPickupRequest.promised_pickup_timestamp.date().strftime("%d-%B-%Y (%A)")
10411
        customer_address = returnTxn.customer_name +"\n" + returnTxn.customerAddress +"\n"
10415
        customer_address = returnTxn.customer_name +"\n" + returnTxn.customerAddress +"\n"
10412
        customer_address = customer_address + returnTxn.customerCity + "\n"
10416
        customer_address = customer_address + returnTxn.customerCity + "\n"
10413
        customer_address = customer_address + returnTxn.customerState + "\n"
10417
        customer_address = customer_address + returnTxn.customerState + "\n"
Line 10547... Line 10551...
10547
                else:
10551
                else:
10548
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED]
10552
                    returnOrder.returnStatus = OrderStatus._VALUES_TO_NAMES[OrderStatus.RET_PICKUP_CONFIRMED]
10549
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_SCHEDULED:
10553
        if returnPickupRequest.pickupStatus == ReturnTxnPickupStatus.PICKUP_SCHEDULED:
10550
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
10554
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[returnPickupRequest.pickupStatus]
10551
            returnPickupReq.promised_pickup_timestamp = datetime.datetime.now()+timedelta(days=2)
10555
            returnPickupReq.promised_pickup_timestamp = datetime.datetime.now()+timedelta(days=2)
-
 
10556
            returnOrdersMap = {}
-
 
10557
            returnOrders = ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all()
-
 
10558
            for returnOrder in returnOrders:
-
 
10559
                returnTxn = returnOrders[0].returnTransaction
-
 
10560
                if returnOrdersMap.has_key(returnTxn.address_id):
-
 
10561
                    retOrders = returnOrdersMap.get(returnTxn.address_id)
-
 
10562
                    retOrders.append(returnOrder)
-
 
10563
                    returnOrdersMap[returnTxn.address_id] = retOrders
-
 
10564
                else:
-
 
10565
                    retOrders = []
-
 
10566
                    retOrders.append(returnOrder)
-
 
10567
                    returnOrdersMap[returnTxn.address_id] = retOrders
-
 
10568
            for returnOrdersList in returnOrdersMap.values():
10552
            try:
10569
                try:
10553
                communicate_pickup_details_to_customer(returnPickupReq)
10570
                    communicate_pickup_details_to_customer(returnPickupReq, returnOrdersList)
10554
            except:
10571
                except:
10555
                print "Customer Communication Failed for the pickup Information"
10572
                    print "Customer Communication Failed for the pickup Information"
10556
        if returnPickupRequest.pickedUpAt:
10573
        if returnPickupRequest.pickedUpAt:
10557
            returnPickupReq.pickedUpAt = to_py_date(returnPickupRequest.pickedUpAt)
10574
            returnPickupReq.pickedUpAt = to_py_date(returnPickupRequest.pickedUpAt)
10558
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_IN_TRANSIT]
10575
            returnPickupReq.pickupStatus = ReturnTxnPickupStatus._VALUES_TO_NAMES[ReturnTxnPickupStatus.PICKUP_IN_TRANSIT]
10559
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10576
            for returnOrder in ReturnOrderInfo.query.filter(ReturnOrderInfo.logisticsRequestId==returnPickupRequest.id).all():
10560
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]:
10577
                if returnOrder.returnStatus == OrderStatus._VALUES_TO_NAMES[OrderStatus.DOA_PICKUP_CONFIRMED]:
Line 10756... Line 10773...
10756
    return orders
10773
    return orders
10757
        
10774
        
10758
def get_eligible_return_orders_for_pickup(customerId):
10775
def get_eligible_return_orders_for_pickup(customerId):
10759
    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 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()     
10760
 
10777
 
-
 
10778
def validate_return_transaction(customerId, returnOrdersMap, itemCondition, overrideWarranty):
-
 
10779
    eligibleOrders = get_eligible_orders_for_return(customerId, itemCondition, overrideWarranty)
-
 
10780
    
-
 
10781
    ordersMap = {}
-
 
10782
    for order in eligibleOrders:
-
 
10783
        ordersMap[order.id] = order.lineitems[0].quantity - order.lineitems[0].returnQty
-
 
10784
    
-
 
10785
    for orderId, returnOrderQty in returnOrdersMap.items():
-
 
10786
        if returnOrderQty > ordersMap.get(orderId):
-
 
10787
            return False
-
 
10788
    return True
-
 
10789
 
10761
if __name__ == '__main__':
10790
if __name__ == '__main__':
10762
    print get_orders_by_mobile_number("9650889334")
10791
    print get_orders_by_mobile_number("9650889334")