| Line 1559... |
Line 1559... |
| 1559 |
def create_purchase_order(warehouseId):
|
1559 |
def create_purchase_order(warehouseId):
|
| 1560 |
if not warehouseId:
|
1560 |
if not warehouseId:
|
| 1561 |
raise TransactionServiceException(101, "bad warehouse id")
|
1561 |
raise TransactionServiceException(101, "bad warehouse id")
|
| 1562 |
|
1562 |
|
| 1563 |
query = Order.query.with_lockmode("update").filter_by(warehouse_id=warehouseId)
|
1563 |
query = Order.query.with_lockmode("update").filter_by(warehouse_id=warehouseId)
|
| 1564 |
query = query.filter(or_(Order.status == OrderStatus.SUBMITTED_FOR_PROCESSING, Order.status == OrderStatus.INVENTORY_LOW))
|
1564 |
query = query.filter(or_(Order.status == OrderStatus.SUBMITTED_FOR_PROCESSING, Order.status == OrderStatus.INVENTORY_LOW, Order.status == OrderStatus.ACCEPTED))
|
| 1565 |
query = query.filter_by(purchase_order_id=None)
|
1565 |
query = query.filter_by(purchase_order_id=None)
|
| 1566 |
query = query.order_by(Order.created_timestamp)
|
1566 |
query = query.order_by(Order.created_timestamp)
|
| 1567 |
pending_orders = query.all()
|
1567 |
pending_orders = query.all()
|
| 1568 |
|
1568 |
|
| 1569 |
if not pending_orders:
|
1569 |
if not pending_orders:
|
| 1570 |
return -1
|
1570 |
return None
|
| 1571 |
|
1571 |
|
| 1572 |
catalog_client = CatalogClient().get_client()
|
1572 |
catalog_client = CatalogClient().get_client()
|
| 1573 |
availability = {}
|
1573 |
availability = {}
|
| 1574 |
for item in catalog_client.getAllItemsForWarehouse(warehouseId):
|
1574 |
for item in catalog_client.getAllItemsForWarehouse(warehouseId):
|
| 1575 |
availability[item.id] = item.itemInventory.availability[warehouseId]
|
1575 |
availability[item.id] = [item.itemInventory.availability[warehouseId], item]
|
| 1576 |
|
- |
|
| 1577 |
query = Order.query.with_lockmode("update").filter_by(warehouse_id=warehouseId)
|
- |
|
| 1578 |
query = query.filter(Order.status == OrderStatus.ACCEPTED)
|
- |
|
| 1579 |
accepted_orders = query.all()
|
- |
|
| 1580 |
|
- |
|
| 1581 |
t_purchase_order = PurchaseOrder()
|
- |
|
| 1582 |
t_purchase_order.supplierId = 3 # Putting supplier id as 3 for sarvottam for time being
|
- |
|
| 1583 |
t_purchase_order.warehouseId = warehouseId
|
- |
|
| 1584 |
t_purchase_order.lineitems = []
|
- |
|
| 1585 |
|
- |
|
| 1586 |
t_po_lineitems = []
|
- |
|
| 1587 |
lineitems = {}
|
- |
|
| 1588 |
|
1576 |
|
| 1589 |
# Considering all pending orders and accepted as well
|
- |
|
| 1590 |
accepted_orders.extend(pending_orders)
|
1577 |
requirements = {}
|
| 1591 |
for order in accepted_orders:
|
1578 |
for order in pending_orders:
|
| 1592 |
for lineitem in order.lineitems:
|
1579 |
for lineitem in order.lineitems:
|
| 1593 |
item_id = lineitem.item_id
|
- |
|
| 1594 |
if lineitems.has_key(item_id):
|
1580 |
if (requirements.has_key(lineitem.item_id)):
|
| 1595 |
lineitems[item_id].quantity += lineitem.quantity
|
1581 |
requirements[lineitem.item_id] += lineitem.quantity
|
| 1596 |
else:
|
1582 |
else:
|
| 1597 |
t_po_lineitem = POLineItem()
|
- |
|
| 1598 |
t_po_lineitem.productGroup = lineitem.productGroup
|
- |
|
| 1599 |
t_po_lineitem.brand = lineitem.brand
|
- |
|
| 1600 |
t_po_lineitem.modelNumber = lineitem.model_number
|
- |
|
| 1601 |
t_po_lineitem.modelName = lineitem.model_name
|
- |
|
| 1602 |
t_po_lineitem.color = lineitem.color
|
- |
|
| 1603 |
t_po_lineitem.itemId = lineitem.item_id
|
1583 |
requirements[lineitem.item_id] = lineitem.quantity
|
| 1604 |
t_po_lineitem.quantity = lineitem.quantity - availability.get(item_id, 0)
|
- |
|
| 1605 |
lineitems[item_id] = t_po_lineitem
|
- |
|
| 1606 |
t_po_lineitems.append(t_po_lineitem)
|
- |
|
| 1607 |
#FIXME vendor is hardcoded for sarvottam
|
- |
|
| 1608 |
item_pricing = catalog_client.getItemPricing(item_id, 3)
|
- |
|
| 1609 |
t_po_lineitem.unitPrice = item_pricing.transferPrice
|
- |
|
| 1610 |
|
- |
|
| 1611 |
for lineitem in t_po_lineitems:
|
- |
|
| 1612 |
if lineitem.quantity > 0:
|
- |
|
| 1613 |
t_purchase_order.lineitems.append(lineitem)
|
- |
|
| 1614 |
|
1584 |
|
| - |
|
1585 |
net_requirements = {}
|
| - |
|
1586 |
for itemId in requirements.keys():
|
| - |
|
1587 |
requirementsCount = requirements.get(itemId)
|
| - |
|
1588 |
if availability.has_key(itemId):
|
| - |
|
1589 |
availabilityCount = availability.get(itemId)[0]
|
| - |
|
1590 |
item = availability.get(itemId)[1]
|
| - |
|
1591 |
if item.preferredVendor is None or item.preferredVendor == 1:
|
| - |
|
1592 |
continue
|
| - |
|
1593 |
if requirementsCount > availabilityCount:
|
| - |
|
1594 |
if (net_requirements.has_key(item.preferredVendor)):
|
| - |
|
1595 |
net_requirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
|
| - |
|
1596 |
else:
|
| - |
|
1597 |
net_requirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
|
| - |
|
1598 |
else:
|
| - |
|
1599 |
item = catalog_client.getItem(itemId);
|
| - |
|
1600 |
if item.preferredVendor is None or item.preferredVendor == 1:
|
| - |
|
1601 |
continue
|
| - |
|
1602 |
if (net_requirements.has_key(item.preferredVendor)):
|
| - |
|
1603 |
net_requirements[item.preferredVendor].append([item, requirementsCount])
|
| - |
|
1604 |
else:
|
| - |
|
1605 |
net_requirements[item.preferredVendor] = [[item, requirementsCount]];
|
| - |
|
1606 |
|
| - |
|
1607 |
if not net_requirements:
|
| - |
|
1608 |
return None
|
| - |
|
1609 |
|
| - |
|
1610 |
purchaseOrderIds = []
|
| - |
|
1611 |
for vendorId in net_requirements.keys():
|
| - |
|
1612 |
t_purchase_order = PurchaseOrder()
|
| - |
|
1613 |
t_purchase_order.supplierId = vendorId
|
| - |
|
1614 |
t_purchase_order.warehouseId = warehouseId
|
| 1615 |
if not t_purchase_order.lineitems:
|
1615 |
t_purchase_order.lineitems = []
|
| - |
|
1616 |
for key in net_requirements.get(vendorId):
|
| - |
|
1617 |
item = key[0]
|
| - |
|
1618 |
quantity = key[1]
|
| - |
|
1619 |
t_po_lineitem = POLineItem()
|
| - |
|
1620 |
t_po_lineitem.productGroup = item.productGroup
|
| - |
|
1621 |
t_po_lineitem.brand = item.brand
|
| - |
|
1622 |
t_po_lineitem.modelNumber = item.modelNumber
|
| - |
|
1623 |
t_po_lineitem.modelName = item.modelName
|
| - |
|
1624 |
t_po_lineitem.color = item.color
|
| - |
|
1625 |
t_po_lineitem.itemId = item.id
|
| - |
|
1626 |
t_po_lineitem.quantity = quantity
|
| 1616 |
return -1
|
1627 |
try:
|
| - |
|
1628 |
item_pricing = catalog_client.getItemPricing(item.id, vendorId)
|
| - |
|
1629 |
except Exception as e:
|
| - |
|
1630 |
purchase_client = PurchaseClient().get_client()
|
| - |
|
1631 |
vendor = purchase_client.getSupplier(vendorId)
|
| - |
|
1632 |
print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
|
| - |
|
1633 |
print e
|
| - |
|
1634 |
raise TransactionServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
|
| - |
|
1635 |
t_po_lineitem.unitPrice = item_pricing.transferPrice
|
| - |
|
1636 |
t_purchase_order.lineitems.append(t_po_lineitem)
|
| - |
|
1637 |
purchase_client = PurchaseClient().get_client()
|
| - |
|
1638 |
poId = purchase_client.createPurchaseOrder(t_purchase_order)
|
| - |
|
1639 |
purchaseOrderIds.append(poId)
|
| 1617 |
|
1640 |
|
| 1618 |
purchase_client = PurchaseClient().get_client()
|
- |
|
| 1619 |
po_id = purchase_client.createPurchaseOrder(t_purchase_order)
|
- |
|
| 1620 |
|
- |
|
| 1621 |
for order in pending_orders:
|
1641 |
for order in pending_orders:
|
| 1622 |
order.purchase_order_id = po_id
|
1642 |
order.purchase_order_id = purchaseOrderIds[len(purchaseOrderIds) - 1]
|
| 1623 |
order.status = OrderStatus.LOW_INV_PO_RAISED
|
1643 |
order.status = OrderStatus.LOW_INV_PO_RAISED
|
| 1624 |
order.statusDescription = 'In Process'
|
1644 |
order.statusDescription = 'In Process'
|
| 1625 |
session.commit()
|
1645 |
session.commit()
|
| 1626 |
return po_id
|
1646 |
return purchaseOrderIds
|
| 1627 |
|
1647 |
|
| 1628 |
def update_weight(order_id, weight):
|
1648 |
def update_weight(order_id, weight):
|
| 1629 |
'''
|
1649 |
'''
|
| 1630 |
Update the weight of order
|
1650 |
Update the weight of order
|
| 1631 |
'''
|
1651 |
'''
|