| Line 4... |
Line 4... |
| 4 |
@author: Chandranshu
|
4 |
@author: Chandranshu
|
| 5 |
'''
|
5 |
'''
|
| 6 |
|
6 |
|
| 7 |
from datetime import date, timedelta
|
7 |
from datetime import date, timedelta
|
| 8 |
from elixir import *
|
8 |
from elixir import *
|
| - |
|
9 |
from random import randrange
|
| 9 |
from reportlab.lib.units import inch
|
10 |
from reportlab.lib.units import inch
|
| 10 |
from reportlab.pdfgen.canvas import Canvas
|
11 |
from reportlab.pdfgen.canvas import Canvas
|
| 11 |
from reportlab.rl_config import defaultPageSize
|
12 |
from reportlab.rl_config import defaultPageSize
|
| - |
|
13 |
from shop2020.clients.AlertClient import AlertClient
|
| 12 |
from shop2020.clients.CatalogClient import CatalogClient
|
14 |
from shop2020.clients.CatalogClient import CatalogClient
|
| 13 |
from shop2020.clients.HelperClient import HelperClient
|
15 |
from shop2020.clients.HelperClient import HelperClient
|
| - |
|
16 |
from shop2020.clients.InventoryClient import InventoryClient
|
| 14 |
from shop2020.clients.LogisticsClient import LogisticsClient
|
17 |
from shop2020.clients.LogisticsClient import LogisticsClient
|
| 15 |
from shop2020.clients.PaymentClient import PaymentClient
|
18 |
from shop2020.clients.PaymentClient import PaymentClient
|
| 16 |
from shop2020.clients.UserClient import UserClient
|
19 |
from shop2020.clients.UserClient import UserClient
|
| 17 |
from shop2020.clients.WarehouseClient import WarehouseClient
|
20 |
from shop2020.clients.WarehouseClient import WarehouseClient
|
| 18 |
from shop2020.model.v1 import order
|
21 |
from shop2020.model.v1 import order
|
| 19 |
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem, \
|
22 |
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem, \
|
| 20 |
Order, BatchNoGenerator, InvoiceIDGenerator, TransactionRequiringExtraProcessing, \
|
23 |
Order, BatchNoGenerator, InvoiceIDGenerator, TransactionRequiringExtraProcessing, \
|
| 21 |
OrderInventory, Alert, PaymentSettlement, EBSSettlementSummary, \
|
24 |
OrderInventory, Alert, PaymentSettlement, EBSSettlementSummary, \
|
| 22 |
CodVerificationAgent, Attribute, RechargeVoucherTracker
|
25 |
CodVerificationAgent, Attribute, RechargeVoucherTracker
|
| 23 |
|
- |
|
| 24 |
from shop2020.model.v1.order.impl.model.ReturnOrder import ReturnOrder
|
26 |
from shop2020.model.v1.order.impl.model.ReturnOrder import ReturnOrder
|
| 25 |
from shop2020.thriftpy.generic.ttypes import ExceptionType
|
- |
|
| 26 |
from shop2020.thriftpy.alert.ttypes import MonitoredEntity, EntityType
|
27 |
from shop2020.thriftpy.alert.ttypes import MonitoredEntity, EntityType
|
| - |
|
28 |
from shop2020.thriftpy.generic.ttypes import ExceptionType
|
| 27 |
from shop2020.thriftpy.logistics.ttypes import DeliveryType, PickUpType
|
29 |
from shop2020.thriftpy.logistics.ttypes import DeliveryType, PickUpType
|
| 28 |
from shop2020.thriftpy.model.v1.catalog.ttypes import BillingType, \
|
30 |
from shop2020.thriftpy.model.v1.inventory.ttypes import BillingType, \
|
| 29 |
InventoryServiceException, WarehouseType, ItemType, InventoryType
|
31 |
InventoryServiceException, WarehouseType, InventoryType
|
| - |
|
32 |
from shop2020.thriftpy.model.v1.catalog.ttypes import ItemType
|
| 30 |
from shop2020.thriftpy.model.v1.order.ttypes import TransactionServiceException, \
|
33 |
from shop2020.thriftpy.model.v1.order.ttypes import TransactionServiceException, \
|
| 31 |
TransactionStatus, OrderStatus, DelayReason, ExtraTransactionProcessingType, \
|
34 |
TransactionStatus, OrderStatus, DelayReason, ExtraTransactionProcessingType, \
|
| 32 |
HotspotAction, TimeoutSummary, OrderStatusGroups, OrderType
|
35 |
HotspotAction, TimeoutSummary, OrderStatusGroups, OrderType
|
| - |
|
36 |
from shop2020.thriftpy.model.v1.user.ttypes import VoucherType
|
| 33 |
from shop2020.thriftpy.payments.ttypes import PaymentException
|
37 |
from shop2020.thriftpy.payments.ttypes import PaymentException
|
| 34 |
from shop2020.thriftpy.warehouse.ttypes import ScanType, \
|
38 |
from shop2020.thriftpy.warehouse.ttypes import ScanType, \
|
| 35 |
WarehouseServiceException
|
39 |
WarehouseServiceException
|
| 36 |
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part,\
|
40 |
from shop2020.utils.EmailAttachmentSender import mail, get_attachment_part, \
|
| 37 |
mail_html
|
41 |
mail_html
|
| 38 |
from shop2020.utils.Utils import to_py_date, to_java_date
|
42 |
from shop2020.utils.Utils import to_py_date, to_java_date
|
| 39 |
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
|
43 |
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
|
| 40 |
from sqlalchemy.sql import func
|
44 |
from sqlalchemy.sql import func
|
| 41 |
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, select
|
45 |
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, select
|
| 42 |
from string import Template
|
46 |
from string import Template
|
| 43 |
from textwrap import dedent
|
47 |
from textwrap import dedent
|
| 44 |
import datetime
|
48 |
import datetime
|
| - |
|
49 |
import httplib
|
| 45 |
import logging
|
50 |
import logging
|
| 46 |
import os
|
51 |
import os
|
| 47 |
import sys
|
52 |
import sys
|
| 48 |
import time
|
53 |
import time
|
| 49 |
import traceback
|
54 |
import traceback
|
| 50 |
from shop2020.thriftpy.model.v1.user.ttypes import VoucherType
|
- |
|
| 51 |
from random import randrange
|
- |
|
| 52 |
from shop2020.clients.AlertClient import AlertClient
|
- |
|
| 53 |
import httplib
|
- |
|
| 54 |
import urllib
|
55 |
import urllib
|
| - |
|
56 |
|
| 55 |
logging.basicConfig(level=logging.DEBUG)
|
57 |
logging.basicConfig(level=logging.DEBUG)
|
| 56 |
|
58 |
|
| 57 |
|
59 |
|
| 58 |
PREPAID_SHIPPING_CUTOFF_TIME = 15
|
60 |
PREPAID_SHIPPING_CUTOFF_TIME = 15
|
| 59 |
COD_SHIPPING_CUTOFF_TIME = 12
|
61 |
COD_SHIPPING_CUTOFF_TIME = 12
|
| Line 245... |
Line 247... |
| 245 |
order.expected_shipping_time = (current_time + datetime.timedelta(days=logistics_info.shippingTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
247 |
order.expected_shipping_time = (current_time + datetime.timedelta(days=logistics_info.shippingTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
| 246 |
order.promised_shipping_time = order.expected_shipping_time
|
248 |
order.promised_shipping_time = order.expected_shipping_time
|
| 247 |
order.expected_delivery_time = (current_time + datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
249 |
order.expected_delivery_time = (current_time + datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
| 248 |
order.promised_delivery_time = order.expected_delivery_time
|
250 |
order.promised_delivery_time = order.expected_delivery_time
|
| 249 |
|
251 |
|
| 250 |
catalog_client = CatalogClient().get_client()
|
252 |
inventory_client = InventoryClient().get_client()
|
| 251 |
catalog_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, order.lineitems[0].quantity)
|
253 |
inventory_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, order.lineitems[0].quantity)
|
| 252 |
|
254 |
|
| 253 |
try:
|
255 |
try:
|
| 254 |
item_pricing = catalog_client.getItemPricing(item_id, -1)
|
256 |
item_pricing = inventory_client.getItemPricing(item_id, -1)
|
| 255 |
order.lineitems[0].transfer_price = item_pricing.transferPrice
|
257 |
order.lineitems[0].transfer_price = item_pricing.transferPrice
|
| 256 |
except:
|
258 |
except:
|
| 257 |
print "Not able to get transfer price. Skipping"
|
259 |
print "Not able to get transfer price. Skipping"
|
| 258 |
|
260 |
|
| - |
|
261 |
catalog_client = CatalogClient().get_client()
|
| 259 |
voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)
|
262 |
voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)
|
| 260 |
if voucherAmount:
|
263 |
if voucherAmount:
|
| 261 |
__create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)
|
264 |
__create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)
|
| 262 |
|
265 |
|
| 263 |
elif new_status == TransactionStatus.COD_IN_PROCESS:
|
266 |
elif new_status == TransactionStatus.COD_IN_PROCESS:
|
| Line 291... |
Line 294... |
| 291 |
order.expected_shipping_time = (current_time + datetime.timedelta(days=logistics_info.shippingTime)).replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
294 |
order.expected_shipping_time = (current_time + datetime.timedelta(days=logistics_info.shippingTime)).replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
| 292 |
order.promised_shipping_time = order.expected_shipping_time
|
295 |
order.promised_shipping_time = order.expected_shipping_time
|
| 293 |
order.expected_delivery_time = (current_time + datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
296 |
order.expected_delivery_time = (current_time + datetime.timedelta(days=logistics_info.deliveryTime)).replace(hour=COD_SHIPPING_CUTOFF_TIME, minute=0, second=0)
|
| 294 |
order.promised_delivery_time = order.expected_delivery_time
|
297 |
order.promised_delivery_time = order.expected_delivery_time
|
| 295 |
|
298 |
|
| 296 |
catalog_client = CatalogClient().get_client()
|
299 |
inventory_client = InventoryClient().get_client()
|
| 297 |
catalog_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, order.lineitems[0].quantity)
|
300 |
inventory_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, order.lineitems[0].quantity)
|
| 298 |
|
301 |
|
| 299 |
try:
|
302 |
try:
|
| 300 |
item_pricing = catalog_client.getItemPricing(item_id, -1)
|
303 |
item_pricing = inventory_client.getItemPricing(item_id, -1)
|
| 301 |
order.lineitems[0].transfer_price = item_pricing.transferPrice
|
304 |
order.lineitems[0].transfer_price = item_pricing.transferPrice
|
| 302 |
except:
|
305 |
except:
|
| 303 |
print "Not able to get transfer price. Skipping"
|
306 |
print "Not able to get transfer price. Skipping"
|
| 304 |
|
307 |
|
| - |
|
308 |
catalog_client = CatalogClient().get_client()
|
| 305 |
voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)
|
309 |
voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)
|
| 306 |
if voucherAmount:
|
310 |
if voucherAmount:
|
| 307 |
__create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)
|
311 |
__create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)
|
| 308 |
session.commit()
|
312 |
session.commit()
|
| 309 |
|
313 |
|
| Line 951... |
Line 955... |
| 951 |
else:
|
955 |
else:
|
| 952 |
raise TransactionServiceException(115, "Payment capture failed.")
|
956 |
raise TransactionServiceException(115, "Payment capture failed.")
|
| 953 |
|
957 |
|
| 954 |
def __amend_fulfilment_warehouse(order):
|
958 |
def __amend_fulfilment_warehouse(order):
|
| 955 |
itemId = order.lineitems[0].item_id
|
959 |
itemId = order.lineitems[0].item_id
|
| 956 |
catalogClient = CatalogClient().get_client()
|
960 |
inventoryClient = InventoryClient().get_client()
|
| 957 |
inventory = catalogClient.getItemInventoryByItemId(itemId)
|
961 |
inventory = inventoryClient.getItemInventoryByItemId(itemId)
|
| 958 |
if not (inventory.availability.has_key(order.fulfilmentWarehouseId) and inventory.availability[order.fulfilmentWarehouseId]):
|
962 |
if not (inventory.availability.has_key(order.fulfilmentWarehouseId) and inventory.availability[order.fulfilmentWarehouseId]):
|
| 959 |
for warehouse in catalogClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, order.warehouse_id, 0):
|
963 |
for warehouse in inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, order.warehouse_id, 0):
|
| 960 |
if inventory.availability.has_key(warehouse.id) and inventory.availability[warehouse.id] >= inventory.reserved[warehouse.id] + order.lineitems[0].quantity:
|
964 |
if inventory.availability.has_key(warehouse.id) and inventory.availability[warehouse.id] >= inventory.reserved[warehouse.id] + order.lineitems[0].quantity:
|
| 961 |
catalogClient.reduceReservationCount(itemId, order.fulfilmentWarehouseId, order.lineitems[0].quantity)
|
965 |
inventoryClient.reduceReservationCount(itemId, order.fulfilmentWarehouseId, order.lineitems[0].quantity)
|
| 962 |
catalogClient.reserveItemInWarehouse(itemId, warehouse.id, order.lineitems[0].quantity)
|
966 |
inventoryClient.reserveItemInWarehouse(itemId, warehouse.id, order.lineitems[0].quantity)
|
| 963 |
order.fulfilmentWarehouseId = warehouse.id
|
967 |
order.fulfilmentWarehouseId = warehouse.id
|
| 964 |
break
|
968 |
break
|
| 965 |
|
969 |
|
| 966 |
def add_billing_details(orderId, invoice_number, serialNumbers, itemNumbers, billedBy, jacketNumber, billingType, fulfilmentWarehouseId, authorize):
|
970 |
def add_billing_details(orderId, invoice_number, serialNumbers, itemNumbers, billedBy, jacketNumber, billingType, fulfilmentWarehouseId, authorize):
|
| 967 |
if jacketNumber is None or jacketNumber <= 0:
|
971 |
if jacketNumber is None or jacketNumber <= 0:
|
| Line 1007... |
Line 1011... |
| 1007 |
order.billed_by = billedBy
|
1011 |
order.billed_by = billedBy
|
| 1008 |
|
1012 |
|
| 1009 |
# Letting the billing process fail in cases where we are unable to
|
1013 |
# Letting the billing process fail in cases where we are unable to
|
| 1010 |
# fill in transfer price
|
1014 |
# fill in transfer price
|
| 1011 |
try:
|
1015 |
try:
|
| 1012 |
catalog_client = CatalogClient().get_client()
|
1016 |
inventory_client = InventoryClient().get_client()
|
| 1013 |
warehouse = catalog_client.getWarehouse(fulfilmentWarehouseId)
|
1017 |
warehouse = inventory_client.getWarehouse(fulfilmentWarehouseId)
|
| 1014 |
item_pricing = catalog_client.getItemPricing(item_id, warehouse.vendor.id)
|
1018 |
item_pricing = inventory_client.getItemPricing(item_id, warehouse.vendor.id)
|
| 1015 |
lineitem.transfer_price = item_pricing.transferPrice
|
1019 |
lineitem.transfer_price = item_pricing.transferPrice
|
| 1016 |
order.vendorId = warehouse.vendor.id
|
1020 |
order.vendorId = warehouse.vendor.id
|
| 1017 |
except InventoryServiceException as e:
|
1021 |
except InventoryServiceException as e:
|
| 1018 |
print sys.exc_info()[0]
|
1022 |
print sys.exc_info()[0]
|
| 1019 |
print e.message
|
1023 |
print e.message
|
| Line 1052... |
Line 1056... |
| 1052 |
print sys.exc_info()[0]
|
1056 |
print sys.exc_info()[0]
|
| 1053 |
print 'Could not scan out orders due to: ' + e.message
|
1057 |
print 'Could not scan out orders due to: ' + e.message
|
| 1054 |
raise TransactionServiceException(110, e.message)
|
1058 |
raise TransactionServiceException(110, e.message)
|
| 1055 |
else:
|
1059 |
else:
|
| 1056 |
if not warehouse.isAvailabilityMonitored:
|
1060 |
if not warehouse.isAvailabilityMonitored:
|
| 1057 |
catalog_client = CatalogClient().get_client()
|
1061 |
inventory_client = InventoryClient().get_client()
|
| 1058 |
catalog_client.addInventory(item.id, warehouse.id, -1 * lineitem.quantity)
|
1062 |
inventory_client.addInventory(item.id, warehouse.id, -1 * lineitem.quantity)
|
| 1059 |
|
1063 |
|
| 1060 |
__update_inventory_reservation(order)
|
1064 |
__update_inventory_reservation(order)
|
| 1061 |
order.fulfilmentWarehouseId = warehouse.id
|
1065 |
order.fulfilmentWarehouseId = warehouse.id
|
| 1062 |
session.commit()
|
1066 |
session.commit()
|
| 1063 |
return True
|
1067 |
return True
|
| Line 1648... |
Line 1652... |
| 1648 |
from_user = 'cnc.center@shop2020.in'
|
1652 |
from_user = 'cnc.center@shop2020.in'
|
| 1649 |
from_pwd = '5h0p2o2o'
|
1653 |
from_pwd = '5h0p2o2o'
|
| 1650 |
|
1654 |
|
| 1651 |
subject = "Pickup request from " + order.customer_city
|
1655 |
subject = "Pickup request from " + order.customer_city
|
| 1652 |
try:
|
1656 |
try:
|
| 1653 |
catalog_client = CatalogClient().get_client()
|
1657 |
inventory_client = InventoryClient().get_client()
|
| 1654 |
warehouse = catalog_client.getWarehouse(order.warehouse_id)
|
1658 |
warehouse = inventory_client.getWarehouse(order.warehouse_id)
|
| 1655 |
|
1659 |
|
| 1656 |
logistics_client = LogisticsClient().get_client()
|
1660 |
logistics_client = LogisticsClient().get_client()
|
| 1657 |
provider = logistics_client.getProvider(providerId)
|
1661 |
provider = logistics_client.getProvider(providerId)
|
| 1658 |
to_addr = provider.details[DeliveryType.PREPAID].email
|
1662 |
to_addr = provider.details[DeliveryType.PREPAID].email
|
| 1659 |
raw_message = '''
|
1663 |
raw_message = '''
|
| Line 1715... |
Line 1719... |
| 1715 |
from_user = 'help@shop2020.in'
|
1719 |
from_user = 'help@shop2020.in'
|
| 1716 |
from_pwd = '5h0p2o2o'
|
1720 |
from_pwd = '5h0p2o2o'
|
| 1717 |
subject = 'Pickup details'
|
1721 |
subject = 'Pickup details'
|
| 1718 |
filename = "/tmp/" + str(order.id) +".pdf"
|
1722 |
filename = "/tmp/" + str(order.id) +".pdf"
|
| 1719 |
try:
|
1723 |
try:
|
| 1720 |
catalog_client = CatalogClient().get_client()
|
1724 |
inventory_client = InventoryClient().get_client()
|
| 1721 |
warehouse = catalog_client.getWarehouse(order.warehouse_id)
|
1725 |
warehouse = inventory_client.getWarehouse(order.warehouse_id)
|
| 1722 |
|
1726 |
|
| 1723 |
logistics_client = LogisticsClient().get_client()
|
1727 |
logistics_client = LogisticsClient().get_client()
|
| 1724 |
provider = logistics_client.getProvider(providerId)
|
1728 |
provider = logistics_client.getProvider(providerId)
|
| 1725 |
provider_name = provider.name
|
1729 |
provider_name = provider.name
|
| 1726 |
|
1730 |
|
| Line 1872... |
Line 1876... |
| 1872 |
order.received_return_timestamp = datetime.datetime.now()
|
1876 |
order.received_return_timestamp = datetime.datetime.now()
|
| 1873 |
else:
|
1877 |
else:
|
| 1874 |
return False
|
1878 |
return False
|
| 1875 |
|
1879 |
|
| 1876 |
# For OUR warehouses, we need to scan in items for every return
|
1880 |
# For OUR warehouses, we need to scan in items for every return
|
| 1877 |
catalogClient = CatalogClient().get_client()
|
1881 |
inventoryClient = InventoryClient().get_client()
|
| 1878 |
warehouse = catalogClient.getWarehouse(order.warehouse_id)
|
1882 |
warehouse = inventoryClient.getWarehouse(order.warehouse_id)
|
| 1879 |
if warehouse.billingType == BillingType.OURS:
|
1883 |
if warehouse.billingType == BillingType.OURS:
|
| 1880 |
scanMap = {
|
1884 |
scanMap = {
|
| 1881 |
OrderStatus.RTO_RECEIVED_PRESTINE : ScanType.SALE_RET,
|
1885 |
OrderStatus.RTO_RECEIVED_PRESTINE : ScanType.SALE_RET,
|
| 1882 |
OrderStatus.RTO_RECEIVED_DAMAGED : ScanType.SALE_RET_UNUSABLE,
|
1886 |
OrderStatus.RTO_RECEIVED_DAMAGED : ScanType.SALE_RET_UNUSABLE,
|
| 1883 |
OrderStatus.RTO_LOST_IN_TRANSIT : ScanType.LOST_IN_TRANSIT,
|
1887 |
OrderStatus.RTO_LOST_IN_TRANSIT : ScanType.LOST_IN_TRANSIT,
|
| Line 1887... |
Line 1891... |
| 1887 |
}
|
1891 |
}
|
| 1888 |
|
1892 |
|
| 1889 |
if scanMap.has_key(order.status):
|
1893 |
if scanMap.has_key(order.status):
|
| 1890 |
scanType = scanMap[order.status]
|
1894 |
scanType = scanMap[order.status]
|
| 1891 |
lineitem = order.lineitems[0]
|
1895 |
lineitem = order.lineitems[0]
|
| - |
|
1896 |
catalogClient = CatalogClient().get_client()
|
| 1892 |
item = catalogClient.getItem(lineitem.item_id)
|
1897 |
item = catalogClient.getItem(lineitem.item_id)
|
| 1893 |
warehouseClient = WarehouseClient().get_client()
|
1898 |
warehouseClient = WarehouseClient().get_client()
|
| 1894 |
if item.type == ItemType.SERIALIZED:
|
1899 |
if item.type == ItemType.SERIALIZED:
|
| 1895 |
warehouseClient.scanSerializedItemForOrder(lineitem.serial_number, scanType, order.id, order.fulfilmentWarehouseId, lineitem.quantity, order.warehouse_id)
|
1900 |
warehouseClient.scanSerializedItemForOrder(lineitem.serial_number, scanType, order.id, order.fulfilmentWarehouseId, lineitem.quantity, order.warehouse_id)
|
| 1896 |
else:
|
1901 |
else:
|
| Line 1928... |
Line 1933... |
| 1928 |
order.statusDescription = "Return product unusable"
|
1933 |
order.statusDescription = "Return product unusable"
|
| 1929 |
update_trust_level(order)
|
1934 |
update_trust_level(order)
|
| 1930 |
session.commit()
|
1935 |
session.commit()
|
| 1931 |
|
1936 |
|
| 1932 |
# For OUR warehouses, we need to scan in items for every return
|
1937 |
# For OUR warehouses, we need to scan in items for every return
|
| 1933 |
catalogClient = CatalogClient().get_client()
|
1938 |
inventoryClient = InventoryClient().get_client()
|
| 1934 |
warehouse = catalogClient.getWarehouse(order.warehouse_id)
|
1939 |
warehouse = inventoryClient.getWarehouse(order.warehouse_id)
|
| 1935 |
if warehouse.billingType == BillingType.OURS:
|
1940 |
if warehouse.billingType == BillingType.OURS:
|
| 1936 |
lineitem = order.lineitems[0]
|
1941 |
lineitem = order.lineitems[0]
|
| - |
|
1942 |
catalogClient = CatalogClient().get_client()
|
| 1937 |
item = catalogClient.getItem(lineitem.item_id)
|
1943 |
item = catalogClient.getItem(lineitem.item_id)
|
| 1938 |
warehouse_client = WarehouseClient().get_client()
|
1944 |
warehouse_client = WarehouseClient().get_client()
|
| 1939 |
if item.type == ItemType.SERIALIZED:
|
1945 |
if item.type == ItemType.SERIALIZED:
|
| 1940 |
warehouse_client.scanSerializedItemForOrder(lineitem.serial_number, scanType, order.id, order.fulfilmentWarehouseId, lineitem.quantity, order.warehouse_id)
|
1946 |
warehouse_client.scanSerializedItemForOrder(lineitem.serial_number, scanType, order.id, order.fulfilmentWarehouseId, lineitem.quantity, order.warehouse_id)
|
| 1941 |
else:
|
1947 |
else:
|
| Line 2188... |
Line 2194... |
| 2188 |
__update_inventory_reservation(order)
|
2194 |
__update_inventory_reservation(order)
|
| 2189 |
order.statusDescription = "Order Cancelled due to payment flagged"
|
2195 |
order.statusDescription = "Order Cancelled due to payment flagged"
|
| 2190 |
|
2196 |
|
| 2191 |
# For orders that are cancelled after being billed, we need to scan in the scanned out
|
2197 |
# For orders that are cancelled after being billed, we need to scan in the scanned out
|
| 2192 |
# inventory item and change availability accordingly
|
2198 |
# inventory item and change availability accordingly
|
| 2193 |
catalogClient = CatalogClient().get_client()
|
2199 |
inventoryClient = InventoryClient().get_client()
|
| 2194 |
warehouse = catalogClient.getWarehouse(order.warehouse_id)
|
2200 |
warehouse = inventoryClient.getWarehouse(order.warehouse_id)
|
| 2195 |
if warehouse.billingType == BillingType.OURS:
|
2201 |
if warehouse.billingType == BillingType.OURS:
|
| 2196 |
if order.status in [OrderStatus.BILLED, OrderStatus.SHIPPED_TO_LOGST, OrderStatus.SHIPPED_FROM_WH] or (order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED and order.previousStatus in [OrderStatus.BILLED, OrderStatus.SHIPPED_TO_LOGST, OrderStatus.SHIPPED_FROM_WH]):
|
2202 |
if order.status in [OrderStatus.BILLED, OrderStatus.SHIPPED_TO_LOGST, OrderStatus.SHIPPED_FROM_WH] or (order.status == OrderStatus.CANCEL_REQUEST_CONFIRMED and order.previousStatus in [OrderStatus.BILLED, OrderStatus.SHIPPED_TO_LOGST, OrderStatus.SHIPPED_FROM_WH]):
|
| 2197 |
lineitem = order.lineitems[0]
|
2203 |
lineitem = order.lineitems[0]
|
| - |
|
2204 |
catalogClient = CatalogClient().get_client()
|
| 2198 |
item = catalogClient.getItem(lineitem.item_id)
|
2205 |
item = catalogClient.getItem(lineitem.item_id)
|
| 2199 |
warehouseClient = WarehouseClient().get_client()
|
2206 |
warehouseClient = WarehouseClient().get_client()
|
| 2200 |
if ItemType.SERIALIZED == item.type:
|
2207 |
if ItemType.SERIALIZED == item.type:
|
| 2201 |
warehouseClient.scanSerializedItemForOrder(lineitem.serial_number, ScanType.SALE_RET, order.id, order.fulfilmentWarehouseId, lineitem.quantity, order.warehouse_id)
|
2208 |
warehouseClient.scanSerializedItemForOrder(lineitem.serial_number, ScanType.SALE_RET, order.id, order.fulfilmentWarehouseId, lineitem.quantity, order.warehouse_id)
|
| 2202 |
else:
|
2209 |
else:
|
| Line 2213... |
Line 2220... |
| 2213 |
def __update_inventory_reservation(order):
|
2220 |
def __update_inventory_reservation(order):
|
| 2214 |
'''
|
2221 |
'''
|
| 2215 |
Reduce the reservation count for all line items of the given order.
|
2222 |
Reduce the reservation count for all line items of the given order.
|
| 2216 |
'''
|
2223 |
'''
|
| 2217 |
try:
|
2224 |
try:
|
| 2218 |
catalog_client = CatalogClient().get_client()
|
2225 |
inventoryClient = InventoryClient().get_client()
|
| 2219 |
for lineitem in order.lineitems:
|
2226 |
for lineitem in order.lineitems:
|
| 2220 |
catalog_client.reduceReservationCount(lineitem.item_id, order.fulfilmentWarehouseId, lineitem.quantity)
|
2227 |
inventoryClient.reduceReservationCount(lineitem.item_id, order.fulfilmentWarehouseId, lineitem.quantity)
|
| 2221 |
except:
|
2228 |
except:
|
| 2222 |
print "Unable to reduce reservation count"
|
2229 |
print "Unable to reduce reservation count"
|
| 2223 |
|
2230 |
|
| 2224 |
def __clone_order(order, should_copy_billing_info, is_cod):
|
2231 |
def __clone_order(order, should_copy_billing_info, is_cod):
|
| 2225 |
current_time = datetime.datetime.now()
|
2232 |
current_time = datetime.datetime.now()
|
| Line 2290... |
Line 2297... |
| 2290 |
new_order.accepted_timestamp = current_time
|
2297 |
new_order.accepted_timestamp = current_time
|
| 2291 |
new_order.billing_timestamp = current_time
|
2298 |
new_order.billing_timestamp = current_time
|
| 2292 |
new_order.status = OrderStatus.BILLED
|
2299 |
new_order.status = OrderStatus.BILLED
|
| 2293 |
new_order.statusDescription = 'Order Billed'
|
2300 |
new_order.statusDescription = 'Order Billed'
|
| 2294 |
else:
|
2301 |
else:
|
| 2295 |
catalog_client = CatalogClient().get_client()
|
2302 |
inventoryClient = InventoryClient().get_client()
|
| 2296 |
catalog_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, new_order.lineitems[0].quantity)
|
2303 |
inventoryClient.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, new_order.lineitems[0].quantity)
|
| 2297 |
|
2304 |
|
| 2298 |
return new_order
|
2305 |
return new_order
|
| 2299 |
|
2306 |
|
| 2300 |
def __create_return_order(order):
|
2307 |
def __create_return_order(order):
|
| 2301 |
ret_order = ReturnOrder(order)
|
2308 |
ret_order = ReturnOrder(order)
|
| Line 2514... |
Line 2521... |
| 2514 |
old_item = catalog_client.getItem(lineitem.item_id)
|
2521 |
old_item = catalog_client.getItem(lineitem.item_id)
|
| 2515 |
item = catalog_client.getItem(item_id)
|
2522 |
item = catalog_client.getItem(item_id)
|
| 2516 |
if old_item.catalogItemId != item.catalogItemId:
|
2523 |
if old_item.catalogItemId != item.catalogItemId:
|
| 2517 |
raise TransactionServiceException(121, "You can't ship a different item. You can only ship the same item in a different color.")
|
2524 |
raise TransactionServiceException(121, "You can't ship a different item. You can only ship the same item in a different color.")
|
| 2518 |
|
2525 |
|
| - |
|
2526 |
inventoryClient = InventoryClient().get_client()
|
| 2519 |
catalog_client.reserveItemInWarehouse(item_id, order.fulfilmentWarehouseId, lineitem.quantity)
|
2527 |
inventoryClient.reserveItemInWarehouse(item_id, order.fulfilmentWarehouseId, lineitem.quantity)
|
| 2520 |
__update_inventory_reservation(order)
|
2528 |
__update_inventory_reservation(order)
|
| 2521 |
#TODO: Check that this new item has the same price
|
2529 |
#TODO: Check that this new item has the same price
|
| 2522 |
|
2530 |
|
| 2523 |
lineitem.item_id = item_id
|
2531 |
lineitem.item_id = item_id
|
| 2524 |
lineitem.color = item.color
|
2532 |
lineitem.color = item.color
|
| Line 2539... |
Line 2547... |
| 2539 |
if warehouse_id == order.warehouse_id:
|
2547 |
if warehouse_id == order.warehouse_id:
|
| 2540 |
raise TransactionServiceException(118, "You have selected the current warehouse again. Nothing to do")
|
2548 |
raise TransactionServiceException(118, "You have selected the current warehouse again. Nothing to do")
|
| 2541 |
|
2549 |
|
| 2542 |
lineitem = order.lineitems[0]
|
2550 |
lineitem = order.lineitems[0]
|
| 2543 |
catalog_client = CatalogClient().get_client()
|
2551 |
catalog_client = CatalogClient().get_client()
|
| - |
|
2552 |
inventoryClient = InventoryClient().get_client()
|
| 2544 |
try:
|
2553 |
try:
|
| 2545 |
warehouse = catalog_client.getWarehouse(warehouse_id)
|
2554 |
warehouse = inventoryClient.getWarehouse(warehouse_id)
|
| 2546 |
except:
|
2555 |
except:
|
| 2547 |
raise TransactionServiceException(119, "No warehouse with id" + str(warehouse_id))
|
2556 |
raise TransactionServiceException(119, "No warehouse with id" + str(warehouse_id))
|
| 2548 |
|
2557 |
|
| 2549 |
if warehouse.billingWarehouseId is None:
|
2558 |
if warehouse.billingWarehouseId is None:
|
| 2550 |
raise TransactionServiceException(119, "Shifting of warehouse allowed to warehouse with billing support only")
|
2559 |
raise TransactionServiceException(119, "Shifting of warehouse allowed to warehouse with billing support only")
|
| 2551 |
|
2560 |
|
| 2552 |
# If One gives a billing warehouse for warehouse shift, we should assign order to the GOOD warehouse
|
2561 |
# If One gives a billing warehouse for warehouse shift, we should assign order to the GOOD warehouse
|
| 2553 |
# present within it with maximum availability
|
2562 |
# present within it with maximum availability
|
| 2554 |
if warehouse.id == warehouse.billingWarehouseId:
|
2563 |
if warehouse.id == warehouse.billingWarehouseId:
|
| 2555 |
warehouses = catalog_client.getWarehouses(None, InventoryType.GOOD, 0, 0, warehouse.id)
|
2564 |
warehouses = inventoryClient.getWarehouses(None, InventoryType.GOOD, 0, 0, warehouse.id)
|
| 2556 |
if warehouses:
|
2565 |
if warehouses:
|
| 2557 |
itemInventory = catalog_client.getItemInventoryByItemId(lineitem.item_id)
|
2566 |
itemInventory = inventoryClient.getItemInventoryByItemId(lineitem.item_id)
|
| 2558 |
warehouse = warehouses[0]
|
2567 |
warehouse = warehouses[0]
|
| 2559 |
maxAvailability = 0
|
2568 |
maxAvailability = 0
|
| 2560 |
for goodWarehouse in warehouses:
|
2569 |
for goodWarehouse in warehouses:
|
| 2561 |
if itemInventory.availability.has_key(goodWarehouse.id) and maxAvailability < itemInventory.availability[goodWarehouse.id]:
|
2570 |
if itemInventory.availability.has_key(goodWarehouse.id) and maxAvailability < itemInventory.availability[goodWarehouse.id]:
|
| 2562 |
warehouse = goodWarehouse
|
2571 |
warehouse = goodWarehouse
|
| Line 2570... |
Line 2579... |
| 2570 |
if goodWarehouse.vendor.id == item.preferredVendor:
|
2579 |
if goodWarehouse.vendor.id == item.preferredVendor:
|
| 2571 |
warehouse = goodWarehouse
|
2580 |
warehouse = goodWarehouse
|
| 2572 |
else:
|
2581 |
else:
|
| 2573 |
raise TransactionServiceException(119, "Shifting of warehouse allowed to GOOD inventory type warehouse with billing support")
|
2582 |
raise TransactionServiceException(119, "Shifting of warehouse allowed to GOOD inventory type warehouse with billing support")
|
| 2574 |
|
2583 |
|
| 2575 |
catalog_client.reserveItemInWarehouse(lineitem.item_id, warehouse.id, lineitem.quantity)
|
2584 |
inventoryClient.reserveItemInWarehouse(lineitem.item_id, warehouse.id, lineitem.quantity)
|
| 2576 |
__update_inventory_reservation(order)
|
2585 |
__update_inventory_reservation(order)
|
| 2577 |
|
2586 |
|
| 2578 |
order.warehouse_id = warehouse.billingWarehouseId
|
2587 |
order.warehouse_id = warehouse.billingWarehouseId
|
| 2579 |
order.fulfilmentWarehouseId = warehouse.id
|
2588 |
order.fulfilmentWarehouseId = warehouse.id
|
| 2580 |
session.commit()
|
2589 |
session.commit()
|
| Line 3296... |
Line 3305... |
| 3296 |
attribute.name = t_attribute.name
|
3305 |
attribute.name = t_attribute.name
|
| 3297 |
attribute.value = t_attribute.value
|
3306 |
attribute.value = t_attribute.value
|
| 3298 |
session.commit()
|
3307 |
session.commit()
|
| 3299 |
|
3308 |
|
| 3300 |
def accept_order_for_item(itemId, quantity, fulfilmentWarehouseId, billingWarehouseId):
|
3309 |
def accept_order_for_item(itemId, quantity, fulfilmentWarehouseId, billingWarehouseId):
|
| 3301 |
catalogClient = CatalogClient().get_client()
|
3310 |
inventoryClient = InventoryClient().get_client()
|
| 3302 |
inventory = catalogClient.getItemInventoryByItemId(itemId)
|
3311 |
inventory = inventoryClient.getItemInventoryByItemId(itemId)
|
| 3303 |
orders = Order.query.filter(Order.fulfilmentWarehouseId != fulfilmentWarehouseId).filter(Order.warehouse_id == billingWarehouseId).filter(Order.status.in_(tuple([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.ACCEPTED, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS]))).order_by(Order.expected_shipping_time).all()
|
3312 |
orders = Order.query.filter(Order.fulfilmentWarehouseId != fulfilmentWarehouseId).filter(Order.warehouse_id == billingWarehouseId).filter(Order.status.in_(tuple([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.COD_VERIFICATION_PENDING, OrderStatus.ACCEPTED, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS]))).order_by(Order.expected_shipping_time).all()
|
| 3304 |
for order in orders:
|
3313 |
for order in orders:
|
| 3305 |
lineitem = order.lineitems[0]
|
3314 |
lineitem = order.lineitems[0]
|
| 3306 |
if lineitem.item_id == itemId and lineitem.quantity <= quantity:
|
3315 |
if lineitem.item_id == itemId and lineitem.quantity <= quantity:
|
| 3307 |
warehouse = catalogClient.getWarehouse(order.fulfilmentWarehouseId)
|
3316 |
warehouse = inventoryClient.getWarehouse(order.fulfilmentWarehouseId)
|
| 3308 |
if not warehouse.billingWarehouseId and warehouse.warehouseType == WarehouseType.THIRD_PARTY:
|
3317 |
if not warehouse.billingWarehouseId and warehouse.warehouseType == WarehouseType.THIRD_PARTY:
|
| 3309 |
if (inventory.availability[fulfilmentWarehouseId] >= inventory.reserved[fulfilmentWarehouseId] + lineitem.quantity) and inventory.availability[order.fulfilmentWarehouseId] < inventory.reserved[order.fulfilmentWarehouseId]:
|
3318 |
if (inventory.availability[fulfilmentWarehouseId] >= inventory.reserved[fulfilmentWarehouseId] + lineitem.quantity) and inventory.availability[order.fulfilmentWarehouseId] < inventory.reserved[order.fulfilmentWarehouseId]:
|
| 3310 |
catalogClient.reduceReservationCount(itemId, order.fulfilmentWarehouseId, quantity)
|
3319 |
inventoryClient.reduceReservationCount(itemId, order.fulfilmentWarehouseId, quantity)
|
| 3311 |
catalogClient.reserveItemInWarehouse(itemId, fulfilmentWarehouseId, quantity)
|
3320 |
inventoryClient.reserveItemInWarehouse(itemId, fulfilmentWarehouseId, quantity)
|
| 3312 |
order.fulfilmentWarehouseId = fulfilmentWarehouseId
|
3321 |
order.fulfilmentWarehouseId = fulfilmentWarehouseId
|
| 3313 |
quantity -= lineitem.quantity
|
3322 |
quantity -= lineitem.quantity
|
| 3314 |
session.commit()
|
3323 |
session.commit()
|
| 3315 |
if not quantity:
|
3324 |
if not quantity:
|
| 3316 |
break
|
3325 |
break
|