Subversion Repositories SmartDukaan

Rev

Rev 6385 | Rev 6630 | 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
4754 mandeep.dh 7
from shop2020.clients.CatalogClient import CatalogClient
5944 mandeep.dh 8
from shop2020.clients.InventoryClient import InventoryClient
4754 mandeep.dh 9
from shop2020.clients.TransactionClient import TransactionClient
5443 mandeep.dh 10
from shop2020.purchase.main.model.Invoice import Invoice
4503 mandeep.dh 11
from shop2020.purchase.main.model.LineItem import LineItem
12
from shop2020.purchase.main.model.Purchase import Purchase
13
from shop2020.purchase.main.model.PurchaseOrder import PurchaseOrder
6467 amar.kumar 14
from shop2020.purchase.main.model.PurchaseReturn import PurchaseReturn
5110 mandeep.dh 15
from shop2020.purchase.main.model.RevisionedPurchaseOrder import \
16
    RevisionedPurchaseOrder
4503 mandeep.dh 17
from shop2020.purchase.main.model.Supplier import Supplier
5768 mandeep.dh 18
from shop2020.thriftpy.generic.ttypes import ExceptionType
5944 mandeep.dh 19
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
5110 mandeep.dh 20
    InventoryType
4754 mandeep.dh 21
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
22
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
23
    PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
5443 mandeep.dh 24
from shop2020.utils.Utils import to_py_date
4503 mandeep.dh 25
from sqlalchemy import create_engine
5238 mandeep.dh 26
from sqlalchemy.sql.expression import or_
4503 mandeep.dh 27
import datetime
28
import logging
4754 mandeep.dh 29
import sys
4503 mandeep.dh 30
 
31
 
32
logging.basicConfig(level=logging.DEBUG)
33
 
34
class PurchaseServiceHandler:
35
    '''
36
    classdocs
37
    '''
38
 
39
    def __init__(self, dbname='warehouse', db_hostname='localhost',  echoOn=True):
40
        '''
41
        Constructor
42
        '''
43
        engine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
44
        metadata.bind = engine
45
        metadata.bind.echo = echoOn
46
        setup_all(True)
47
 
48
    def createPurchaseOrder(self, tPurchaseOrder):
49
        """
50
        Creates a purchase order based on the data in the given purchase order object.
51
        This method populates a number of missing fields
52
 
53
        Parameters:
54
         - purchaseOrder
55
        """
56
        try:
57
            purchaseOrder = PurchaseOrder(tPurchaseOrder)
58
            session.commit()
59
            purchaseOrder.set_po_number()
60
            session.commit()
61
            return purchaseOrder.id
62
        finally:
63
            self.close_session()
64
 
65
    def getAllPurchaseOrders(self, status):
66
        """
67
        Returns a list of all the purchase orders in the given state
68
 
69
        Parameters:
70
         - status
71
        """
72
        try:
73
            pos = PurchaseOrder.query.filter_by(status=status).all()
74
            return [po.to_thrift_object() for po in pos ]
75
        finally:
76
            self.close_session()
77
 
78
    def getPurchaseOrder(self, id):
79
        """
80
        Returns the purchase order with the given id. Throws an exception if there is no such purchase order.
81
 
82
        Parameters:
83
         - id
84
        """
85
        try:
86
            purchaseOrder = PurchaseOrder.get_by(id=id)
87
            if not purchaseOrder:
88
                raise PurchaseServiceException(101, "No purchase order can be found with id:" + str(id)) 
89
            return purchaseOrder.to_thrift_object()
90
        finally:
91
            self.close_session()
92
 
93
    def getSupplier(self, id):
94
        """
95
        Returns the supplier with the given order id. Throws an exception if there is no such supplier.
96
 
97
        Parameters:
98
         - id
99
        """
100
        try:
101
            return Supplier.get_by(id=id).to_thrift_object()
102
        finally:
103
            self.close_session()
104
 
105
    def startPurchase(self, purchaseOrderId, invoiceNumber, freightCharges):
106
        """
107
        Creates a purchase for the given purchase order.
108
        Throws an exception if no more purchases are allowed against the given purchase order.
109
 
110
        Parameters:
111
         - purchaseOrderId
112
         - invoiceNumber
113
         - freightCharges
114
        """
115
        try:
116
            purchase_order = PurchaseOrder.get_by(id = purchaseOrderId)
117
            purchase = Purchase(purchase_order, invoiceNumber, freightCharges)
118
            session.commit()
119
            return purchase.id
120
        finally:
121
            self.close_session()
122
 
123
    def closePurchase(self, purchaseId):
124
        """
125
        Marks a purchase as complete and updates the receivedOn time.
126
        Throws an exception if no such purchase exists.
127
 
128
        Parameters:
129
         - purchaseId
130
        """
131
        try:
132
            purchase = Purchase.get_by(id=purchaseId)
133
            purchase.receivedOn = datetime.datetime.now()
134
            session.commit()
135
        finally:
136
            self.close_session()
137
 
138
    def getAllPurchases(self, purchaseOrderId, open):
139
        """
140
        Returns all open or closed purchases for the given purchase order. Throws an exception if no such purchase order exists
141
 
142
        Parameters:
143
         - purchaseOrderId
144
         - open
145
        """
146
        try:
147
            if open:
148
                purchases = Purchase.query.filter_by(purchaseOrder_id = purchaseOrderId, receivedOn = None).all()
149
            else:
5110 mandeep.dh 150
                purchases = Purchase.query.filter_by(purchaseOrder_id = purchaseOrderId).filter(Purchase.receivedOn != None).all()
4503 mandeep.dh 151
 
152
            return [purchase.to_thrift_object() for purchase in purchases]
153
        finally:
154
            self.close_session()
6385 amar.kumar 155
 
156
    def getPurchasesForPO(self, purchaseOrderId):
157
        """
158
        Returns all purchases for the given purchase order. Throws an exception if no such purchase order exists
159
 
160
        Parameters:
161
         - purchaseOrderId
162
         - open
163
        """
164
        try:
165
            purchases = Purchase.query.filter_by(purchaseOrder_id = purchaseOrderId).all()
166
            return [purchase.to_thrift_object() for purchase in purchases]
167
        finally:
168
            self.close_session()
4503 mandeep.dh 169
 
6385 amar.kumar 170
 
4555 mandeep.dh 171
    def getPurchaseOrderForPurchase(self, purchaseId):
4503 mandeep.dh 172
        """
4555 mandeep.dh 173
        Returns the purchase order for a given purchase
4503 mandeep.dh 174
 
175
        Parameters:
176
         - purchaseId
177
        """
4555 mandeep.dh 178
        try:
179
            return self.getPurchaseOrder(Purchase.query.filter_by(id = purchaseId).one().purchaseOrder_id)
180
        finally:
181
            self.close_session()
4503 mandeep.dh 182
 
4754 mandeep.dh 183
    def getPendingPurchaseOrders(self, warehouseId):
184
        """
185
        Creates purchase order objects from pending orders
186
 
187
        Parameters:
188
         - warehouseId
189
        """
190
        try:
191
            purchaseOrders = []
192
            if not warehouseId:
193
                raise PurchaseServiceException(101, "bad warehouse id")
194
 
195
            transactionClient = TransactionClient().get_client()
196
            pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED], 0, 0, warehouseId)
197
 
198
            if not pending_orders:
199
                return purchaseOrders
200
 
5944 mandeep.dh 201
            inventory_client = InventoryClient().get_client()
4754 mandeep.dh 202
            availability = {}
5110 mandeep.dh 203
 
5944 mandeep.dh 204
            ourGoodWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)]
205
            itemInventorySnapshot = inventory_client.getInventorySnapshot(0)
206
            for itemId, itemInventory in itemInventorySnapshot.iteritems():
207
                item = self.__get_item_from_master(itemId)
208
                for warehouseId, quantity in itemInventory.availability.iteritems():
209
                    if warehouseId in ourGoodWarehouseIds:
210
                        if availability.has_key(item.id):
211
                            availability[item.id] = [availability[item.id][0] + quantity, item]
212
                        else:
213
                            availability[item.id] = [quantity, item]
4754 mandeep.dh 214
 
5238 mandeep.dh 215
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
216
            for purchaseOrder in unfulfilledPurchaseOrders:
217
                for lineitem in purchaseOrder.lineitems:
218
                    if availability.has_key(lineitem.itemId):
219
                        availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
220
                    else:
5944 mandeep.dh 221
                        item = self.__get_item_from_master(lineitem.itemId)
5238 mandeep.dh 222
                        availability[item.id] = [lineitem.unfulfilledQuantity, item]
223
 
4754 mandeep.dh 224
            codRequirements = {}
225
            requirements = {}
226
            for order in pending_orders:
4758 mandeep.dh 227
                if order.purchaseOrderId:
4757 mandeep.dh 228
                    continue
4754 mandeep.dh 229
                for lineitem in order.lineitems:
230
                    if (requirements.has_key(lineitem.item_id)):
231
                        requirements[lineitem.item_id] += lineitem.quantity
232
                    else:
233
                        requirements[lineitem.item_id] = lineitem.quantity
234
 
235
                    if order.cod:
236
                        if (codRequirements.has_key(lineitem.item_id)):
237
                            codRequirements[lineitem.item_id] += lineitem.quantity
238
                        else:
239
                            codRequirements[lineitem.item_id] = lineitem.quantity
240
 
241
            netRequirements = {}
242
            for itemId in requirements.keys():
243
                requirementsCount = requirements.get(itemId)
244
                if  availability.has_key(itemId):
245
                    availabilityCount = availability.get(itemId)[0]
246
                    item              = availability.get(itemId)[1]
247
                    if requirementsCount > availabilityCount:
5238 mandeep.dh 248
                        if item.preferredVendor is None:
249
                            raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
4754 mandeep.dh 250
                        if (netRequirements.has_key(item.preferredVendor)):
251
                            netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
252
                        else:
253
                            netRequirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
254
                else:
5944 mandeep.dh 255
                    item = self.__get_item_from_master(itemId)
4754 mandeep.dh 256
                    if item.preferredVendor is None:
5238 mandeep.dh 257
                        raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
4754 mandeep.dh 258
                    if (netRequirements.has_key(item.preferredVendor)):
259
                        netRequirements[item.preferredVendor].append([item, requirementsCount])
260
                    else:
261
                        netRequirements[item.preferredVendor] = [[item, requirementsCount]];
5238 mandeep.dh 262
 
4754 mandeep.dh 263
            if not netRequirements:
264
                return purchaseOrders
265
 
266
            for vendorId in netRequirements.keys():
267
                t_purchase_order = TPurchaseOrder()
268
                t_purchase_order.supplierId = vendorId
269
                t_purchase_order.warehouseId = warehouseId
270
                t_purchase_order.lineitems = []
271
                for key in netRequirements.get(vendorId):
272
                    item     = key[0]
273
                    quantity = key[1]
274
                    t_po_lineitem = TLineItem()
275
                    t_po_lineitem.productGroup = item.productGroup
276
                    t_po_lineitem.brand = item.brand
277
                    t_po_lineitem.modelNumber = item.modelNumber
278
                    t_po_lineitem.modelName = item.modelName
279
                    t_po_lineitem.color = item.color
280
                    t_po_lineitem.itemId = item.id
281
                    t_po_lineitem.quantity = quantity
282
                    if codRequirements.has_key(item.id):
283
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
284
                    try:
5944 mandeep.dh 285
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
4754 mandeep.dh 286
                    except Exception as e:
287
                        vendor = self.getSupplier(vendorId)
288
                        print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
289
                        print e
290
                        raise PurchaseServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
291
                    t_po_lineitem.unitPrice = item_pricing.transferPrice
292
                    t_purchase_order.lineitems.append(t_po_lineitem)
293
                purchaseOrders.append(t_purchase_order)
294
            return purchaseOrders
295
        finally:
296
            self.close_session()
297
 
298
    def getSuppliers(self, ):
299
        """
300
        Returns all the valid suppliers
301
        """
302
        try:
303
            return [Supplier.to_thrift_object(supplier) for supplier in Supplier.query.all()]
304
        finally:
305
            self.close_session()
306
 
5185 mandeep.dh 307
    def unFulfillPO(self, purchaseId, itemId, quantity):
308
        """
309
        Unfulfills a given purchase id and an item with its quantity.
310
 
311
        Parameters:
312
         - purchaseId
313
         - itemId
314
         - quantity
315
        """
316
        try:
317
            purchaseOrderId = Purchase.query.filter_by(id = purchaseId).one().purchaseOrder_id
318
            lineitems = LineItem.query.filter_by(purchaseOrder_id = purchaseOrderId, itemId = itemId).all()
319
            if lineitems:
320
                fulfilledQuantity = lineitems[0].quantity - lineitems[0].unfulfilledQuantity
321
                if fulfilledQuantity < quantity:
322
                    raise PurchaseServiceException(101, 'Can UnFulfill only ' + str(fulfilledQuantity) + 'quantity')
323
                else:
5437 mandeep.dh 324
                    lineitems[0].unfulfilledQuantity = lineitems[0].unfulfilledQuantity + quantity
5185 mandeep.dh 325
                    lineitems[0].fulfilled = 0
326
                    purchaseOrder = PurchaseOrder.get_by(id=purchaseOrderId)
327
                    purchaseOrder.status = POStatus.PARTIALLY_FULFILLED
328
                    session.commit()
329
                    return
330
 
331
            raise PurchaseServiceException(101, 'No lineitem found with this itemId: ' + str(itemId) + ' in PO Id: ' + str(purchaseOrderId))
332
        finally:
333
            self.close_session()        
334
 
4754 mandeep.dh 335
    def fulfillPO(self, purchaseOrderId, itemId, quantity):
336
        """
337
        Fulfills a given purchase order with an item.
338
 
339
        Parameters:
340
         - purchaseOrderId
341
         - itemId
342
         - quantity
343
        """
344
        try:
345
            lineitems = LineItem.query.filter_by(purchaseOrder_id = purchaseOrderId, itemId = itemId).all()
346
            if lineitems:
347
                if lineitems[0].unfulfilledQuantity < quantity:
5361 mandeep.dh 348
                    raise PurchaseServiceException(101, 'Can fulfill only ' + str(lineitems[0].unfulfilledQuantity) + ' quantity')
4754 mandeep.dh 349
                else:
5361 mandeep.dh 350
                    lineitems[0].unfulfilledQuantity = lineitems[0].unfulfilledQuantity - quantity
4754 mandeep.dh 351
                    if not lineitems[0].unfulfilledQuantity:
352
                        lineitems[0].fulfilled = 1
5361 mandeep.dh 353
                        session.commit()
4754 mandeep.dh 354
                        if not LineItem.query.filter_by(purchaseOrder_id = purchaseOrderId, fulfilled = 0).all():
5361 mandeep.dh 355
                            purchaseOrder = PurchaseOrder.get_by(id=purchaseOrderId)
4754 mandeep.dh 356
                            purchaseOrder.status = POStatus.CLOSED
357
                    session.commit()
358
                    return
359
 
360
            raise PurchaseServiceException(101, 'No lineitem found with this itemId: ' + str(itemId) + ' in PO Id: ' + str(purchaseOrderId) )
361
        finally:
362
            self.close_session()
363
 
364
    def updatePurchaseOrder(self, purchaseOrder):
365
        """
366
        Amends a PO sa per the new lineitems passed
367
 
368
        Parameters:
369
         - purchaseOrder
370
        """
371
        try:
372
            existingPurchaseOrder = PurchaseOrder.get_by(id = purchaseOrder.id)
373
            maxRevision = 0
374
            existingRevisions = RevisionedPurchaseOrder.query.filter_by(purchaseOrderId = purchaseOrder.id).all()
375
            if existingRevisions:
376
                maxRevision = max([a.revision for a in existingRevisions]) + 1
5147 mandeep.dh 377
 
378
            newPOItems = {}
379
            for t_lineitem in purchaseOrder.lineitems:
380
                newPOItems[t_lineitem.itemId] = t_lineitem
381
 
4754 mandeep.dh 382
            for lineitem in existingPurchaseOrder.lineitems:
5147 mandeep.dh 383
                fulfilledQuantity = lineitem.quantity - lineitem.unfulfilledQuantity
384
                if fulfilledQuantity:
385
                    if not newPOItems.has_key(lineitem.itemId):
386
                        raise PurchaseServiceException(101, 'Cannot remove fulfilled item id: ' + str(lineitem.itemId) + ' from PO')
387
                    else:
388
                        if newPOItems[lineitem.itemId].quantity < fulfilledQuantity:
389
                            raise PurchaseServiceException(101, 'More quantity already fulfilled for item id: ' + str(lineitem.itemId))
390
                        else:
5437 mandeep.dh 391
                            newPOItems[lineitem.itemId].unfulfilledQuantity = newPOItems[lineitem.itemId].unfulfilledQuantity - fulfilledQuantity
4754 mandeep.dh 392
                revisionedPurchaseOrder = RevisionedPurchaseOrder()
393
                revisionedPurchaseOrder.purchaseOrderId = purchaseOrder.id
394
                revisionedPurchaseOrder.revision = maxRevision
395
                revisionedPurchaseOrder.itemId = lineitem.itemId
396
                revisionedPurchaseOrder.unfulfilledQuantity = lineitem.unfulfilledQuantity
397
                revisionedPurchaseOrder.unitPrice = lineitem.unitPrice
398
                revisionedPurchaseOrder.createdAt = lineitem.createdAt
399
                revisionedPurchaseOrder.quantity = lineitem.quantity
400
                lineitem.delete()
401
            existingPurchaseOrder.lineitems = [LineItem(existingPurchaseOrder, t_lineitem) for t_lineitem in purchaseOrder.lineitems]
402
            existingPurchaseOrder.totalCost = sum([t_lineitem.quantity * t_lineitem.unitPrice for t_lineitem in purchaseOrder.lineitems])
403
            session.commit()
404
        finally:
405
            self.close_session()
406
 
4503 mandeep.dh 407
    def close_session(self):
408
        if session.is_active:
409
            print "session is active. closing it."
410
            session.close()
411
 
5443 mandeep.dh 412
    def getInvoices(self, date):
413
        """
414
        Fetches all invoices for a given date
415
 
416
        Parameters:
417
         - date
418
        """
419
        try:
420
            return [i.to_thrift_object() for i in Invoice.query.filter(Invoice.date > to_py_date(date)).all()]
421
        finally:
422
            self.close_session()
423
 
424
    def createInvoice(self, invoice):
425
        """
426
        Creates an invoice object
427
 
428
        Parameters:
429
         - invoice
430
        """
431
        try:
5768 mandeep.dh 432
            if Invoice.query.filter_by(supplierId = invoice.supplierId, date = to_py_date(invoice.date), invoiceNumber = invoice.invoiceNumber).all():
433
                raise PurchaseServiceException(ExceptionType.ILLEGAL_ARGUMENTS, "Already received such invoice")
5443 mandeep.dh 434
            invoiceObj = Invoice()
435
            invoiceObj.invoiceNumber = invoice.invoiceNumber
436
            invoiceObj.date = to_py_date(invoice.date)
437
            invoiceObj.receivedFrom = invoice.receivedFrom
438
            invoiceObj.numItems = invoice.numItems
439
            invoiceObj.supplierId = invoice.supplierId
440
            session.commit()
441
        finally:
442
            self.close_session()        
443
 
5591 mandeep.dh 444
    def addSupplier(self, supplier):
445
        """
446
        Creates a supplier
447
 
448
        Parameters:
449
         - supplier
450
        """
451
        try:
452
            supplierObj = Supplier()
453
            supplierObj.communicationAddress = supplier.communicationAddress
454
            supplierObj.contactEmail = supplier.contactEmail
455
            supplierObj.contactFax = supplier.contactFax
456
            supplierObj.contactName = supplier.contactName
457
            supplierObj.contactPhone = supplier.contactPhone
458
            supplierObj.fax = supplier.fax
459
            supplierObj.headDesignation = supplier.headDesignation
460
            supplierObj.headEmail = supplier.headEmail
461
            supplierObj.headName = supplier.headName
462
            supplierObj.name = supplier.name
463
            supplierObj.pan = supplier.pan
464
            supplierObj.phone = supplier.phone
465
            supplierObj.registeredAddress = supplier.registeredAddress
466
            supplierObj.tin = supplier.tin
467
            session.commit()
468
            return self.getSupplier(supplierObj.id)
469
        finally:
470
            self.close_session()
471
 
472
    def updateSupplier(self, supplier):
473
        """
474
        Updates a supplier
475
 
476
        Parameters:
477
         - supplier
478
        """
479
        try:
480
            supplierObj = Supplier.get(supplier.id)
481
            supplierObj.communicationAddress = supplier.communicationAddress
482
            supplierObj.contactEmail = supplier.contactEmail
483
            supplierObj.contactFax = supplier.contactFax
484
            supplierObj.contactName = supplier.contactName
485
            supplierObj.contactPhone = supplier.contactPhone
486
            supplierObj.fax = supplier.fax
487
            supplierObj.headDesignation = supplier.headDesignation
488
            supplierObj.headEmail = supplier.headEmail
489
            supplierObj.headName = supplier.headName
490
            supplierObj.name = supplier.name
491
            supplierObj.pan = supplier.pan
492
            supplierObj.phone = supplier.phone
493
            supplierObj.registeredAddress = supplier.registeredAddress
494
            supplierObj.tin = supplier.tin
495
            session.commit()
496
        finally:
497
            self.close_session()
498
 
6385 amar.kumar 499
    def getInvoicesForPO(self, poNumber):
500
        '''
501
        For getting invoiceNumbers for a Purchase Order
502
        '''
503
        try:
504
 
505
            purchases = Purchase.query.filter_by(purchaseOrder = poNumber)
506
            for purchase in purchases:
507
                invoice = purchase.invoiceNumber
508
        except:
509
            return None
510
        finally:
511
            self.close_session()
6467 amar.kumar 512
 
513
    def createPurchaseReturn(self, t_purchaseReturn):
514
        '''
515
        For creating a new Purchase Return
516
        '''
517
        try:
518
            purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId,t_purchaseReturn.amount)
519
            purchaseReturn.vendorId = t_purchaseReturn.vendorId
520
            purchaseReturn.amount = t_purchaseReturn.amount
521
            purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
522
            purchaseReturn.isSettled = False
523
            session.commit()
524
            return purchaseReturn.id
525
        except Exception as e:
526
            print e
527
            raise PurchaseServiceException(101, 'Exception while creating  Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
528
        finally:
529
            self.close_session()
530
 
531
    def getUnsettledPurchaseReturns(self):
532
        '''
533
        For getting all unsettled Purchase Returns
534
        '''
535
        try:
536
            purchaseReturns = PurchaseReturn.query.filter_by(isSettled = False).all()
537
            return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
538
        except Exception as e:
539
            print e
540
            raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
541
        finally:
542
            self.close_session()
6385 amar.kumar 543
 
6467 amar.kumar 544
    def settlePurchaseReturn(self, returnId):
545
        '''
546
        For marking a Purchase Return as settled
547
        '''
548
        try:
549
            purchaseReturn = PurchaseReturn.query.filter_by(id = returnId).one()
550
            purchaseReturn.isSettled = True
551
            session.commit()
552
        except Exception as e:
553
            print e
554
            raise PurchaseServiceException(101, 'Exception while settling Purchase Return Id : ' + id)
555
        finally:
556
            self.close_session()
557
 
4503 mandeep.dh 558
    def isAlive(self, ):
559
        """
560
        For checking weather service is active alive or not. It also checks connectivity with database
561
        """
562
        try:
563
            session.query(Supplier.id).limit(1).all()
564
            return True
565
        except:
566
            return False
567
        finally:
568
            self.close_session()
5944 mandeep.dh 569
 
570
    def __get_item_from_master(self, item_id):
571
        client = CatalogClient("catalog_service_server_host_master", "catalog_service_server_port").get_client()
572
        return client.getItem(item_id)