| Line 461... |
Line 461... |
| 461 |
|
461 |
|
| 462 |
def __get_warehouse_with_min_transfer_price(warehouses, item_id, item_pricing, ignoreAvailability):
|
462 |
def __get_warehouse_with_min_transfer_price(warehouses, item_id, item_pricing, ignoreAvailability):
|
| 463 |
warehouse_retid = -1
|
463 |
warehouse_retid = -1
|
| 464 |
minTransferPrice = None
|
464 |
minTransferPrice = None
|
| 465 |
total_availability = 0
|
465 |
total_availability = 0
|
| - |
|
466 |
availabilityForBillingWarehouses = {}
|
| 466 |
warehousesWithAvailability = {}
|
467 |
warehousesAvailability = {}
|
| - |
|
468 |
availability = 0
|
| - |
|
469 |
billing_warehouse_retid = None
|
| 467 |
|
470 |
|
| 468 |
if not ignoreAvailability:
|
471 |
if not ignoreAvailability:
|
| 469 |
for entry in CurrentInventorySnapshot.query.filter_by(item_id = item_id).all():
|
472 |
for entry in CurrentInventorySnapshot.query.filter_by(item_id = item_id).all():
|
| 470 |
if entry.availability > entry.reserved:
|
473 |
#if entry.availability > entry.reserved:
|
| 471 |
warehousesWithAvailability[entry.warehouse_id] = entry
|
474 |
warehousesAvailability[entry.warehouse_id] = entry
|
| 472 |
|
475 |
|
| 473 |
for warehouse in warehouses.values():
|
476 |
for warehouse in warehouses.values():
|
| 474 |
if not ignoreAvailability:
|
477 |
if not ignoreAvailability:
|
| - |
|
478 |
#TODO Mistake no entry for this warehouse.id in warehouseswithAvailab
|
| 475 |
if warehousesWithAvailability.has_key(warehouse.id):
|
479 |
if warehouse.id not in warehousesAvailability:
|
| - |
|
480 |
continue
|
| 476 |
entry = warehousesWithAvailability[warehouse.id]
|
481 |
entry = warehousesAvailability[warehouse.id]
|
| 477 |
total_availability += entry.availability - entry.reserved
|
482 |
if warehouse.billingWarehouseId in availabilityForBillingWarehouses:
|
| - |
|
483 |
if warehouse.billingWarehouseId is not None or warehouse.billingWarehouseId != 0:
|
| - |
|
484 |
availabilityForBillingWarehouses[warehouse.billingWarehouseId] = availabilityForBillingWarehouses[warehouse.billingWarehouseId] + entry.availability - entry.reserved
|
| 478 |
else:
|
485 |
else:
|
| - |
|
486 |
if warehouse.billingWarehouseId is not None or warehouse.billingWarehouseId != 0:
|
| - |
|
487 |
availabilityForBillingWarehouses[warehouse.billingWarehouseId] = entry.availability - entry.reserved
|
| - |
|
488 |
if entry.availability <= entry.reserved:
|
| 479 |
continue
|
489 |
continue
|
| - |
|
490 |
total_availability += entry.availability - entry.reserved
|
| 480 |
|
491 |
|
| 481 |
# Missing transfer price cases should not impact warehouse assignment
|
492 |
# Missing transfer price cases should not impact warehouse assignment
|
| 482 |
transferPrice = None
|
493 |
transferPrice = None
|
| 483 |
if item_pricing.has_key(warehouse.vendor_id):
|
494 |
if item_pricing.has_key(warehouse.vendor_id):
|
| 484 |
transferPrice = item_pricing[warehouse.vendor_id].transfer_price
|
495 |
transferPrice = item_pricing[warehouse.vendor_id].transfer_price
|
| 485 |
if minTransferPrice is None or (transferPrice and minTransferPrice > transferPrice):
|
496 |
if minTransferPrice is None or (transferPrice and minTransferPrice > transferPrice):
|
| 486 |
warehouse_retid = warehouse.id
|
497 |
warehouse_retid = warehouse.id
|
| - |
|
498 |
billing_warehouse_retid = warehouse.billingWarehouseId
|
| 487 |
minTransferPrice = transferPrice
|
499 |
minTransferPrice = transferPrice
|
| - |
|
500 |
|
| - |
|
501 |
|
| - |
|
502 |
if billing_warehouse_retid in availabilityForBillingWarehouses:
|
| - |
|
503 |
availability = availabilityForBillingWarehouses[billing_warehouse_retid]
|
| - |
|
504 |
else:
|
| - |
|
505 |
availability = total_availability
|
| 488 |
|
506 |
|
| 489 |
return [warehouse_retid, total_availability]
|
507 |
return [warehouse_retid, availability]
|
| 490 |
|
508 |
|
| 491 |
def __get_warehouse_with_min_transfer_delay(warehouses, item_id, item_pricing):
|
509 |
def __get_warehouse_with_min_transfer_delay(warehouses, item_id, item_pricing):
|
| 492 |
minTransferDelay = None
|
510 |
minTransferDelay = None
|
| 493 |
minTransferDelayWarehouses = {}
|
511 |
minTransferDelayWarehouses = {}
|
| 494 |
total_availability = 0
|
512 |
total_availability = 0
|
| 495 |
|
513 |
|
| 496 |
for entry in CurrentInventorySnapshot.query.filter_by(item_id = item_id).all():
|
514 |
for entry in CurrentInventorySnapshot.query.filter_by(item_id = item_id).all():
|
| 497 |
if warehouses.has_key(entry.warehouse_id):
|
515 |
if warehouses.has_key(entry.warehouse_id):
|
| 498 |
warehouse = warehouses[entry.warehouse_id]
|
516 |
warehouse = warehouses[entry.warehouse_id]
|
| 499 |
if entry.availability > entry.reserved:
|
517 |
#if entry.availability > entry.reserved:
|
| 500 |
total_availability += entry.availability - entry.reserved
|
518 |
total_availability += entry.availability - entry.reserved
|
| 501 |
transferDelay = warehouse.transferDelayInHours
|
519 |
transferDelay = warehouse.transferDelayInHours
|
| 502 |
if minTransferDelay is None or minTransferDelay >= transferDelay:
|
520 |
if minTransferDelay is None or minTransferDelay >= transferDelay:
|
| 503 |
if minTransferDelay != transferDelay:
|
521 |
if minTransferDelay != transferDelay:
|
| 504 |
minTransferDelayWarehouses = {}
|
522 |
minTransferDelayWarehouses = {}
|
| 505 |
minTransferDelayWarehouses[warehouse.id] = warehouse
|
523 |
minTransferDelayWarehouses[warehouse.id] = warehouse
|
| 506 |
minTransferDelay = transferDelay
|
524 |
minTransferDelay = transferDelay
|
| 507 |
|
525 |
|
| 508 |
return [__get_warehouse_with_min_transfer_price(minTransferDelayWarehouses, item_id, item_pricing, False)[0], total_availability]
|
526 |
return [__get_warehouse_with_min_transfer_price(minTransferDelayWarehouses, item_id, item_pricing, False)[0], total_availability]
|
| 509 |
|
527 |
|
| 510 |
def __get_warehouse_with_max_availability(warehouse_ids, item_id):
|
528 |
def __get_warehouse_with_max_availability(warehouse_ids, item_id):
|
| 511 |
warehouse_retid = -1
|
529 |
warehouse_retid = -1
|