| Line 1613... |
Line 1613... |
| 1613 |
raise TransactionServiceException(116, "No return order found for the given order id")
|
1613 |
raise TransactionServiceException(116, "No return order found for the given order id")
|
| 1614 |
ret_order.processedStatus = True
|
1614 |
ret_order.processedStatus = True
|
| 1615 |
ret_order.processedAt = datetime.datetime.now()
|
1615 |
ret_order.processedAt = datetime.datetime.now()
|
| 1616 |
session.commit()
|
1616 |
session.commit()
|
| 1617 |
|
1617 |
|
| 1618 |
def create_purchase_order(warehouseId):
|
1618 |
def update_orders_as_PORaised(itemIdQuantityMap, purchaseOrderId, warehouseId):
|
| - |
|
1619 |
"""
|
| - |
|
1620 |
Updates orders as PO raised. Also updates purchase order id in orders. Pass a map of items mapped to
|
| - |
|
1621 |
the quantities for which the PO is raised.
|
| - |
|
1622 |
|
| - |
|
1623 |
Parameters:
|
| - |
|
1624 |
- itemIdQuantityMap
|
| 1619 |
if not warehouseId:
|
1625 |
- purchaseOrderId
|
| 1620 |
raise TransactionServiceException(101, "bad warehouse id")
|
1626 |
- warehouseId
|
| 1621 |
|
1627 |
"""
|
| 1622 |
query = Order.query.with_lockmode("update").filter_by(warehouse_id=warehouseId)
|
1628 |
query = Order.query.with_lockmode("update").filter_by(warehouse_id=warehouseId)
|
| 1623 |
query = query.filter(or_(Order.status == OrderStatus.SUBMITTED_FOR_PROCESSING, Order.status == OrderStatus.INVENTORY_LOW, Order.status == OrderStatus.ACCEPTED))
|
1629 |
query = query.filter(or_(Order.status == OrderStatus.SUBMITTED_FOR_PROCESSING, Order.status == OrderStatus.INVENTORY_LOW))
|
| 1624 |
query = query.filter_by(purchase_order_id=None)
|
1630 |
query = query.filter_by(purchase_order_id=None)
|
| 1625 |
query = query.order_by(Order.created_timestamp)
|
1631 |
query = query.order_by(Order.created_timestamp)
|
| 1626 |
pending_orders = query.all()
|
1632 |
pending_orders = query.all()
|
| 1627 |
|
1633 |
|
| 1628 |
if not pending_orders:
|
- |
|
| 1629 |
return None
|
- |
|
| 1630 |
|
- |
|
| 1631 |
catalog_client = CatalogClient().get_client()
|
- |
|
| 1632 |
availability = {}
|
- |
|
| 1633 |
for item in catalog_client.getAllItemsForWarehouse(warehouseId):
|
- |
|
| 1634 |
availability[item.id] = [item.itemInventory.availability[warehouseId], item]
|
- |
|
| 1635 |
|
- |
|
| 1636 |
requirements = {}
|
- |
|
| 1637 |
for order in pending_orders:
|
1634 |
for order in pending_orders:
|
| 1638 |
for lineitem in order.lineitems:
|
1635 |
lineitem = order.lineitems[0]
|
| 1639 |
if (requirements.has_key(lineitem.item_id)):
|
1636 |
if itemIdQuantityMap.has_key(lineitem.item_id):
|
| 1640 |
requirements[lineitem.item_id] += lineitem.quantity
|
1637 |
if itemIdQuantityMap[lineitem.item_id] >= lineitem.quantity:
|
| 1641 |
else:
|
- |
|
| 1642 |
requirements[lineitem.item_id] = lineitem.quantity
|
1638 |
order.status = OrderStatus.LOW_INV_PO_RAISED
|
| 1643 |
|
- |
|
| 1644 |
net_requirements = {}
|
- |
|
| 1645 |
for itemId in requirements.keys():
|
- |
|
| 1646 |
requirementsCount = requirements.get(itemId)
|
- |
|
| 1647 |
if availability.has_key(itemId):
|
- |
|
| 1648 |
availabilityCount = availability.get(itemId)[0]
|
- |
|
| 1649 |
item = availability.get(itemId)[1]
|
- |
|
| 1650 |
if item.preferredVendor is None or item.preferredVendor == 1:
|
- |
|
| 1651 |
continue
|
- |
|
| 1652 |
if requirementsCount > availabilityCount:
|
1639 |
order.statusDescription = 'In Process'
|
| 1653 |
if (net_requirements.has_key(item.preferredVendor)):
|
1640 |
order.purchase_order_id = purchaseOrderId
|
| 1654 |
net_requirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
|
- |
|
| 1655 |
else:
|
- |
|
| 1656 |
net_requirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
|
- |
|
| 1657 |
else:
|
- |
|
| 1658 |
item = catalog_client.getItem(itemId);
|
- |
|
| 1659 |
if item.preferredVendor is None or item.preferredVendor == 1:
|
- |
|
| 1660 |
continue
|
- |
|
| 1661 |
if (net_requirements.has_key(item.preferredVendor)):
|
- |
|
| 1662 |
net_requirements[item.preferredVendor].append([item, requirementsCount])
|
- |
|
| 1663 |
else:
|
- |
|
| 1664 |
net_requirements[item.preferredVendor] = [[item, requirementsCount]];
|
1641 |
itemIdQuantityMap[lineitem.item_id] -= lineitem.quantity
|
| 1665 |
|
1642 |
|
| 1666 |
if not net_requirements:
|
- |
|
| 1667 |
return None
|
- |
|
| 1668 |
|
- |
|
| 1669 |
purchaseOrderIds = []
|
- |
|
| 1670 |
for vendorId in net_requirements.keys():
|
- |
|
| 1671 |
t_purchase_order = PurchaseOrder()
|
- |
|
| 1672 |
t_purchase_order.supplierId = vendorId
|
- |
|
| 1673 |
t_purchase_order.warehouseId = warehouseId
|
- |
|
| 1674 |
t_purchase_order.lineitems = []
|
- |
|
| 1675 |
for key in net_requirements.get(vendorId):
|
- |
|
| 1676 |
item = key[0]
|
- |
|
| 1677 |
quantity = key[1]
|
- |
|
| 1678 |
t_po_lineitem = POLineItem()
|
- |
|
| 1679 |
t_po_lineitem.productGroup = item.productGroup
|
- |
|
| 1680 |
t_po_lineitem.brand = item.brand
|
- |
|
| 1681 |
t_po_lineitem.modelNumber = item.modelNumber
|
- |
|
| 1682 |
t_po_lineitem.modelName = item.modelName
|
- |
|
| 1683 |
t_po_lineitem.color = item.color
|
- |
|
| 1684 |
t_po_lineitem.itemId = item.id
|
- |
|
| 1685 |
t_po_lineitem.quantity = quantity
|
- |
|
| 1686 |
try:
|
- |
|
| 1687 |
item_pricing = catalog_client.getItemPricing(item.id, vendorId)
|
- |
|
| 1688 |
except Exception as e:
|
- |
|
| 1689 |
purchase_client = PurchaseClient().get_client()
|
- |
|
| 1690 |
vendor = purchase_client.getSupplier(vendorId)
|
- |
|
| 1691 |
print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
|
- |
|
| 1692 |
print e
|
- |
|
| 1693 |
raise TransactionServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
|
- |
|
| 1694 |
t_po_lineitem.unitPrice = item_pricing.transferPrice
|
- |
|
| 1695 |
t_purchase_order.lineitems.append(t_po_lineitem)
|
- |
|
| 1696 |
purchase_client = PurchaseClient().get_client()
|
- |
|
| 1697 |
poId = purchase_client.createPurchaseOrder(t_purchase_order)
|
- |
|
| 1698 |
purchaseOrderIds.append(poId)
|
- |
|
| 1699 |
|
- |
|
| 1700 |
for order in pending_orders:
|
- |
|
| 1701 |
order.purchase_order_id = purchaseOrderIds[len(purchaseOrderIds) - 1]
|
- |
|
| 1702 |
if order.status != OrderStatus.ACCEPTED:
|
- |
|
| 1703 |
order.status = OrderStatus.LOW_INV_PO_RAISED
|
- |
|
| 1704 |
order.statusDescription = 'In Process'
|
- |
|
| 1705 |
session.commit()
|
1643 |
session.commit()
|
| 1706 |
return purchaseOrderIds
|
- |
|
| 1707 |
|
1644 |
|
| 1708 |
def update_weight(order_id, weight):
|
1645 |
def update_weight(order_id, weight):
|
| 1709 |
'''
|
1646 |
'''
|
| 1710 |
Update the weight of order
|
1647 |
Update the weight of order
|
| 1711 |
'''
|
1648 |
'''
|