Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
557 chandransh 1
'''
2
Created on 10-May-2010
3
 
4
@author: ashish
5
'''
6
from elixir import *
6921 anupam.sin 7
from shop2020.clients.CatalogClient import CatalogClient
13136 amit.gupta 8
from shop2020.clients.InventoryClient import InventoryClient
6921 anupam.sin 9
from shop2020.clients.LogisticsClient import LogisticsClient
10
from shop2020.clients.PromotionClient import PromotionClient
11
from shop2020.clients.TransactionClient import TransactionClient
12
from shop2020.model.v1 import user
13136 amit.gupta 13
from shop2020.model.v1.user.impl.Converters import to_t_cart, to_t_line
6921 anupam.sin 14
from shop2020.model.v1.user.impl.Dataservice import Cart, Line, Address, User, \
11980 amit.gupta 15
    Discount, InsuranceDetails, PrivateDealUser
6921 anupam.sin 16
from shop2020.thriftpy.logistics.ttypes import LogisticsServiceException, \
17
    DeliveryType
9299 kshitij.so 18
from shop2020.thriftpy.model.v1.catalog.ttypes import Item, InsurerType
6921 anupam.sin 19
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as TTransaction, \
20
    TransactionStatus as TTransactionStatus, Order as TOrder, LineItem as TLineItem, \
7504 rajveer 21
    OrderStatus, OrderSource
6921 anupam.sin 22
from shop2020.thriftpy.model.v1.user.ttypes import CartStatus, LineStatus, \
11592 amit.gupta 23
    ShoppingCartException, PromotionException, CartPlus
6921 anupam.sin 24
from shop2020.utils.Utils import to_py_date, to_java_date
557 chandransh 25
import datetime
17782 amit.gupta 26
import json
17470 manish.sha 27
import math
17782 amit.gupta 28
import traceback
557 chandransh 29
 
30
 
576 chandransh 31
 
32
 
5326 rajveer 33
def get_cart(userId):
34
    user = User.get_by(id=userId)
35
    return user.active_cart
557 chandransh 36
 
37
def get_cart_by_id(id):
38
    cart = Cart.get_by(id=id)
39
    return cart
40
 
5326 rajveer 41
def create_cart():
42
    cart = Cart()
43
    cart.created_on = datetime.datetime.now()
44
    cart.updated_on = datetime.datetime.now()
45
    cart.cart_status = CartStatus.ACTIVE
557 chandransh 46
    return cart
47
 
48
def get_carts_between(start_time, end_time, status):
49
    init_time = to_py_date(start_time)
50
    finish_time = to_py_date(end_time)
51
 
52
    query = Cart.query
53
    if status:
54
        query = query.filter(Cart.cart_status==status)
55
    if init_time:
56
        query = query.filter(Cart.created_on >= init_time)
57
    if finish_time:
58
        query = query.filter(Cart.created_on <= finish_time)
59
 
60
    carts = query.all()
61
    return carts
62
 
643 chandransh 63
def get_line(item_id, cart_id, status, single):
557 chandransh 64
    #get cart first 
65
    try:
66
        found_cart = Cart.get_by(id=cart_id)
67
    except:
68
        raise ShoppingCartException(101, "cart not found ")
643 chandransh 69
    query = Line.query.filter_by(cart = found_cart, item_id = item_id)
557 chandransh 70
 
71
    if status:
72
        query = query.filter_by(line_status = status)
73
    else:
74
        query = query.filter_by(line_status = LineStatus.LINE_ACTIVE)
75
    try:
76
        if single:
77
            return query.one()
78
        else:
79
            return query.all()
80
    except:
81
        return None
82
 
3557 rajveer 83
def add_item_to_cart(cart_id, item_id, quantity, sourceId):
557 chandransh 84
    if not item_id:
85
        raise ShoppingCartException(101, "item_id cannot be null")
86
 
87
    if not quantity:
88
        raise ShoppingCartException(101, "quantity cannot be null")    
643 chandransh 89
 
2983 chandransh 90
    cart = Cart.get_by(id = cart_id)    
557 chandransh 91
    if not cart:
6502 rajveer 92
        raise ShoppingCartException(101, "no cart attached to this id" + str(cart_id))
2983 chandransh 93
    retval = ""
6550 rajveer 94
    catalog_client = CatalogClient().get_client()
95
    item = catalog_client.getItemForSource(item_id, sourceId)
9299 kshitij.so 96
    dataProtectionInsurer = catalog_client.getPrefferedInsurerForItem(item_id,InsurerType._NAMES_TO_VALUES.get("DATA"))
6550 rajveer 97
    item_shipping_info = catalog_client.isActive(item_id)
2983 chandransh 98
    if not item_shipping_info.isActive:
6550 rajveer 99
        return catalog_client.getItemStatusDescription(item_id)
557 chandransh 100
 
643 chandransh 101
    current_time = datetime.datetime.now()
102
    cart.updated_on = current_time
103
    line = get_line(item_id, cart_id, None,True)
104
    if line:
105
        #change the quantity only
6903 anupam.sin 106
        line.insuranceAmount = (line.insuranceAmount/line.quantity) * quantity
643 chandransh 107
        line.quantity = quantity
685 chandransh 108
        line.updated_on = current_time
9299 kshitij.so 109
        line.dataProtectionAmount = (line.dataProtectionAmount/line.quantity) * quantity
643 chandransh 110
    else:
111
        line = Line()
112
        line.cart = cart
113
        line.item_id = item_id
114
        line.quantity = quantity
115
        line.created_on = current_time
116
        line.updated_on = current_time
3557 rajveer 117
        line.actual_price = item.sellingPrice
643 chandransh 118
        line.line_status = LineStatus.LINE_ACTIVE
6903 anupam.sin 119
        line.insurer = 0
120
        line.insuranceAmount = 0
9299 kshitij.so 121
        #DATA INSURER IS SET UPON ADD TO CART
122
        line.dataProtectionInsurer = dataProtectionInsurer
557 chandransh 123
    session.commit()
2983 chandransh 124
    return retval
557 chandransh 125
 
126
def delete_item_from_cart(cart_id, item_id):
127
    if not item_id:
128
        raise ShoppingCartException(101, "item_id cannot be null")
685 chandransh 129
    cart = Cart.get_by(id = cart_id)
130
    if not cart:
131
        raise ShoppingCartException(101, "no cart attached to this id")
643 chandransh 132
    item = get_line(item_id, cart_id, None, True)
3554 varun.gupt 133
    count_deleted_discounts = delete_discounts_for_line(item)
557 chandransh 134
    item.delete()
685 chandransh 135
    current_time = datetime.datetime.now()
136
    cart.updated_on = current_time
557 chandransh 137
    session.commit()
138
 
3554 varun.gupt 139
def delete_discounts_for_line(item_line):
140
    count_deleted = Discount.query.filter_by(line = item_line).delete()
141
    session.commit()
142
    return count_deleted
143
 
144
def delete_discounts_from_cart(cart_id, cart = None):
145
    if cart is None:
146
        if cart_id is None:
147
            raise ShoppingCartException(101, 'cart_id and cart, both cannot be null')
148
        else:
149
            cart = Cart.get_by(id = cart_id)
150
 
151
    if cart.lines:
152
        for line in cart.lines:
153
            delete_discounts_for_line(line)
154
 
155
def save_discounts(discounts):
156
    if not discounts:
157
        raise ShoppingCartException(101, 'discounts be null')
158
 
159
    if len(discounts) > 0:
160
        cart = Cart.get_by(id = discounts[0].cart_id)
161
 
162
        for t_discount in discounts:
163
            line = Line.query.filter_by(cart = cart, item_id = t_discount.item_id).first()
164
            if line is not None:
165
                discount = Discount()
166
                discount.line = line
167
                discount.discount = t_discount.discount
168
                discount.quantity = t_discount.quantity
169
                session.commit()
170
 
557 chandransh 171
def add_address_to_cart(cart_id, address_id):
172
    if not cart_id:
173
        raise ShoppingCartException(101, "cart id cannot be made null")
174
 
175
    if not address_id:
176
        raise ShoppingCartException(101, "address id cannot be made null")
177
 
178
    cart = get_cart_by_id(cart_id)
179
    if not cart:
180
        raise ShoppingCartException(101, "no cart for this id")
576 chandransh 181
 
182
    address = Address.get_by(id=address_id)
183
    if not address:
184
        raise ShoppingCartException(101, "No address for this id")
185
 
557 chandransh 186
    cart.address_id = address_id
685 chandransh 187
    current_time = datetime.datetime.now()
716 rajveer 188
    #cart.updated_on = current_time
557 chandransh 189
    session.commit()
5555 rajveer 190
 
191
def add_store_to_cart(cartId, storeId):
192
    if not cartId:
193
        raise ShoppingCartException(101, "cart id cannot be made null")
557 chandransh 194
 
5555 rajveer 195
    cart = get_cart_by_id(cartId)
196
    if not cart:
197
        raise ShoppingCartException(101, "no cart for this id")
198
 
199
    if storeId:
200
        cart.pickupStoreId = storeId
201
    else:
202
        cart.pickupStoreId = None
203
 
204
    session.commit()
205
 
6922 anupam.sin 206
def apply_coupon_to_cart(t_cart, coupon_code):
207
    cart = get_cart_by_id(t_cart.id)
1976 varun.gupt 208
    if not cart:
209
        raise ShoppingCartException(101, "no cart attached to this id")
6922 anupam.sin 210
    pc = PromotionClient().get_client()
11853 amit.gupta 211
    for t_line in t_cart.lines:
212
        line = Line.query.filter_by(cart = cart).filter_by(item_id = t_line.itemId).one()
13136 amit.gupta 213
        line.discounted_price = None
11853 amit.gupta 214
        if not pc.isGiftVoucher(coupon_code):
6922 anupam.sin 215
            line.discounted_price = t_line.discountedPrice
13136 amit.gupta 216
        #line.dealText = t_line.dealText
217
        #line.freebieId = t_line.freebieId
6922 anupam.sin 218
 
219
    cart.total_price = t_cart.totalPrice
220
    cart.discounted_price = t_cart.discountedPrice
12055 amit.gupta 221
    cart.coupon_code = coupon_code
1976 varun.gupt 222
    session.commit()
223
 
224
def remove_coupon(cart_id):
225
    cart = get_cart_by_id(cart_id)
226
    if not cart:
227
        raise ShoppingCartException(101, "no cart attached to this id")
2261 varun.gupt 228
 
229
    #Resetting discounted price of each line in cart to Null
230
    for line in cart.lines:
231
        line.discounted_price = None
11653 amit.gupta 232
        line.dealText = None
233
        line.freebieId = None
2261 varun.gupt 234
 
3619 chandransh 235
    delete_discounts_from_cart(cart.id, cart=cart)
1976 varun.gupt 236
    cart.discounted_price = None
237
    cart.coupon_code = None
238
    session.commit()
239
 
11526 amit.gupta 240
def commit_cart(cart_id, sessionSource, sessionTime, firstSource, firstSourceTime, userId, schemeId, orderSource):   
690 chandransh 241
    cart = get_cart_by_id(cart_id)   
557 chandransh 242
    #now we have a cart. Need to create a transaction with it
17470 manish.sha 243
    totalCartVal = 0
244
    totalshippingCost = 0
245
    for lineObj in cart.lines:
246
        totalCartVal += lineObj.actual_price * lineObj.quantity
576 chandransh 247
    txn = TTransaction()
248
    txn.shoppingCartid = cart_id
5326 rajveer 249
    txn.customer_id = userId
576 chandransh 250
    txn.createdOn = to_java_date(datetime.datetime.now())
251
    txn.transactionStatus = TTransactionStatus.INIT
252
    txn.statusDescription = "New Order"
2219 varun.gupt 253
    txn.coupon_code = cart.coupon_code
2815 vikas 254
    txn.sessionSource = sessionSource
255
    txn.sessionStartTime = sessionTime
3858 vikas 256
    txn.firstSource = firstSource
257
    txn.firstSourceTime = firstSourceTime
6389 rajveer 258
    txn.emiSchemeId = schemeId
17470 manish.sha 259
    privateDealUser = PrivateDealUser.query.filter(PrivateDealUser.id == userId).filter(PrivateDealUser.isActive==True).first()
260
    if privateDealUser is not None:
261
        if totalCartVal < 500:
262
            totalshippingCost = 100
263
        elif totalCartVal >=500 and totalCartVal<1000:
264
            totalshippingCost = 50
265
    txn.totalShippingCost = totalshippingCost
266
 
267
    txnOrders = create_orders(cart, userId, orderSource, totalshippingCost, totalCartVal)
268
    shippingCostInOrders = 0
269
    for order in txnOrders:
270
        shippingCostInOrders = shippingCostInOrders + order.shippingCost
576 chandransh 271
 
17470 manish.sha 272
    diff = totalshippingCost - shippingCostInOrders
273
    if diff > 0:
274
        txnOrders[0].shippingCost = txnOrders[0].shippingCost + diff
275
 
276
 
277
    txn.orders = txnOrders
278
 
576 chandransh 279
    transaction_client = TransactionClient().get_client()
280
    txn_id = transaction_client.createTransaction(txn)
12743 amit.gupta 281
 
282
    privateDealUser = PrivateDealUser.query.filter(PrivateDealUser.id == userId).filter(PrivateDealUser.isActive==True).first()
283
    if privateDealUser is not None and privateDealUser.counter is not None:
284
        privateDealUser.counter.lastPurchasedOn = datetime.datetime.now()
576 chandransh 285
    session.commit()
286
 
287
    return txn_id
288
 
17470 manish.sha 289
def create_orders(cart, userId, orderSource, totalshippingCost, totalCartVal):
557 chandransh 290
    cart_lines = cart.lines
576 chandransh 291
    orders = []
6318 rajveer 292
    isGv = False
293
    if cart.coupon_code:
294
        try:
295
            pc = PromotionClient().get_client()
296
            isGv = pc.isGiftVoucher(cart.coupon_code)
297
        except:
298
            isGv = False
299
 
6903 anupam.sin 300
    insuranceDetails = InsuranceDetails.get_by(addressId = cart.address_id)
301
 
557 chandransh 302
    for line in cart_lines:
576 chandransh 303
        if line.line_status == LineStatus.LINE_ACTIVE:
3554 varun.gupt 304
            quantity_remaining_for_order = line.quantity
305
 
306
            for discount in line.discounts:
17470 manish.sha 307
                #i = 0
308
                #while i < discount.quantity:
309
                t_line_item = create_line_item(line, line.actual_price if isGv else (line.actual_price - discount.discount), line.quantity)
310
                t_order = create_order(userId, cart.address_id, t_line_item, cart.pickupStoreId, discount.discount if isGv else 0, line.insurer, (line.insuranceAmount/line.quantity), insuranceDetails,line.dataProtectionInsurer,(line.dataProtectionAmount)/line.quantity, orderSource, line.freebieId, totalshippingCost, totalCartVal)
311
                orders.append(t_order)
312
                    #i += 1
3554 varun.gupt 313
                quantity_remaining_for_order -= discount.quantity
314
 
17470 manish.sha 315
            if quantity_remaining_for_order > 0:
316
                t_line_item = create_line_item(line, line.actual_price, quantity_remaining_for_order)
17484 manish.sha 317
                t_order = create_order(userId, cart.address_id, t_line_item, cart.pickupStoreId, 0, line.insurer, (line.insuranceAmount/line.quantity), insuranceDetails, line.dataProtectionInsurer,(line.dataProtectionAmount)/line.quantity, orderSource, line.freebieId, totalshippingCost, totalCartVal)
17470 manish.sha 318
                orders.append(t_order)
319
            '''
576 chandransh 320
            i = 0
3554 varun.gupt 321
            while i < quantity_remaining_for_order:
11915 amit.gupta 322
                t_line_item = create_line_item(line, line.actual_price)
11669 amit.gupta 323
                t_order = create_order(userId, cart.address_id, t_line_item, cart.pickupStoreId, 0, line.insurer, (line.insuranceAmount/line.quantity), insuranceDetails, line.dataProtectionInsurer,(line.dataProtectionAmount)/line.quantity, orderSource, line.freebieId)
576 chandransh 324
                orders.append(t_order)
325
                i += 1
17470 manish.sha 326
            '''
576 chandransh 327
    return orders
328
 
17470 manish.sha 329
def create_order(userId, address_id, t_line_item, pickupStoreId, gvAmount, insurer, insuranceAmount, insuranceDetails, dataProtectionInsurer, dataProtectionAmount, orderSource, freebieId, totalshippingCost, totalCartVal):
5326 rajveer 330
    user = User.get_by(id=userId)
576 chandransh 331
    address = Address.get_by(id=address_id)
332
    t_order = TOrder()
557 chandransh 333
 
576 chandransh 334
    t_order.customer_id = user.id
335
    t_order.customer_email = user.email
336
 
910 rajveer 337
    t_order.customer_name = address.name
576 chandransh 338
    t_order.customer_pincode = address.pin
738 chandransh 339
    t_order.customer_address1 = address.line_1
340
    t_order.customer_address2 = address.line_2
669 chandransh 341
    t_order.customer_city = address.city
342
    t_order.customer_state = address.state
576 chandransh 343
    t_order.customer_mobilenumber = address.phone
344
 
9299 kshitij.so 345
    t_order.total_amount = t_line_item.total_price + insuranceAmount + dataProtectionAmount
6318 rajveer 346
    t_order.gvAmount = gvAmount
1976 varun.gupt 347
 
576 chandransh 348
    t_order.total_weight = t_line_item.total_weight
349
    t_order.lineitems = [t_line_item]
350
 
690 chandransh 351
    t_order.status = OrderStatus.PAYMENT_PENDING
970 chandransh 352
    t_order.statusDescription = "Payment Pending"
576 chandransh 353
    t_order.created_timestamp = to_java_date(datetime.datetime.now())
354
 
5555 rajveer 355
    t_order.pickupStoreId = pickupStoreId 
6903 anupam.sin 356
    t_order.insuranceAmount = insuranceAmount 
357
    t_order.insurer = insurer
6935 anupam.sin 358
    if insuranceDetails:
359
        t_order.dob = insuranceDetails.dob
360
        t_order.guardianName = insuranceDetails.guardianName
7190 amar.kumar 361
 
362
    catalog_client = CatalogClient().get_client()
11669 amit.gupta 363
 
364
    if freebieId is None:
365
        freebie_item_id = catalog_client.getFreebieForItem(t_line_item.item_id)
366
        if freebie_item_id:
367
            t_order.freebieItemId = freebie_item_id
368
    else:
369
        freebie_item_id = None if freebieId == 0 else freebieId  
11526 amit.gupta 370
    t_order.source = orderSource
9299 kshitij.so 371
    t_order.dataProtectionInsurer = dataProtectionInsurer
372
    t_order.dataProtectionAmount = dataProtectionAmount
17486 manish.sha 373
    t_order.shippingCost = round((t_line_item.total_price*totalshippingCost)/totalCartVal, 0)
576 chandransh 374
    return t_order
375
 
11915 amit.gupta 376
def create_line_item(line, final_price, quantity=1):
3133 rajveer 377
    inventory_client = CatalogClient().get_client()
11915 amit.gupta 378
    item = inventory_client.getItem(line.item_id)
576 chandransh 379
    t_line_item = TLineItem()
963 chandransh 380
    t_line_item.productGroup = item.productGroup
381
    t_line_item.brand = item.brand
636 rajveer 382
    t_line_item.model_number = item.modelNumber
669 chandransh 383
    if item.color is None or item.color == "NA":
384
        t_line_item.color = ""
385
    else:
917 chandransh 386
        t_line_item.color = item.color
963 chandransh 387
    t_line_item.model_name = item.modelName
636 rajveer 388
    t_line_item.extra_info = item.featureDescription
702 chandransh 389
    t_line_item.item_id = item.id
3768 vikas 390
    t_line_item.quantity = quantity
1983 varun.gupt 391
 
3554 varun.gupt 392
    t_line_item.unit_price = final_price
3768 vikas 393
    t_line_item.total_price = final_price * quantity
1983 varun.gupt 394
 
636 rajveer 395
    t_line_item.unit_weight = item.weight
4172 rajveer 396
    t_line_item.total_weight = item.weight if item.weight is None else item.weight * quantity
11915 amit.gupta 397
    if line.dealText is None:
398
        t_line_item.dealText = item.bestDealText
399
    elif line.dealText == '':
400
        t_line_item.dealText = None
401
    else:
402
        t_line_item.dealText = line.dealText
403
 
4312 rajveer 404
    if item.warrantyPeriod:
405
        #Computing Manufacturer Warranty expiry date
406
        today = datetime.date.today()
407
        expiry_year = today.year + int((today.month + item.warrantyPeriod) / 12)
408
        expiry_month = (today.month + item.warrantyPeriod) % 12
409
 
4295 varun.gupt 410
        try:
4312 rajveer 411
            expiry_date = datetime.datetime(expiry_year, expiry_month, today.day, 23, 59, 59, 999999)
4295 varun.gupt 412
        except ValueError:
413
            try:
4312 rajveer 414
                expiry_date = datetime.date(expiry_year, expiry_month, (today.day - 1), 23, 59, 59, 999999)
4295 varun.gupt 415
            except ValueError:
4312 rajveer 416
                try:
417
                    expiry_date = datetime.date(expiry_year, expiry_month, (today.day - 2), 23, 59, 59, 999999)
418
                except ValueError:
419
                    expiry_date = datetime.date(expiry_year, expiry_month, (today.day - 3), 23, 59, 59, 999999)
420
 
421
        t_line_item.warrantry_expiry_timestamp = to_java_date(expiry_date)
422
 
576 chandransh 423
    return t_line_item
424
 
11980 amit.gupta 425
def validate_cart(cartId, sourceId, couponCode):
3133 rajveer 426
    inventory_client = CatalogClient().get_client()
576 chandransh 427
    logistics_client = LogisticsClient().get_client()
1976 varun.gupt 428
    promotion_client = PromotionClient().get_client()
1466 ankur.sing 429
    retval = ""
6736 amit.gupta 430
    emival = ""
557 chandransh 431
    # No need to validate duplicate items since there are only two ways
432
    # to add items to a cart and both of them check whether the item being
433
    # added is a duplicate of an already existing item.
563 chandransh 434
    cart = Cart.get_by(id=cartId)
435
    cart_lines = cart.lines
776 rajveer 436
    customer_pincode = None
690 chandransh 437
    current_time = datetime.datetime.now()
5929 anupam.sin 438
    if cart.pickupStoreId :
5782 rajveer 439
        store = logistics_client.getPickupStore(cart.pickupStoreId)
440
        customer_pincode = store.pin
5572 anupam.sin 441
    if cart.address_id != None and customer_pincode == None:
576 chandransh 442
        address = Address.get_by(id=cart.address_id)
443
        customer_pincode = address.pin
13136 amit.gupta 444
 
445
    user = User.get_by(active_cart_id = cartId)
446
 
447
    dealItems = []
13141 amit.gupta 448
    privateDealUser = PrivateDealUser.get_by(id=user.id)    
13136 amit.gupta 449
    if privateDealUser is not None and privateDealUser.isActive:
13142 amit.gupta 450
        itemIds = [cartLine.item_id for cartLine in cart.lines]
13136 amit.gupta 451
        deals = inventory_client.getAllActivePrivateDeals(itemIds, 0)
452
        dealItems = deals.keys()
453
 
776 rajveer 454
    if not customer_pincode:
785 rajveer 455
        default_address_id = user.default_address_id
776 rajveer 456
        if default_address_id:
457
            address = Address.get_by(id = default_address_id)
458
            customer_pincode = address.pin
459
    if not customer_pincode:
460
        #FIXME should not be hard coded. May be we can pick from config server.
461
        customer_pincode = "110001"
1976 varun.gupt 462
    cart.total_price = 0
563 chandransh 463
    for line in cart_lines:
612 chandransh 464
        old_estimate = line.estimate
636 rajveer 465
        item_id = line.item_id
3557 rajveer 466
        item = inventory_client.getItemForSource(item_id, sourceId)
13136 amit.gupta 467
 
2983 chandransh 468
        item_shipping_info = inventory_client.isActive(item_id) 
469
        if item_shipping_info.isActive:
470
            if item_shipping_info.isRisky and item_shipping_info.quantity < line.quantity:
471
                line.quantity = 1
472
                retval = "Try adding a smaller quantity of " + item.brand + " " + item.modelNumber + " (" + item.color + ")"
13136 amit.gupta 473
 
474
            if item_id in dealItems:
475
                line.actual_price = deals[item_id].dealPrice
476
                if deals[item_id].dealTextOption==0:
477
                    line.dealText = ''
478
                if deals[item_id].dealTextOption==2:
479
                    line.dealText =  deals[item_id].dealText
480
 
481
                if deals[item_id].dealFreebieOption==0:
482
                    line.freebieId = 0
483
                if deals[item_id].dealFreebieOption==2:
484
                    line.freebieId =  deals[item_id].dealFreebieItemId
485
 
486
            else:
487
                line.actual_price = item.sellingPrice 
488
                line.dealText = None
489
                line.freebieId = None
6921 anupam.sin 490
            cart.total_price = cart.total_price + (line.actual_price * line.quantity)
776 rajveer 491
            try:
4642 mandeep.dh 492
                item_delivery_estimate = logistics_client.getLogisticsEstimation(item_id, customer_pincode, DeliveryType.PREPAID).deliveryTime
844 chandransh 493
            except LogisticsServiceException:
494
                item_delivery_estimate = -1
495
                #TODO Use the exception clause to set the retval appropriately
496
            except :
497
                item_delivery_estimate = -1
12893 manish.sha 498
 
499
            if item_delivery_estimate !=-1:
500
                inv_client = InventoryClient().get_client()
501
                itemAvailability = None
502
                try:
12898 manish.sha 503
                    itemAvailability = inv_client.getItemAvailabilityAtLocation(item_id, 1)
12893 manish.sha 504
                except:
505
                    pass
12904 manish.sha 506
 
507
                print 'itemAvailability billling Warehouse ', itemAvailability[2]
12893 manish.sha 508
                if itemAvailability is not None:
509
                    billingWarehouse = None
510
                    try:
12904 manish.sha 511
                        billingWarehouse = inv_client.getWarehouse(itemAvailability[2])
12893 manish.sha 512
                    except:
513
                        pass
12904 manish.sha 514
 
515
                    print 'billingWarehouse Id Location ', billingWarehouse.stateId
12893 manish.sha 516
                    if billingWarehouse is not None:
12904 manish.sha 517
                        estimateVal = None
12893 manish.sha 518
                        if not logistics_client.isAlive() :
519
                            logistics_client = LogisticsClient().get_client()
520
                        try:
12904 manish.sha 521
                            estimateVal = logistics_client.getFirstDeliveryEstimateForWhLocation(customer_pincode, billingWarehouse.stateId)
12893 manish.sha 522
                            if estimateVal ==-1:
523
                                item_delivery_estimate =-1
524
                        except:
525
                            pass
12904 manish.sha 526
                        print 'estimateVal Value ', estimateVal
776 rajveer 527
            if old_estimate != item_delivery_estimate:
528
                line.estimate = item_delivery_estimate
529
                cart.updated_on = current_time
576 chandransh 530
        else:
11877 amit.gupta 531
            Discount.query.filter(Discount.line==line).delete()
563 chandransh 532
            line.delete()
716 rajveer 533
    if cart.checked_out_on is not None:
534
        if cart.updated_on > cart.checked_out_on:
844 chandransh 535
            cart.checked_out_on = None
612 chandransh 536
    session.commit()
1976 varun.gupt 537
 
538
    if cart.coupon_code is not None:
2026 varun.gupt 539
        try:
540
            updated_cart = promotion_client.applyCoupon(cart.coupon_code, cart.id)
6740 amit.gupta 541
            if updated_cart.message is not None:
6739 amit.gupta 542
                emival = updated_cart.message
2026 varun.gupt 543
        except PromotionException as ex:
544
            remove_coupon(cart.id)
12020 amit.gupta 545
            #retval = ex.message
13155 amit.gupta 546
    session.commit()
13136 amit.gupta 547
 
548
    cart = Cart.get_by(id=cartId)
549
    cart_lines = cart.lines
550
    map_lines = {}
551
 
552
    insurerFlag = False
553
    for line in cart_lines:
554
        if line.insurer > 0 or line.dataProtectionInsurer > 0:
555
            line_map = {}
556
            line_map['insurer'] = line.insurer
557
            line_map['dpinsurer'] = line.dataProtectionInsurer
558
            line_map['amount'] = line.discounted_price if line.discounted_price else line.actual_price
559
            line_map['quantity'] = line.quantity
560
            insurerFlag = True
561
            map_lines[line.item_id] = line_map
562
 
563
    if insurerFlag:
13142 amit.gupta 564
        map_lines = inventory_client.checkServices(map_lines)
13136 amit.gupta 565
        for line in cart_lines :
13142 amit.gupta 566
            if map_lines.has_key(line.item_id):
567
                line_map = map_lines[line.item_id]
568
                if line_map['insurer'] > 0:
13136 amit.gupta 569
                    if cart.discounted_price:
13142 amit.gupta 570
                        cart.discounted_price = cart.discounted_price + line_map['insureramount']
571
                    line.insurer = line_map['insurer']
572
                    line.insuranceAmount = line_map['insureramount']
573
                    cart.total_price = cart.total_price + line_map['insureramount']
574
                if line_map['dpinsurer'] > 0:
13136 amit.gupta 575
                    if cart.discounted_price:
13142 amit.gupta 576
                        cart.discounted_price = cart.discounted_price + line_map['dpinsureramount']
577
                    line.dataProtectionInsurer = line_map['dpinsurer']
578
                    line.dataProtectionAmount = line_map['dpinsureramount']
579
                    cart.total_price = cart.total_price + line_map['dpinsureramount']
13136 amit.gupta 580
                line.updated_on = datetime.datetime.now()
581
        cart.updated_on = datetime.datetime.now()
13142 amit.gupta 582
        session.commit()
11860 amit.gupta 583
    session.close()
6736 amit.gupta 584
    return [retval, emival]
576 chandransh 585
 
557 chandransh 586
def merge_cart(fromCartId, toCartId):
587
    fromCart = Cart.get_by(id=fromCartId)
588
    toCart = Cart.get_by(id=toCartId)
589
 
590
    old_lines = fromCart.lines
591
    new_lines = toCart.lines
592
 
593
    for line in old_lines:
5345 rajveer 594
        for discount in line.discounts:
595
            discount.delete()
596
    session.commit()
597
 
598
    for line in old_lines:
557 chandransh 599
        flag = True
600
        for new_line in new_lines:
601
            if line.item_id == new_line.item_id:
602
                flag = False
5345 rajveer 603
 
576 chandransh 604
        if flag:
5345 rajveer 605
            line.cart_id = toCartId
606
        else:
607
            line.delete()
608
 
2019 varun.gupt 609
    if toCart.coupon_code is None:
610
        toCart.coupon_code = fromCart.coupon_code
611
 
612
    toCart.updated_on = datetime.datetime.now()
557 chandransh 613
    fromCart.expired_on = datetime.datetime.now()
614
    fromCart.cart_status = CartStatus.INACTIVE
643 chandransh 615
    session.commit()
691 chandransh 616
 
617
def check_out(cartId):
618
    if cartId is None:
619
        raise ShoppingCartException(101, "Cart id not specified")
716 rajveer 620
    cart = Cart.get_by(id = cartId)
691 chandransh 621
    if cart is None:
622
        raise ShoppingCartException(102, "The specified cart couldn't be found")
623
    cart.checked_out_on = datetime.datetime.now()
624
    session.commit()
625
    return True
626
 
627
def reset_cart(cartId, items):
628
    if cartId is None:
629
        raise ShoppingCartException(101, "Cart id not specified")
630
    for item_id, quantity in items.iteritems():
631
        line = Line.query.filter_by(cart_id=cartId, item_id=item_id).one()
632
        if line is not None:
3566 rajveer 633
            delete_discounts_for_line(line)
2261 varun.gupt 634
            line.discounted_price = None
691 chandransh 635
            line.quantity = line.quantity - quantity
636
            if line.quantity == 0:
637
                line.delete()
717 rajveer 638
    cart = Cart.get_by(id=cartId)
691 chandransh 639
    cart.updated_on = datetime.datetime.now()
1894 vikas 640
    cart.checked_out_on = None
1976 varun.gupt 641
 
642
    # Removing Coupon
643
    cart.total_price = None
644
    cart.discounted_price = None
645
    cart.coupon_code = None
646
 
691 chandransh 647
    session.commit()
766 rajveer 648
    return True
649
 
3386 varun.gupt 650
def get_carts_with_coupon_count(coupon_code):
651
    return Cart.query.filter_by(coupon_code = coupon_code).count()
4668 varun.gupt 652
 
653
def show_cod_option(cartId, sourceId, pincode):
654
    cart = Cart.get_by(id = cartId)
655
    cod_option = True
656
    logistics_client = LogisticsClient().get_client()
657
    if cart:
6355 amit.gupta 658
        if cart.coupon_code:
659
            promotion_client = PromotionClient().get_client()
11819 amit.gupta 660
            cod_option = promotion_client.isCodApplicable(to_t_cart(cart))
5351 varun.gupt 661
 
6355 amit.gupta 662
        if cod_option and cart.lines:
4668 varun.gupt 663
            for line in cart.lines:
4866 rajveer 664
                logistics_info = logistics_client.getLogisticsEstimation(line.item_id, pincode, DeliveryType.PREPAID)
4871 rajveer 665
                if not logistics_info.codAllowed:
4668 varun.gupt 666
                    cod_option = False
667
                    break
17648 manish.sha 668
            if cart.total_price > 60000:# or cart.total_price <= 250:
5430 rajveer 669
                cod_option = False
4668 varun.gupt 670
    return cod_option
6821 amar.kumar 671
 
9791 rajveer 672
def get_products_added_to_cart(startDate, endDate):
673
    lines = session.query(Line.item_id).filter(Line.created_on > to_py_date(startDate)).filter(Line.created_on < to_py_date(endDate)).all()
9804 rajveer 674
    datas = []
675
    for line in lines:
676
        datas.append(line[0])
677
    return datas
6903 anupam.sin 678
 
11655 amit.gupta 679
def insure_item(itemId, cartId, toInsure, insurerType):
680
    cart = Cart.get_by(id = cartId)
681
    line = None
682
    for cartLine in cart.lines:
683
        if(cartLine.item_id == itemId):
684
            line = cartLine
685
            break
686
 
687
    if not line:
688
        print("Error : No line found for cartId : " + cartId + " and itemId : " + itemId)
689
        return False
690
 
6903 anupam.sin 691
    try:
692
        if toInsure:
6921 anupam.sin 693
            csc = CatalogClient().get_client()
694
            item = csc.getItem(itemId)
9299 kshitij.so 695
            insurerId = csc.getPrefferedInsurerForItem(itemId,insurerType)
696
            insuranceAmount = csc.getInsuranceAmount(itemId, line.discounted_price if line.discounted_price else line.actual_price, insurerId, line.quantity)
697
            if InsurerType._VALUES_TO_NAMES.get(insurerType)=='DEVICE':
698
                if cart.discounted_price:
699
                    cart.discounted_price = cart.discounted_price - line.insuranceAmount + insuranceAmount
700
                line.insurer = insurerId
701
                line.insuranceAmount = insuranceAmount
702
            if InsurerType._VALUES_TO_NAMES.get(insurerType)=='DATA':
703
                if cart.discounted_price:
704
                    cart.discounted_price = cart.discounted_price - line.dataProtectionAmount + insuranceAmount
705
                line.dataProtectionInsurer = insurerId
706
                line.dataProtectionAmount = insuranceAmount
6903 anupam.sin 707
            cart.total_price = cart.total_price + insuranceAmount
708
        else:
9299 kshitij.so 709
            if InsurerType._VALUES_TO_NAMES.get(insurerType)=='DEVICE':
710
                cart.total_price = cart.total_price - line.insuranceAmount
711
                if cart.discounted_price:
712
                    cart.discounted_price = cart.discounted_price - line.insuranceAmount
713
                line.insurer = 0
714
                line.insuranceAmount = 0
715
            if InsurerType._VALUES_TO_NAMES.get(insurerType)=='DATA':
716
                cart.total_price = cart.total_price - line.dataProtectionAmount
717
                if cart.discounted_price:
718
                    cart.discounted_price = cart.discounted_price - line.dataProtectionAmount
719
                line.dataProtectionInsurer = 0
720
                line.dataProtectionAmount = 0
6903 anupam.sin 721
        line.updated_on = datetime.datetime.now()
722
        cart.updated_on = datetime.datetime.now()
723
        session.commit()
724
    except:
725
        print("Error : Unable to insure")
9299 kshitij.so 726
        print("insurerId : " + str(insurerId) + " ItemId : " + str(itemId) + " CartId : " + str(cartId))
6903 anupam.sin 727
        return False
728
 
729
    return True
730
 
731
def cancel_insurance(cartId):
732
    try:
733
        cart = Cart.get_by(id = cartId)
734
        for cartLine in cart.lines:
735
            cart.total_price = cart.total_price - cartLine.insuranceAmount
736
            if cart.discounted_price:
737
                cart.discounted_price = cart.discounted_price - cartLine.insuranceAmount
738
            cartLine.insurer = 0
739
            cartLine.insuranceAmount = 0
740
            cartLine.updated_on = datetime.datetime.now()
741
        cart.updated_on = datetime.datetime.now()
742
        session.commit()
743
    except:
744
        print("Error : Unable to cancel insurance for cartId :" + str(cartId))
745
        return False
746
 
747
    return True
748
 
749
def store_insurance_specific_details(addressId, dob, guardianName):
750
    try:
751
        insuranceDetails = InsuranceDetails.get_by(addressId = addressId);
752
        if insuranceDetails is None :
753
            insuranceDetails = InsuranceDetails()
754
        insuranceDetails.addressId = addressId
755
        insuranceDetails.dob = dob
756
        insuranceDetails.guardianName = guardianName
757
        session.commit()
758
    except:
759
        print("Error : Unable to store insurance details for addressId : " + str(addressId))
760
        return False
761
    return True
762
 
763
def is_insurance_detail_present(addressId):
764
    try:
765
        insuranceDetails = InsuranceDetails.get_by(addressId = addressId);
766
        if insuranceDetails is None :
767
            return False
768
    except:
769
        print("Error : Unable to get insurance details for addressId : " + str(addressId))
770
        return False
771
    return True
772
 
17782 amit.gupta 773
 
774
def add_items_to_cart(cartId, itemQty, couponCode=None):
775
    try: 
776
        found_cart = Cart.get_by(id=cartId)
777
        itemQtyMap = {}
778
        current_time = datetime.datetime.now()
779
        for itemqty in itemQty:
780
            itemQtyMap[itemqty.itemId] = itemqty.qty 
781
 
782
        for line in found_cart.lines:
783
            if itemQtyMap.has_key(line.item_id):
784
                line.delete()
785
        for itemId,qty in itemQtyMap.iteritems():
17797 amit.gupta 786
            #This condition will ensure that cart is only persisted with non-zero quantities.
787
            if qty==0:
788
                continue
17782 amit.gupta 789
            line = Line()
790
            line.cart = found_cart
791
            line.item_id = itemId
792
            line.quantity = qty
793
            line.created_on = current_time
794
            line.updated_on = current_time
795
            line.line_status = LineStatus.LINE_ACTIVE
796
            line.insurer = 0
797
            line.insuranceAmount = 0
798
        if couponCode:
799
            found_cart.coupon_code = couponCode
800
        else:
801
            found_cart.coupon_code = None
802
        session.commit()
803
        return True
804
    except:
805
        traceback.print_exc()
806
        return False
807
 
808
 
809
def valiate_cart_new(cartId, customer_pincode, sourceId):
810
 
811
    inventory_client = CatalogClient().get_client()
812
    logistics_client = LogisticsClient().get_client()
813
    promotion_client = PromotionClient().get_client()
814
    # No need to validate duplicate items since there are only two ways
815
    # to add items to a cart and both of them check whether the item being
816
    # added is a duplicate of an already existing item.
817
    cart = Cart.get_by(id=cartId)
818
    cart_lines = cart.lines
819
    current_time = datetime.datetime.now()
820
 
821
    user = User.get_by(active_cart_id = cartId)
822
    responseMap = {}
823
    totalQty = 0
824
    totalAmount = 0 
825
    shippingCharges=0
826
    cartMessages=[]
827
    cartItems = []
828
    dealItems = []
829
 
830
    responseMap['shippingCharges']= shippingCharges
831
    responseMap['cartMessages']= cartMessages
832
    responseMap['cartItems']= cartItems
833
    responseMap['pincode']= customer_pincode
834
 
835
    privateDealUser = PrivateDealUser.get_by(id=user.id)    
836
    itemIds = [cartLine.item_id for cartLine in cart.lines]
837
    if privateDealUser is not None and privateDealUser.isActive:
838
        deals = inventory_client.getAllActivePrivateDeals(itemIds, 0)
839
        dealItems = deals.keys()
840
 
841
    cart.total_price = 0
842
    itemsMap = inventory_client.getItems(itemIds)
17789 amit.gupta 843
 
17797 amit.gupta 844
    cartMessageChanged = 0
845
    cartMessageOOS = 0
846
    cartMessageUndeliverable = 0
17789 amit.gupta 847
 
17782 amit.gupta 848
    for line in cart_lines:
849
        cartItem={}
850
 
851
        old_estimate = line.estimate
852
        item_id = line.item_id
853
        item = itemsMap.get(item_id)
854
        cartItem['itemId']=line.item_id
855
        cartItem['quantity']=0
856
        cartItem['messages']=[]
857
        cartItemMessages = cartItem['messages']
858
        cartItem['color'] = item.color
859
        cartItem['catalogItemId'] = item.catalogItemId
860
 
861
        item_shipping_info = inventory_client.isActive(item_id) 
862
        if item_shipping_info.isActive:
863
            if item_shipping_info.isRisky and item_shipping_info.quantity < line.quantity:
864
                line.quantity = item_shipping_info.quantity
17797 amit.gupta 865
                cartMessageChanged += 1
17802 amit.gupta 866
                cartItemMessages.append({"type":"danger", "messageText":"Only " + str(item_shipping_info.quantity) + " available"})
17782 amit.gupta 867
 
868
            cartItem['maxQuantity'] = min(item_shipping_info.quantity, 20)
869
 
870
            if item_id in dealItems:
871
                line.actual_price = deals[item_id].dealPrice
872
                if deals[item_id].dealTextOption==0:
873
                    line.dealText = ''
874
                if deals[item_id].dealTextOption==2:
875
                    line.dealText = deals[item_id].dealText
876
 
877
                if deals[item_id].dealFreebieOption==0:
878
                    line.freebieId = 0
879
                if deals[item_id].dealFreebieOption==2:
880
                    line.freebieId =  deals[item_id].dealFreebieItemId
881
                cartItem['dealText'] = line.dealText
882
            else:
883
                line.actual_price = item.sellingPrice
17789 amit.gupta 884
                if item.bestDealText:
17787 amit.gupta 885
                    cartItem['dealText'] = item.bestDealText
17782 amit.gupta 886
                line.dealText = None
887
                line.freebieId = None
888
            cartItem['sellingPrice'] = line.actual_price
889
            cartItem['quantity'] = line.quantity
890
            cart.total_price = cart.total_price + (line.actual_price * line.quantity)
891
            try:
892
                item_delivery_estimate = logistics_client.getLogisticsEstimation(item_id, customer_pincode, DeliveryType.PREPAID).deliveryTime
893
            except LogisticsServiceException:
894
                item_delivery_estimate = -1
895
                #TODO Use the exception clause to set the retval appropriately
896
            except :
897
                item_delivery_estimate = -1
898
 
899
            if item_delivery_estimate !=-1:
900
                inv_client = InventoryClient().get_client()
901
                itemAvailability = None
902
                try:
903
                    itemAvailability = inv_client.getItemAvailabilityAtLocation(item_id, 1)
904
                except:
905
                    pass
906
 
907
                print 'itemAvailability billling Warehouse ', itemAvailability[2]
908
                if itemAvailability is not None:
909
                    billingWarehouse = None
910
                    try:
911
                        billingWarehouse = inv_client.getWarehouse(itemAvailability[2])
912
                    except:
913
                        pass
914
 
915
                    print 'billingWarehouse Id Location ', billingWarehouse.stateId
916
                    if billingWarehouse is not None:
917
                        estimateVal = None
918
                        if not logistics_client.isAlive() :
919
                            logistics_client = LogisticsClient().get_client()
920
                        try:
921
                            estimateVal = logistics_client.getFirstDeliveryEstimateForWhLocation(customer_pincode, billingWarehouse.stateId)
922
                            if estimateVal ==-1:
923
                                item_delivery_estimate =-1
924
                        except:
925
                            pass
926
                        print 'estimateVal Value ', estimateVal
927
            cartItem['estimate'] = item_delivery_estimate
928
            if item_delivery_estimate == -1:
929
                cartItem['quantity'] = 0
17798 amit.gupta 930
                cartMessageUndeliverable += 1
17802 amit.gupta 931
                cartItemMessages.append({"type":"danget", "messageText":"Undeliverable"})
17782 amit.gupta 932
            if old_estimate != item_delivery_estimate:
933
                line.estimate = item_delivery_estimate
934
                cart.updated_on = current_time
935
        else:
936
            cartItem['quantity'] = 0
17797 amit.gupta 937
            cartMessageOOS += 1
17802 amit.gupta 938
            cartItemMessages.append({"type":"danger", "messageText":"Out of Stock"})
17782 amit.gupta 939
            Discount.query.filter(Discount.line==line).delete()
940
            line.delete()
941
        totalQty += cartItem['quantity']
942
        totalAmount += line.actual_price * cartItem['quantity']
17797 amit.gupta 943
        if cartItemMessages:
944
            cartItems.insert(0, cartItem)
945
        else:
946
            cartItems.append(cartItem)
17782 amit.gupta 947
    if cart.checked_out_on is not None:
948
        if cart.updated_on > cart.checked_out_on:
949
            cart.checked_out_on = None
950
    session.commit()
951
 
952
    if cart.coupon_code is not None:
953
        try:
954
            updated_cart = promotion_client.applyCoupon(cart.coupon_code, cart.id)
955
            if updated_cart.message is not None:
956
                emival = updated_cart.message
957
        except PromotionException as ex:
958
            remove_coupon(cart.id)
959
            #retval = ex.message
960
    session.commit()
961
 
962
    cart = Cart.get_by(id=cartId)
963
    cart_lines = cart.lines
964
    insurerFlag = False
965
    for line in cart_lines:
966
        if line.insurer > 0 or line.dataProtectionInsurer > 0:
967
            line.insurer = 0
968
            line.insuranceAmount = 0 
969
            line.dataProtectionInsurer = 0
970
            line.dataProtectionAmount = 0
971
            insurerFlag = True
972
 
973
    if insurerFlag:
974
        cart.updated_on = datetime.datetime.now()
975
        session.commit()
976
    session.close()
977
    responseMap['totalQty']= totalQty
978
    responseMap['totalAmount']= totalAmount
979
    if totalAmount < 500:
980
        shippingCharges = 100
981
    elif totalAmount < 1000:
982
        shippingCharges = 50
17787 amit.gupta 983
    responseMap['shippingCharge']=shippingCharges
17797 amit.gupta 984
    responseMap['cartMessageChanged'] = cartMessageChanged
985
    responseMap['cartMessageOOS'] = cartMessageOOS
17799 amit.gupta 986
    responseMap['cartMessageUndeliverable'] = cartMessageUndeliverable
17782 amit.gupta 987
    return json.dumps(responseMap)
988
 
989
 
11980 amit.gupta 990
def validate_cart_plus(cart_id, source_id, couponCode):
11655 amit.gupta 991
    try:
11980 amit.gupta 992
        cart_messages = validate_cart(cart_id, source_id, couponCode)
11655 amit.gupta 993
        found_cart = Cart.get_by(id=cart_id)
11592 amit.gupta 994
        pincode = "110001"
11599 amit.gupta 995
        default_address_id = User.get_by(active_cart_id = cart_id).default_address_id
11598 amit.gupta 996
 
11592 amit.gupta 997
        default_address = None
998
        if found_cart.address_id is not None and found_cart.address_id > 0:
999
            pincode = Address.get_by(id=found_cart.address_id).pin
11600 amit.gupta 1000
        elif default_address_id is not None:
11592 amit.gupta 1001
            default_address = Address.get_by(id = default_address_id) 
1002
            pincode = default_address.pin
1003
 
11612 amit.gupta 1004
        needInuranceInfo = False
11600 amit.gupta 1005
        if default_address_id is not None:
1006
            for line in found_cart.lines:
1007
                if line.insurer > 0:
11611 amit.gupta 1008
                    needInuranceInfo = not is_insurance_detail_present(default_address_id)
11600 amit.gupta 1009
                    break
11592 amit.gupta 1010
        cartPlus = CartPlus()
1011
        cartPlus.cart = to_t_cart(found_cart)
1012
        cartPlus.pinCode = pincode
1013
        cartPlus.validateCartMessages = cart_messages
1014
        cartPlus.needInsuranceInfo = needInuranceInfo
1015
        return cartPlus
1016
    finally:
1017
        close_session()
1018
 
766 rajveer 1019
def close_session():
1020
    if session.is_active:
1021
        print "session is active. closing it."
17782 amit.gupta 1022
        session.close()
1023