Subversion Repositories SmartDukaan

Rev

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

Rev 6762 Rev 6821
Line 18... Line 18...
18
from shop2020.thriftpy.generic.ttypes import ExceptionType
18
from shop2020.thriftpy.generic.ttypes import ExceptionType
19
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
19
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
20
    InventoryType
20
    InventoryType
21
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
21
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
22
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
22
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
23
    PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
23
    PurchaseOrder as TPurchaseOrder, LineItem as TLineItem, POType,\
-
 
24
    PurchaseReturnType
24
from shop2020.utils.Utils import to_py_date
25
from shop2020.utils.Utils import to_py_date
25
from sqlalchemy import create_engine
26
from sqlalchemy import create_engine
26
from sqlalchemy.sql.expression import or_
27
from sqlalchemy.sql.expression import or_
27
import datetime
28
import datetime
28
import logging
29
import logging
Line 46... Line 47...
46
        setup_all(True)
47
        setup_all(True)
47
        
48
        
48
    def getPOforOurExternalBilling(self):
49
    def getPOforOurExternalBilling(self):
49
        todayDate = datetime.datetime.now()
50
        todayDate = datetime.datetime.now()
50
        todayDate = todayDate.replace(hour=0) 
51
        todayDate = todayDate.replace(hour=0) 
51
        purchaseOrder = PurchaseOrder.query.filter(PurchaseOrder.supplierId == 1).filter(PurchaseOrder.createdAt > todayDate).first()
52
        purchaseOrder = PurchaseOrder.query.filter(PurchaseOrder.supplierId == 1).filter(PurchaseOrder.createdAt > todayDate).filter(PurchaseOrder.type == POType.VIRTUAL).first()
52
        if purchaseOrder is None:
53
        if purchaseOrder is None:
53
            t_purchaseOrder = TPurchaseOrder()
54
            t_purchaseOrder = TPurchaseOrder()
54
            t_purchaseOrder.supplierId = 1
55
            t_purchaseOrder.supplierId = 1
55
            t_purchaseOrder.createdAt = datetime.datetime.now()
56
            t_purchaseOrder.createdAt = datetime.datetime.now()
56
            t_purchaseOrder.status = 0
57
            t_purchaseOrder.status = 0
57
            t_purchaseOrder.totalCost = 0
58
            t_purchaseOrder.totalCost = 0
58
            t_purchaseOrder.poNumber = 'Ours-Ext-' + str(todayDate.year) + "-" + str(todayDate.month) + "-" + str(todayDate.day)
59
            t_purchaseOrder.poNumber = 'Ours-Ext-' + str(todayDate.year) + "-" + str(todayDate.month) + "-" + str(todayDate.day)
-
 
60
            t_purchaseOrder.type = POType.VIRTUAL
59
            purchaseOrder = PurchaseOrder(t_purchaseOrder)
61
            purchaseOrder = PurchaseOrder(t_purchaseOrder)
60
            session.commit()
62
            session.commit()
61
        return purchaseOrder.id    
63
        return purchaseOrder.id    
62
       
64
       
63
    def updatelineItemforOursExternalBilling(self, poId, itemId, unitPrice):
65
    def updatelineItemforOursExternalBilling(self, poId, itemId, unitPrice):
Line 116... Line 118...
116
        
118
        
117
        Parameters:
119
        Parameters:
118
         - status
120
         - status
119
        """
121
        """
120
        try:
122
        try:
121
            pos = PurchaseOrder.query.filter_by(status=status).all()
123
            pos = PurchaseOrder.query.filter_by(status=status, type=POType.REAL).all()
122
            return [po.to_thrift_object() for po in pos ]
124
            return [po.to_thrift_object() for po in pos ]
123
        finally:
125
        finally:
124
            self.close_session()
126
            self.close_session()
125
 
127
 
126
    def getPurchaseOrder(self, id):
128
    def getPurchaseOrder(self, id):
Line 258... Line 260...
258
                        if availability.has_key(item.id):
260
                        if availability.has_key(item.id):
259
                            availability[item.id] = [availability[item.id][0] + quantity, item]
261
                            availability[item.id] = [availability[item.id][0] + quantity, item]
260
                        else:
262
                        else:
261
                            availability[item.id] = [quantity, item]
263
                            availability[item.id] = [quantity, item]
262
 
264
 
263
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
265
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).filter(PurchaseOrder.type == POType.REAL).all()
264
            for purchaseOrder in unfulfilledPurchaseOrders:
266
            for purchaseOrder in unfulfilledPurchaseOrders:
265
                for lineitem in purchaseOrder.lineitems:
267
                for lineitem in purchaseOrder.lineitems:
266
                    if availability.has_key(lineitem.itemId):
268
                    if availability.has_key(lineitem.itemId):
267
                        availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
269
                        availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
268
                    else:
270
                    else:
Line 283... Line 285...
283
                    if order.cod:
285
                    if order.cod:
284
                        if (codRequirements.has_key(lineitem.item_id)):
286
                        if (codRequirements.has_key(lineitem.item_id)):
285
                            codRequirements[lineitem.item_id] += lineitem.quantity
287
                            codRequirements[lineitem.item_id] += lineitem.quantity
286
                        else:
288
                        else:
287
                            codRequirements[lineitem.item_id] = lineitem.quantity
289
                            codRequirements[lineitem.item_id] = lineitem.quantity
288
 
290
            
-
 
291
            advancedPOParameters = {}
-
 
292
            for key in requirements:
-
 
293
                inventory_client = InventoryClient().get_client()
-
 
294
                oosStatuses = inventory_client.getOosStatusesForXDaysForItem(key,5)
-
 
295
                salesCount = 0
-
 
296
                numDaysInStock = 0
-
 
297
                for oosStatus in oosStatuses:
-
 
298
                    if oosStatus.status == False:
-
 
299
                        salesCount = salesCount + oosStatus.num_orders
-
 
300
                        numDaysInStock = numDaysInStock + 1
-
 
301
                avgSales = salesCount/numDaysInStock
-
 
302
                if avgSales>1:
-
 
303
                    itemStockPurchaseParam = inventory_client.getItemStockPurchaseParams(key)
-
 
304
                advancedPOParameters[key] = [avgSales * itemStockPurchaseParam.numOfDaysStock, avgSales, numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock]
-
 
305
                
289
            netRequirements = {}
306
            netRequirements = {}
290
            for itemId in requirements.keys():
307
            for itemId in requirements.keys():
291
                requirementsCount = requirements.get(itemId)
308
                requirementsCount = requirements.get(itemId)
292
                if  availability.has_key(itemId):
309
                if  availability.has_key(itemId):
293
                    availabilityCount = availability.get(itemId)[0]
310
                    availabilityCount = availability.get(itemId)[0]
Line 325... Line 342...
325
                    t_po_lineitem.modelNumber = item.modelNumber
342
                    t_po_lineitem.modelNumber = item.modelNumber
326
                    t_po_lineitem.modelName = item.modelName
343
                    t_po_lineitem.modelName = item.modelName
327
                    t_po_lineitem.color = item.color
344
                    t_po_lineitem.color = item.color
328
                    t_po_lineitem.itemId = item.id
345
                    t_po_lineitem.itemId = item.id
329
                    t_po_lineitem.quantity = quantity
346
                    t_po_lineitem.quantity = quantity
-
 
347
                    
-
 
348
                    t_po_lineitem.availableQuantity = availability[item.id][0]
-
 
349
                    t_po_lineitem.reservedQuantity = requirements[lineitem.item_id]
-
 
350
                    t_po_lineitem.suggestedQuantity = advancedPOParameters[item.id][0]
-
 
351
                    t_po_lineitem.avgSales = advancedPOParameters[item.id][1]
-
 
352
                    t_po_lineitem.numberOfDaysInStock = advancedPOParameters[item.id][2] 
-
 
353
                    t_po_lineitem.minStockLevel = advancedPOParameters[item.id][3]
-
 
354
                    t_po_lineitem.numberOfDaysStock = advancedPOParameters[item.id][2] 
330
                    if codRequirements.has_key(item.id):
355
                    if codRequirements.has_key(item.id):
331
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
356
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
332
                    try:
357
                    try:
333
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
358
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
334
                    except Exception as e:
359
                    except Exception as e:
Line 582... Line 607...
582
            purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId, t_purchaseReturn.amount)
607
            purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId, t_purchaseReturn.amount)
583
            purchaseReturn.vendorId = t_purchaseReturn.vendorId
608
            purchaseReturn.vendorId = t_purchaseReturn.vendorId
584
            purchaseReturn.amount = t_purchaseReturn.amount
609
            purchaseReturn.amount = t_purchaseReturn.amount
585
            purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
610
            purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
586
            purchaseReturn.isSettled = False
611
            purchaseReturn.isSettled = False
-
 
612
            purchaseReturn.type = t_purchaseReturn.type
587
            session.commit()
613
            session.commit()
588
            return purchaseReturn.id
614
            return purchaseReturn.id
589
        except Exception as e:
615
        except Exception as e:
590
            print e
616
            print e
591
            raise PurchaseServiceException(101, 'Exception while creating  Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
617
            raise PurchaseServiceException(101, 'Exception while creating  Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
Line 595... Line 621...
595
    def getUnsettledPurchaseReturns(self):
621
    def getUnsettledPurchaseReturns(self):
596
        '''
622
        '''
597
        For getting all unsettled Purchase Returns
623
        For getting all unsettled Purchase Returns
598
        '''
624
        '''
599
        try:
625
        try:
600
            purchaseReturns = PurchaseReturn.query.filter_by(isSettled=False).all()
626
            purchaseReturns = PurchaseReturn.query.filter_by(isSettled=False).filter_by(type=PurchaseReturnType.REAL).all()
601
            return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
627
            return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
602
        except Exception as e:
628
        except Exception as e:
603
            print e
629
            print e
604
            raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
630
            raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
605
        finally:
631
        finally: