| Line 3... |
Line 3... |
| 3 |
|
3 |
|
| 4 |
@author: Chandranshu
|
4 |
@author: Chandranshu
|
| 5 |
'''
|
5 |
'''
|
| 6 |
from elixir import metadata, setup_all, session
|
6 |
from elixir import metadata, setup_all, session
|
| 7 |
from shop2020.clients.CatalogClient import CatalogClient
|
7 |
from shop2020.clients.CatalogClient import CatalogClient
|
| - |
|
8 |
from shop2020.clients.InventoryClient import InventoryClient
|
| 8 |
from shop2020.clients.TransactionClient import TransactionClient
|
9 |
from shop2020.clients.TransactionClient import TransactionClient
|
| 9 |
from shop2020.purchase.main.model.Invoice import Invoice
|
10 |
from shop2020.purchase.main.model.Invoice import Invoice
|
| 10 |
from shop2020.purchase.main.model.LineItem import LineItem
|
11 |
from shop2020.purchase.main.model.LineItem import LineItem
|
| 11 |
from shop2020.purchase.main.model.Purchase import Purchase
|
12 |
from shop2020.purchase.main.model.Purchase import Purchase
|
| 12 |
from shop2020.purchase.main.model.PurchaseOrder import PurchaseOrder
|
13 |
from shop2020.purchase.main.model.PurchaseOrder import PurchaseOrder
|
| 13 |
from shop2020.purchase.main.model.RevisionedPurchaseOrder import \
|
14 |
from shop2020.purchase.main.model.RevisionedPurchaseOrder import \
|
| 14 |
RevisionedPurchaseOrder
|
15 |
RevisionedPurchaseOrder
|
| 15 |
from shop2020.purchase.main.model.Supplier import Supplier
|
16 |
from shop2020.purchase.main.model.Supplier import Supplier
|
| 16 |
from shop2020.thriftpy.generic.ttypes import ExceptionType
|
17 |
from shop2020.thriftpy.generic.ttypes import ExceptionType
|
| 17 |
from shop2020.thriftpy.model.v1.catalog.ttypes import WarehouseType, \
|
18 |
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
|
| 18 |
InventoryType
|
19 |
InventoryType
|
| 19 |
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
|
20 |
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
|
| 20 |
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
|
21 |
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
|
| 21 |
PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
|
22 |
PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
|
| 22 |
from shop2020.utils.Utils import to_py_date
|
23 |
from shop2020.utils.Utils import to_py_date
|
| Line 179... |
Line 180... |
| 179 |
pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED], 0, 0, warehouseId)
|
180 |
pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED], 0, 0, warehouseId)
|
| 180 |
|
181 |
|
| 181 |
if not pending_orders:
|
182 |
if not pending_orders:
|
| 182 |
return purchaseOrders
|
183 |
return purchaseOrders
|
| 183 |
|
184 |
|
| 184 |
catalog_client = CatalogClient().get_client()
|
185 |
inventory_client = InventoryClient().get_client()
|
| 185 |
availability = {}
|
186 |
availability = {}
|
| 186 |
|
187 |
|
| 187 |
warehouses = catalog_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)
|
188 |
ourGoodWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)]
|
| - |
|
189 |
itemInventorySnapshot = inventory_client.getInventorySnapshot(0)
|
| 188 |
for warehouse in warehouses:
|
190 |
for itemId, itemInventory in itemInventorySnapshot.iteritems():
|
| 189 |
goodWarehouseId = warehouse.id
|
191 |
item = self.__get_item_from_master(itemId)
|
| 190 |
for item in catalog_client.getAllItemsForWarehouse(goodWarehouseId):
|
192 |
for warehouseId, quantity in itemInventory.availability.iteritems():
|
| 191 |
itemInventory = catalog_client.getItemInventoryByItemId(item.id)
|
193 |
if warehouseId in ourGoodWarehouseIds:
|
| 192 |
if availability.has_key(item.id):
|
194 |
if availability.has_key(item.id):
|
| 193 |
availability[item.id] = [availability[item.id][0] + itemInventory.availability[goodWarehouseId], item]
|
195 |
availability[item.id] = [availability[item.id][0] + quantity, item]
|
| 194 |
else:
|
196 |
else:
|
| 195 |
availability[item.id] = [itemInventory.availability[goodWarehouseId], item]
|
197 |
availability[item.id] = [quantity, item]
|
| 196 |
|
198 |
|
| 197 |
unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
|
199 |
unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
|
| 198 |
for purchaseOrder in unfulfilledPurchaseOrders:
|
200 |
for purchaseOrder in unfulfilledPurchaseOrders:
|
| 199 |
for lineitem in purchaseOrder.lineitems:
|
201 |
for lineitem in purchaseOrder.lineitems:
|
| 200 |
if availability.has_key(lineitem.itemId):
|
202 |
if availability.has_key(lineitem.itemId):
|
| 201 |
availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
|
203 |
availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
|
| 202 |
else:
|
204 |
else:
|
| 203 |
item = catalog_client.getItem(lineitem.itemId)
|
205 |
item = self.__get_item_from_master(lineitem.itemId)
|
| 204 |
availability[item.id] = [lineitem.unfulfilledQuantity, item]
|
206 |
availability[item.id] = [lineitem.unfulfilledQuantity, item]
|
| 205 |
|
207 |
|
| 206 |
codRequirements = {}
|
208 |
codRequirements = {}
|
| 207 |
requirements = {}
|
209 |
requirements = {}
|
| 208 |
for order in pending_orders:
|
210 |
for order in pending_orders:
|
| Line 232... |
Line 234... |
| 232 |
if (netRequirements.has_key(item.preferredVendor)):
|
234 |
if (netRequirements.has_key(item.preferredVendor)):
|
| 233 |
netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
|
235 |
netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
|
| 234 |
else:
|
236 |
else:
|
| 235 |
netRequirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
|
237 |
netRequirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
|
| 236 |
else:
|
238 |
else:
|
| 237 |
item = catalog_client.getItem(itemId);
|
239 |
item = self.__get_item_from_master(itemId)
|
| 238 |
if item.preferredVendor is None:
|
240 |
if item.preferredVendor is None:
|
| 239 |
raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
|
241 |
raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
|
| 240 |
if (netRequirements.has_key(item.preferredVendor)):
|
242 |
if (netRequirements.has_key(item.preferredVendor)):
|
| 241 |
netRequirements[item.preferredVendor].append([item, requirementsCount])
|
243 |
netRequirements[item.preferredVendor].append([item, requirementsCount])
|
| 242 |
else:
|
244 |
else:
|
| Line 262... |
Line 264... |
| 262 |
t_po_lineitem.itemId = item.id
|
264 |
t_po_lineitem.itemId = item.id
|
| 263 |
t_po_lineitem.quantity = quantity
|
265 |
t_po_lineitem.quantity = quantity
|
| 264 |
if codRequirements.has_key(item.id):
|
266 |
if codRequirements.has_key(item.id):
|
| 265 |
t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
|
267 |
t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
|
| 266 |
try:
|
268 |
try:
|
| 267 |
item_pricing = catalog_client.getItemPricing(item.id, vendorId)
|
269 |
item_pricing = inventory_client.getItemPricing(item.id, vendorId)
|
| 268 |
except Exception as e:
|
270 |
except Exception as e:
|
| 269 |
vendor = self.getSupplier(vendorId)
|
271 |
vendor = self.getSupplier(vendorId)
|
| 270 |
print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
|
272 |
print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
|
| 271 |
print e
|
273 |
print e
|
| 272 |
raise PurchaseServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
|
274 |
raise PurchaseServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
|
| Line 487... |
Line 489... |
| 487 |
return True
|
489 |
return True
|
| 488 |
except:
|
490 |
except:
|
| 489 |
return False
|
491 |
return False
|
| 490 |
finally:
|
492 |
finally:
|
| 491 |
self.close_session()
|
493 |
self.close_session()
|
| - |
|
494 |
|
| - |
|
495 |
def __get_item_from_master(self, item_id):
|
| - |
|
496 |
client = CatalogClient("catalog_service_server_host_master", "catalog_service_server_port").get_client()
|
| - |
|
497 |
return client.getItem(item_id)
|
| 492 |
|
498 |
|