Subversion Repositories SmartDukaan

Rev

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

Rev 6836 Rev 6857
Line 287... Line 287...
287
                            codRequirements[lineitem.item_id] += lineitem.quantity
287
                            codRequirements[lineitem.item_id] += lineitem.quantity
288
                        else:
288
                        else:
289
                            codRequirements[lineitem.item_id] = lineitem.quantity
289
                            codRequirements[lineitem.item_id] = lineitem.quantity
290
            
290
            
291
            advancedPOParameters = {}
291
            advancedPOParameters = {}
-
 
292
            SKUListForPO = []
-
 
293
            inventory_client = InventoryClient().get_client()
-
 
294
            itemStockPurchaseParams = inventory_client.getNonZeroItemStockPurchaseParams()
-
 
295
            for itemStockPurchaseParam in itemStockPurchaseParams:
-
 
296
                inventory_client = InventoryClient().get_client()
-
 
297
                oosStatuses = inventory_client.getOosStatusesForXDaysForItem(itemStockPurchaseParam.item_id,5)
-
 
298
                salesCount = 0
-
 
299
                numDaysInStock = 0
-
 
300
                avgSales = 0.0
-
 
301
                lastXdaysSale ="" 
-
 
302
                for oosStatus in oosStatuses:
-
 
303
                    if oosStatus.is_oos == False:
-
 
304
                        salesCount = salesCount + oosStatus.num_orders
-
 
305
                        numDaysInStock = numDaysInStock + 1
-
 
306
                        lastXdaysSale = lastXdaysSale + str(oosStatus.num_orders) + "-" 
-
 
307
                    else:
-
 
308
                        lastXdaysSale = lastXdaysSale + "X-"
-
 
309
                lastXdaysSale = lastXdaysSale[:-1]
-
 
310
                if numDaysInStock>0:
-
 
311
                    avgSales = float(salesCount)/numDaysInStock
-
 
312
                advancedPOParameters[itemStockPurchaseParam.item_id] = [round(avgSales * itemStockPurchaseParam.numOfDaysStock), avgSales, numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock, lastXdaysSale]
-
 
313
                if itemInventorySnapshot.has_key(itemStockPurchaseParam.item_id):
-
 
314
                    itemAvailability = itemInventorySnapshot.get(itemStockPurchaseParam.item_id)
-
 
315
                    currentAvailability = 0
-
 
316
                    currentReserved = 0
-
 
317
                    for wId, rQty in itemAvailability.reserved.iteritems():
-
 
318
                        if wId in ourGoodWarehouseIds:
-
 
319
                            currentReserved = currentReserved + rQty
-
 
320
                    if (availability[itemStockPurchaseParam.item_id][0] - currentReserved) < max(advancedPOParameters[itemStockPurchaseParam.item_id][0], advancedPOParameters[itemStockPurchaseParam.item_id][3]): 
-
 
321
                        SKUListForPO.append(itemStockPurchaseParam.item_id)
-
 
322
                else:
-
 
323
                    SKUListForPO.append(itemStockPurchaseParam.item_id)
-
 
324
                        
292
            for key in requirements:
325
            for key in requirements:
-
 
326
                if advancedPOParameters.has_key(key):
-
 
327
                    continue
293
                inventory_client = InventoryClient().get_client()
328
                inventory_client = InventoryClient().get_client()
294
                oosStatuses = inventory_client.getOosStatusesForXDaysForItem(key,5)
329
                oosStatuses = inventory_client.getOosStatusesForXDaysForItem(key,5)
295
                salesCount = 0
330
                salesCount = 0
296
                numDaysInStock = 0
331
                numDaysInStock = 0
297
                avgSales = 0
332
                avgSales = 0.0
-
 
333
                lastXdaysSale = ""
298
                for oosStatus in oosStatuses:
334
                for oosStatus in oosStatuses:
299
                    if oosStatus.is_oos == False:
335
                    if oosStatus.is_oos == False:
300
                        salesCount = salesCount + oosStatus.num_orders
336
                        salesCount = salesCount + oosStatus.num_orders
301
                        numDaysInStock = numDaysInStock + 1
337
                        numDaysInStock = numDaysInStock + 1
-
 
338
                        lastXdaysSale = lastXdaysSale + str(oosStatus.num_orders) + "-" 
-
 
339
                    else:
-
 
340
                        lastXdaysSale = lastXdaysSale + "X-"
-
 
341
                lastXdaysSale = lastXdaysSale[:-1]        
302
                if numDaysInStock>0:
342
                if numDaysInStock>0:
303
                    avgSales = salesCount/numDaysInStock
343
                    avgSales = float(salesCount)/float(numDaysInStock)
304
                itemStockPurchaseParam = ItemStockPurchaseParams()
344
                itemStockPurchaseParam = ItemStockPurchaseParams()
305
                itemStockPurchaseParam = inventory_client.getItemStockPurchaseParams(key)
345
                itemStockPurchaseParam = inventory_client.getItemStockPurchaseParams(key)
306
                advancedPOParameters[key] = [avgSales * itemStockPurchaseParam.numOfDaysStock, avgSales, numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock]
346
                advancedPOParameters[key] = [round(avgSales * itemStockPurchaseParam.numOfDaysStock), avgSales, numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock, lastXdaysSale]
307
                
347
                
-
 
348
            cumulativeRequirementsItemIds = list(set(requirements.keys()+SKUListForPO))
308
            netRequirements = {}
349
            netRequirements = {}
309
            for itemId in requirements.keys():
350
            for itemId in cumulativeRequirementsItemIds:
310
                requirementsCount = requirements.get(itemId)
351
                requirementsCount = requirements.get(itemId)
-
 
352
                if requirementsCount is None:
-
 
353
                    requirementsCount = 0.0
311
                if  availability.has_key(itemId):
354
                if  availability.has_key(itemId):
312
                    availabilityCount = availability.get(itemId)[0]
355
                    availabilityCount = availability.get(itemId)[0]
313
                    item = availability.get(itemId)[1]
356
                    item = availability.get(itemId)[1]
314
                    if requirementsCount > availabilityCount:
357
                    if requirementsCount > availabilityCount or itemId in SKUListForPO:
315
                        if item.preferredVendor is None:
358
                        if item.preferredVendor is None:
316
                            raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
359
                            raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
317
                        if (netRequirements.has_key(item.preferredVendor)):
360
                        if (netRequirements.has_key(item.preferredVendor)):
318
                            netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
361
                            netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
319
                        else:
362
                        else:
Line 348... Line 391...
348
                    t_po_lineitem.quantity = quantity
391
                    t_po_lineitem.quantity = quantity
349
                    
392
                    
350
                    t_po_lineitem.availableQuantity = 0
393
                    t_po_lineitem.availableQuantity = 0
351
                    if availability.has_key(item.id):
394
                    if availability.has_key(item.id):
352
                        t_po_lineitem.availableQuantity = availability[item.id][0]
395
                        t_po_lineitem.availableQuantity = availability[item.id][0]
-
 
396
                    if requirements.has_key(item.id):
353
                    t_po_lineitem.reservedQuantity = requirements[item.id]
397
                        t_po_lineitem.reservedQuantity = requirements[item.id]
354
                    t_po_lineitem.suggestedQuantity = advancedPOParameters[item.id][0] + quantity
398
                    t_po_lineitem.suggestedQuantity = max(advancedPOParameters[item.id][0], advancedPOParameters[item.id][3]) + quantity
355
                    t_po_lineitem.avgSales = advancedPOParameters[item.id][1]
399
                    t_po_lineitem.avgSales = advancedPOParameters[item.id][1]
356
                    t_po_lineitem.numberOfDaysInStock = advancedPOParameters[item.id][2] 
400
                    t_po_lineitem.numberOfDaysInStock = advancedPOParameters[item.id][2] 
357
                    t_po_lineitem.minStockLevel = advancedPOParameters[item.id][3]
401
                    t_po_lineitem.minStockLevel = advancedPOParameters[item.id][3]
358
                    t_po_lineitem.numberOfDaysStock = advancedPOParameters[item.id][4] 
402
                    t_po_lineitem.numberOfDaysStock = advancedPOParameters[item.id][4]
-
 
403
                    t_po_lineitem.lastXdaysSale = advancedPOParameters[item.id][5] 
359
                    if codRequirements.has_key(item.id):
404
                    if codRequirements.has_key(item.id):
360
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
405
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
361
                    try:
406
                    try:
362
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
407
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
363
                    except Exception as e:
408
                    except Exception as e: