Subversion Repositories SmartDukaan

Rev

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

Rev 18423 Rev 18425
Line 79... Line 79...
79
        """
79
        """
80
        try:
80
        try:
81
            purchaseOrders = []
81
            purchaseOrders = []
82
            
82
            
83
            transactionClient = TransactionClient().get_client()
83
            transactionClient = TransactionClient().get_client()
84
            pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED], 0, 0, warehouseId, 0)
84
            pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED, OrderStatus.COD_VERIFICATION_PENDING], 0, 0, warehouseId, 0)
85
    
85
    
86
            if not pending_orders:
86
            if not pending_orders:
87
                return purchaseOrders
87
                return purchaseOrders
88
    
88
    
89
            inventory_client = InventoryClient().get_client()
89
            inventory_client = InventoryClient().get_client()
90
            availability = {}
90
            availability = {}
-
 
91
            virtualInventory = {}
91
            
92
            
92
            ourGoodWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)]
93
            ourGoodWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)]
-
 
94
            ourVirtualWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.THIRD_PARTY, InventoryType.GOOD, 0, None, warehouseId)]
93
            itemInventorySnapshot = inventory_client.getInventorySnapshot(0)
95
            itemInventorySnapshot = inventory_client.getInventorySnapshot(0)
94
            for itemId, itemInventory in itemInventorySnapshot.iteritems():
96
            for itemId, itemInventory in itemInventorySnapshot.iteritems():
95
                '''item = self.__get_item_from_master(itemId)'''
97
                '''item = self.__get_item_from_master(itemId)'''
96
                for warehouseId, quantity in itemInventory.availability.iteritems():
98
                for warehouseId, quantity in itemInventory.availability.iteritems():
97
                    if warehouseId in ourGoodWarehouseIds:
99
                    if warehouseId in ourGoodWarehouseIds:
98
                        if availability.has_key(itemId):
100
                        if availability.has_key(itemId):
99
                            availability[itemId] = [availability[itemId][0] + quantity]
101
                            availability[itemId] = [availability[itemId][0] + quantity]
100
                        else:
102
                        else:
101
                            availability[itemId] = [quantity]
103
                            availability[itemId] = [quantity]
-
 
104
                            
-
 
105
                    if warehouseId in ourVirtualWarehouseIds:
-
 
106
                        if virtualInventory.has_key(itemId):
-
 
107
                            virtualInventory[itemId] = [virtualInventory[itemId][0] + quantity]
-
 
108
                        else:
-
 
109
                            virtualInventory[itemId] = [quantity]
102
    
110
            
103
            previouslyOrderedQty = {}
111
            previouslyOrderedQty = {}
104
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).filter(PurchaseOrder.type == POType.REAL).all()
112
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).filter(PurchaseOrder.type == POType.REAL).all()
105
            for purchaseOrder in unfulfilledPurchaseOrders:
113
            for purchaseOrder in unfulfilledPurchaseOrders:
106
                for lineitem in purchaseOrder.lineitems:
114
                for lineitem in purchaseOrder.lineitems:
107
                    if previouslyOrderedQty.has_key(lineitem.itemId):
115
                    if previouslyOrderedQty.has_key(lineitem.itemId):
Line 115... Line 123...
115
                        '''item = self.__get_item_from_master(lineitem.itemId)'''
123
                        '''item = self.__get_item_from_master(lineitem.itemId)'''
116
                        availability[lineitem.itemId] = [lineitem.unfulfilledQuantity]
124
                        availability[lineitem.itemId] = [lineitem.unfulfilledQuantity]
117
    
125
    
118
            codRequirements = {}
126
            codRequirements = {}
119
            requirements = {}
127
            requirements = {}
-
 
128
            verificationPendingOrders = {}
120
            for order in pending_orders:
129
            for order in pending_orders:
121
                if order.purchaseOrderId:
130
                if order.purchaseOrderId:
122
                    continue
131
                    continue
123
                for lineitem in order.lineitems:
132
                for lineitem in order.lineitems:
124
                    if (requirements.has_key(lineitem.item_id)):
133
                    if (requirements.has_key(lineitem.item_id)):
125
                        requirements[lineitem.item_id] += lineitem.quantity
134
                        requirements[lineitem.item_id] = requirements.get(lineitem.item_id) + lineitem.quantity
126
                    else:
135
                    else:
127
                        requirements[lineitem.item_id] = lineitem.quantity
136
                        requirements[lineitem.item_id] = lineitem.quantity
128
                    
137
                    
129
                    if order.cod:
138
                    if order.cod:
130
                        if (codRequirements.has_key(lineitem.item_id)):
139
                        if (codRequirements.has_key(lineitem.item_id)):
131
                            codRequirements[lineitem.item_id] += lineitem.quantity
140
                            codRequirements[lineitem.item_id] = codRequirements.get(lineitem.item_id) + lineitem.quantity
132
                        else:
141
                        else:
133
                            codRequirements[lineitem.item_id] = lineitem.quantity
142
                            codRequirements[lineitem.item_id] = lineitem.quantity
-
 
143
                            
-
 
144
                        if order.status == OrderStatus.COD_VERIFICATION_PENDING:
-
 
145
                            if (verificationPendingOrders.has_key(lineitem.item_id)):
-
 
146
                                verificationPendingOrders[lineitem.item_id] = verificationPendingOrders.get(lineitem.item_id) + lineitem.quantity
-
 
147
                            else:
-
 
148
                                verificationPendingOrders[lineitem.item_id] = lineitem.quantity
134
            
149
            
135
            advancedPOParameters = {}
150
            advancedPOParameters = {}
136
            SKUListForPO = []
151
            SKUListForPO = []
137
            inventory_client = InventoryClient().get_client()
152
            inventory_client = InventoryClient().get_client()
138
            itemStockPurchaseParams = inventory_client.getNonZeroItemStockPurchaseParams()
153
            itemStockPurchaseParams = inventory_client.getNonZeroItemStockPurchaseParams()
Line 278... Line 293...
278
                    t_po_lineitem['numberOfDaysInStock'] = advancedPOParameters[item.id][2] 
293
                    t_po_lineitem['numberOfDaysInStock'] = advancedPOParameters[item.id][2] 
279
                    t_po_lineitem['minStockLevel'] = advancedPOParameters[item.id][3]
294
                    t_po_lineitem['minStockLevel'] = advancedPOParameters[item.id][3]
280
                    t_po_lineitem['numberOfDaysStock'] = advancedPOParameters[item.id][4]
295
                    t_po_lineitem['numberOfDaysStock'] = advancedPOParameters[item.id][4]
281
                    t_po_lineitem['lastXdaysSale'] = advancedPOParameters[item.id][5]
296
                    t_po_lineitem['lastXdaysSale'] = advancedPOParameters[item.id][5]
282
                    t_po_lineitem['rtoOrders'] = advancedPOParameters[item.id][6]
297
                    t_po_lineitem['rtoOrders'] = advancedPOParameters[item.id][6]
-
 
298
                    if verificationPendingOrders.has_key(item.id):
-
 
299
                        t_po_lineitem['verificationPending'] = verificationPendingOrders[item.id]
-
 
300
                    else:
-
 
301
                        t_po_lineitem['verificationPending'] = 0
-
 
302
                        
-
 
303
                    if virtualInventory.has_key(item.id):
-
 
304
                        t_po_lineitem['virtualStock'] = virtualInventory[item.id]
-
 
305
                    else:
-
 
306
                        t_po_lineitem['virtualStock'] = 0
283
                    if previouslyOrderedQty.has_key(item.id):
307
                    if previouslyOrderedQty.has_key(item.id):
284
                        t_po_lineitem['previouslyOrderedQty'] = previouslyOrderedQty[item.id]
308
                        t_po_lineitem['previouslyOrderedQty'] = previouslyOrderedQty[item.id]
285
                    else:
309
                    else:
286
                        t_po_lineitem['previouslyOrderedQty'] = 0
310
                        t_po_lineitem['previouslyOrderedQty'] = 0
287
                    if codRequirements.has_key(item.id):
311
                    if codRequirements.has_key(item.id):
Line 361... Line 385...
361
    worksheet.write(row, inc(), 'Prepaid', boldStyle)
385
    worksheet.write(row, inc(), 'Prepaid', boldStyle)
362
    worksheet.write(row, inc(), 'Transfer price', boldStyle)
386
    worksheet.write(row, inc(), 'Transfer price', boldStyle)
363
    worksheet.write(row, inc(), 'Nlc', boldStyle)
387
    worksheet.write(row, inc(), 'Nlc', boldStyle)
364
    worksheet.write(row, inc(), 'Total amount', boldStyle)
388
    worksheet.write(row, inc(), 'Total amount', boldStyle)
365
    worksheet.write(row, inc(), 'Pack Quantity', boldStyle)
389
    worksheet.write(row, inc(), 'Pack Quantity', boldStyle)
-
 
390
    worksheet.write(row, inc(), 'Available Quantity', boldStyle)
-
 
391
    worksheet.write(row, inc(), 'Virtual Stock', boldStyle)
366
    worksheet.write(row, inc(), 'NetPendingOrderQty', boldStyle)
392
    worksheet.write(row, inc(), 'NetPendingOrderQty', boldStyle)
367
    worksheet.write(row, inc(), 'PreviouslyOrderedQty', boldStyle)
393
    worksheet.write(row, inc(), 'PreviouslyOrderedQty', boldStyle)
368
    worksheet.write(row, inc(), 'AverageSale', boldStyle)
394
    worksheet.write(row, inc(), 'AverageSale', boldStyle)
369
    worksheet.write(row, inc(), 'Pending RTOs', boldStyle)
395
    worksheet.write(row, inc(), 'Pending RTOs', boldStyle)
-
 
396
    worksheet.write(row, inc(), 'COD Pending Orders', boldStyle)
370
    worksheet.write(row, inc(), 'NumDaysStock', boldStyle)
397
    worksheet.write(row, inc(), 'NumDaysStock', boldStyle)
371
    worksheet.write(row, inc(), 'MinStockReq', boldStyle)
398
    worksheet.write(row, inc(), 'MinStockReq', boldStyle)
372
    worksheet.write(row, inc(), 'Additional Qty', boldStyle)
399
    worksheet.write(row, inc(), 'Additional Qty', boldStyle)
373
    
400
    
374
    
401
    
Line 393... Line 420...
393
            worksheet.write(row, inc(), float(lineitem.get('suggestedQuantity')) * float(lineitem.get('unitPrice')))
420
            worksheet.write(row, inc(), float(lineitem.get('suggestedQuantity')) * float(lineitem.get('unitPrice')))
394
            worksheet.write(row, inc(), lineitem.get('packQuantity'))
421
            worksheet.write(row, inc(), lineitem.get('packQuantity'))
395
            reservedCount = 0
422
            reservedCount = 0
396
            if lineitem.get('reservedQuantity') is not None:
423
            if lineitem.get('reservedQuantity') is not None:
397
                reservedCount = lineitem.get('reservedQuantity')
424
                reservedCount = lineitem.get('reservedQuantity')
-
 
425
            worksheet.write(row, inc(), long(lineitem.get('availableQuantity')))
-
 
426
            worksheet.write(row, inc(), lineitem.get('virtualStock'))
398
            worksheet.write(row, inc(), long(reservedCount))-long(lineitem.get('availableQuantity'))
427
            worksheet.write(row, inc(), long(reservedCount)-long(lineitem.get('availableQuantity')))
399
            worksheet.write(row, inc(), lineitem.get('previouslyOrderedQty'))
428
            worksheet.write(row, inc(), lineitem.get('previouslyOrderedQty'))
400
            worksheet.write(row, inc(), "("+lineitem.get('lastXdaysSale')+")"+str(lineitem.get('avgSales')))
429
            worksheet.write(row, inc(), "("+lineitem.get('lastXdaysSale')+")"+str(lineitem.get('avgSales')))
401
            worksheet.write(row, inc(), lineitem.get('rtoOrders'))
430
            worksheet.write(row, inc(), lineitem.get('rtoOrders'))
-
 
431
            worksheet.write(row, inc(), lineitem.get('verificationPending'))
402
            worksheet.write(row, inc(), lineitem.get('numberOfDaysStock'))
432
            worksheet.write(row, inc(), lineitem.get('numberOfDaysStock'))
403
            worksheet.write(row, inc(), lineitem.get('minStockLevel'))
433
            worksheet.write(row, inc(), lineitem.get('minStockLevel'))
404
            
434
            
405
            stockThroughAvgSales = float(lineitem.get('avgSales')) * float(lineitem.get('numberOfDaysStock'))
435
            stockThroughAvgSales = float(lineitem.get('avgSales')) * float(lineitem.get('numberOfDaysStock'))
406
            additionalQty = 0
436
            additionalQty = 0