Subversion Repositories SmartDukaan

Rev

Rev 6630 | Rev 6762 | 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()
6630 amar.kumar 423
 
424
    def getInvoice(self, invoiceNumber, supplierId):
425
        """
426
        Fetches all invoices for  given invoiceNumber and supplierId 
5443 mandeep.dh 427
 
6630 amar.kumar 428
        Parameters:
429
         - invoiceNumber, supplierId
430
        """
431
        try:
6638 amar.kumar 432
            invoice = Invoice.query.filter_by(invoiceNumber = invoiceNumber, supplierId = supplierId).first()
433
            if invoice is None:
434
                return invoice
435
            else:
436
                return invoice.to_thrift_object()
6630 amar.kumar 437
        finally:
438
            self.close_session()
439
 
5443 mandeep.dh 440
    def createInvoice(self, invoice):
441
        """
442
        Creates an invoice object
443
 
444
        Parameters:
445
         - invoice
446
        """
447
        try:
5768 mandeep.dh 448
            if Invoice.query.filter_by(supplierId = invoice.supplierId, date = to_py_date(invoice.date), invoiceNumber = invoice.invoiceNumber).all():
449
                raise PurchaseServiceException(ExceptionType.ILLEGAL_ARGUMENTS, "Already received such invoice")
5443 mandeep.dh 450
            invoiceObj = Invoice()
451
            invoiceObj.invoiceNumber = invoice.invoiceNumber
452
            invoiceObj.date = to_py_date(invoice.date)
453
            invoiceObj.receivedFrom = invoice.receivedFrom
454
            invoiceObj.numItems = invoice.numItems
455
            invoiceObj.supplierId = invoice.supplierId
456
            session.commit()
457
        finally:
458
            self.close_session()        
459
 
5591 mandeep.dh 460
    def addSupplier(self, supplier):
461
        """
462
        Creates a supplier
463
 
464
        Parameters:
465
         - supplier
466
        """
467
        try:
468
            supplierObj = Supplier()
469
            supplierObj.communicationAddress = supplier.communicationAddress
470
            supplierObj.contactEmail = supplier.contactEmail
471
            supplierObj.contactFax = supplier.contactFax
472
            supplierObj.contactName = supplier.contactName
473
            supplierObj.contactPhone = supplier.contactPhone
474
            supplierObj.fax = supplier.fax
475
            supplierObj.headDesignation = supplier.headDesignation
476
            supplierObj.headEmail = supplier.headEmail
477
            supplierObj.headName = supplier.headName
478
            supplierObj.name = supplier.name
479
            supplierObj.pan = supplier.pan
480
            supplierObj.phone = supplier.phone
481
            supplierObj.registeredAddress = supplier.registeredAddress
482
            supplierObj.tin = supplier.tin
483
            session.commit()
484
            return self.getSupplier(supplierObj.id)
485
        finally:
486
            self.close_session()
487
 
488
    def updateSupplier(self, supplier):
489
        """
490
        Updates a supplier
491
 
492
        Parameters:
493
         - supplier
494
        """
495
        try:
496
            supplierObj = Supplier.get(supplier.id)
497
            supplierObj.communicationAddress = supplier.communicationAddress
498
            supplierObj.contactEmail = supplier.contactEmail
499
            supplierObj.contactFax = supplier.contactFax
500
            supplierObj.contactName = supplier.contactName
501
            supplierObj.contactPhone = supplier.contactPhone
502
            supplierObj.fax = supplier.fax
503
            supplierObj.headDesignation = supplier.headDesignation
504
            supplierObj.headEmail = supplier.headEmail
505
            supplierObj.headName = supplier.headName
506
            supplierObj.name = supplier.name
507
            supplierObj.pan = supplier.pan
508
            supplierObj.phone = supplier.phone
509
            supplierObj.registeredAddress = supplier.registeredAddress
510
            supplierObj.tin = supplier.tin
511
            session.commit()
512
        finally:
513
            self.close_session()
514
 
6385 amar.kumar 515
    def getInvoicesForPO(self, poNumber):
516
        '''
517
        For getting invoiceNumbers for a Purchase Order
518
        '''
519
        try:
520
 
521
            purchases = Purchase.query.filter_by(purchaseOrder = poNumber)
522
            for purchase in purchases:
523
                invoice = purchase.invoiceNumber
524
        except:
525
            return None
526
        finally:
527
            self.close_session()
6467 amar.kumar 528
 
529
    def createPurchaseReturn(self, t_purchaseReturn):
530
        '''
531
        For creating a new Purchase Return
532
        '''
533
        try:
534
            purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId,t_purchaseReturn.amount)
535
            purchaseReturn.vendorId = t_purchaseReturn.vendorId
536
            purchaseReturn.amount = t_purchaseReturn.amount
537
            purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
538
            purchaseReturn.isSettled = False
539
            session.commit()
540
            return purchaseReturn.id
541
        except Exception as e:
542
            print e
543
            raise PurchaseServiceException(101, 'Exception while creating  Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
544
        finally:
545
            self.close_session()
546
 
547
    def getUnsettledPurchaseReturns(self):
548
        '''
549
        For getting all unsettled Purchase Returns
550
        '''
551
        try:
552
            purchaseReturns = PurchaseReturn.query.filter_by(isSettled = False).all()
553
            return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
554
        except Exception as e:
555
            print e
556
            raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
557
        finally:
558
            self.close_session()
6385 amar.kumar 559
 
6467 amar.kumar 560
    def settlePurchaseReturn(self, returnId):
561
        '''
562
        For marking a Purchase Return as settled
563
        '''
564
        try:
565
            purchaseReturn = PurchaseReturn.query.filter_by(id = returnId).one()
566
            purchaseReturn.isSettled = True
567
            session.commit()
568
        except Exception as e:
569
            print e
570
            raise PurchaseServiceException(101, 'Exception while settling Purchase Return Id : ' + id)
571
        finally:
572
            self.close_session()
573
 
4503 mandeep.dh 574
    def isAlive(self, ):
575
        """
576
        For checking weather service is active alive or not. It also checks connectivity with database
577
        """
578
        try:
579
            session.query(Supplier.id).limit(1).all()
580
            return True
581
        except:
582
            return False
583
        finally:
584
            self.close_session()
5944 mandeep.dh 585
 
586
    def __get_item_from_master(self, item_id):
587
        client = CatalogClient("catalog_service_server_host_master", "catalog_service_server_port").get_client()
588
        return client.getItem(item_id)