| Line 3676... |
Line 3676... |
| 3676 |
status_transition = refund_status_transition
|
3676 |
status_transition = refund_status_transition
|
| 3677 |
if order.status not in status_transition.keys():
|
3677 |
if order.status not in status_transition.keys():
|
| 3678 |
raise TransactionServiceException(114, "This order can't be refunded")
|
3678 |
raise TransactionServiceException(114, "This order can't be refunded")
|
| 3679 |
|
3679 |
|
| 3680 |
if order.status in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
|
3680 |
if order.status in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
|
| 3681 |
__update_inventory_reservation(order)
|
3681 |
__update_inventory_reservation(order, refund=True)
|
| 3682 |
order.statusDescription = "Order Cancelled"
|
3682 |
order.statusDescription = "Order Cancelled"
|
| 3683 |
#Shipment Id and Airway Bill No should be none in case of Cancellation
|
3683 |
#Shipment Id and Airway Bill No should be none in case of Cancellation
|
| 3684 |
order.logisticsTransactionId = None
|
3684 |
order.logisticsTransactionId = None
|
| 3685 |
order.tracking_id = None
|
3685 |
order.tracking_id = None
|
| 3686 |
order.airwaybill_no = None
|
3686 |
order.airwaybill_no = None
|
| Line 3704... |
Line 3704... |
| 3704 |
__create_return_order(order)
|
3704 |
__create_return_order(order)
|
| 3705 |
__create_refund(order)
|
3705 |
__create_refund(order)
|
| 3706 |
order.statusDescription = "Return Refunded"
|
3706 |
order.statusDescription = "Return Refunded"
|
| 3707 |
elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
|
3707 |
elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
|
| 3708 |
if order.previousStatus in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
|
3708 |
if order.previousStatus in [OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
|
| 3709 |
__update_inventory_reservation(order)
|
3709 |
__update_inventory_reservation(order, refund=True)
|
| 3710 |
order.statusDescription = "Order Cancelled on customer request"
|
3710 |
order.statusDescription = "Order Cancelled on customer request"
|
| 3711 |
elif order.previousStatus == OrderStatus.BILLED:
|
3711 |
elif order.previousStatus == OrderStatus.BILLED:
|
| 3712 |
__create_return_order(order)
|
3712 |
__create_return_order(order)
|
| 3713 |
order.statusDescription = "Order Cancelled on customer request"
|
3713 |
order.statusDescription = "Order Cancelled on customer request"
|
| 3714 |
order.received_return_timestamp = datetime.datetime.now()
|
3714 |
order.received_return_timestamp = datetime.datetime.now()
|
| Line 3809... |
Line 3809... |
| 3809 |
if order.status != OrderStatus.RET_LOST_IN_TRANSIT:
|
3809 |
if order.status != OrderStatus.RET_LOST_IN_TRANSIT:
|
| 3810 |
__create_return_order(order)
|
3810 |
__create_return_order(order)
|
| 3811 |
__create_refund(order)
|
3811 |
__create_refund(order)
|
| 3812 |
order.statusDescription = "Return Refunded"
|
3812 |
order.statusDescription = "Return Refunded"
|
| 3813 |
elif order.status in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
|
3813 |
elif order.status in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED]:
|
| 3814 |
__update_inventory_reservation(order)
|
3814 |
__update_inventory_reservation(order, refund=True)
|
| 3815 |
order.statusDescription = "Order Refunded"
|
3815 |
order.statusDescription = "Order Refunded"
|
| 3816 |
elif order.status == OrderStatus.BILLED:
|
3816 |
elif order.status == OrderStatus.BILLED:
|
| 3817 |
if order.source == OrderSource.SNAPDEAL or order.source == OrderSource.EBAY or order.source == OrderSource.FLIPKART or order.source == OrderSource.HOMESHOP18:
|
3817 |
if order.source == OrderSource.SNAPDEAL or order.source == OrderSource.EBAY or order.source == OrderSource.FLIPKART or order.source == OrderSource.HOMESHOP18:
|
| 3818 |
order.statusDescription = "Order Cancelled"
|
3818 |
order.statusDescription = "Order Cancelled"
|
| 3819 |
order.received_return_timestamp = datetime.datetime.now()
|
3819 |
order.received_return_timestamp = datetime.datetime.now()
|
| 3820 |
elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
|
3820 |
elif order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED:
|
| 3821 |
if order.previousStatus in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.PAYMENT_FLAGGED, OrderStatus.ACCEPTED]:
|
3821 |
if order.previousStatus in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.PAYMENT_FLAGGED, OrderStatus.ACCEPTED]:
|
| 3822 |
if order.previousStatus == OrderStatus.ACCEPTED:
|
3822 |
if order.previousStatus == OrderStatus.ACCEPTED:
|
| 3823 |
__create_refund(order)
|
3823 |
__create_refund(order)
|
| 3824 |
__update_inventory_reservation(order)
|
3824 |
__update_inventory_reservation(order, refund=True)
|
| 3825 |
order.statusDescription = "Order Cancelled on customer request"
|
3825 |
order.statusDescription = "Order Cancelled on customer request"
|
| 3826 |
elif order.previousStatus == OrderStatus.BILLED:
|
3826 |
elif order.previousStatus == OrderStatus.BILLED:
|
| 3827 |
__create_return_order(order)
|
3827 |
__create_return_order(order)
|
| 3828 |
__create_refund(order)
|
3828 |
__create_refund(order)
|
| 3829 |
order.statusDescription = "Order Cancelled on customer request"
|
3829 |
order.statusDescription = "Order Cancelled on customer request"
|
| 3830 |
order.received_return_timestamp = datetime.datetime.now()
|
3830 |
order.received_return_timestamp = datetime.datetime.now()
|
| 3831 |
|
3831 |
|
| 3832 |
elif order.status == OrderStatus.PAYMENT_FLAGGED:
|
3832 |
elif order.status == OrderStatus.PAYMENT_FLAGGED:
|
| 3833 |
__update_inventory_reservation(order)
|
3833 |
__update_inventory_reservation(order, refund=True)
|
| 3834 |
order.statusDescription = "Order Cancelled due to payment flagged"
|
3834 |
order.statusDescription = "Order Cancelled due to payment flagged"
|
| 3835 |
|
3835 |
|
| 3836 |
if order.transaction.payment_option == capitalFloatPayMethod and order.status in [OrderStatus.PAYMENT_FLAGGED, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED, OrderStatus.CANCEL_REQUEST_CONFIRMED]:
|
3836 |
if order.transaction.payment_option == capitalFloatPayMethod and order.status in [OrderStatus.PAYMENT_FLAGGED, OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.ACCEPTED, OrderStatus.CANCEL_REQUEST_CONFIRMED]:
|
| 3837 |
total_amount = order.total_amount + order.shippingCost - order.gvAmount
|
3837 |
total_amount = order.total_amount + order.shippingCost - order.gvAmount
|
| 3838 |
shipping_id = str(order.id)
|
3838 |
shipping_id = str(order.id)
|
| Line 3902... |
Line 3902... |
| 3902 |
order.status = status_transition[order.status]
|
3902 |
order.status = status_transition[order.status]
|
| 3903 |
order.refund_timestamp = datetime.datetime.now()
|
3903 |
order.refund_timestamp = datetime.datetime.now()
|
| 3904 |
order.refunded_by = refunded_by
|
3904 |
order.refunded_by = refunded_by
|
| 3905 |
order.refund_reason = reason
|
3905 |
order.refund_reason = reason
|
| 3906 |
#to re evaluate the shipping charge if any order is being cancelled.
|
3906 |
#to re evaluate the shipping charge if any order is being cancelled.
|
| 3907 |
_revaluate_shiping(order_id)
|
3907 |
#_revaluate_shiping(order_id)
|
| 3908 |
session.commit()
|
3908 |
session.commit()
|
| 3909 |
return True
|
3909 |
return True
|
| 3910 |
|
3910 |
|
| 3911 |
def _revaluate_shiping(orderId):
|
3911 |
def _revaluate_shiping(orderId):
|
| 3912 |
orders = Order.get_by(id = orderId)
|
3912 |
orders = Order.get_by(id = orderId)
|
| Line 3942... |
Line 3942... |
| 3942 |
if diff>0:
|
3942 |
if diff>0:
|
| 3943 |
shipUpdateOrder.shippingCost = shipUpdateOrder.shippingCost + diff
|
3943 |
shipUpdateOrder.shippingCost = shipUpdateOrder.shippingCost + diff
|
| 3944 |
|
3944 |
|
| 3945 |
|
3945 |
|
| 3946 |
|
3946 |
|
| 3947 |
def __update_inventory_reservation(order):
|
3947 |
def __update_inventory_reservation(order, refund=False):
|
| 3948 |
'''
|
3948 |
'''
|
| 3949 |
Reduce the reservation count for all line items of the given order.
|
3949 |
Reduce the reservation count for all line items of the given order.
|
| 3950 |
'''
|
3950 |
'''
|
| - |
|
3951 |
|
| - |
|
3952 |
if refund:
|
| - |
|
3953 |
if order.wallet_amount > 0:
|
| - |
|
3954 |
refund_to_wallet(order.customer_id, order.wallet_amount, order.transaction.id, WalletReferenceType.PURCHASE, "Refunded angainst cancellation of Order Id -" + order.id)
|
| - |
|
3955 |
if order.cod == False and order.status == OrderStatus.PAYMENT_FLAGGED_DENIED:
|
| - |
|
3956 |
order.net
|
| 3951 |
try:
|
3957 |
try:
|
| 3952 |
inventoryClient = InventoryClient().get_client()
|
3958 |
inventoryClient = InventoryClient().get_client()
|
| 3953 |
for lineitem in order.lineitems:
|
3959 |
for lineitem in order.lineitems:
|
| 3954 |
inventoryClient.reduceReservationCount(lineitem.item_id, order.fulfilmentWarehouseId, sourceId, order.id, lineitem.quantity)
|
3960 |
inventoryClient.reduceReservationCount(lineitem.item_id, order.fulfilmentWarehouseId, sourceId, order.id, lineitem.quantity)
|
| 3955 |
except:
|
3961 |
except:
|
| Line 4148... |
Line 4154... |
| 4148 |
def __create_return_order(order):
|
4154 |
def __create_return_order(order):
|
| 4149 |
ret_order = ReturnOrder(order)
|
4155 |
ret_order = ReturnOrder(order)
|
| 4150 |
return ret_order
|
4156 |
return ret_order
|
| 4151 |
|
4157 |
|
| 4152 |
def __create_refund(order):
|
4158 |
def __create_refund(order):
|
| - |
|
4159 |
if order.net_payable_amount > 0:
|
| 4153 |
payment_client = PaymentClient().get_client()
|
4160 |
payment_client = PaymentClient().get_client()
|
| 4154 |
payment_client.createRefund(order.id, order.transaction.id, order.total_amount)
|
4161 |
payment_client.createRefund(order.id, order.transaction.id, order.net_payable_amount)
|
| 4155 |
return
|
4162 |
return
|
| 4156 |
|
4163 |
|
| 4157 |
def __get_order_address(order):
|
4164 |
def __get_order_address(order):
|
| 4158 |
address = order.customer_name + "\n" + order.customer_address1 + "\n"
|
4165 |
address = order.customer_name + "\n" + order.customer_address1 + "\n"
|
| 4159 |
if order.customer_address2:
|
4166 |
if order.customer_address2:
|
| Line 5888... |
Line 5895... |
| 5888 |
totalSuccessfulRechargeAmount = session.query(func.sum(RechargeOrder.totalAmount)).filter(RechargeOrder.status == 5).filter(RechargeOrder.ipAddress == clientAddress).filter(RechargeOrder.creationTimestamp > limittime).scalar()
|
5895 |
totalSuccessfulRechargeAmount = session.query(func.sum(RechargeOrder.totalAmount)).filter(RechargeOrder.status == 5).filter(RechargeOrder.ipAddress == clientAddress).filter(RechargeOrder.creationTimestamp > limittime).scalar()
|
| 5889 |
return totalSuccessfulRechargeAmount
|
5896 |
return totalSuccessfulRechargeAmount
|
| 5890 |
|
5897 |
|
| 5891 |
|
5898 |
|
| 5892 |
|
5899 |
|
| - |
|
5900 |
|
| - |
|
5901 |
def refund_to_wallet(userId, amount, reference, reference_type, description='Refunded to wallet', commit_session=False):
|
| - |
|
5902 |
"""
|
| - |
|
5903 |
Commit to be decided by caller
|
| - |
|
5904 |
"""
|
| - |
|
5905 |
if amount <= 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
|
| - |
|
5906 |
return False
|
| - |
|
5907 |
|
| - |
|
5908 |
all_entries = UserWalletHistory.query.filter_by(reference = reference).filter_by(reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)).all()
|
| - |
|
5909 |
creditable_amount_for_reference = 0
|
| - |
|
5910 |
refundable_amount_for_reference = 0
|
| - |
|
5911 |
for history in all_entries:
|
| - |
|
5912 |
creditable_amount_for_reference -= history.amount
|
| - |
|
5913 |
refundable_amount_for_reference -= history.refundable_amount
|
| - |
|
5914 |
#Refundable amount for reference should be greater than the refund amount
|
| - |
|
5915 |
if creditable_amount_for_reference < amount:
|
| - |
|
5916 |
print 'Cant be credited back to wallet as most of it has been already credited'
|
| - |
|
5917 |
return False
|
| - |
|
5918 |
|
| - |
|
5919 |
wallet = get_user_wallet(userId)
|
| - |
|
5920 |
wallet.amount = wallet.amount + amount
|
| - |
|
5921 |
refundable_amount = 0
|
| - |
|
5922 |
if creditable_amount_for_reference - refundable_amount_for_reference < amount:
|
| - |
|
5923 |
refundable_amount = amount - (creditable_amount_for_reference - refundable_amount_for_reference)
|
| - |
|
5924 |
wallet.refundable_amount = wallet.refundable_amount + refundable_amount
|
| - |
|
5925 |
|
| - |
|
5926 |
history = UserWalletHistory()
|
| - |
|
5927 |
history.amount = amount
|
| - |
|
5928 |
history.refundable_amount = refundable_amount
|
| - |
|
5929 |
history.reference = reference
|
| - |
|
5930 |
history.reference_type = WalletReferenceType._VALUES_TO_NAMES.get(reference_type)
|
| - |
|
5931 |
history.wallet = wallet
|
| - |
|
5932 |
history.timestamp = datetime.datetime.now()
|
| - |
|
5933 |
history.description = description
|
| - |
|
5934 |
if commit_session:
|
| - |
|
5935 |
session.commit()
|
| - |
|
5936 |
|
| 5893 |
def add_amount_in_wallet(userId, amount, reference, reference_type, isPromotional, description=None, commit_session=False):
|
5937 |
def add_amount_in_wallet(userId, amount, reference, reference_type, isPromotional, description=None, commit_session=False):
|
| 5894 |
"""
|
5938 |
"""
|
| 5895 |
Commit to be decided by caller
|
5939 |
Commit to be decided by caller
|
| 5896 |
"""
|
5940 |
"""
|
| 5897 |
if not amount > 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
|
5941 |
if not amount > 0 or WalletReferenceType._VALUES_TO_NAMES.get(reference_type) is None:
|