Subversion Repositories SmartDukaan

Rev

Rev 5990 | Rev 6014 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5990 Rev 6013
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