Subversion Repositories SmartDukaan

Rev

Rev 21847 | Rev 23087 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4503 mandeep.dh 1
'''
2
Created on 29-Jul-2011
3
 
4
@author: Chandranshu
5
'''
6
from elixir import metadata, setup_all, session
21844 amit.gupta 7
from expiringdict import ExpiringDict
4754 mandeep.dh 8
from shop2020.clients.CatalogClient import CatalogClient
5944 mandeep.dh 9
from shop2020.clients.InventoryClient import InventoryClient
4754 mandeep.dh 10
from shop2020.clients.TransactionClient import TransactionClient
5443 mandeep.dh 11
from shop2020.purchase.main.model.Invoice import Invoice
4503 mandeep.dh 12
from shop2020.purchase.main.model.LineItem import LineItem
13
from shop2020.purchase.main.model.Purchase import Purchase
21621 amit.gupta 14
from shop2020.purchase.main.model.PurchaseOrder import PurchaseOrder
6467 amar.kumar 15
from shop2020.purchase.main.model.PurchaseReturn import PurchaseReturn
21621 amit.gupta 16
from shop2020.purchase.main.model.PurchaseReturnSettlement import \
17
    PurchaseReturnSettlement
5110 mandeep.dh 18
from shop2020.purchase.main.model.RevisionedPurchaseOrder import \
19
    RevisionedPurchaseOrder
4503 mandeep.dh 20
from shop2020.purchase.main.model.Supplier import Supplier
5768 mandeep.dh 21
from shop2020.thriftpy.generic.ttypes import ExceptionType
5944 mandeep.dh 22
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
6832 amar.kumar 23
    InventoryType, ItemStockPurchaseParams
4754 mandeep.dh 24
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
25
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
21621 amit.gupta 26
    PurchaseOrder as TPurchaseOrder, LineItem as TLineItem, POType, \
10864 manish.sha 27
    PurchaseReturnType, PurchaseReturnInventoryType
5443 mandeep.dh 28
from shop2020.utils.Utils import to_py_date
4503 mandeep.dh 29
from sqlalchemy import create_engine
5238 mandeep.dh 30
from sqlalchemy.sql.expression import or_
4503 mandeep.dh 31
import datetime
32
import logging
4754 mandeep.dh 33
import sys
21621 amit.gupta 34
import traceback
4503 mandeep.dh 35
 
36
 
37
logging.basicConfig(level=logging.DEBUG)
38
 
21844 amit.gupta 39
 
40
HOURS=3600
41
CACHE_THREE_HOURS = ExpiringDict(max_len=10, max_age_seconds=3*HOURS)
42
 
43
 
44
 
45
def fetchStateMaster():
46
    if not CACHE_THREE_HOURS.get("statemaster"):
47
        try:
48
            inventory_client = InventoryClient().get_client()
49
            CACHE_THREE_HOURS["statemaster"] = inventory_client.getStateMaster()
50
 
51
        except:
52
            print "Could not fetch"
53
    return CACHE_THREE_HOURS.get("statemaster")
54
 
4503 mandeep.dh 55
class PurchaseServiceHandler:
56
    '''
57
    classdocs
58
    '''
59
 
60
    def __init__(self, dbname='warehouse', db_hostname='localhost',  echoOn=True):
61
        '''
62
        Constructor
63
        '''
64
        engine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
65
        metadata.bind = engine
66
        metadata.bind.echo = echoOn
67
        setup_all(True)
68
 
6762 amar.kumar 69
    def getPOforOurExternalBilling(self):
70
        todayDate = datetime.datetime.now()
71
        todayDate = todayDate.replace(hour=0) 
6821 amar.kumar 72
        purchaseOrder = PurchaseOrder.query.filter(PurchaseOrder.supplierId == 1).filter(PurchaseOrder.createdAt > todayDate).filter(PurchaseOrder.type == POType.VIRTUAL).first()
6762 amar.kumar 73
        if purchaseOrder is None:
74
            t_purchaseOrder = TPurchaseOrder()
75
            t_purchaseOrder.supplierId = 1
76
            t_purchaseOrder.createdAt = datetime.datetime.now()
77
            t_purchaseOrder.status = 0
78
            t_purchaseOrder.totalCost = 0
8716 amar.kumar 79
            t_purchaseOrder.warehouseId = 9
6762 amar.kumar 80
            t_purchaseOrder.poNumber = 'Ours-Ext-' + str(todayDate.year) + "-" + str(todayDate.month) + "-" + str(todayDate.day)
6821 amar.kumar 81
            t_purchaseOrder.type = POType.VIRTUAL
6762 amar.kumar 82
            purchaseOrder = PurchaseOrder(t_purchaseOrder)
83
            session.commit()
84
        return purchaseOrder.id    
85
 
7672 rajveer 86
    def updatelineItemforOursExternalBilling(self, poId, itemId, unitPrice, nlc):
6762 amar.kumar 87
        lineItem = LineItem.get_by(purchaseOrder_id=poId, itemId=itemId)
88
        if lineItem is None:
89
            purchaseOrder = PurchaseOrder.get_by(id=poId)
90
            t_lineItem = TLineItem()
91
            t_lineItem.itemId = itemId
92
            t_lineItem.quantity = 1
93
            t_lineItem.unfulfilledQuantity = 1
94
            t_lineItem.createdAt = datetime.datetime.now()
95
            t_lineItem.unitPrice = unitPrice
7672 rajveer 96
            t_lineItem.nlc = nlc
6762 amar.kumar 97
            t_lineItem.fulfilled = False
98
            lineItem = LineItem(purchaseOrder, t_lineItem)
99
        else:
100
            lineItem.quantity = lineItem.quantity + 1
101
            lineItem.fulfilled = False
102
            lineItem.unfulfilledQuantity = lineItem.unfulfilledQuantity + 1
103
        session.commit()
104
 
105
    def receiveinvoiceforOursExternalBilling(self, invoiceNumber):
106
        invoice = Invoice()
107
        invoice.invoiceNumber = invoiceNumber
108
        invoice.date = datetime.datetime.now()
109
        invoice.numItems = 1
110
        invoice.receivedFrom = "Hotspot-Billing"
111
        invoice.supplierId = 1
11219 manish.sha 112
        invoice.invoiceDate = datetime.datetime.now()
6762 amar.kumar 113
        session.commit()
114
 
115
    def createPurchaseforOursExternalBilling(self, poId, invoiceNumber):
116
        purchaseOrder = PurchaseOrder.get_by(id=poId)
117
        purchase = Purchase(purchaseOrder, invoiceNumber, 0)
118
        session.commit()
119
        return purchase.id
120
 
4503 mandeep.dh 121
    def createPurchaseOrder(self, tPurchaseOrder):
122
        """
123
        Creates a purchase order based on the data in the given purchase order object.
124
        This method populates a number of missing fields
125
 
126
        Parameters:
127
         - purchaseOrder
128
        """
129
        try:
130
            purchaseOrder = PurchaseOrder(tPurchaseOrder)
131
            session.commit()
132
            purchaseOrder.set_po_number()
133
            session.commit()
134
            return purchaseOrder.id
135
        finally:
136
            self.close_session()
137
 
138
    def getAllPurchaseOrders(self, status):
139
        """
140
        Returns a list of all the purchase orders in the given state
141
 
142
        Parameters:
143
         - status
144
        """
145
        try:
6821 amar.kumar 146
            pos = PurchaseOrder.query.filter_by(status=status, type=POType.REAL).all()
4503 mandeep.dh 147
            return [po.to_thrift_object() for po in pos ]
148
        finally:
149
            self.close_session()
150
 
151
    def getPurchaseOrder(self, id):
152
        """
153
        Returns the purchase order with the given id. Throws an exception if there is no such purchase order.
154
 
155
        Parameters:
156
         - id
157
        """
158
        try:
159
            purchaseOrder = PurchaseOrder.get_by(id=id)
160
            if not purchaseOrder:
161
                raise PurchaseServiceException(101, "No purchase order can be found with id:" + str(id)) 
162
            return purchaseOrder.to_thrift_object()
163
        finally:
164
            self.close_session()
165
 
166
    def getSupplier(self, id):
167
        """
168
        Returns the supplier with the given order id. Throws an exception if there is no such supplier.
169
 
170
        Parameters:
171
         - id
172
        """
173
        try:
174
            return Supplier.get_by(id=id).to_thrift_object()
175
        finally:
176
            self.close_session()
177
 
11801 manish.sha 178
    def startPurchase(self, purchaseOrderId, invoiceNumber, freightCharges, purchaseComments):
4503 mandeep.dh 179
        """
180
        Creates a purchase for the given purchase order.
181
        Throws an exception if no more purchases are allowed against the given purchase order.
182
 
183
        Parameters:
184
         - purchaseOrderId
185
         - invoiceNumber
186
         - freightCharges
187
        """
188
        try:
6762 amar.kumar 189
            purchase_order = PurchaseOrder.get_by(id=purchaseOrderId)
11801 manish.sha 190
            purchase = Purchase(purchase_order, invoiceNumber, freightCharges, purchaseComments)
4503 mandeep.dh 191
            session.commit()
192
            return purchase.id
193
        finally:
194
            self.close_session()
195
 
196
    def closePurchase(self, purchaseId):
197
        """
198
        Marks a purchase as complete and updates the receivedOn time.
199
        Throws an exception if no such purchase exists.
200
 
201
        Parameters:
202
         - purchaseId
203
        """
204
        try:
205
            purchase = Purchase.get_by(id=purchaseId)
206
            purchase.receivedOn = datetime.datetime.now()
207
            session.commit()
208
        finally:
209
            self.close_session()
210
 
211
    def getAllPurchases(self, purchaseOrderId, open):
212
        """
213
        Returns all open or closed purchases for the given purchase order. Throws an exception if no such purchase order exists
214
 
215
        Parameters:
216
         - purchaseOrderId
217
         - open
218
        """
219
        try:
220
            if open:
6762 amar.kumar 221
                purchases = Purchase.query.filter_by(purchaseOrder_id=purchaseOrderId, receivedOn=None).all()
4503 mandeep.dh 222
            else:
6762 amar.kumar 223
                purchases = Purchase.query.filter_by(purchaseOrder_id=purchaseOrderId).filter(Purchase.receivedOn != None).all()
4503 mandeep.dh 224
 
225
            return [purchase.to_thrift_object() for purchase in purchases]
226
        finally:
227
            self.close_session()
6385 amar.kumar 228
 
229
    def getPurchasesForPO(self, purchaseOrderId):
230
        """
231
        Returns all purchases for the given purchase order. Throws an exception if no such purchase order exists
232
 
233
        Parameters:
234
         - purchaseOrderId
235
         - open
236
        """
237
        try:
6762 amar.kumar 238
            purchases = Purchase.query.filter_by(purchaseOrder_id=purchaseOrderId).all()
6385 amar.kumar 239
            return [purchase.to_thrift_object() for purchase in purchases]
240
        finally:
241
            self.close_session()
4503 mandeep.dh 242
 
6385 amar.kumar 243
 
4555 mandeep.dh 244
    def getPurchaseOrderForPurchase(self, purchaseId):
4503 mandeep.dh 245
        """
4555 mandeep.dh 246
        Returns the purchase order for a given purchase
4503 mandeep.dh 247
 
248
        Parameters:
249
         - purchaseId
250
        """
4555 mandeep.dh 251
        try:
6762 amar.kumar 252
            return self.getPurchaseOrder(Purchase.query.filter_by(id=purchaseId).one().purchaseOrder_id)
4555 mandeep.dh 253
        finally:
254
            self.close_session()
4503 mandeep.dh 255
 
4754 mandeep.dh 256
    def getPendingPurchaseOrders(self, warehouseId):
257
        """
258
        Creates purchase order objects from pending orders
259
 
260
        Parameters:
261
         - warehouseId
262
        """
263
        try:
264
            purchaseOrders = []
265
            if not warehouseId:
266
                raise PurchaseServiceException(101, "bad warehouse id")
267
 
268
            transactionClient = TransactionClient().get_client()
18426 manish.sha 269
            pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED, OrderStatus.COD_VERIFICATION_PENDING], 0, 0, warehouseId, 0)
4754 mandeep.dh 270
 
271
            if not pending_orders:
272
                return purchaseOrders
273
 
5944 mandeep.dh 274
            inventory_client = InventoryClient().get_client()
4754 mandeep.dh 275
            availability = {}
5110 mandeep.dh 276
 
5944 mandeep.dh 277
            ourGoodWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)]
278
            itemInventorySnapshot = inventory_client.getInventorySnapshot(0)
279
            for itemId, itemInventory in itemInventorySnapshot.iteritems():
7105 amar.kumar 280
                '''item = self.__get_item_from_master(itemId)'''
5944 mandeep.dh 281
                for warehouseId, quantity in itemInventory.availability.iteritems():
282
                    if warehouseId in ourGoodWarehouseIds:
7105 amar.kumar 283
                        if availability.has_key(itemId):
284
                            availability[itemId] = [availability[itemId][0] + quantity]
5944 mandeep.dh 285
                        else:
7105 amar.kumar 286
                            availability[itemId] = [quantity]
4754 mandeep.dh 287
 
6880 amar.kumar 288
            previouslyOrderedQty = {}
6821 amar.kumar 289
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).filter(PurchaseOrder.type == POType.REAL).all()
5238 mandeep.dh 290
            for purchaseOrder in unfulfilledPurchaseOrders:
291
                for lineitem in purchaseOrder.lineitems:
6880 amar.kumar 292
                    if previouslyOrderedQty.has_key(lineitem.itemId):
293
                        previouslyOrderedQty[lineitem.itemId] = previouslyOrderedQty[lineitem.itemId] + lineitem.unfulfilledQuantity
294
                    else:
295
                        previouslyOrderedQty[lineitem.itemId] = lineitem.unfulfilledQuantity
296
 
5238 mandeep.dh 297
                    if availability.has_key(lineitem.itemId):
7105 amar.kumar 298
                        availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity]
5238 mandeep.dh 299
                    else:
7105 amar.kumar 300
                        '''item = self.__get_item_from_master(lineitem.itemId)'''
7106 amar.kumar 301
                        availability[lineitem.itemId] = [lineitem.unfulfilledQuantity]
5238 mandeep.dh 302
 
4754 mandeep.dh 303
            codRequirements = {}
304
            requirements = {}
305
            for order in pending_orders:
4758 mandeep.dh 306
                if order.purchaseOrderId:
4757 mandeep.dh 307
                    continue
4754 mandeep.dh 308
                for lineitem in order.lineitems:
309
                    if (requirements.has_key(lineitem.item_id)):
310
                        requirements[lineitem.item_id] += lineitem.quantity
311
                    else:
312
                        requirements[lineitem.item_id] = lineitem.quantity
313
 
314
                    if order.cod:
315
                        if (codRequirements.has_key(lineitem.item_id)):
316
                            codRequirements[lineitem.item_id] += lineitem.quantity
317
                        else:
318
                            codRequirements[lineitem.item_id] = lineitem.quantity
6821 amar.kumar 319
 
320
            advancedPOParameters = {}
6857 amar.kumar 321
            SKUListForPO = []
322
            inventory_client = InventoryClient().get_client()
323
            itemStockPurchaseParams = inventory_client.getNonZeroItemStockPurchaseParams()
324
            for itemStockPurchaseParam in itemStockPurchaseParams:
325
                inventory_client = InventoryClient().get_client()
9696 amar.kumar 326
                oosStatuses = inventory_client.getOosStatusesForXDaysForItem(itemStockPurchaseParam.item_id, 0, 3)
6857 amar.kumar 327
                salesCount = 0
328
                numDaysInStock = 0
8182 amar.kumar 329
                rtoCount = 0
6857 amar.kumar 330
                avgSales = 0.0
331
                lastXdaysSale ="" 
332
                for oosStatus in oosStatuses:
333
                    if oosStatus.is_oos == False:
334
                        salesCount = salesCount + oosStatus.num_orders
335
                        numDaysInStock = numDaysInStock + 1
336
                        lastXdaysSale = lastXdaysSale + str(oosStatus.num_orders) + "-" 
337
                    else:
338
                        lastXdaysSale = lastXdaysSale + "X-"
8221 amar.kumar 339
                if oosStatus.rto_orders is not None:
8182 amar.kumar 340
                    rtoCount = oosStatus.rto_orders
6857 amar.kumar 341
                lastXdaysSale = lastXdaysSale[:-1]
342
                if numDaysInStock>0:
343
                    avgSales = float(salesCount)/numDaysInStock
8182 amar.kumar 344
                advancedPOParameters[itemStockPurchaseParam.item_id] = [round(avgSales * itemStockPurchaseParam.numOfDaysStock), round(avgSales,2) , numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock, lastXdaysSale, rtoCount]
6857 amar.kumar 345
                if itemInventorySnapshot.has_key(itemStockPurchaseParam.item_id):
346
                    itemAvailability = itemInventorySnapshot.get(itemStockPurchaseParam.item_id)
347
                    currentAvailability = 0
348
                    currentReserved = 0
349
                    for wId, rQty in itemAvailability.reserved.iteritems():
350
                        if wId in ourGoodWarehouseIds:
351
                            currentReserved = currentReserved + rQty
9261 manish.sha 352
                    #Key Condition Added By Manish Sharma        
353
                    if availability.has_key(itemStockPurchaseParam.item_id):
354
                        if availability[itemStockPurchaseParam.item_id] is None:
355
                                availability[itemStockPurchaseParam.item_id] = [0]
356
                    else:
8182 amar.kumar 357
                        availability[itemStockPurchaseParam.item_id] = [0]
9261 manish.sha 358
                    if (availability[itemStockPurchaseParam.item_id][0] - currentReserved) < max(advancedPOParameters[itemStockPurchaseParam.item_id][0], advancedPOParameters[itemStockPurchaseParam.item_id][3]):
6857 amar.kumar 359
                        SKUListForPO.append(itemStockPurchaseParam.item_id)
360
                else:
361
                    SKUListForPO.append(itemStockPurchaseParam.item_id)
362
 
6821 amar.kumar 363
            for key in requirements:
6857 amar.kumar 364
                if advancedPOParameters.has_key(key):
365
                    continue
12175 manish.sha 366
                print "Item Id ---", key
6821 amar.kumar 367
                inventory_client = InventoryClient().get_client()
9696 amar.kumar 368
                oosStatuses = inventory_client.getOosStatusesForXDaysForItem(key, 0, 3)
6821 amar.kumar 369
                salesCount = 0
370
                numDaysInStock = 0
8182 amar.kumar 371
                rtoCount = 0
6857 amar.kumar 372
                avgSales = 0.0
373
                lastXdaysSale = ""
21620 amit.gupta 374
                if not oosStatuses:
375
                    continue
6821 amar.kumar 376
                for oosStatus in oosStatuses:
6832 amar.kumar 377
                    if oosStatus.is_oos == False:
6821 amar.kumar 378
                        salesCount = salesCount + oosStatus.num_orders
379
                        numDaysInStock = numDaysInStock + 1
6857 amar.kumar 380
                        lastXdaysSale = lastXdaysSale + str(oosStatus.num_orders) + "-" 
381
                    else:
382
                        lastXdaysSale = lastXdaysSale + "X-"
8182 amar.kumar 383
                lastXdaysSale = lastXdaysSale[:-1]
384
                if oosStatus.rto_orders:
385
                    rtoCount = oosStatus.rto_orders
6832 amar.kumar 386
                if numDaysInStock>0:
6857 amar.kumar 387
                    avgSales = float(salesCount)/float(numDaysInStock)
18588 manish.sha 388
                itemStockPurchaseParam = None
10864 manish.sha 389
                try:
390
                    itemStockPurchaseParam = inventory_client.getItemStockPurchaseParams(key)
391
                except Exception as e:
392
                    inventory_client.updateItemStockPurchaseParams(key, 0, 0)
393
                    itemStockPurchaseParam = inventory_client.getItemStockPurchaseParams(key)
18588 manish.sha 394
 
395
                if itemStockPurchaseParam.numOfDaysStock is None:
396
                    itemStockPurchaseParam.minStockLevel = 0
397
                    itemStockPurchaseParam.numOfDaysStock = 0
398
                    itemStockPurchaseParam.item_id = key
399
 
8182 amar.kumar 400
                advancedPOParameters[key] = [round(avgSales * itemStockPurchaseParam.numOfDaysStock), round(avgSales,2), numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock, lastXdaysSale, rtoCount]
6821 amar.kumar 401
 
6857 amar.kumar 402
            cumulativeRequirementsItemIds = list(set(requirements.keys()+SKUListForPO))
4754 mandeep.dh 403
            netRequirements = {}
6857 amar.kumar 404
            for itemId in cumulativeRequirementsItemIds:
12341 manish.sha 405
                print "Item Id for Preferred Vendor", itemId
4754 mandeep.dh 406
                requirementsCount = requirements.get(itemId)
6857 amar.kumar 407
                if requirementsCount is None:
408
                    requirementsCount = 0.0
4754 mandeep.dh 409
                if  availability.has_key(itemId):
410
                    availabilityCount = availability.get(itemId)[0]
7105 amar.kumar 411
                    item = self.__get_item_from_master(itemId)
6857 amar.kumar 412
                    if requirementsCount > availabilityCount or itemId in SKUListForPO:
5238 mandeep.dh 413
                        if item.preferredVendor is None:
414
                            raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
4754 mandeep.dh 415
                        if (netRequirements.has_key(item.preferredVendor)):
416
                            netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
417
                        else:
418
                            netRequirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
419
                else:
5944 mandeep.dh 420
                    item = self.__get_item_from_master(itemId)
4754 mandeep.dh 421
                    if item.preferredVendor is None:
5238 mandeep.dh 422
                        raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
4754 mandeep.dh 423
                    if (netRequirements.has_key(item.preferredVendor)):
424
                        netRequirements[item.preferredVendor].append([item, requirementsCount])
425
                    else:
426
                        netRequirements[item.preferredVendor] = [[item, requirementsCount]];
5238 mandeep.dh 427
 
4754 mandeep.dh 428
            if not netRequirements:
429
                return purchaseOrders
430
 
431
            for vendorId in netRequirements.keys():
432
                t_purchase_order = TPurchaseOrder()
433
                t_purchase_order.supplierId = vendorId
434
                t_purchase_order.warehouseId = warehouseId
435
                t_purchase_order.lineitems = []
436
                for key in netRequirements.get(vendorId):
6762 amar.kumar 437
                    item = key[0]
21622 amit.gupta 438
                    if not advancedPOParameters.has_key(item.id):
439
                        continue
4754 mandeep.dh 440
                    quantity = key[1]
441
                    t_po_lineitem = TLineItem()
442
                    t_po_lineitem.productGroup = item.productGroup
443
                    t_po_lineitem.brand = item.brand
444
                    t_po_lineitem.modelNumber = item.modelNumber
445
                    t_po_lineitem.modelName = item.modelName
446
                    t_po_lineitem.color = item.color
447
                    t_po_lineitem.itemId = item.id
21844 amit.gupta 448
                    t_po_lineitem.hsnCode = item.hsnCode
6938 amar.kumar 449
                    if quantity <0: #TODO Check this logic
6882 amar.kumar 450
                        quantity=0
6861 amar.kumar 451
                    t_po_lineitem.quantity = quantity
6832 amar.kumar 452
                    t_po_lineitem.availableQuantity = 0
453
                    if availability.has_key(item.id):
6880 amar.kumar 454
                        if previouslyOrderedQty.has_key(item.id):
455
                            t_po_lineitem.availableQuantity = availability[item.id][0] - previouslyOrderedQty[item.id]
456
                        else:
457
                            t_po_lineitem.availableQuantity = availability[item.id][0]
6857 amar.kumar 458
                    if requirements.has_key(item.id):
459
                        t_po_lineitem.reservedQuantity = requirements[item.id]
8221 amar.kumar 460
                    additionalQty = max(advancedPOParameters[item.id][0], advancedPOParameters[item.id][3])
461
                    additionalQty = max(0,(additionalQty - (advancedPOParameters[item.id][6]/2)))
462
                    suggestedQuantity = additionalQty +key[1]
463
                    t_po_lineitem.suggestedQuantity = max(0,suggestedQuantity)
464
                    #t_po_lineitem.suggestedQuantity = max(advancedPOParameters[item.id][0], advancedPOParameters[item.id][3]) + key[1]
6821 amar.kumar 465
                    t_po_lineitem.avgSales = advancedPOParameters[item.id][1]
466
                    t_po_lineitem.numberOfDaysInStock = advancedPOParameters[item.id][2] 
467
                    t_po_lineitem.minStockLevel = advancedPOParameters[item.id][3]
6857 amar.kumar 468
                    t_po_lineitem.numberOfDaysStock = advancedPOParameters[item.id][4]
6880 amar.kumar 469
                    t_po_lineitem.lastXdaysSale = advancedPOParameters[item.id][5]
8182 amar.kumar 470
                    t_po_lineitem.rtoOrders = advancedPOParameters[item.id][6]
6880 amar.kumar 471
                    if previouslyOrderedQty.has_key(item.id):
472
                        t_po_lineitem.previouslyOrderedQty = previouslyOrderedQty[item.id]
473
                    else:
474
                        t_po_lineitem.previouslyOrderedQty = 0
4754 mandeep.dh 475
                    if codRequirements.has_key(item.id):
476
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
477
                    try:
5944 mandeep.dh 478
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
4754 mandeep.dh 479
                    except Exception as e:
480
                        vendor = self.getSupplier(vendorId)
481
                        print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
482
                        print e
483
                        raise PurchaseServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
484
                    t_po_lineitem.unitPrice = item_pricing.transferPrice
7672 rajveer 485
                    t_po_lineitem.nlc = item_pricing.nlc
9416 amar.kumar 486
                    t_po_lineitem.mrp = item.mrp
4754 mandeep.dh 487
                    t_purchase_order.lineitems.append(t_po_lineitem)
488
                purchaseOrders.append(t_purchase_order)
489
            return purchaseOrders
7105 amar.kumar 490
        except Exception as e:
491
            print e
8199 amar.kumar 492
            print sys.exc_info()[0]
21621 amit.gupta 493
            traceback.print_exc()
4754 mandeep.dh 494
        finally:
495
            self.close_session()
496
 
6762 amar.kumar 497
    def getSuppliers(self,):
4754 mandeep.dh 498
        """
499
        Returns all the valid suppliers
500
        """
501
        try:
21844 amit.gupta 502
            return [Supplier.to_thrift_object(supplier) for supplier in Supplier.query.filter(Supplier.gstin != None).all()]
4754 mandeep.dh 503
        finally:
504
            self.close_session()
505
 
21847 amit.gupta 506
    def getAllSuppliers(self,):
507
        """
508
        Returns all the valid suppliers
509
        """
510
        try:
511
            return [Supplier.to_thrift_object(supplier) for supplier in Supplier.query.all()]
512
        finally:
513
            self.close_session()
514
 
5185 mandeep.dh 515
    def unFulfillPO(self, purchaseId, itemId, quantity):
516
        """
517
        Unfulfills a given purchase id and an item with its quantity.
518
 
519
        Parameters:
520
         - purchaseId
521
         - itemId
522
         - quantity
523
        """
524
        try:
6762 amar.kumar 525
            purchaseOrderId = Purchase.query.filter_by(id=purchaseId).one().purchaseOrder_id
526
            lineitems = LineItem.query.filter_by(purchaseOrder_id=purchaseOrderId, itemId=itemId).all()
5185 mandeep.dh 527
            if lineitems:
528
                fulfilledQuantity = lineitems[0].quantity - lineitems[0].unfulfilledQuantity
529
                if fulfilledQuantity < quantity:
530
                    raise PurchaseServiceException(101, 'Can UnFulfill only ' + str(fulfilledQuantity) + 'quantity')
531
                else:
5437 mandeep.dh 532
                    lineitems[0].unfulfilledQuantity = lineitems[0].unfulfilledQuantity + quantity
5185 mandeep.dh 533
                    lineitems[0].fulfilled = 0
534
                    purchaseOrder = PurchaseOrder.get_by(id=purchaseOrderId)
535
                    purchaseOrder.status = POStatus.PARTIALLY_FULFILLED
536
                    session.commit()
537
                    return
538
 
539
            raise PurchaseServiceException(101, 'No lineitem found with this itemId: ' + str(itemId) + ' in PO Id: ' + str(purchaseOrderId))
540
        finally:
541
            self.close_session()        
542
 
4754 mandeep.dh 543
    def fulfillPO(self, purchaseOrderId, itemId, quantity):
544
        """
545
        Fulfills a given purchase order with an item.
546
 
547
        Parameters:
548
         - purchaseOrderId
549
         - itemId
550
         - quantity
551
        """
552
        try:
6762 amar.kumar 553
            lineitems = LineItem.query.filter_by(purchaseOrder_id=purchaseOrderId, itemId=itemId).all()
4754 mandeep.dh 554
            if lineitems:
555
                if lineitems[0].unfulfilledQuantity < quantity:
5361 mandeep.dh 556
                    raise PurchaseServiceException(101, 'Can fulfill only ' + str(lineitems[0].unfulfilledQuantity) + ' quantity')
4754 mandeep.dh 557
                else:
5361 mandeep.dh 558
                    lineitems[0].unfulfilledQuantity = lineitems[0].unfulfilledQuantity - quantity
4754 mandeep.dh 559
                    if not lineitems[0].unfulfilledQuantity:
560
                        lineitems[0].fulfilled = 1
5361 mandeep.dh 561
                        session.commit()
6762 amar.kumar 562
                        if not LineItem.query.filter_by(purchaseOrder_id=purchaseOrderId, fulfilled=0).all():
5361 mandeep.dh 563
                            purchaseOrder = PurchaseOrder.get_by(id=purchaseOrderId)
4754 mandeep.dh 564
                            purchaseOrder.status = POStatus.CLOSED
565
                    session.commit()
566
                    return
567
 
6762 amar.kumar 568
            raise PurchaseServiceException(101, 'No lineitem found with this itemId: ' + str(itemId) + ' in PO Id: ' + str(purchaseOrderId))
4754 mandeep.dh 569
        finally:
570
            self.close_session()
571
 
572
    def updatePurchaseOrder(self, purchaseOrder):
573
        """
574
        Amends a PO sa per the new lineitems passed
575
 
576
        Parameters:
577
         - purchaseOrder
578
        """
579
        try:
6762 amar.kumar 580
            existingPurchaseOrder = PurchaseOrder.get_by(id=purchaseOrder.id)
4754 mandeep.dh 581
            maxRevision = 0
6762 amar.kumar 582
            existingRevisions = RevisionedPurchaseOrder.query.filter_by(purchaseOrderId=purchaseOrder.id).all()
4754 mandeep.dh 583
            if existingRevisions:
584
                maxRevision = max([a.revision for a in existingRevisions]) + 1
5147 mandeep.dh 585
 
586
            newPOItems = {}
587
            for t_lineitem in purchaseOrder.lineitems:
588
                newPOItems[t_lineitem.itemId] = t_lineitem
589
 
4754 mandeep.dh 590
            for lineitem in existingPurchaseOrder.lineitems:
5147 mandeep.dh 591
                fulfilledQuantity = lineitem.quantity - lineitem.unfulfilledQuantity
592
                if fulfilledQuantity:
593
                    if not newPOItems.has_key(lineitem.itemId):
594
                        raise PurchaseServiceException(101, 'Cannot remove fulfilled item id: ' + str(lineitem.itemId) + ' from PO')
595
                    else:
596
                        if newPOItems[lineitem.itemId].quantity < fulfilledQuantity:
597
                            raise PurchaseServiceException(101, 'More quantity already fulfilled for item id: ' + str(lineitem.itemId))
598
                        else:
5437 mandeep.dh 599
                            newPOItems[lineitem.itemId].unfulfilledQuantity = newPOItems[lineitem.itemId].unfulfilledQuantity - fulfilledQuantity
4754 mandeep.dh 600
                revisionedPurchaseOrder = RevisionedPurchaseOrder()
601
                revisionedPurchaseOrder.purchaseOrderId = purchaseOrder.id
602
                revisionedPurchaseOrder.revision = maxRevision
603
                revisionedPurchaseOrder.itemId = lineitem.itemId
604
                revisionedPurchaseOrder.unfulfilledQuantity = lineitem.unfulfilledQuantity
605
                revisionedPurchaseOrder.unitPrice = lineitem.unitPrice
7672 rajveer 606
                revisionedPurchaseOrder.nlc = lineitem.nlc
4754 mandeep.dh 607
                revisionedPurchaseOrder.createdAt = lineitem.createdAt
608
                revisionedPurchaseOrder.quantity = lineitem.quantity
609
                lineitem.delete()
610
            existingPurchaseOrder.lineitems = [LineItem(existingPurchaseOrder, t_lineitem) for t_lineitem in purchaseOrder.lineitems]
611
            existingPurchaseOrder.totalCost = sum([t_lineitem.quantity * t_lineitem.unitPrice for t_lineitem in purchaseOrder.lineitems])
612
            session.commit()
613
        finally:
614
            self.close_session()
615
 
4503 mandeep.dh 616
    def close_session(self):
617
        if session.is_active:
618
            print "session is active. closing it."
619
            session.close()
620
 
5443 mandeep.dh 621
    def getInvoices(self, date):
622
        """
623
        Fetches all invoices for a given date
624
 
625
        Parameters:
626
         - date
627
        """
628
        try:
629
            return [i.to_thrift_object() for i in Invoice.query.filter(Invoice.date > to_py_date(date)).all()]
630
        finally:
631
            self.close_session()
6630 amar.kumar 632
 
7410 amar.kumar 633
    def getInvoicesForWarehouse(self, warehouseId, supplierId, date):
634
        """
635
        Fetches all invoices for a given date for specified physical warehouse
636
 
637
        Parameters:
638
         - date
639
        """
640
        try:
641
            return [i.to_thrift_object() for i in Invoice.query.filter(Invoice.date > to_py_date(date)).filter(Invoice.warehouseId == warehouseId).filter(Invoice.supplierId == supplierId).all()]
642
        finally:
643
            self.close_session()
644
 
6630 amar.kumar 645
    def getInvoice(self, invoiceNumber, supplierId):
646
        """
647
        Fetches all invoices for  given invoiceNumber and supplierId 
5443 mandeep.dh 648
 
6630 amar.kumar 649
        Parameters:
650
         - invoiceNumber, supplierId
651
        """
652
        try:
6762 amar.kumar 653
            invoice = Invoice.query.filter_by(invoiceNumber=invoiceNumber, supplierId=supplierId).first()
6638 amar.kumar 654
            if invoice is None:
6762 amar.kumar 655
                return None
6638 amar.kumar 656
            else:
657
                return invoice.to_thrift_object()
6630 amar.kumar 658
        finally:
659
            self.close_session()
660
 
5443 mandeep.dh 661
    def createInvoice(self, invoice):
662
        """
663
        Creates an invoice object
664
 
665
        Parameters:
666
         - invoice
667
        """
668
        try:
6762 amar.kumar 669
            if Invoice.query.filter_by(supplierId=invoice.supplierId, date=to_py_date(invoice.date), invoiceNumber=invoice.invoiceNumber).all():
5768 mandeep.dh 670
                raise PurchaseServiceException(ExceptionType.ILLEGAL_ARGUMENTS, "Already received such invoice")
5443 mandeep.dh 671
            invoiceObj = Invoice()
672
            invoiceObj.invoiceNumber = invoice.invoiceNumber
673
            invoiceObj.date = to_py_date(invoice.date)
674
            invoiceObj.receivedFrom = invoice.receivedFrom
675
            invoiceObj.numItems = invoice.numItems
676
            invoiceObj.supplierId = invoice.supplierId
7410 amar.kumar 677
            invoiceObj.warehouseId = invoice.warehouseId
11219 manish.sha 678
            invoiceObj.invoiceDate = to_py_date(invoice.invoiceDate)
5443 mandeep.dh 679
            session.commit()
680
        finally:
681
            self.close_session()        
682
 
5591 mandeep.dh 683
    def addSupplier(self, supplier):
684
        """
685
        Creates a supplier
686
 
687
        Parameters:
688
         - supplier
689
        """
690
        try:
691
            supplierObj = Supplier()
692
            supplierObj.communicationAddress = supplier.communicationAddress
693
            supplierObj.contactEmail = supplier.contactEmail
694
            supplierObj.contactFax = supplier.contactFax
695
            supplierObj.contactName = supplier.contactName
696
            supplierObj.contactPhone = supplier.contactPhone
697
            supplierObj.fax = supplier.fax
698
            supplierObj.headDesignation = supplier.headDesignation
699
            supplierObj.headEmail = supplier.headEmail
700
            supplierObj.headName = supplier.headName
701
            supplierObj.name = supplier.name
702
            supplierObj.pan = supplier.pan
703
            supplierObj.phone = supplier.phone
704
            supplierObj.registeredAddress = supplier.registeredAddress
705
            supplierObj.tin = supplier.tin
10295 amar.kumar 706
            supplierObj.stateId = supplier.stateId
14072 manish.sha 707
            supplierObj.poValidityLimit = supplier.poValidityLimit
5591 mandeep.dh 708
            session.commit()
709
            return self.getSupplier(supplierObj.id)
710
        finally:
711
            self.close_session()
712
 
713
    def updateSupplier(self, supplier):
714
        """
715
        Updates a supplier
716
 
717
        Parameters:
718
         - supplier
719
        """
720
        try:
721
            supplierObj = Supplier.get(supplier.id)
722
            supplierObj.communicationAddress = supplier.communicationAddress
723
            supplierObj.contactEmail = supplier.contactEmail
724
            supplierObj.contactFax = supplier.contactFax
725
            supplierObj.contactName = supplier.contactName
726
            supplierObj.contactPhone = supplier.contactPhone
727
            supplierObj.fax = supplier.fax
728
            supplierObj.headDesignation = supplier.headDesignation
729
            supplierObj.headEmail = supplier.headEmail
730
            supplierObj.headName = supplier.headName
731
            supplierObj.name = supplier.name
732
            supplierObj.pan = supplier.pan
733
            supplierObj.phone = supplier.phone
734
            supplierObj.registeredAddress = supplier.registeredAddress
21844 amit.gupta 735
            supplierObj.gstin = supplier.gstin
13965 manish.sha 736
            supplierObj.stateId = supplierObj.stateId
23086 amit.gupta 737
            supplierObj.tnc = supplierObj.tnc 
14072 manish.sha 738
            supplierObj.poValidityLimit = supplier.poValidityLimit
5591 mandeep.dh 739
            session.commit()
740
        finally:
741
            self.close_session()
742
 
6385 amar.kumar 743
    def getInvoicesForPO(self, poNumber):
744
        '''
745
        For getting invoiceNumbers for a Purchase Order
746
        '''
747
        try:
748
 
6762 amar.kumar 749
            purchases = Purchase.query.filter_by(purchaseOrder=poNumber)
6385 amar.kumar 750
            for purchase in purchases:
751
                invoice = purchase.invoiceNumber
752
        except:
753
            return None
754
        finally:
755
            self.close_session()
6467 amar.kumar 756
 
757
    def createPurchaseReturn(self, t_purchaseReturn):
758
        '''
759
        For creating a new Purchase Return
760
        '''
761
        try:
6762 amar.kumar 762
            purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId, t_purchaseReturn.amount)
6467 amar.kumar 763
            purchaseReturn.vendorId = t_purchaseReturn.vendorId
764
            purchaseReturn.amount = t_purchaseReturn.amount
765
            purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
766
            purchaseReturn.isSettled = False
6821 amar.kumar 767
            purchaseReturn.type = t_purchaseReturn.type
10864 manish.sha 768
            purchaseReturn.returnInventoryType = t_purchaseReturn.returnInventoryType
13600 manish.sha 769
            purchaseReturn.unsettledAmount = t_purchaseReturn.amount
6467 amar.kumar 770
            session.commit()
771
            return purchaseReturn.id
772
        except Exception as e:
773
            print e
774
            raise PurchaseServiceException(101, 'Exception while creating  Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
775
        finally:
776
            self.close_session()
777
 
778
    def getUnsettledPurchaseReturns(self):
779
        '''
780
        For getting all unsettled Purchase Returns
781
        '''
782
        try:
6821 amar.kumar 783
            purchaseReturns = PurchaseReturn.query.filter_by(isSettled=False).filter_by(type=PurchaseReturnType.REAL).all()
6467 amar.kumar 784
            return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
785
        except Exception as e:
786
            print e
787
            raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
788
        finally:
789
            self.close_session()
6385 amar.kumar 790
 
6467 amar.kumar 791
    def settlePurchaseReturn(self, returnId):
792
        '''
793
        For marking a Purchase Return as settled
794
        '''
795
        try:
6762 amar.kumar 796
            purchaseReturn = PurchaseReturn.query.filter_by(id=returnId).one()
6467 amar.kumar 797
            purchaseReturn.isSettled = True
798
            session.commit()
799
        except Exception as e:
800
            print e
801
            raise PurchaseServiceException(101, 'Exception while settling Purchase Return Id : ' + id)
802
        finally:
803
            self.close_session()
6762 amar.kumar 804
 
7672 rajveer 805
    def createPurchaseForOurExtBilling(self, invoiceNumber, unitPrice, nlc, itemId):
6762 amar.kumar 806
        try:
807
            poId = self.getPOforOurExternalBilling()
7672 rajveer 808
            self.updatelineItemforOursExternalBilling(poId, itemId, unitPrice, nlc)
6762 amar.kumar 809
            self.receiveinvoiceforOursExternalBilling(invoiceNumber)
810
            return self.createPurchaseforOursExternalBilling(poId, invoiceNumber)
811
        except Exception as e:
812
            print e
813
            raise PurchaseServiceException(101, '')
814
        finally:
815
            self.close_session()
816
 
817
    def fulfillPOForExtBilling(self, itemId, quantity):
818
        poId = self.getPOforOurExternalBilling()
819
        lineItem = LineItem.get_by(purchaseOrder_id=poId, itemId=itemId)
820
        lineItem.unfulfilledQuantity = lineItem.unfulfilledQuantity - 1
821
        if not lineItem.unfulfilledQuantity:
822
            lineItem.fulfilled = 1
823
        session.commit()
7410 amar.kumar 824
 
825
    def closePO(self, poId):
826
        purchaseOrder = PurchaseOrder.get_by(id=poId)
827
        if not purchaseOrder:
828
                raise PurchaseServiceException(101, "No purchase order can be found with id:" + str(id))
829
        purchaseOrder.status = 4
830
        session.commit()
9925 amar.kumar 831
 
832
    def changePOStatus(self, poId, poStatus):
833
        purchaseOrder = PurchaseOrder.get_by(id=poId)
834
        if not purchaseOrder:
835
                raise PurchaseServiceException(101, "No purchase order can be found with id:" + str(id))
836
        purchaseOrder.status = POStatus.READY
837
        session.commit()
6467 amar.kumar 838
 
7410 amar.kumar 839
    def isInvoiceReceived(self, invoiceNumber, supplierId):
840
        """
841
        Returns whether invoice is already received for given invoiceNumber and supplierId 
842
 
843
        Parameters:
844
         - invoiceNumber, supplierId
845
        """
846
        try:
847
            invoice = Invoice.query.filter_by(invoiceNumber=invoiceNumber, supplierId=supplierId).first()
848
            if invoice is None:
849
                return False
850
            else:
851
                return True
852
        finally:
853
            self.close_session()
9829 amar.kumar 854
 
855
    def changeWarehouseForPO(self, poId, warehouseId):
856
        try:
857
            purchaseOrder = PurchaseOrder.get_by(id = poId)
858
            for lineitem in purchaseOrder.lineitems:
859
                if lineitem.quantity!=lineitem.unfulfilledQuantity:
860
                    raise PurchaseServiceException(101, 'Items have already been received for this PO and hence cant change warehouse')
861
            purchaseOrder.warehouseId = warehouseId
862
            session.commit()
863
        finally:
11751 manish.sha 864
            self.close_session()  
865
 
866
    def getPurchaseReturn(self, id):
867
        """
868
        Returns the purchase return with the given id. Throws an exception if there is no such purchase return.
869
 
870
        Parameters:
871
         - id
872
        """
873
        try:
874
            purchaseReturn = PurchaseReturn.get_by(id=id)
875
            if not purchaseReturn:
876
                raise PurchaseServiceException(101, "No purchase return can be found with id:" + str(id)) 
877
            return purchaseReturn.to_thrift_object()
878
        finally:
879
            self.close_session()
9829 amar.kumar 880
 
13600 manish.sha 881
    def markPurchasereturnSettled(self, id, settlementType, documentNumber, settlementBy, settledAmount):
882
        try:
883
            currentTime = datetime.datetime.now()
884
            purchaseReturn = PurchaseReturn.get_by(id=id)
885
            if not purchaseReturn:
886
                raise PurchaseServiceException(101, "No purchase return can be found with id:" + str(id)) 
887
            if settledAmount > purchaseReturn.unsettledAmount:
888
                raise PurchaseServiceException(101, "Purchase Return Settled Amount Can't be Greater than Unsettled Amount Purchase Return id:" + str(id))
889
            purchaseReturn.currentSettlementType = settlementType
890
            purchaseReturn.latestSettlementDate = currentTime
891
            if purchaseReturn.documentNumber : 
892
                purchaseReturn.documentNumber = purchaseReturn.documentNumber +";"+documentNumber
893
            else:
894
                purchaseReturn.documentNumber = documentNumber
895
            unsettledAmount = purchaseReturn.unsettledAmount - settledAmount
896
            purchaseReturn.unsettledAmount = purchaseReturn.unsettledAmount - settledAmount
897
            if unsettledAmount ==0:
898
                purchaseReturn.isSettled = 1
899
 
900
            purchaseReturnSettlement = PurchaseReturnSettlement()
901
            purchaseReturnSettlement.purchaseReturnId = id
902
            purchaseReturnSettlement.settlementType = settlementType
903
            purchaseReturnSettlement.settlementBy = settlementBy
904
            purchaseReturnSettlement.settlementAmount = settledAmount
905
            purchaseReturnSettlement.settlementDate = currentTime
906
            purchaseReturnSettlement.documentNumber = documentNumber
907
            session.commit()
908
            return True
909
        finally:
910
            self.close_session()
911
 
912
    def getPrSettlementsForPurchaseReturn(self, purchaseReturnId):
913
        try:
914
            settlements = PurchaseReturnSettlement.query.filter_by(purchaseReturnId=purchaseReturnId).all()
915
            prSettlements = []
916
            for settlement in settlements:
917
                prSettlements.append(settlement.to_thrift_object())
918
            return prSettlements
919
        finally:
920
            self.close_session()
921
 
922
    def updatePurchaseReturn(self, t_purchaseReturn):
923
        '''
924
        Updating a Purchase Return
925
        '''
926
        try:
927
            purchaseReturn = PurchaseReturn.get_by(id=t_purchaseReturn.id)
928
            purchaseReturn.purchaseReturnType = t_purchaseReturn.purchaseReturnType
929
            purchaseReturn.reasonText = t_purchaseReturn.reasonText
930
            purchaseReturn.createdBy = t_purchaseReturn.createdBy
931
            session.commit()
932
        finally:
933
            self.close_session()
934
 
6762 amar.kumar 935
    def isAlive(self,):
4503 mandeep.dh 936
        """
937
        For checking weather service is active alive or not. It also checks connectivity with database
938
        """
939
        try:
940
            session.query(Supplier.id).limit(1).all()
941
            return True
942
        except:
943
            return False
944
        finally:
945
            self.close_session()
5944 mandeep.dh 946
 
947
    def __get_item_from_master(self, item_id):
948
        client = CatalogClient("catalog_service_server_host_master", "catalog_service_server_port").get_client()
6762 amar.kumar 949
        return client.getItem(item_id)
13600 manish.sha 950