| 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")
|