Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
94 ashish 1
'''
2
Created on 23-Mar-2010
3
 
4
@author: ashish
5
'''
6
from elixir import *
5393 mandeep.dh 7
from functools import partial
5944 mandeep.dh 8
from shop2020.clients.CatalogClient import CatalogClient
4748 mandeep.dh 9
from shop2020.clients.HelperClient import HelperClient
5944 mandeep.dh 10
from shop2020.clients.InventoryClient import InventoryClient
4748 mandeep.dh 11
from shop2020.config.client.ConfigClient import ConfigClient
94 ashish 12
from shop2020.model.v1.catalog.impl import DataService
4748 mandeep.dh 13
from shop2020.model.v1.catalog.impl.CategoryManager import CategoryManager
8274 amit.gupta 14
from shop2020.model.v1.catalog.impl.Convertors import to_t_item, to_t_source, \
19222 amit.gupta 15
    to_t_brand_info, to_t_private_deal, to_t_exclusive_affiliate_item_info, to_t_bulk_pricing
5944 mandeep.dh 16
from shop2020.model.v1.catalog.impl.DataService import Item, ItemChangeLog, \
17
    Category, EntityIDGenerator, SimilarItems, ProductNotification, Source, \
6531 vikram.rag 18
    SourceItemPricing, AuthorizationLog, VoucherItemMapping, CategoryVatMaster, \
7340 amit.gupta 19
    OOSTracker, EntityTag, ItemInsurerMapping, Insurer, Banner, BannerMap, \
7977 kshitij.so 20
    FreebieItem, BrandInfo, Amazonlisted, StorePricing, ItemVatMaster, \
9242 kshitij.so 21
    PageViewEvents, CartEvents, EbayItem, BannerUriMapping, Campaign, SnapdealItem, \
10097 kshitij.so 22
    ProductFeedSubmit, MarketplaceItems, MarketPlaceItemPrice, \
12620 amit.gupta 23
    SourcePercentageMaster, SourceItemPercentage, FlipkartItem, \
24
    MarketPlaceUpdateHistory, SourceCategoryPercentage, MarketPlaceHistory, \
25
    PrivateDeals, AmazonOutOfSync, PrivateDealsPriceComparison, \
26
    SourceReturnPercentage, CompetitorPricing, CompetitorPricingRequest, \
19222 amit.gupta 27
    AmazonPromotion, ExclusiveAffiliateItemInfo, OutboundAffiliateMaster, HsItem, BulkItemPricing
5944 mandeep.dh 28
from shop2020.thriftpy.model.v1.catalog.ttypes import status, ItemShippingInfo, \
7340 amit.gupta 29
    ItemType, PremiumType, FreebieItem as t_FreebieItem, \
13136 amit.gupta 30
    StorePricing as tStorePricing, CatalogServiceException, BannerType, InsurerType, \
31
    Banner as t_banner, CompetitorPricing as TCompetitorPricing, AmazonPromotionType
12567 amit.gupta 32
from shop2020.thriftpy.model.v1.inventory.ttypes import VatType, \
19222 amit.gupta 33
    InventoryServiceException, IgnoredInventoryUpdateItems, SnapdealInventoryItem
34
from shop2020.thriftpy.utils.ttypes import UserSmsInfo, SmsType
19221 amit.gupta 35
from shop2020.thriftpy.model.v1.order.ttypes import OrderSource
4873 mandeep.dh 36
from shop2020.utils import EmailAttachmentSender
4748 mandeep.dh 37
from shop2020.utils.EmailAttachmentSender import mail
13709 manish.sha 38
from shop2020.utils.Utils import to_py_date, log_risky_flag, to_java_date
621 chandransh 39
from sqlalchemy import desc, asc
19222 amit.gupta 40
from sqlalchemy.sql.expression import or_, distinct, func, and_
11630 amit.gupta 41
from sqlalchemy.sql.functions import now
3086 rajveer 42
from string import Template
4748 mandeep.dh 43
import datetime
8274 amit.gupta 44
import math
4748 mandeep.dh 45
import sys
5393 mandeep.dh 46
import threading
3924 rajveer 47
import urllib2
19222 amit.gupta 48
from shop2020.clients.UserClient import UserClient
49
import operator
94 ashish 50
 
5978 rajveer 51
sourceId = int(ConfigClient().get_property("sourceid"))
10687 rajveer 52
to_addresses = ["khushal.bhatia@shop2020.in", "chandan.kumar@shop2020.in",  "chaitnaya.vats@shop2020.in",'manoj.kumar@shop2020.in']
7777 kshitij.so 53
to_store_addresses = ["rajveer.singh@shop2020.in"]
6029 rajveer 54
mail_user = "cnc.center@shop2020.in"
55
mail_password = "5h0p2o2o"
56
source_name = "Saholic"
57
source_url = "www.saholic.com"
5885 mandeep.dh 58
skippedItems = { 175 : [27, 2160, 2175, 2163, 2158, 7128, 26, 2154],
59
                 193 : [5839] }
12567 amit.gupta 60
stateIdMap = {}
61
def fetchStateMaster():
62
    global stateIdMap
63
    if stateIdMap:
64
        return stateIdMap
65
    else:
66
        try:
67
            glob_inventory_client = InventoryClient().get_client()
68
            stateIdMap = glob_inventory_client.getStateMaster()
69
            return stateIdMap
70
        except:
71
            print "Could not fetch"
72
 
5295 rajveer 73
def initialize(dbname='catalog', db_hostname="localhost"):
74
    DataService.initialize(dbname, db_hostname)
7770 kshitij.so 75
 
3849 chandransh 76
def get_all_items_by_status(status, offset=0, limit=None):
77
    query = Item.query
4539 rajveer 78
    if status is not None:
3849 chandransh 79
        query = query.filter_by(status=status)
80
    query = query.order_by(Item.product_group, Item.brand, Item.model_number, Item.model_name).offset(offset)
81
    if limit:
82
        query = query.limit(limit)
83
    items = query.all()
84
    return items
85
 
6821 amar.kumar 86
def get_all_alive_items():
87
    query = Item.query
10403 rajveer 88
    query = query.filter(or_(Item.status==status.ACTIVE, Item.status==status.PAUSED, Item.status==status.PAUSED_BY_RISK, Item.status==status.PARTIALLY_ACTIVE))
6821 amar.kumar 89
    items = query.all()
90
    return items
91
 
92
 
3849 chandransh 93
def get_all_items(is_active, offset=0, limit=None):
103 ashish 94
    if is_active:
3849 chandransh 95
        items = get_all_items_by_status(status.ACTIVE, offset, limit)
103 ashish 96
    else:
3849 chandransh 97
        items = get_all_items_by_status(None, offset, limit)
766 rajveer 98
    return items
99
 
3849 chandransh 100
def get_item_count_by_status(use_status, status):
101
    if use_status:
102
        return Item.query.filter_by(status=status).count()
103 ashish 103
    else:
3849 chandransh 104
        return Item.query.count()
103 ashish 105
 
635 rajveer 106
def get_item(item_id):
766 rajveer 107
    item = Item.get_by(id=item_id)
108
    return item
94 ashish 109
 
13493 amit.gupta 110
def get_items(item_ids):
13519 amit.gupta 111
    items = Item.query.filter(Item.id.in_(item_ids)).all()
13493 amit.gupta 112
    return items
113
 
635 rajveer 114
def get_items_by_catalog_id(catalog_id):
447 rajveer 115
    query = Item.query.filter_by(catalog_item_id=catalog_id)
437 rajveer 116
    try:
635 rajveer 117
        items = query.all()
4934 amit.gupta 118
        return items
1399 rajveer 119
    except Exception as ex:
120
        print ex
437 rajveer 121
        raise InventoryServiceException(109, "Item not found")
5586 phani.kuma 122
 
123
def is_valid_catalog_id(catalog_id):
124
    item = Item.query.filter_by(catalog_item_id=catalog_id).first()
125
    if item is not None:
126
        return True
127
    else:
128
        return False
129
 
576 chandransh 130
def is_active(item_id):
2983 chandransh 131
    t_item_shipping_info = ItemShippingInfo()
576 chandransh 132
    try:
635 rajveer 133
        item = get_item(item_id)
3281 chandransh 134
        t_item_shipping_info.isRisky = item.risky
5944 mandeep.dh 135
        client = InventoryClient().get_client()
5978 rajveer 136
        itemInfo = client.getItemAvailabilityAtLocation(item.id, sourceId)
17782 amit.gupta 137
        availability = itemInfo[4]
5393 mandeep.dh 138
        if item.risky and item.status == status.ACTIVE:
5944 mandeep.dh 139
            if availability <= 0:
5393 mandeep.dh 140
                add_status_change_log(item, status.PAUSED_BY_RISK)
141
                item.status = status.PAUSED_BY_RISK
142
                item.status_description = "This item is currently out of stock"
143
                session.commit()
144
                __send_mail_for_oos_item(item)
145
                #This will clear cache from tomcat
10223 amit.gupta 146
                #__clear_homepage_cache()
2983 chandransh 147
        t_item_shipping_info.isActive = (item.status == status.ACTIVE)
3281 chandransh 148
        t_item_shipping_info.quantity = availability
576 chandransh 149
    except InventoryServiceException:
2983 chandransh 150
        print "[ERROR] Unexpected error:", sys.exc_info()[0]
151
    return t_item_shipping_info
152
 
7438 amit.gupta 153
def get_items_status(item_ids):
154
    itemsStatus = dict()
12963 amit.gupta 155
#    for item_id in item_ids:
156
#        try:
157
#            item = get_item(item_id)
158
#            if item is None:
159
#                continue
160
#            client = InventoryClient().get_client()
161
#            itemInfo = client.getItemAvailabilityAtLocation(item.id, sourceId)
162
#            warehouse_id = itemInfo[0]
163
#            if item.risky and item.status == status.ACTIVE:
164
#                availability = client.getItemAvailibilityAtWarehouse(warehouse_id, item_id)
165
#                if availability <= 0:
166
#                    item.status = status.PAUSED_BY_RISK
167
#            itemsStatus[item_id] = (item.status == status.ACTIVE)
168
#        except InventoryServiceException:
169
#            print "[ERROR] Unexpected error:", sys.exc_info()[0]
7438 amit.gupta 170
    return itemsStatus
171
 
2035 rajveer 172
def get_item_status_description(itemId):
173
    item = get_item(itemId)
174
    return item.status_description
94 ashish 175
 
122 ashish 176
def update_item(item):
177
    if not item:
178
        raise InventoryServiceException(108, "Bad item in request")
7770 kshitij.so 179
 
122 ashish 180
    if not item.id:
609 chandransh 181
        raise InventoryServiceException(101, "Missing id for update")
7770 kshitij.so 182
 
2120 ankur.sing 183
    validate_item_prices(item)
7770 kshitij.so 184
 
635 rajveer 185
    ds_item = get_item(item.id)
5047 amit.gupta 186
    message = ""
7384 rajveer 187
    store_message = ""
122 ashish 188
    if not ds_item:
609 chandransh 189
        raise InventoryServiceException(101, "Item missing in our database")
7770 kshitij.so 190
 
963 chandransh 191
    if item.productGroup:
7770 kshitij.so 192
        ds_item.product_group = item.productGroup
963 chandransh 193
    if item.brand:
194
        ds_item.brand = item.brand
511 rajveer 195
    if item.modelNumber:
196
        ds_item.model_number = item.modelNumber
2497 ankur.sing 197
    ds_item.color = item.color
198
    ds_item.model_name = item.modelName
199
    ds_item.category = item.category
19221 amit.gupta 200
#    if item.category == 10006:
201
#        itemInsurerMapping = ItemInsurerMapping.query.filter(ItemInsurerMapping.itemId == item.id).filter(ItemInsurerMapping.insurerType == InsurerType._NAMES_TO_VALUES.get("DEVICE")).first()
202
#        if itemInsurerMapping is None:
203
#            itemInsurerMapping = ItemInsurerMapping()
204
#            itemInsurerMapping.itemId = item.id
205
#            itemInsurerMapping.insurerId = 1
206
#            itemInsurerMapping.insurerType = 1
7770 kshitij.so 207
 
2497 ankur.sing 208
    ds_item.comments = item.comments
7770 kshitij.so 209
 
2497 ankur.sing 210
    ds_item.catalog_item_id = item.catalogItemId
483 rajveer 211
 
7384 rajveer 212
    if ds_item.activeOnStore and ds_item.mrp and item.mrp and ds_item.mrp != item.mrp:
213
        sp = get_store_pricing(item.id)
214
        if sp.maxPrice > item.mrp:
215
            sp.maxPrice = item.mrp
216
            store_message += "MRP is changed from {0} to {1}.\n".format(sp.maxPrice, item.mrp)
7770 kshitij.so 217
 
7384 rajveer 218
 
219
    if ds_item.activeOnStore and ds_item.sellingPrice and item.sellingPrice and ds_item.sellingPrice != item.sellingPrice:
220
        sp = get_store_pricing(item.id)
221
        if sp.minPrice < item.sellingPrice:
222
            store_message += "Saholic MOP Changed. DP {0} is less than Saholic MOP.\n".format(sp.minPrice)
7770 kshitij.so 223
 
2129 ankur.sing 224
    ds_item.mrp = item.mrp
5047 amit.gupta 225
    if ds_item.sellingPrice or item.sellingPrice:
226
        if ds_item.sellingPrice != item.sellingPrice:
12407 kshitij.so 227
            amazonItem = (get_amazon_item_details(item.id))[0]
7761 kshitij.so 228
            if amazonItem is not None:
12701 kshitij.so 229
                #outOfSync = AmazonOutOfSync.get_by(item_id=item.id)
230
                sync = True
231
                if amazonItem.isFba:
232
                    if ds_item.sellingPrice != amazonItem.fbaPrice:
233
                        sync = False
234
                if amazonItem.isNonFba:
235
                    if ds_item.sellingPrice != amazonItem.sellingPrice:
236
                        sync = False
237
                if amazonItem.isFbb:
238
                    if ds_item.sellingPrice != amazonItem.fbbPrice:
239
                        sync = False
12888 kshitij.so 240
                if amazonItem.isFbg:
241
                    if ds_item.sellingPrice != amazonItem.fbgPrice:
242
                        sync = False
12701 kshitij.so 243
                if sync:
11816 kshitij.so 244
                    amazonItem.fbaPrice = item.sellingPrice
245
                    amazonItem.sellingPrice=item.sellingPrice
246
                    amazonItem.fbbPrice=item.sellingPrice 
12888 kshitij.so 247
                    amazonItem.fbgPrice=item.sellingPrice
11816 kshitij.so 248
                    amazonItem.mfnPriceLastUpdatedOn = datetime.datetime.now()
249
                    amazonItem.fbaPriceLastUpdatedOn = datetime.datetime.now()
250
                    amazonItem.fbbPriceLastUpdatedOn = datetime.datetime.now()
12888 kshitij.so 251
                    amazonItem.fbgPriceLastUpdatedOn = datetime.datetime.now()
11816 kshitij.so 252
                    message +="Amazon Prices Synced."
253
                else:
12701 kshitij.so 254
                    message +="Amazon Prices Not Synced."
255
 
5047 amit.gupta 256
            message += "Selling Price is changed from {0} to {1}.\n".format(ds_item.sellingPrice, item.sellingPrice)
7770 kshitij.so 257
 
2129 ankur.sing 258
    ds_item.sellingPrice = item.sellingPrice
2174 ankur.sing 259
    ds_item.weight = item.weight
6241 amit.gupta 260
    ds_item.showSellingPrice = item.showSellingPrice
7770 kshitij.so 261
 
7291 vikram.rag 262
    if item.asin:
263
        ds_item.asin = item.asin
264
    ds_item.holdInventory = item.holdInventory
265
    ds_item.defaultInventory = item.defaultInventory
9841 rajveer 266
    ds_item.holdOverride = item.holdOverride 
7770 kshitij.so 267
 
6826 amit.gupta 268
    if item.startDate:
269
        ds_item.startDate = to_py_date(item.startDate)
270
        ds_item.startDate = ds_item.startDate.replace(hour=0,second=0,minute=0)
271
        if item.itemStatus == status.COMING_SOON and ds_item.startDate < datetime.datetime.now()  :
272
            item.itemStatus = status.ACTIVE
273
            item.status_description = "This item is active"
274
    else:
275
        ds_item.startDate = None
276
 
2358 ankur.sing 277
    if ds_item.status != item.itemStatus:
2402 rajveer 278
        add_status_change_log(ds_item, item.itemStatus)
5047 amit.gupta 279
        if item.itemStatus == status.PHASED_OUT:
280
            message += "Item is phased out."
2358 ankur.sing 281
        ds_item.status = item.itemStatus
2035 rajveer 282
    if item.status_description:
283
        ds_item.status_description = item.status_description
7770 kshitij.so 284
 
511 rajveer 285
    if item.retireDate:
2116 ankur.sing 286
        ds_item.retireDate = to_py_date(item.retireDate)
2497 ankur.sing 287
    else:
288
        ds_item.retireDate = None
5217 amit.gupta 289
 
290
    if item.expectedArrivalDate:
291
        ds_item.expectedArrivalDate = to_py_date(item.expectedArrivalDate)
292
    else:
293
        ds_item.expectedArrivalDate = None
7770 kshitij.so 294
 
5217 amit.gupta 295
    if item.comingSoonStartDate:
296
        ds_item.comingSoonStartDate = to_py_date(item.comingSoonStartDate)
6696 rajveer 297
        ds_item.comingSoonStartDate = ds_item.comingSoonStartDate.replace(hour=0,second=0,minute=0)
5217 amit.gupta 298
    else:
299
        ds_item.comingSoonStartDate = None
7770 kshitij.so 300
 
301
 
2497 ankur.sing 302
    ds_item.feature_id = item.featureId
303
    ds_item.feature_description = item.featureDescription
7770 kshitij.so 304
 
5047 amit.gupta 305
    if ds_item.bestDealText or item.bestDealText:
306
        if item.bestDealText != ds_item.bestDealText:
5080 amit.gupta 307
            message += "Promotion text is changed from '{0}' to '{1}'.\n".format(ds_item.bestDealText, item.bestDealText)
2129 ankur.sing 308
    ds_item.bestDealText = item.bestDealText
309
    ds_item.bestDealValue = item.bestDealValue
2065 ankur.sing 310
    ds_item.bestSellingRank = item.bestSellingRank
7770 kshitij.so 311
 
6777 vikram.rag 312
    if ds_item.bestDealsDetailsText or item.bestDealsDetailsText:
313
        if item.bestDealsDetailsText != ds_item.bestDealsDetailsText:
314
            message += "Best deals details text is changed from '{0}' to '{1}'.\n".format(ds_item.bestDealsDetailsText, item.bestDealsDetailsText)
315
    ds_item.bestDealsDetailsText = item.bestDealsDetailsText
7770 kshitij.so 316
 
6777 vikram.rag 317
    if ds_item.bestDealsDetailsLink or item.bestDealsDetailsLink:
318
        if item.bestDealsDetailsLink != ds_item.bestDealsDetailsLink:
319
            message += "Best deals details link is changed from '{0}' to '{1}'.\n".format(ds_item.bestDealsDetailsLink, item.bestDealsDetailsLink)
320
    ds_item.bestDealsDetailsLink = item.bestDealsDetailsLink
7770 kshitij.so 321
 
322
 
2065 ankur.sing 323
    ds_item.defaultForEntity = item.defaultForEntity
7770 kshitij.so 324
 
5047 amit.gupta 325
    if ds_item.risky or item.risky:
326
        if ds_item.risky != item.risky:
5080 amit.gupta 327
            message += "Risky flag is changed to '{0}'.\n".format(set)
7770 kshitij.so 328
 
2251 ankur.sing 329
    ds_item.risky = item.risky
7770 kshitij.so 330
 
5385 phani.kuma 331
    ds_item.type = ItemType._VALUES_TO_NAMES[item.type]
332
    ds_item.hasItemNo = item.hasItemNo
7770 kshitij.so 333
 
3459 chandransh 334
    if item.expectedDelay is not None:
3359 chandransh 335
        ds_item.expectedDelay = item.expectedDelay
7770 kshitij.so 336
 
4506 phani.kuma 337
    if item.preferredVendor:
5080 amit.gupta 338
        if item.preferredVendor != ds_item.preferredVendor:
5944 mandeep.dh 339
            inventoryClient = InventoryClient().get_client()
340
            newPreferredVendorName = inventoryClient.getVendor(item.preferredVendor).name
5080 amit.gupta 341
            oldPreferredVendorName = 'None'
342
            if ds_item.preferredVendor:
5944 mandeep.dh 343
                oldPreferredVendorName = inventoryClient.getVendor(ds_item.preferredVendor).name
7770 kshitij.so 344
            message += "Preferred vendor is changed from '{0}' to '{1}'.\n".format(oldPreferredVendorName, newPreferredVendorName)       
4506 phani.kuma 345
        ds_item.preferredVendor = item.preferredVendor
7770 kshitij.so 346
 
5080 amit.gupta 347
    if item.isWarehousePreferenceSticky != ds_item.isWarehousePreferenceSticky:
348
        flag = "ON" if item.isWarehousePreferenceSticky else "OFF"
349
        message += "Warehouse preference sticky is {0}.\n".format(flag)
350
 
4413 anupam.sin 351
    ds_item.isWarehousePreferenceSticky = item.isWarehousePreferenceSticky
7770 kshitij.so 352
 
7296 amit.gupta 353
    ds_item.updatedOn = datetime.datetime.now()
7770 kshitij.so 354
 
7382 rajveer 355
 
7519 rajveer 356
    ds_item.activeOnStore = item.activeOnStore
18048 kshitij.so 357
 
358
    ds_item.packQuantity = item.packQuantity
18150 kshitij.so 359
    ds_item.quantityStep = item.quantityStep
360
    ds_item.minimumBuyQuantity = item.minimumBuyQuantity
18414 kshitij.so 361
    ds_item.maximumBuyQuantity = item.maximumBuyQuantity
18048 kshitij.so 362
 
122 ashish 363
    session.commit();
8867 rajveer 364
 
11817 kshitij.so 365
    subject = "Item '{0}' is updated in Catalog. Id is {1}".format(__get_product_name(ds_item),ds_item.id)
366
    if message:
367
        __send_mail(subject, message)
368
    if store_message:
369
        __send_mail(subject, store_message, to_store_addresses)
8867 rajveer 370
 
122 ashish 371
    return ds_item.id
94 ashish 372
 
103 ashish 373
def add_item(item):
374
    if not item:
122 ashish 375
        raise InventoryServiceException(108, "Bad item in request")
635 rajveer 376
    if get_item(item.id):
15777 amit.gupta 377
        print item.id
122 ashish 378
        raise InventoryServiceException(101, "Item already exists")
7770 kshitij.so 379
 
2120 ankur.sing 380
    validate_item_prices(item)
7770 kshitij.so 381
 
103 ashish 382
    ds_item = Item()
12567 amit.gupta 383
 
384
    if item.id:
385
        ds_item.id = item.id
963 chandransh 386
    if item.productGroup:
387
        ds_item.product_group = item.productGroup
388
    if item.brand:
389
        ds_item.brand = item.brand
515 rajveer 390
    if item.modelName:
391
        ds_item.model_name = item.modelName
392
    if item.modelNumber:
393
        ds_item.model_number = item.modelNumber
609 chandransh 394
    if item.color:
395
        ds_item.color = item.color
483 rajveer 396
    if item.category:
397
        ds_item.category = item.category
398
    if item.comments:
399
        ds_item.comments = item.comments
7291 vikram.rag 400
    if item.asin:
401
        ds_item.asin = item.asin
402
    ds_item.holdInventory = item.holdInventory
9841 rajveer 403
    ds_item.defaultInventory = item.defaultInventory
404
    ds_item.holdOverride = item.holdOverride   
7296 amit.gupta 405
    ds_item.addedOn = datetime.datetime.now()
406
    ds_item.updatedOn = datetime.datetime.now()
2116 ankur.sing 407
    if item.startDate:
408
        ds_item.startDate = to_py_date(item.startDate)
6696 rajveer 409
        ds_item.startDate = ds_item.startDate.replace(hour=0,second=0,minute=0)
2116 ankur.sing 410
    if item.retireDate:
411
        ds_item.retireDate = to_py_date(item.retireDate)
5217 amit.gupta 412
    if item.comingSoonStartDate:
413
        ds_item.comingSoonStartDate = to_py_date(item.comingSoonStartDate)
414
    if item.expectedArrivalDate:
7770 kshitij.so 415
        ds_item.expectedArrivalDate = to_py_date(item.expectedArrivalDate)   
483 rajveer 416
    if item.mrp:
417
        ds_item.mrp = item.mrp
418
    if item.sellingPrice:
419
        ds_item.sellingPrice = item.sellingPrice
122 ashish 420
    if item.weight:
421
        ds_item.weight = item.weight
7770 kshitij.so 422
 
122 ashish 423
    if item.featureId:
424
        ds_item.feature_id = item.featureId
425
    if item.featureDescription:
426
        ds_item.feature_description = item.featureDescription
7770 kshitij.so 427
 
428
 
103 ashish 429
    #check if categories present. If yes, add them to system
7770 kshitij.so 430
 
609 chandransh 431
    if item.bestDealValue:
432
        ds_item.bestDealValue = item.bestDealValue
433
    if item.bestDealText:
434
        ds_item.bestDealText = item.bestDealText
6777 vikram.rag 435
    if item.bestDealsDetailsText:
436
        ds_item.bestDealsDetailsText = item.bestDealsDetailsText
437
    if item.bestDealsDetailsLink:
7770 kshitij.so 438
        ds_item.bestDealsDetailsLink = item.bestDealsDetailsLink   
2116 ankur.sing 439
    if item.bestSellingRank:
440
        ds_item.bestSellingRank = item.bestSellingRank
441
    ds_item.defaultForEntity = item.defaultForEntity
2251 ankur.sing 442
    ds_item.risky = item.risky
7770 kshitij.so 443
 
5385 phani.kuma 444
    ds_item.type = ItemType._VALUES_TO_NAMES[item.type]
445
    ds_item.hasItemNo = item.hasItemNo
7256 rajveer 446
    ds_item.activeOnStore = item.activeOnStore
7770 kshitij.so 447
 
3467 chandransh 448
    if item.expectedDelay is not None:
3359 chandransh 449
        ds_item.expectedDelay = item.expectedDelay
3467 chandransh 450
    else:
451
        ds_item.expectedDelay = 0
18048 kshitij.so 452
 
453
    if item.packQuantity is None or item.packQuantity==0:
454
        ds_item.packQuantity = 1
455
    else:
456
        ds_item.packQuantity = item.packQuantity
457
 
7770 kshitij.so 458
 
5408 amit.gupta 459
    preferredVendorName = "None"
4881 phani.kuma 460
    if item.preferredVendor:
461
        ds_item.preferredVendor = item.preferredVendor
5944 mandeep.dh 462
        inventoryClient = InventoryClient().get_client()
6838 vikram.rag 463
        preferredVendorName = inventoryClient.getVendor(item.preferredVendor).name
7770 kshitij.so 464
 
6838 vikram.rag 465
    if item.preferredInsurer is not None:
7770 kshitij.so 466
        ds_item.preferredInsurer = item.preferredInsurer            
467
 
5586 phani.kuma 468
    if item.catalogItemId:
469
        catalog_client = CatalogClient("catalog_service_server_host_master", "catalog_service_server_port").get_client()
470
        master_items = catalog_client.getItemsByCatalogId(item.catalogItemId)
471
        itemStatus = status.IN_PROCESS
472
        for masterItem in master_items:
473
            if masterItem.itemStatus in [status.CONTENT_COMPLETE, status.COMING_SOON, status.ACTIVE, status.PAUSED]:
474
                itemStatus = status.CONTENT_COMPLETE
475
                ds_item.category = masterItem.category
476
                break
477
        ds_item.catalog_item_id = item.catalogItemId
478
        ds_item.status = itemStatus
2116 ankur.sing 479
        ds_item.status_description = "This item is in process."
480
    else:
5586 phani.kuma 481
        # Check if a similar item already exists in our database
482
        similar_item = Item.query.filter_by(brand=item.brand, model_number=item.modelNumber, model_name=item.modelName).first()
7770 kshitij.so 483
 
5586 phani.kuma 484
        if similar_item is None or similar_item.catalog_item_id is None:
485
            # If there is no similar item in the database from before,
486
            # use the entity_id_generator
487
            entity_id = EntityIDGenerator.query.first()
488
            ds_item.catalog_item_id = entity_id.id + 1
12641 amit.gupta 489
            if item.itemStatus:
490
                ds_item.status = item.itemStatus
12648 amit.gupta 491
                ds_item.status_description = status._VALUES_TO_NAMES[item.itemStatus]
12640 amit.gupta 492
            else:
493
                ds_item.status = status.IN_PROCESS
494
                ds_item.status_description = "This item is in process."
5586 phani.kuma 495
            entity_id.id = entity_id.id  + 1
496
            if similar_item is not None and similar_item.catalog_item_id is None:
497
                similar_item.catalog_item_id = entity_id.id
498
        else:
12685 amit.gupta 499
            print "[SIMILAR ITEM FOUND:] FOR {0} {1} {2}".format(item.brand, item.modelNumber, item.modelName)
5586 phani.kuma 500
            #If a similar item already exists for a product group, brand and model_number, set it as same.
501
            ds_item.catalog_item_id = similar_item.catalog_item_id
502
            ds_item.category = similar_item.category
503
            ds_item.product_group = similar_item.product_group
504
            ds_item.status = similar_item.status
505
            ds_item.status_description = similar_item.status_description
7770 kshitij.so 506
 
103 ashish 507
    session.commit();
5052 amit.gupta 508
    subject = "New item is added. Id is {0}".format(str(ds_item.id))
6777 vikram.rag 509
    message = "Category : {6}, Brand : {0}, Model : {1}, Model Number : {2}\nColor : {3}, Selling Price : {4}, Mrp : {5}, \nPromotion Text : {7}, Preferred Vendor: {8}".format(item.brand, item.modelNumber, item.modelName, item.color, item.sellingPrice, item.mrp, item.category, item.bestDealText,item.bestDealsDetailsText,item.bestDealsDetailsLink, preferredVendorName)
15777 amit.gupta 510
    #__send_mail(subject, message)
3325 chandransh 511
    return ds_item.id
512
 
103 ashish 513
def retire_item(item_id):
514
    if not item_id:
122 ashish 515
        raise InventoryServiceException(101, "bad item id")
635 rajveer 516
    item = get_item(item_id)
103 ashish 517
    if not item:
122 ashish 518
        raise InventoryServiceException(108, "item id not present")
519
    item.status = status.PHASED_OUT
520
    item.retireDate = datetime.datetime.now()
103 ashish 521
    session.commit()
7770 kshitij.so 522
 
122 ashish 523
#need to implement threads based solution here
103 ashish 524
def start_item_on(item_id, timestamp):
525
    if not item_id:
122 ashish 526
        raise InventoryServiceException(101, "bad item id")
635 rajveer 527
    item = get_item(item_id)
103 ashish 528
    if not item:
122 ashish 529
        raise InventoryServiceException(108, "item id not present")
7770 kshitij.so 530
 
122 ashish 531
    item.status = status.ACTIVE
532
    item.startDate = datetime.datetime.fromtimestamp(to_py_date(timestamp))
533
    add_status_change_log(item, status.ACTIVE)
103 ashish 534
    session.commit()
7770 kshitij.so 535
 
122 ashish 536
#need to implement threads here
103 ashish 537
def retire_item_on(item_id, timestamp):
538
    if not item_id:
122 ashish 539
        raise InventoryServiceException(101, "bad item id")
635 rajveer 540
    item = get_item(item_id)
103 ashish 541
    if not item:
122 ashish 542
        raise InventoryServiceException(108, "item id not present")
7770 kshitij.so 543
 
122 ashish 544
    item.status = status.PHASED_OUT
545
    item.retireDate = datetime.datetime.fromtimestamp(to_py_date(timestamp))
546
    add_status_change_log(item, status.PHASED_OUT)
103 ashish 547
    session.commit()
7770 kshitij.so 548
 
103 ashish 549
def add_status_change_log(item, new_status):
550
    item_change_log = ItemChangeLog()
551
    item_change_log.new_status = new_status
552
    item_change_log.old_status = item.status
553
    item_change_log.timestamp = datetime.datetime.now()
554
    item_change_log.item = item
555
    session.commit()
7770 kshitij.so 556
 
103 ashish 557
def change_item_status(item_id, new_status):
558
    if not item_id:
122 ashish 559
        raise InventoryServiceException(101, "bad item id")
635 rajveer 560
    item = get_item(item_id)
103 ashish 561
    if not item:
122 ashish 562
        raise InventoryServiceException(108, "item id not present")
2116 ankur.sing 563
    add_status_change_log(item, new_status)
122 ashish 564
    item.status = new_status
2251 ankur.sing 565
    if item.status == status.PHASED_OUT:
566
        item.status_description = "This item has been phased out"
5047 amit.gupta 567
        __send_mail("Item '{0}' is Phased-Out. Item id is {1}".format(__get_product_name(item), item_id), "")
2251 ankur.sing 568
    elif item.status == status.DELETED:
569
        item.status_description = "This item has been deleted"
3924 rajveer 570
    elif item.status == status.PAUSED:
7770 kshitij.so 571
        item.status_description = "This item is currently out of stock"     
3924 rajveer 572
    elif item.status == status.PAUSED_BY_RISK:
573
        item.status_description = "This item is currently out of stock"
574
        #This will clear cache from tomcat
10223 amit.gupta 575
        #__clear_homepage_cache() 
2251 ankur.sing 576
    elif item.status == status.ACTIVE:
577
        item.status_description = "This item is active"
578
    elif item.status == status.IN_PROCESS:
579
        item.status_description = "This item is in process"
580
    elif item.status == status.CONTENT_COMPLETE:
581
        item.status_description = "This item is in process"
103 ashish 582
    session.commit()
12963 amit.gupta 583
 
584
#Risky item is validated wheter in stock or not   
5944 mandeep.dh 585
def check_risky_item(item_id):
635 rajveer 586
    item = get_item(item_id)
2251 ankur.sing 587
    if not item.risky:
588
        return
5944 mandeep.dh 589
    client = InventoryClient().get_client()
7770 kshitij.so 590
    itemInfo = client.getItemAvailabilityAtLocation(item.id, sourceId)   
17782 amit.gupta 591
    availability = itemInfo[4]
5944 mandeep.dh 592
    if availability <= 0:
2251 ankur.sing 593
        if item.status == status.ACTIVE:
2984 rajveer 594
            change_item_status(item.id, status.PAUSED_BY_RISK)
4797 rajveer 595
            __send_mail_for_oos_item(item)
2251 ankur.sing 596
    else:
2984 rajveer 597
        if item.status == status.PAUSED_BY_RISK:
2251 ankur.sing 598
            change_item_status(item.id, status.ACTIVE)
6255 rajveer 599
            __send_mail_for_active_item(item.id, "Item '{0}' is Active. Item id is {1}".format(__get_product_name(item), item_id), "")
2368 ankur.sing 600
    session.commit()
7770 kshitij.so 601
 
9253 rajveer 602
def mark_item_as_content_complete(entity_id, category, brand, modelName, modelNumber, isAndroid):
2828 rajveer 603
    '''
604
    Get all the items for this entityID and update category, brand, modelName and modelNumber for all.
605
    Update Status for only IN_PROCESS items to CONTENT_COMPLETE
606
    '''
723 chandransh 607
    content_complete_status = status.CONTENT_COMPLETE
2828 rajveer 608
    items = Item.query.filter_by(catalog_item_id=entity_id).all()
723 chandransh 609
    current_timestamp = datetime.datetime.now()
610
    for item in items:
18569 amit.gupta 611
        if item.status == status.IN_PROCESS or item.status == status.PARTIALLY_ACTIVE:
2828 rajveer 612
            item.status = content_complete_status
18569 amit.gupta 613
            item.status_description = "CONTENT_COMPLETE"
2828 rajveer 614
            item_change_log = ItemChangeLog()
615
            item_change_log.old_status = item.status
616
            item_change_log.new_status = content_complete_status
617
            item_change_log.timestamp = current_timestamp
618
            item_change_log.item = item
17216 kshitij.so 619
            #if isAndroid:
620
            #    itemInsurerMapping = ItemInsurerMapping.query.filter(ItemInsurerMapping.itemId == item.id).filter(ItemInsurerMapping.insurerType == InsurerType._NAMES_TO_VALUES.get("DATA")).first()
621
            #    if itemInsurerMapping is None:
622
            #        itemInsurerMapping = ItemInsurerMapping()
623
            #        itemInsurerMapping.itemId = item.id
624
            #        itemInsurerMapping.insurerId = 2
625
            #        itemInsurerMapping.insurerType = 2
7770 kshitij.so 626
 
4762 phani.kuma 627
        category_object = get_category(category)
628
        if category_object is not None:
629
            item.category = category
630
            item.product_group = category_object.display_name
13034 amit.gupta 631
        else:
632
            return False
2075 rajveer 633
        item.brand = brand
2081 rajveer 634
        item.model_name = modelName
635
        item.model_number = modelNumber
723 chandransh 636
        item.updatedOn = current_timestamp
637
    session.commit()
638
    return True
1294 chandransh 639
 
2404 chandransh 640
def get_child_categories(category):
641
    cm = CategoryManager()
2621 varun.gupt 642
    cat = cm.getCategory(category)
643
    return cat.children_category_ids if cat else None
2404 chandransh 644
 
626 chandransh 645
def get_best_sellers(start_index, stop_index, category=-1):
2404 chandransh 646
    '''
647
    Returns the Best Sellers between the start and the stop index in the given category
648
    '''
1926 rajveer 649
    query = get_best_sellers_query(category, None)
1098 chandransh 650
    best_sellers = query.all()[start_index:stop_index]
621 chandransh 651
    return get_thrift_item_list(best_sellers)
652
 
2093 chandransh 653
def get_best_sellers_count(category=-1):
2404 chandransh 654
    '''
655
    Returns the number of best sellers in the given category
656
    '''
1926 rajveer 657
    count = get_best_sellers_query(category, None).count()
1120 rajveer 658
    if count is None:
659
        count = 0
766 rajveer 660
    return count
621 chandransh 661
 
1926 rajveer 662
def get_best_sellers_catalog_ids(start_index, stop_index, brand, category=-1):
2404 chandransh 663
    '''
664
    Returns the Best sellers for the given brand and category between the start and the stop index.
7770 kshitij.so 665
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
2404 chandransh 666
    '''
1926 rajveer 667
    query = get_best_sellers_query(category, brand)
1098 chandransh 668
    best_sellers = query.all()[start_index:stop_index]
621 chandransh 669
    return [item.catalog_item_id for item in best_sellers]
7770 kshitij.so 670
 
1926 rajveer 671
def get_best_sellers_query(category, brand):
2404 chandransh 672
    '''
673
    Returns the query to be used for getting Best Sellers.
674
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
675
    '''
1098 chandransh 676
    query = Item.query.filter_by(status=status.ACTIVE).filter(Item.bestSellingRank != None)
626 chandransh 677
    if category != -1:
1970 rajveer 678
        all_categories = [category]
679
        child_categories = get_child_categories(category)
680
        if child_categories is not None:
7770 kshitij.so 681
            all_categories = all_categories + child_categories
1970 rajveer 682
        query = query.filter(Item.category.in_(all_categories))
1926 rajveer 683
    if brand is not None:
684
        query = query.filter_by(brand=brand)
7202 amit.gupta 685
    query = query.group_by(Item.catalog_item_id).order_by(asc(Item.bestSellingRank))
621 chandransh 686
    return query
609 chandransh 687
 
1098 chandransh 688
def get_best_deals(category=-1):
2404 chandransh 689
    '''
690
    Returns the Best deals in the given category. Ignores the category if it's passed as -1.
691
    '''
692
    query = get_best_deals_query(Item, category, None)
1098 chandransh 693
    items = query.all()
609 chandransh 694
    return get_thrift_item_list(items)
695
 
1098 chandransh 696
def get_best_deals_count(category=-1):
2404 chandransh 697
    '''
698
    Returns the count of best deals in the given category.
699
    Ignores the category if it's -1.
700
    '''
701
    count = get_best_deals_counting_query(func.count(distinct(Item.catalog_item_id)), category, None).scalar()
1120 rajveer 702
    if count is None:
703
        count = 0
766 rajveer 704
    return count
7770 kshitij.so 705
 
1926 rajveer 706
def get_best_deals_catalog_ids(start_index, stop_index, brand, category=-1):
2404 chandransh 707
    '''
708
    Returns the catalog_item_ids of best deal items for the given brand and category.
709
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
710
    '''
711
    query = get_best_deals_query(Item, category, brand)
1098 chandransh 712
    best_deal_items = query.all()[start_index:stop_index]
713
    return [item.catalog_item_id for item in best_deal_items]
714
 
2404 chandransh 715
def get_best_deals_counting_query(obj, category, brand):
716
    '''
717
    Returns the query to be used to select the best deals in the given brand and category.
7770 kshitij.so 718
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
2404 chandransh 719
    '''
720
    query = session.query(obj).filter_by(status=status.ACTIVE).filter(Item.bestDealValue != None)
626 chandransh 721
    if category != -1:
1970 rajveer 722
        all_categories = [category]
723
        child_categories = get_child_categories(category)
724
        if child_categories is not None:
7770 kshitij.so 725
            all_categories = all_categories + child_categories
1970 rajveer 726
        query = query.filter(Item.category.in_(all_categories))
1926 rajveer 727
    if brand is not None:
728
        query = query.filter_by(brand=brand)
2404 chandransh 729
    return query
730
 
731
def get_best_deals_query(obj, category, brand):
732
    '''
733
    Returns the query to be used to get the best deals in the given category and brand.
734
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
735
    '''
736
    query = get_best_deals_counting_query(obj, category, brand)
1098 chandransh 737
    query = query.group_by(Item.catalog_item_id).order_by(desc(Item.bestDealValue))
738
    return query
609 chandransh 739
 
5217 amit.gupta 740
def get_coming_soon(category=-1):
741
    '''
742
    Returns the Coming Soon items in the given category. Ignores the category if it's passed as -1.
743
    '''
744
    query = get_coming_soon_query(Item, category, None)
745
    items = query.all()
746
    return get_thrift_item_list(items)
747
 
748
def get_coming_soon_count(category=-1):
749
    '''
750
    Returns the count of coming in the given category.
751
    Ignores the category if it's -1.
752
    '''
753
    count = get_coming_soon_counting_query(func.count(distinct(Item.catalog_item_id)), category, None).scalar()
754
    if count is None:
755
        count = 0
756
    return count
757
 
758
def get_coming_soon_catalog_ids(start_index, stop_index, brand, category=-1):
759
    '''
760
    Returns the catalog_item_ids of coming soon items for the given brand and category.
761
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
762
    '''
763
    query = get_coming_soon_query(Item, category, brand)
764
    coming_soon_items = query.all()[start_index:stop_index]
765
    return [item.catalog_item_id for item in coming_soon_items]
766
 
767
def get_coming_soon_counting_query(obj, category, brand):
768
    '''
769
    Returns the query to be used to select the coming soon product in the given brand and category.
7770 kshitij.so 770
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
5217 amit.gupta 771
    '''
772
    query = session.query(obj).filter_by(status=status.COMING_SOON)
773
    if category != -1:
774
        all_categories = [category]
775
        child_categories = get_child_categories(category)
776
        if child_categories is not None:
7770 kshitij.so 777
            all_categories = all_categories + child_categories
5217 amit.gupta 778
        query = query.filter(Item.category.in_(all_categories))
779
    if brand is not None:
780
        query = query.filter_by(brand=brand)
781
    return query
782
 
783
def get_coming_soon_query(obj, category, brand):
784
    '''
785
    Returns the query to be used to get the coming soon products in the given category and brand.
786
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
787
    '''
788
    query = get_coming_soon_counting_query(obj, category, brand)
789
    query = query.group_by(Item.catalog_item_id).order_by(asc(Item.comingSoonStartDate))
790
    return query
791
 
1098 chandransh 792
def get_latest_arrivals(limit, category=-1):
2404 chandransh 793
    '''
794
    Returns up to limit number of Latest Arrivals in the given category.
795
    '''
2975 chandransh 796
    categories = []
797
    if category != -1:
798
        categories = [category]
799
    query = get_latest_arrivals_query(Item, categories, None)
1098 chandransh 800
    items = query.all()[0:limit]
609 chandransh 801
    return get_thrift_item_list(items)
7770 kshitij.so 802
 
1098 chandransh 803
def get_latest_arrivals_count(limit, category=-1):
2404 chandransh 804
    '''
805
    Returns the number of latest arrivals which will be displayed on the website.
3016 chandransh 806
    To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
2404 chandransh 807
    '''
2975 chandransh 808
    categories = []
809
    if category != -1:
810
        categories = [category]
811
    count = get_latest_arrivals_counting_query(func.count(distinct(Item.catalog_item_id)), categories, None).scalar()
1120 rajveer 812
    if count is None:
813
        count = 0
814
    count = min(count, limit)
766 rajveer 815
    return count
7770 kshitij.so 816
 
2975 chandransh 817
def get_latest_arrivals_catalog_ids(start_index, stop_index, brand, categories=[]):
2404 chandransh 818
    '''
819
    Returns the catalog_item_ids of the latest arrivals between the start and the stop index
3016 chandransh 820
    To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
2404 chandransh 821
    '''
2975 chandransh 822
    query = get_latest_arrivals_query(Item, categories, brand)
1098 chandransh 823
    latest_arrivals = query.all()[start_index:stop_index]
824
    return [item.catalog_item_id for item in latest_arrivals]
825
 
2975 chandransh 826
def get_latest_arrivals_counting_query(obj, categories, brand):
2404 chandransh 827
    '''
828
    Returns the query to be used to count Latest arrivals.
3016 chandransh 829
    To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
2404 chandransh 830
    '''
831
    query = session.query(obj).filter_by(status=status.ACTIVE)
7770 kshitij.so 832
 
2975 chandransh 833
    all_categories = []
834
    for category in categories:
835
        all_categories.append(category)
1970 rajveer 836
        child_categories = get_child_categories(category)
2975 chandransh 837
        if child_categories:
838
            all_categories = all_categories + child_categories
7770 kshitij.so 839
    if all_categories:
1970 rajveer 840
        query = query.filter(Item.category.in_(all_categories))
7770 kshitij.so 841
 
1926 rajveer 842
    if brand is not None:
843
        query = query.filter_by(brand=brand)
2404 chandransh 844
    return query
845
 
2975 chandransh 846
def get_latest_arrivals_query(obj, categories, brand):
2404 chandransh 847
    '''
848
    Returns the query to be used to retrieve Latest Arrivals.
849
    Ignores the category if it's passed as -1 and the brand if it's passed as None.
850
    '''
2975 chandransh 851
    query = get_latest_arrivals_counting_query(obj, categories, brand)
5167 rajveer 852
    query = query.group_by(Item.catalog_item_id).order_by(desc(Item.startDate)).order_by(Item.catalog_item_id)
1098 chandransh 853
    return query
609 chandransh 854
 
855
def get_thrift_item_list(items):
1098 chandransh 856
    return [to_t_item(item) for item in items if item != None]
635 rajveer 857
 
1155 rajveer 858
def generate_new_entity_id():
859
    generator =  EntityIDGenerator.query.one()
860
    id = generator.id + 1
861
    generator.id = id
862
    session.commit()
863
    return id
864
 
635 rajveer 865
def put_category_object(object):
866
    category = Category.get_by(id=1)
867
    if category is None:
868
        category = Category()
7770 kshitij.so 869
    category.object = object   
635 rajveer 870
    session.commit()
871
    return True
872
 
873
def get_category_object():
766 rajveer 874
    object = Category.get_by(id=1).object
875
    return object
876
 
1970 rajveer 877
def add_category(t_category):
878
    category = Category.get_by(id=t_category.id)
879
    if category is None:
880
        category = Category()
7770 kshitij.so 881
    category.id = t_category.id
1970 rajveer 882
    category.label = t_category.label
883
    category.description = t_category.description
4762 phani.kuma 884
    category.display_name = t_category.display_name
7770 kshitij.so 885
    category.parent_category_id = t_category.parent_category_id
1970 rajveer 886
    session.commit()
887
    return True
888
 
889
def get_category(id):
890
    return Category.query.filter_by(id=id).first()
891
 
892
def get_all_categories():
893
    return Category.query.all()
894
 
2120 ankur.sing 895
def validate_item_prices(item):
2129 ankur.sing 896
    if item.mrp == None or item.sellingPrice == None or item.mrp == "" or item.sellingPrice == "":
897
        return
898
    if item.mrp < item.sellingPrice:
2120 ankur.sing 899
        print "[BAD MRP and SP:] for {0} {1} {2} {3}. MRP={4}, SP={5}".format(item.productGroup, item.brand, item.modelNumber, item.color, str(item.mrp), str(item.sellingPrice))
900
        raise InventoryServiceException(101, "[BAD MRP and SP:] for {0} {1} {2} {3}. MRP={4}, SP={5}".format(item.productGroup, item.brand, item.modelNumber, item.color, str(item.mrp), str(item.sellingPrice)))
2065 ankur.sing 901
    return
7770 kshitij.so 902
 
2120 ankur.sing 903
def validate_vendor_prices(item, vendorPrices):
2129 ankur.sing 904
    if item.mrp != None and item.mrp != "" and vendorPrices.mop != "" and item.mrp <  vendorPrices.mop:
2120 ankur.sing 905
        print "[BAD MRP and MOP:] for {0} {1} {2} {3}. MRP={4}. MOP={5}, Vendor={6}".format(item.productGroup, item.brand, item.modelNumber, item.color, str(item.mrp), str(vendorPrices.mop), str(vendorPrices.vendorId))
906
        raise InventoryServiceException(101, "[BAD MRP and MOP:] for {0} {1} {2} {3}. MRP={4}. MOP={5}, Vendor={6}".format(item.productGroup, item.brand, item.modelNumber, item.color, str(item.mrp), str(vendorPrices.mop), str(vendorPrices.vendorId)))
907
    if vendorPrices.mop != "" and vendorPrices.transferPrice != "" and vendorPrices.transferPrice > vendorPrices.mop:
908
        print "[BAD MOP and TP:] for {0} {1} {2} {3}. TP={4}. MOP={5}, Vendor={6}".format(item.productGroup, item.brand, item.modelNumber, item.color, str(vendorPrices.transferPrice), str(vendorPrices.mop), str(vendorPrices.vendorId))
909
        raise InventoryServiceException(101, "[BAD MOP and TP:] for {0} {1} {2} {3}. TP={4}. MOP={5}, Vendor={6}".format(item.productGroup, item.brand, item.modelNumber, item.color, str(vendorPrices.transferPrice), str(vendorPrices.mop), str(vendorPrices.vendorId)))
910
    return
2065 ankur.sing 911
 
4725 phani.kuma 912
def check_color_valid(color):
913
    if color is not None:
914
        color = color.strip().lower()
915
        if color != '' and color != 'na' and color != 'blank' and color != '(blank)':
916
            return True
917
    return False
918
 
919
def check_similar_item(brand, model_number, model_name, color):
2129 ankur.sing 920
    query = Item.query
2428 ankur.sing 921
    query = query.filter_by(brand=brand)
922
    query = query.filter_by(model_number=model_number)
4725 phani.kuma 923
    query = query.filter_by(model_name=model_name)
924
    similar_items = query.all()
925
    item = None
926
    # Check if a similar item already exists in our database
927
    for old_item in similar_items:
928
        if old_item.color != None and old_item.color.strip().lower() == color.strip().lower():
929
            item = old_item
930
            break
7770 kshitij.so 931
 
4725 phani.kuma 932
    # Check if a similar item already exists in our database with out valid color if similar item with same color is not found
2116 ankur.sing 933
    if item is None:
4725 phani.kuma 934
        for old_item in similar_items:
935
            if not check_color_valid(old_item.color):
936
                item = old_item
937
                break
938
    i = 0
939
    color_of_similar_item = None
940
    # Check if a similar item already exists in our database to be used to get catalog_item_id
941
    for old_item in similar_items:
942
        # get a similar item already existing in our database with valid color
943
        if check_color_valid(old_item.color):
944
            similar_item = old_item
945
            color_of_similar_item = similar_item.color
946
            break
947
        i = i + 1
948
        # get a similar item already existing in our database if similar item with valid color is not found
949
        if i == len(similar_items):
950
            similar_item = old_item
951
            color_of_similar_item = similar_item.color
7770 kshitij.so 952
 
4725 phani.kuma 953
    # Check if a similar item that is obtained above is having a valid color
954
    if check_color_valid(color_of_similar_item):
955
        # if a similar item that is obtained above is having a valid color and new item is about to be created with out valid color it is not done.
956
        # since for example if their is a item with red color in our database and we are creating a new item with no color for the same product which is wrong.
957
        if item is None and not check_color_valid(color):
958
            return similar_item.id
7770 kshitij.so 959
 
4725 phani.kuma 960
    if item is None:
2116 ankur.sing 961
        return 0
962
    else:
963
        return item.id
7770 kshitij.so 964
 
2286 ankur.sing 965
def change_risky_flag(item_id, risky):
966
    item = get_item(item_id)
967
    if not item:
968
        raise InventoryServiceException(101, "Item missing in our database")
969
    try:
970
        log_risky_flag(item_id, risky)
971
    except:
972
        print "Not able to log risky flag change"
973
    item.risky = risky
4295 varun.gupt 974
    if not risky and item.status == status.PAUSED_BY_RISK:
2368 ankur.sing 975
        change_item_status(item.id, status.ACTIVE)
6255 rajveer 976
        __send_mail_for_active_item(item.id, "Item '{0}' is Active. Item id is {1}".format(__get_product_name(item), item_id), "")
2286 ankur.sing 977
    session.commit()
5047 amit.gupta 978
    flag = "ON" if risky else "OFF"
979
    subject = "Risky flag is {0} for Item {1}.".format(flag, __get_product_name(item))
980
    __send_mail(subject,"")
7770 kshitij.so 981
 
4957 phani.kuma 982
def get_items_for_mastersheet(categoryName, brand):
983
    if not categoryName or not brand:
984
        raise InventoryServiceException(101, "Invalid category or brand in request")
7770 kshitij.so 985
 
4762 phani.kuma 986
    categories = ["Handsets", "Tablets", "Laptops"]
4957 phani.kuma 987
    query = Item.query.filter(Item.status != status.PHASED_OUT)
988
    if categoryName == "ALL":
989
        pass
990
    elif categoryName == "ALL Accessories":
991
        query = query.filter(~Item.product_group.in_(categories))
992
    elif categoryName == "ALL Handsets":
993
        query = query.filter(Item.product_group.in_(categories))
994
    elif categoryName == "Mobile Accessories":
995
        child_categories = get_child_categories(10011)
996
        if child_categories is not None:
997
            child_categories.append(0)
998
            query = query.filter(Item.category.in_(child_categories))
999
    elif categoryName == "Laptop Accessories":
1000
        child_categories = get_child_categories(10070)
1001
        if child_categories is not None:
1002
            child_categories.append(0)
1003
            query = query.filter(Item.category.in_(child_categories))
1004
    else:
1005
        query = query.filter(Item.product_group == categoryName)
7770 kshitij.so 1006
 
4957 phani.kuma 1007
    if brand == "ALL":
1008
        pass
1009
    else:
1010
        query = query.filter(Item.brand == brand)
2358 ankur.sing 1011
    items = query.all()
1012
    return items
2116 ankur.sing 1013
 
2358 ankur.sing 1014
def get_risky_items():
12963 amit.gupta 1015
    items = Item.query.filter(Item.risky==True).filter(or_(Item.status==status.ACTIVE, Item.status==status.PAUSED_BY_RISK)).all()
2358 ankur.sing 1016
    return items
3008 rajveer 1017
 
2809 rajveer 1018
def get_similar_items_catalog_ids(start_index, stop_index, itemId):
3008 rajveer 1019
    query = SimilarItems.query.filter_by(item_id=itemId).limit(stop_index-start_index)
1020
    similar_items = query.all()
3289 rajveer 1021
    return_list = []
1022
    for similar_item in similar_items:
1023
        isActive = False
1024
        try:
1025
            all_items = Item.query.filter_by(catalog_item_id=similar_item.catalog_item_id).all()
1026
        except:
1027
            continue
1028
        for item in all_items:
1029
            isActive = isActive or item.status == status.ACTIVE
1030
        if isActive:
1031
            return_list.append(similar_item.catalog_item_id)
1032
    return return_list
4423 phani.kuma 1033
 
1034
def get_all_similar_items_catalog_ids(itemId):
1035
    query = SimilarItems.query.filter_by(item_id=itemId)
1036
    similar_items = query.all()
1037
    return_list = []
1038
    for similar_item in similar_items:
1039
        item_query = Item.query.filter_by(catalog_item_id=similar_item.catalog_item_id).limit(1)
1040
        item = item_query.one()
1041
        return_list.append(item)
7770 kshitij.so 1042
 
4423 phani.kuma 1043
    return get_thrift_item_list(return_list)
1044
 
1045
def add_similar_item_catalog_id(itemId, catalog_item_id):
1046
    if not itemId or not catalog_item_id:
1047
        raise InventoryServiceException(101, "Bad itemId or catalogItemId in request")
1048
    items_for_entity = get_items_by_catalog_id(catalog_item_id)
1049
    if not len(items_for_entity):
1050
        raise InventoryServiceException(101, "catalogItemId does not exists in database")
7770 kshitij.so 1051
 
4423 phani.kuma 1052
    s_items = SimilarItems.query.filter_by(item_id=itemId, catalog_item_id=catalog_item_id).all()
1053
    if not len(s_items):
1054
        s_item = SimilarItems()
1055
        s_item.item_id=itemId
1056
        s_item.catalog_item_id=catalog_item_id
1057
        session.commit()
1058
        return items_for_entity[0]
1059
    else:
1060
        raise InventoryServiceException(101, "Already exists")
7770 kshitij.so 1061
 
4423 phani.kuma 1062
def delete_similar_item_catalog_id(itemId, catalog_item_id):
1063
    if not itemId or not catalog_item_id:
1064
        raise InventoryServiceException(101, "Bad itemId or catalogItemId in request")
7770 kshitij.so 1065
 
4423 phani.kuma 1066
    similar_item = SimilarItems.query.filter_by(item_id=itemId, catalog_item_id=catalog_item_id).all()
1067
    if len(similar_item):
1068
        similar_item[0].delete()
1069
    session.commit()
1070
    return True
5504 phani.kuma 1071
 
1072
def get_all_vouchers_for_item(itemId):
1073
    vouchers = VoucherItemMapping.query.filter_by(item_id=itemId).all()
1074
    return vouchers
1075
 
1076
def get_voucher_amount(itemId, voucher_type):
1077
    voucher = VoucherItemMapping.query.filter_by(item_id=itemId, voucherType=voucher_type).all()
1078
    if len(voucher):
1079
        return voucher[0].amount
1080
    else:
5518 rajveer 1081
        return 0
5504 phani.kuma 1082
 
1083
def add_update_voucher_for_item(catalog_item_id, voucher_type, voucher_amount):
1084
    if not catalog_item_id or not voucher_type or not voucher_amount:
1085
        raise InventoryServiceException(101, "Bad catalogItemId or voucherType or voucherAmount in request")
7770 kshitij.so 1086
 
5504 phani.kuma 1087
    items_for_entity = get_items_by_catalog_id(catalog_item_id)
1088
    if not len(items_for_entity):
1089
        raise InventoryServiceException(101, "catalogItemId does not exists in database")
7770 kshitij.so 1090
 
5504 phani.kuma 1091
    for item in items_for_entity:
1092
        itemId = item.id
1093
        voucher = VoucherItemMapping.query.filter_by(item_id=itemId, voucherType=voucher_type).all()
1094
        if not len(voucher):
1095
            voucher = VoucherItemMapping()
1096
            voucher.item_id=itemId
1097
            voucher.voucherType=voucher_type
1098
            voucher.amount=voucher_amount
1099
        else:
1100
            voucher[0].amount=voucher_amount
1101
    session.commit()
1102
    return True
7770 kshitij.so 1103
 
5504 phani.kuma 1104
def delete_voucher_for_item(catalog_item_id, voucher_type):
1105
    if not catalog_item_id or not voucher_type:
1106
        raise InventoryServiceException(101, "Bad catalogItemId or voucherType in request")
7770 kshitij.so 1107
 
5504 phani.kuma 1108
    items_for_entity = get_items_by_catalog_id(catalog_item_id)
1109
    if not len(items_for_entity):
1110
        raise InventoryServiceException(101, "catalogItemId does not exists in database")
7770 kshitij.so 1111
 
5504 phani.kuma 1112
    for item in items_for_entity:
1113
        itemId = item.id
1114
        voucher = VoucherItemMapping.query.filter_by(item_id=itemId, voucherType=voucher_type).all()
1115
        if len(voucher):
1116
            voucher[0].delete()
1117
    session.commit()
1118
    return True
1119
 
3079 rajveer 1120
def add_product_notification(itemId, email):
1121
    try:
3470 rajveer 1122
        try:
1123
            product_notification = ProductNotification.query.filter_by(item_id=itemId, email=email).one()
1124
        except:
1125
            product_notification = ProductNotification()
1126
            product_notification.email = email
1127
            product_notification.item_id = itemId
3079 rajveer 1128
        product_notification.addedOn = datetime.datetime.now()
1129
        session.commit()
1130
        return True
1131
    except:
1132
        return False
3086 rajveer 1133
 
1134
 
1135
def send_product_notifications():
7134 rajveer 1136
    product_notifications = ProductNotification.query.order_by(ProductNotification.addedOn).all()
1137
    itemcountmap = {}
1138
    itemstatusmap = {}
8182 amar.kumar 1139
    #print "size of prduct notifications = " + str(len(product_notifications))
3086 rajveer 1140
    for product_notification in product_notifications:
1141
        item = product_notification.item
7134 rajveer 1142
        if itemcountmap.has_key(item.id):
1143
            itemcountmap[item.id] = itemcountmap.get(item.id) + 1
1144
        else:
1145
            client = InventoryClient().get_client()
1146
            availability = client.getItemAvailabilityAtLocation(item.id, sourceId)[4]
8182 amar.kumar 1147
            #print "Item status " + str(item.status) + " item.risky " + str(item.risky) + " availability = " + str(availability)
1148
            if item.status == status.ACTIVE and (not item.risky or availability > 0):  
1149
                #print "item status map has new entry " + str(item.id)     
7134 rajveer 1150
                itemstatusmap[item.id] = True
1151
            else:
1152
                itemstatusmap[item.id] = False
1153
            itemcountmap[item.id] = 1
1154
        if itemcountmap[item.id] > 1000:
1155
            continue
7770 kshitij.so 1156
 
7134 rajveer 1157
        if itemstatusmap[item.id]:
8182 amar.kumar 1158
            #print product_notification.email, __get_product_name(item) , product_notification.addedOn, __get_product_url(item), item.id
3086 rajveer 1159
            __enque_product_notification_email(product_notification.email, __get_product_name(item) , product_notification.addedOn, __get_product_url(item), item.id)
1160
            product_notification.delete()
1161
    session.commit()
1162
    return True
7770 kshitij.so 1163
 
3086 rajveer 1164
def __get_product_name(item):
1165
    product_name = item.brand + " " + item.model_name + " " + item.model_number
1166
    color = item.color
1167
    if color is not None and color != 'NA':
1168
        product_name = product_name + " (" + color + ")"
3201 rajveer 1169
    product_name = product_name.replace("  "," ")
3086 rajveer 1170
    return product_name
1171
 
1172
 
1173
def __get_product_url(item):
6029 rajveer 1174
    product_url = "http://" + source_url + "/mobile-phones/" + item.brand + "-" + item.model_name + "-" + item.model_number + "-" + str(item.catalog_item_id)
3086 rajveer 1175
    product_url = product_url.replace("--","-")
1176
    product_url = product_url.replace(" ","")
1177
    return product_url
1178
 
3348 varun.gupt 1179
def get_all_brands_by_category(category_id):
1180
    catm = CategoryManager()
1181
    child_categories = catm.getCategory(category_id).children_category_ids
1182
    brands = session.query(distinct(Item.brand)).filter(Item.category.in_(child_categories)).all()
7770 kshitij.so 1183
 
3348 varun.gupt 1184
    return [brand[0] for brand in brands]
3086 rajveer 1185
 
4957 phani.kuma 1186
def get_all_brands():
1187
    brands = session.query(distinct(Item.brand)).order_by(Item.brand).all()
7770 kshitij.so 1188
 
4957 phani.kuma 1189
    return [brand[0] for brand in brands]
1190
 
3086 rajveer 1191
def __enque_product_notification_email(email, product, date, url, itemId):
7770 kshitij.so 1192
 
3086 rajveer 1193
    html = """
1194
        <html>
1195
        <body>
1196
        <div>
1197
        <p>
1198
            Hi,<br /><br />
6029 rajveer 1199
            The product requested by you on $date is now available on $source_url.
7103 amar.kumar 1200
            <br />
1201
            We have limited stocks of this model at this moment. If you don't want to miss out, please place your order as soon as possible.
3086 rajveer 1202
        </p>
7770 kshitij.so 1203
 
1204
        <p>   
3086 rajveer 1205
        <strong>Product: $product </strong>
1206
        </p>
7770 kshitij.so 1207
 
3086 rajveer 1208
        <p>
7770 kshitij.so 1209
        Click the link below to visit the product:
3086 rajveer 1210
        <br/>
1211
        $url
1212
        </p>
1213
        <p>
1214
        Regards,<br/>
6029 rajveer 1215
        $source_name Customer Support Team<br/>
1216
        $source_url<br/>
3086 rajveer 1217
        Email: help@saholic.com<br/>
1218
        </p>
1219
        </div>
1220
        </body>
1221
        </html>
1222
        """
1223
 
6029 rajveer 1224
    html = Template(html).substitute(dict(product=product,date=date,url=url,source_url=source_url,source_name=source_name))
7770 kshitij.so 1225
 
3086 rajveer 1226
    try:
1227
        helper_client = HelperClient().get_client()
8464 amar.kumar 1228
        helper_client.saveUserEmailForSending([email], "", "Product requested by you is available now.", html, str(itemId), "ProductNotification", [], [],sourceId)
3086 rajveer 1229
    except Exception as e:
1230
        print e
8182 amar.kumar 1231
        print sys.exc_info()[0]
13709 manish.sha 1232
 
1233
    try:
1234
        user_client = UserClient().get_client()
1235
        user = user_client.getUserByEmail(email)
1236
        if user is not None and user.id !=-1:
1237
            if user.mobileNumber is not None:
1238
                mobileNo = user.mobileNumber
1239
            elif user.default_address_id is not None:
1240
                defaultAddress = user_client.getAddressById(user.default_address_id)
1241
                mobileNo = defaultAddress.mobileNumber
1242
            else:
1243
                print 'Sms not sent for email id- ', email
1244
                mobileNo = None
1245
            if mobileNo is not None:
1246
                helper_client = HelperClient().get_client()
1247
                helper_client.saveUserSmsForSending(user.id, mobileNo, "Dear, Customer, Product "+ product +" requested by you is now available at Saholic.com. Limited Stocks", SmsType.SERVICE_ALERT)
1248
                userSmsInfo = helper_client.getUserSmsInfo(user.id);
1249
                if userSmsInfo and mobileNo == userSmsInfo.mobileNo:
1250
                    userSmsInfo.dailyCount = userSmsInfo.dailyCount +1
1251
                    userSmsInfo.weeklyCount = userSmsInfo.weeklyCount +1
1252
                    helper_client.updateUserSmsInfo(userSmsInfo)
1253
                elif userSmsInfo and mobileNo != userSmsInfo.mobileNo:
1254
                    userSmsInfo.updateTimestamp = to_java_date(datetime.datetime.now())
1255
                    userSmsInfo.mobileNo = mobileNo
1256
                    userSmsInfo.dailyCount = 1
1257
                    userSmsInfo.weeklyCount = 1
1258
                    helper_client.updateUserSmsInfo(userSmsInfo)
1259
                else:
1260
                    userSmsInfo = UserSmsInfo()
1261
                    userSmsInfo.userId = user.id
1262
                    userSmsInfo.mobileNo = mobileNo
1263
                    userSmsInfo.createdTimestamp = to_java_date(datetime.datetime.now())
1264
                    userSmsInfo.updateTimestamp = to_java_date(datetime.datetime.now())
1265
                    helper_client.addUserSmsInfo(userSmsInfo);             
1266
 
1267
    except Exception as e:
1268
        print e
1269
        print sys.exc_info()[0]
3086 rajveer 1270
 
3557 rajveer 1271
def get_all_sources():
1272
    sources = Source.query.all()
1273
    return [to_t_source(source) for source in sources]
3086 rajveer 1274
 
3557 rajveer 1275
def get_item_pricing_by_source(itemId, sourceId):
1276
    item = Item.query.filter_by(id=itemId).first()
1277
    if item is None:
1278
        raise InventoryServiceException(101, "Bad Item")
7770 kshitij.so 1279
 
3557 rajveer 1280
    source = Source.query.filter_by(id=sourceId).first()
1281
    if source is None:
1282
        raise InventoryServiceException(101, "Source not found for sourceId " + str(sourceId))
7770 kshitij.so 1283
 
3557 rajveer 1284
    item_pricing = SourceItemPricing.query.filter_by(source=source, item=item).first()
1285
    if item_pricing is None:
1286
        raise InventoryServiceException(101, "Pricing information not found for sourceId " + str(sourceId))
1287
    return item_pricing
7770 kshitij.so 1288
 
3557 rajveer 1289
def add_source_item_pricing(sourceItemPricing):
1290
    if not sourceItemPricing:
1291
        raise InventoryServiceException(108, "Bad sourceItemPricing in request")
7770 kshitij.so 1292
 
3557 rajveer 1293
    if not sourceItemPricing.sellingPrice:
4326 mandeep.dh 1294
        raise InventoryServiceException(101, "Selling Price is not defined for sourceId " + str(sourceItemPricing.sourceId))
7770 kshitij.so 1295
 
3557 rajveer 1296
    sourceId = sourceItemPricing.sourceId
1297
    itemId = sourceItemPricing.itemId
7770 kshitij.so 1298
 
3557 rajveer 1299
    item = Item.query.filter_by(id=itemId).first()
1300
    if item is None:
1301
        raise InventoryServiceException(101, "Bad Item")
7770 kshitij.so 1302
 
3557 rajveer 1303
    source = Source.query.filter_by(id=sourceId).first()
1304
    if source is None:
1305
        raise InventoryServiceException(101, "Source not found for sourceId " + str(sourceId))
7770 kshitij.so 1306
 
3564 rajveer 1307
    ds_sourceItemPricing = SourceItemPricing.get_by(source=source, item=item)
3557 rajveer 1308
    if ds_sourceItemPricing is None:
1309
        ds_sourceItemPricing = SourceItemPricing()
1310
        ds_sourceItemPricing.source = source
1311
        ds_sourceItemPricing.item = item
7770 kshitij.so 1312
 
3557 rajveer 1313
    if sourceItemPricing.mrp:
1314
        ds_sourceItemPricing.mrp = sourceItemPricing.mrp
1315
    ds_sourceItemPricing.sellingPrice = sourceItemPricing.sellingPrice
1316
 
1317
    session.commit()
1318
    return
1319
 
1320
def get_all_source_pricing(itemId):
1321
    item = Item.query.filter_by(id=itemId).first()
1322
    if item is None:
1323
        raise InventoryServiceException(101, "Bad Item")
1324
    source_pricing = SourceItemPricing.query.filter_by(item=item).all()
1325
    return source_pricing
7770 kshitij.so 1326
 
3557 rajveer 1327
 
1328
def get_item_for_source(item_id, sourceId):
1329
    item = get_item(item_id)
1330
    if sourceId == -1:
1331
        return item
1332
    try:
1333
        sip = get_item_pricing_by_source(item_id, sourceId)
1334
        item.sellingPrice = sip.sellingPrice
1335
        if sip.mrp:
1336
            item.mrp = sip.mrp
1337
    except:
1338
        print "No source pricing"
1339
    return item
1340
 
3872 chandransh 1341
def search_items(search_terms, offset, limit):
1342
    query = Item.query
7770 kshitij.so 1343
 
3872 chandransh 1344
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
8139 kshitij.so 1345
    print search_terms
7770 kshitij.so 1346
 
3872 chandransh 1347
    for search_term in search_terms:
6661 rajveer 1348
        query_clause = []
3872 chandransh 1349
        query_clause.append(Item.brand.like(search_term))
1350
        query_clause.append(Item.model_number.like(search_term))
1351
        query_clause.append(Item.model_name.like(search_term))
6661 rajveer 1352
        query = query.filter(or_(*query_clause))
8139 kshitij.so 1353
 
1354
    print query
3872 chandransh 1355
    query = query.order_by(Item.product_group, Item.brand, Item.model_number, Item.model_name).offset(offset)
1356
    if limit:
1357
        query = query.limit(limit)
1358
    items = query.all()
1359
    return items
1360
 
1361
def get_search_result_count(search_terms):
1362
    query = Item.query
7770 kshitij.so 1363
 
3872 chandransh 1364
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
7770 kshitij.so 1365
 
3872 chandransh 1366
    for search_term in search_terms:
6661 rajveer 1367
        query_clause = []
3872 chandransh 1368
        query_clause.append(Item.brand.like(search_term))
1369
        query_clause.append(Item.model_number.like(search_term))
1370
        query_clause.append(Item.model_name.like(search_term))
6661 rajveer 1371
        query = query.filter(or_(*query_clause))
7770 kshitij.so 1372
 
3872 chandransh 1373
    return query.count()
1374
 
3924 rajveer 1375
def __clear_homepage_cache():
1376
    try:
1377
        # create a password manager
1378
        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
1379
        # Add the username and password.
1380
        configclient = ConfigClient()
4310 rajveer 1381
        ips = configclient.get_property("production_servers_private_ips");
3924 rajveer 1382
        ips = ips.split(" ")
7770 kshitij.so 1383
 
3924 rajveer 1384
        for ip in ips:
4310 rajveer 1385
            try:
1386
                top_level_url = "http://" + ip + ":8080/"
1387
                password_mgr.add_password(None, top_level_url, "saholic", "shop2020")
1388
                handler = urllib2.HTTPBasicAuthHandler(password_mgr)
7770 kshitij.so 1389
 
4310 rajveer 1390
                opener = urllib2.build_opener(handler)
7770 kshitij.so 1391
 
4310 rajveer 1392
                # use the opener to fetch a URL
1393
                res = opener.open(top_level_url + "cache-admin/HomePageSnippets?_method=delete")
1394
                print "Successfully cleared home page cache" + res.read()
1395
            except:
1396
                print "Unable to clear home page cache" + res.read()
3924 rajveer 1397
    except:
1398
        print "Unable to clear cache, still should continue with other operations"
7770 kshitij.so 1399
 
4295 varun.gupt 1400
def get_product_notifications(start_datetime):
1401
    '''
1402
    Returns a list of Product Notification objects each representing user requests for notification
1403
    '''
1404
    query = ProductNotification.query
7770 kshitij.so 1405
 
4295 varun.gupt 1406
    if start_datetime:
1407
        query = query.filter(ProductNotification.addedOn > start_datetime)
7770 kshitij.so 1408
 
4295 varun.gupt 1409
    notifications = query.order_by(desc('addedOn')).all()
1410
    return notifications
1411
 
7897 amar.kumar 1412
def get_product_notification_request_count(start_datetime, categoryId):
4295 varun.gupt 1413
    '''
1414
    Returns list of items and the counts of product notification requests
1415
    '''
7897 amar.kumar 1416
    if categoryId:
1417
        categories = get_child_categories(categoryId)
1418
        items = Item.query.filter(Item.category.in_(categories)).all()
1419
        item_ids = [item.id for item in items]
1420
 
4295 varun.gupt 1421
    print start_datetime
1422
    query = session.query(ProductNotification, func.count(ProductNotification.email).label('count'))
7770 kshitij.so 1423
 
4295 varun.gupt 1424
    if start_datetime:
1425
        query = query.filter(ProductNotification.addedOn > start_datetime)
7897 amar.kumar 1426
    if categoryId:
1427
        query = query.filter(ProductNotification.item_id.in_(item_ids))
4295 varun.gupt 1428
    counts = query.group_by(ProductNotification.item_id).order_by(desc('count')).all()
1429
    return counts
1430
 
766 rajveer 1431
def close_session():
1432
    if session.is_active:
1433
        print "session is active. closing it."
1399 rajveer 1434
        session.close()
3376 rajveer 1435
 
1436
def is_alive():
1437
    try:
1438
        session.query(Item.id).limit(1).one()
1439
        return True
1440
    except:
1441
        return False
4332 anupam.sin 1442
 
4649 phani.kuma 1443
def add_authorization_log_for_item(itemId, username, reason):
1444
    if not itemId or not username:
1445
        raise InventoryServiceException(101, "Bad itemId or Invalid username in request")
1446
    authorize_log = AuthorizationLog()
1447
    authorize_log.item_id = itemId
1448
    authorize_log.username = username
1449
    authorize_log.reason = reason
1450
    session.commit()
4797 rajveer 1451
    return True
1452
 
6255 rajveer 1453
def __send_mail_for_oos_item(item):
1454
    oos = OOSTracker.get_by(itemId = item.id)
1455
    if oos is None:
1456
        oos = OOSTracker()
1457
        oos.itemId = item.id
1458
        session.commit()
1459
        try:
6962 rajveer 1460
            EmailAttachmentSender.mail(mail_user, mail_password, to_addresses + ["pramit.singh@shop2020.in"], "Item is out of stock. ID: " + str(item.id)  + " " + str(item.brand) +  " " + str(item.model_name) + " " + str(item.model_number)+ " " + str(item.color), None)
6255 rajveer 1461
        except Exception as e:
1462
            print e
4985 mandeep.dh 1463
 
6255 rajveer 1464
def __send_mail_for_active_item(itemId, subject, message):
1465
    oos = OOSTracker.get_by(itemId = itemId)
1466
    if oos is not None:
1467
        oos.delete()
1468
        session.commit()
1469
    __send_mail(subject, message)
1470
 
7384 rajveer 1471
def __send_mail(subject, message, send_to  = to_addresses):
5080 amit.gupta 1472
    try:
7384 rajveer 1473
        thread = threading.Thread(target=partial(mail, mail_user, mail_password, send_to, subject, message))
5080 amit.gupta 1474
        thread.start()
15777 amit.gupta 1475
    except Exception:
1476
        pass   
5185 mandeep.dh 1477
 
6039 amit.gupta 1478
def get_vat_amount_for_item(itemId, price):
1479
    item = Item.query.filter_by(id=itemId).first()
1480
    vatPercentage = item.vatPercentage
1481
    if vatPercentage is None:
1482
        vatMaster = CategoryVatMaster.query.filter(and_(CategoryVatMaster.categoryId==item.category, CategoryVatMaster.minVal<=price,  CategoryVatMaster.maxVal>=price)).first()
1483
        vatPercentage = vatMaster.vatPercent
1484
        if  vatPercentage is None:
1485
            vatPercentage = 0
1486
    return (price*vatPercentage)/100
7770 kshitij.so 1487
 
7340 amit.gupta 1488
def get_vat_percentage_for_item(itemId, stateId, price):
7330 amit.gupta 1489
    itemVatMaster = ItemVatMaster.query.filter(and_(ItemVatMaster.itemId==itemId, ItemVatMaster.stateId==stateId)).first()
7340 amit.gupta 1490
    if itemVatMaster is None:
7330 amit.gupta 1491
            item = Item.query.filter_by(id=itemId).first()
7340 amit.gupta 1492
            if item is None:
1493
                raise CatalogServiceException(itemId, "Could not find item in catalog")
1494
            vatMaster = CategoryVatMaster.query.filter(and_(CategoryVatMaster.categoryId==item.category, CategoryVatMaster.minVal<=price,  CategoryVatMaster.maxVal>=price,  CategoryVatMaster.stateId == stateId)).first()
7330 amit.gupta 1495
            if vatMaster is None:
8589 amar.kumar 1496
                raise CatalogServiceException(stateId, "Could not find vat rate for this state." + str(stateId) + " for " + str(itemId))
7340 amit.gupta 1497
            return vatMaster.vatPercent
7330 amit.gupta 1498
    else:
7340 amit.gupta 1499
        return itemVatMaster.vatPercentage
6511 kshitij.so 1500
 
12567 amit.gupta 1501
def get_vat_percentage_for_item_category(itemId, stateId, price, categoryId):
1502
    itemVatMaster = ItemVatMaster.query.filter(and_(ItemVatMaster.itemId==itemId, ItemVatMaster.stateId==stateId)).first()
1503
    if itemVatMaster is None:
1504
            vatMaster = CategoryVatMaster.query.filter(and_(CategoryVatMaster.categoryId==categoryId, CategoryVatMaster.minVal<=price,  CategoryVatMaster.maxVal>=price,  CategoryVatMaster.stateId == stateId)).first()
1505
            if vatMaster is None:
1506
                return -1
1507
            return vatMaster.vatPercent
1508
    else:
1509
        return itemVatMaster.vatPercentage
1510
 
6531 vikram.rag 1511
def get_all_ignored_inventoryupdate_items_list(offset,limit):
1512
    client = InventoryClient().get_client()
1513
    itemids = client.getIgnoredInventoryUpdateItemids(offset,limit)
6532 amit.gupta 1514
    result = []
1515
    if itemids is not None and len(itemids)>0:
1516
        query = Item.query.filter(Item.id.in_(itemids))
1517
        query = query.order_by(Item.product_group, Item.brand, Item.model_number, Item.model_name)
1518
        result = [to_t_item(item) for item in query.all()]
1519
    return result
6531 vikram.rag 1520
 
1521
 
6511 kshitij.so 1522
def add_tag (displayName, catalogId):
1523
    ent_tag = None
7770 kshitij.so 1524
    if catalogId is None or (not is_valid_catalog_id(catalogId)):           
6511 kshitij.so 1525
        raise InventoryServiceException(id, "Invalid CatalogId")
1526
    else:
1527
        ent_tag = EntityTag()
1528
        ent_tag.entityId = catalogId
1529
    if displayName is None:
1530
        raise InventoryServiceException(id, "Tag should not be empty")
7770 kshitij.so 1531
    else:
6511 kshitij.so 1532
        ent_tag.tag = displayName
1533
    session.commit()
1534
    return True
1535
 
8590 kshitij.so 1536
def add_banner(bannerCongregate):
1537
    banner = bannerCongregate.banner
9155 kshitij.so 1538
    antecedent = bannerCongregate.antecedent
8590 kshitij.so 1539
    t_bannerMaps = bannerCongregate.bannerMaps
1540
    t_bannerUriMappings = bannerCongregate.bannerUriMappings
9178 kshitij.so 1541
    if antecedent.bannerName is not None :
1542
        delete_banner(antecedent.bannerName,antecedent.bannerType)
9155 kshitij.so 1543
    try:
1544
        banner_details=Banner()
1545
        banner_details.bannerName=banner.bannerName
1546
        banner_details.imageName=banner.imageName
1547
        banner_details.link=banner.link
1548
        banner_details.hasMap=banner.hasMap
1549
        banner_details.priority = banner.priority
1550
        banner_details.bannerType = banner.bannerType
10097 kshitij.so 1551
        add_banner_map(t_bannerMaps,banner.bannerType)
1552
        add_banner_uri(t_bannerUriMappings,banner.bannerType)
9155 kshitij.so 1553
        session.commit()
10097 kshitij.so 1554
        return True
9155 kshitij.so 1555
    except:
10097 kshitij.so 1556
        return False
6848 kshitij.so 1557
def get_all_banners():
8579 kshitij.so 1558
    return session.query(Banner).all()
6848 kshitij.so 1559
 
9155 kshitij.so 1560
def delete_banner(name,bType):
8579 kshitij.so 1561
    try:
9155 kshitij.so 1562
        session.query(Banner.bannerName).filter_by(bannerName=name).filter_by(bannerType=bType).delete()
1563
        delete_banner_map(name,bType)
1564
        delete_uri_mapping(name,bType)
10097 kshitij.so 1565
        session.commit()
8579 kshitij.so 1566
        return True
1567
    except:
1568
        return False
6848 kshitij.so 1569
 
9155 kshitij.so 1570
def get_banner_details(name,bType):
1571
    banner = session.query(Banner).filter(Banner.bannerName==name).filter(Banner.bannerType==bType).one()
10097 kshitij.so 1572
    return banner
6848 kshitij.so 1573
 
10494 kshitij.so 1574
def __t_banner_details(banner,target):
10097 kshitij.so 1575
    bannerObj = t_banner()
1576
    bannerObj.bannerName = banner.bannerName
1577
    bannerObj.imageName = banner.imageName
1578
    bannerObj.link = banner.link
1579
    bannerObj.priority = banner.priority
1580
    bannerObj.hasMap = banner.hasMap
1581
    bannerObj.bannerType = banner.bannerType
1582
    bannerObj.target = target
1583
    return bannerObj
1584
 
1585
 
6848 kshitij.so 1586
def get_active_banners():
8579 kshitij.so 1587
    bannerUriMap = {}
9155 kshitij.so 1588
    bannerType = [1,2]
1589
    all_active = session.query(BannerUriMapping,Banner).filter(BannerUriMapping.bannerType.in_(bannerType)).filter(BannerUriMapping.isActive==True).filter(BannerUriMapping.bannerName==Banner.bannerName).filter(BannerUriMapping.bannerType==Banner.bannerType).order_by(desc(Banner.priority)).all()
8579 kshitij.so 1590
    for bannerUriMapping in all_active:
1591
        bannerObj = []
9155 kshitij.so 1592
        if (bannerUriMapping[0].bannerType == BannerType.SIDE_BANNER):
1593
            if 'side-banner' in bannerUriMap:
1594
                for obj in bannerUriMap['side-banner']:
1595
                    bannerObj.append(obj)
10494 kshitij.so 1596
            bannerObj.append(__t_banner_details(bannerUriMapping[1],bannerUriMapping[0].target))
9155 kshitij.so 1597
            bannerUriMap['side-banner'] = bannerObj
1598
            continue
8579 kshitij.so 1599
        if bannerUriMapping[0].uri not in bannerUriMap:
10494 kshitij.so 1600
            bannerObj.append(__t_banner_details(bannerUriMapping[1],bannerUriMapping[0].target))
8579 kshitij.so 1601
            bannerUriMap[bannerUriMapping[0].uri] = bannerObj
1602
        else:
1603
            for obj in bannerUriMap[bannerUriMapping[0].uri]:
1604
                bannerObj.append(obj)
10494 kshitij.so 1605
            bannerObj.append(__t_banner_details(bannerUriMapping[1],bannerUriMapping[0].target))
8579 kshitij.so 1606
            bannerUriMap[bannerUriMapping[0].uri] = bannerObj
1607
    return bannerUriMap
1608
 
6848 kshitij.so 1609
 
9155 kshitij.so 1610
def add_banner_map(bannerMaps,bannerType):
10097 kshitij.so 1611
    for bannerMap in bannerMaps:
1612
        banner_map_details=BannerMap()
1613
        banner_map_details.bannerName=bannerMap.bannerName
1614
        banner_map_details.mapLink=bannerMap.mapLink
1615
        banner_map_details.coordinates=bannerMap.coordinates
1616
        banner_map_details.bannerType = bannerType
8579 kshitij.so 1617
 
6848 kshitij.so 1618
 
9155 kshitij.so 1619
def delete_banner_map(name,bType):
10097 kshitij.so 1620
    session.query(BannerMap.bannerName).filter_by(bannerName=name).filter_by(bannerType=bType).delete()
6848 kshitij.so 1621
 
9155 kshitij.so 1622
def delete_uri_mapping(name,bType):
10097 kshitij.so 1623
    session.query(BannerUriMapping.bannerName).filter_by(bannerName=name).filter_by(bannerType=bType).delete()
8579 kshitij.so 1624
 
9155 kshitij.so 1625
def get_banner_map_details(name,bType):
6848 kshitij.so 1626
    query= session.query(BannerMap)
9155 kshitij.so 1627
    return query.filter_by(bannerName=name).filter_by(bannerType=bType).all()
8579 kshitij.so 1628
 
1629
def update_banner(banner):
1630
    banner_details = Banner.get_by(bannerName=banner.bannerName)
1631
    try:
1632
        if banner_details is not None:
1633
            banner_details.imageName = banner.imageName
1634
            banner_details.link = banner.link
1635
            banner_details.priority = banner.priority
1636
            banner_details.hasMap = banner.hasMap
1637
            session.commit()
1638
            return True
1639
        else:
1640
            return False
1641
    except:
1642
        return False
1643
 
9155 kshitij.so 1644
def add_banner_uri(bannerUriMappings,bannerType):
8579 kshitij.so 1645
    for bannerUriMapping in bannerUriMappings:
1646
        banner_uri = BannerUriMapping()
1647
        banner_uri.bannerName = bannerUriMapping.bannerName
1648
        banner_uri.uri = bannerUriMapping.uri
1649
        banner_uri.isActive = bannerUriMapping.isActive
9155 kshitij.so 1650
        banner_uri.bannerType = bannerType
10097 kshitij.so 1651
        banner_uri.target = bannerUriMapping.target
8579 kshitij.so 1652
 
9155 kshitij.so 1653
def get_uri_mapping(name,bType):
8579 kshitij.so 1654
    query= session.query(BannerUriMapping)
9155 kshitij.so 1655
    return query.filter_by(bannerName=name).filter_by(bannerType=bType).all()
8579 kshitij.so 1656
 
1657
def add_campaign(campaign):
1658
    new_campaign = Campaign()
1659
    new_campaign.campaignName = campaign.campaignName
1660
    new_campaign.imageName = campaign.imageName
1661
    session.commit() 
1662
 
1663
def get_campaigns(name):
1664
    query= session.query(Campaign)
1665
    return query.filter_by(campaignName=name).all()
1666
 
1667
def delete_campaign(campaign_id):
1668
    campaign = Campaign.get_by(id = campaign_id)
1669
    if campaign is not None:
1670
        campaign.delete()
1671
        session.commit()
1672
 
1673
def get_all_campaigns():
1674
    return session.query(distinct(Campaign.campaignName)).all()
1675
 
9155 kshitij.so 1676
def get_active_banners_for_mobile_site():
1677
    bannerType = [3]
1678
    bannerMap = {}
1679
    all_active = session.query(BannerUriMapping,Banner).filter(BannerUriMapping.bannerType.in_(bannerType)).filter(BannerUriMapping.isActive==True).filter(BannerUriMapping.bannerName==Banner.bannerName).filter(BannerUriMapping.bannerType==Banner.bannerType).order_by(desc(Banner.priority)).all()
1680
    for bannerUriMapping in all_active:
1681
        bannerObj = []
1682
        if bannerUriMapping[0].uri not in bannerMap:
1683
            bannerObj.append(get_banner_details(bannerUriMapping[0].bannerName,bannerUriMapping[0].bannerType))
1684
            bannerMap[bannerUriMapping[0].uri] = bannerObj
1685
        else:
1686
            for obj in bannerMap[bannerUriMapping[0].uri]:
1687
                bannerObj.append(obj)
1688
            bannerObj.append(get_banner_details(bannerUriMapping[0].bannerName,bannerUriMapping[0].bannerType))
1689
            bannerMap[bannerUriMapping[0].uri] = bannerObj
1690
    return bannerMap
1691
 
1692
 
7770 kshitij.so 1693
 
6511 kshitij.so 1694
def get_all_tags ():
1695
    return [tuple[0] for tuple in session.query(EntityTag.tag).distinct().all()]
1696
 
1697
def get_all_entities_by_tag_name(displayName):
1698
    return [tuple[0] for tuple in session.query(EntityTag.entityId).filter_by(tag=displayName).all()]
7770 kshitij.so 1699
 
6511 kshitij.so 1700
def delete_tag(displayName):
1701
    session.query(EntityTag.entityId).filter_by(tag=displayName).delete()
1702
    session.commit()
1703
    return True
6518 kshitij.so 1704
 
1705
def delete_entity_tag(displayName, catalogId):
1706
    session.query(EntityTag.tag).filter_by(tag=displayName,entityId=catalogId).delete()
1707
    session.commit()
6805 anupam.sin 1708
    return True
1709
 
6921 anupam.sin 1710
def get_insurance_amount(itemId, price, insurerId, quantity):
9299 kshitij.so 1711
    if insurerId ==1:
1712
        #itemInsurerMapping = ItemInsurerMapping.query.filter(ItemInsurerMapping.itemId == itemId).filter(ItemInsurerMapping.insurerId == insurerId).first()
1713
        #if itemInsurerMapping:
1714
            #Default insurance premium is 1.5%
1715
        #    return round(price * (1.5/100) * quantity)
13183 amit.gupta 1716
        return round(price * (1.5/100) * quantity)
9299 kshitij.so 1717
        '''insuranceAmount = 0.0
1718
        if itemInsurerMapping.premiumType == PremiumType._NAMES_TO_VALUES.get("PERCENT"):
1719
            insuranceAmount = price * (itemInsurerMapping.premiumAmount/100) * quantity
1720
        else :
1721
            insuranceAmount = itemInsurerMapping.premiumAmount * quantity
1722
        '''
1723
    if insurerId ==2:
1724
        return 0.0 #FOR PROMOTION PURPOSE
1725
        #return 449.0 * quantity
7770 kshitij.so 1726
 
9299 kshitij.so 1727
    return 0.0
1728
 
1729
def get_preffered_insurer_for_item(itemId, insurerType):
1730
    itemInsurerMapping = ItemInsurerMapping.query.filter(ItemInsurerMapping.itemId == itemId).filter(ItemInsurerMapping.insurerType == insurerType).first()
1731
    if not itemInsurerMapping:
1732
        return 0
1733
    else:
1734
        return itemInsurerMapping.insurerId
1735
 
6805 anupam.sin 1736
def get_insurer(insurerId):
6838 vikram.rag 1737
    return Insurer.get_by(id = insurerId)
7770 kshitij.so 1738
 
6845 amit.gupta 1739
def get_all_entity_tags():
1740
    entitiesTag = EntityTag.query.all()
1741
    entityMap = {}
1742
    for e in entitiesTag:
1743
        if not entityMap.has_key(e.entityId):
1744
            entityMap[e.entityId] = []
7770 kshitij.so 1745
        entityMap[e.entityId].append(e.tag)  
6845 amit.gupta 1746
    return entityMap
6838 vikram.rag 1747
 
1748
 
1749
def get_all_insurers():
1750
    return session.query(Insurer).all()
7770 kshitij.so 1751
 
6962 rajveer 1752
def update_insurance_declared_amount(insurerId, amount):
1753
    insurer = Insurer.get_by(id = insurerId)
1754
    insurer.declaredAmount += amount
1755
    session.commit()
1756
    if insurer.declaredAmount > 0.9*insurer.creditedAmount:
7770 kshitij.so 1757
        __send_mail("CRITICAL: Declared Insurance Amount is critical (Declared Amount - " + str(insurer.declaredAmount) + " and Credited Amount - " + str(insurer.creditedAmount) +")", "Please top up credited amount")   
6962 rajveer 1758
    elif insurer.declaredAmount > 0.8*insurer.creditedAmount:
7770 kshitij.so 1759
        __send_mail("WARNING: Declared Insurance Amount is warning (Declared Amount - " + str(insurer.declaredAmount) + " and Credited Amount - " + str(insurer.creditedAmount) +")", "Please top up credited amount")   
1760
 
7190 amar.kumar 1761
def get_freebie_for_item(itemId):
1762
    freebie = FreebieItem.get_by(itemId = itemId)
1763
    if freebie is None:
1764
        return 0
1765
    else:
1766
        return freebie.freebieItemId
7770 kshitij.so 1767
 
7190 amar.kumar 1768
def add_or_update_freebie_for_item(freebieItem):
1769
    freebie = FreebieItem.get_by(itemId = freebieItem.itemId)
1770
    if freebie is None:
1771
        freebie = FreebieItem()
1772
        freebie.itemId = freebieItem.itemId
1773
    freebie.freebieItemId = freebieItem.freebieItemId
7256 rajveer 1774
    session.commit()
1775
 
7272 amit.gupta 1776
 
1777
def add_or_update_brand_info(brandInfo):
1778
    brandinfo = BrandInfo.get_by(name = brandInfo.name)
1779
    if brandinfo is None:
1780
        brandinfo = BrandInfo()
1781
        brandinfo.itemId = brandInfo.itemId
1782
        brandinfo.freebieItemId = brandInfo.freebieItemId
1783
    session.commit()
7770 kshitij.so 1784
 
7272 amit.gupta 1785
def get_brand_info():
1786
    brandInfoMap = dict()
8274 amit.gupta 1787
    brandInfoList = BrandInfo.query.all()
7272 amit.gupta 1788
    for brandInfo in brandInfoList:
1789
        brandInfoMap[brandInfo.name] = to_t_brand_info(brandInfo)
1790
    return brandInfoMap
1791
 
7382 rajveer 1792
def update_store_pricing(tsp, allColors):
7306 rajveer 1793
    validate_store_pricing(tsp)
7382 rajveer 1794
    item = get_item(tsp.itemId)
7419 rajveer 1795
    activeOnStore = item.activeOnStore
7382 rajveer 1796
    if allColors:
1797
        items = get_items_by_catalog_id(item.catalog_item_id)
1798
    else:
1799
        items = [item]
1800
    for item in items:
1801
        sp = StorePricing.get_by(item_id = item.id)
1802
        if not sp:
1803
            sp = StorePricing()
7419 rajveer 1804
        item.activeOnStore = activeOnStore
7382 rajveer 1805
        sp.recommendedPrice = tsp.recommendedPrice
1806
        sp.minPrice = tsp.minPrice
1807
        sp.minAdvancePrice = tsp.minAdvancePrice
1808
        sp.maxPrice = tsp.maxPrice
1809
        sp.item_id = item.id
1810
        sp.freebieItemId = tsp.freebieItemId
1811
        sp.bestDealText = tsp.bestDealText
1812
        sp.absoluteMinPrice = tsp.absoluteMinPrice
7265 rajveer 1813
    session.commit()
7770 kshitij.so 1814
 
1815
 
7306 rajveer 1816
def validate_store_pricing(tsp):
1817
    if tsp.minPrice > tsp.maxPrice:
7770 kshitij.so 1818
        raise InventoryServiceException(101, "DP is more than MRP")  
1819
 
7306 rajveer 1820
    item = get_item(tsp.itemId)
7770 kshitij.so 1821
 
7384 rajveer 1822
    if item.mrp and tsp.maxPrice > item.mrp:
1823
        raise InventoryServiceException(101, "MRP is more than Saholic MRP")
7770 kshitij.so 1824
 
7306 rajveer 1825
    if tsp.recommendedPrice < item.sellingPrice:
7770 kshitij.so 1826
        raise InventoryServiceException(101, "MOP is less than Saholic MOP.")  
1827
 
7306 rajveer 1828
    if tsp.recommendedPrice < tsp.minPrice or tsp.recommendedPrice >  tsp.maxPrice:
7770 kshitij.so 1829
        raise InventoryServiceException(101, "MOP price must be in the range")
8867 rajveer 1830
 
1831
#    if tsp.minPrice < item.sellingPrice:
1832
#        store_message = "Saholic MOP Changed. DP {0} is less than Saholic MOP.\n".format(tsp.minPrice)
1833
#        subject = "Item '{0}' is updated in Catalog. Id is {1}".format(__get_product_name(item),item.id)
1834
#        __send_mail(subject, store_message, to_store_addresses)
7770 kshitij.so 1835
 
7306 rajveer 1836
    return True
7770 kshitij.so 1837
 
1838
 
7306 rajveer 1839
 
1840
def get_defalut_store_pricing(itemId):
7256 rajveer 1841
    inventoryClient = InventoryClient().get_client()
7306 rajveer 1842
    pricings = inventoryClient.getAllItemPricing(itemId)
1843
    item = get_item(itemId)
7382 rajveer 1844
    maxp = item.sellingPrice
1845
    if item.mrp:
1846
        maxp = item.mrp
7770 kshitij.so 1847
 
7256 rajveer 1848
    minp = 0
7265 rajveer 1849
    rp = item.sellingPrice
7256 rajveer 1850
    for pricing in pricings:
7770 kshitij.so 1851
        if not minp or minp > pricing.dealerPrice:
7256 rajveer 1852
            minp = pricing.dealerPrice
1853
 
7770 kshitij.so 1854
 
7426 anupam.sin 1855
    minap = math.ceil(min(max(500, rp*0.1),rp))
7306 rajveer 1856
 
7431 rajveer 1857
    if minp > rp:
1858
        minp = rp
7306 rajveer 1859
    sp = tStorePricing()
1860
    sp.itemId = itemId
7256 rajveer 1861
    sp.recommendedPrice = rp
7351 rajveer 1862
    sp.absoluteMinPrice = minp
7256 rajveer 1863
    sp.minPrice = minp
1864
    sp.minAdvancePrice = minap
1865
    sp.maxPrice = maxp
7308 rajveer 1866
    sp.freebieItemId = 0
1867
    sp.bestDealText = ""
7306 rajveer 1868
    return sp
7770 kshitij.so 1869
 
1870
 
7256 rajveer 1871
def get_store_pricing(itemId):
7270 rajveer 1872
    store = StorePricing.get_by(item_id = itemId)
7306 rajveer 1873
    if store is None:
1874
        return get_defalut_store_pricing(itemId)
1875
 
7256 rajveer 1876
    sp = tStorePricing()
7770 kshitij.so 1877
    sp.itemId = itemId   
7256 rajveer 1878
    sp.recommendedPrice = store.recommendedPrice
1879
    sp.minPrice = store.minPrice
1880
    sp.minAdvancePrice = store.minAdvancePrice
1881
    sp.maxPrice = store.maxPrice
7351 rajveer 1882
    sp.absoluteMinPrice = store.absoluteMinPrice
7308 rajveer 1883
    sp.freebieItemId = store.freebieItemId
1884
    sp.bestDealText = store.bestDealText
7281 kshitij.so 1885
    return sp
1886
 
1887
def get_all_amazon_listed_items():
1888
    return session.query(Amazonlisted).all()
1889
 
1890
def get_amazon_item_details(amazonItemId):
1891
    amazonlisted = Amazonlisted.get_by(itemId=amazonItemId)
15702 kshitij.so 1892
    fbaPromo, fbbPromo, fbgPromo, fbdPromo = __get_amazon_promotion_attributes_for_item(amazonItemId)
1893
    return amazonlisted, fbaPromo, fbbPromo, fbgPromo, fbdPromo
7281 kshitij.so 1894
 
12663 kshitij.so 1895
 
8168 kshitij.so 1896
def update_amazon_item_details(amazonlisted):
1897
    amazon_listed = Amazonlisted.get_by(itemId = amazonlisted.itemid)
1898
    amazon_listed.isFba=amazonlisted.isFba
10909 vikram.rag 1899
    amazon_listed.isFbb=amazonlisted.isFbb
12888 kshitij.so 1900
    amazon_listed.isFbg=amazonlisted.isFbg
15702 kshitij.so 1901
    amazon_listed.isFbd=amazonlisted.isFbd
8168 kshitij.so 1902
    amazon_listed.isNonFba=amazonlisted.isNonFba
1903
    amazon_listed.isInventoryOverride=amazonlisted.isInventoryOverride
1904
    amazon_listed.handlingTime=amazonlisted.handlingTime
1905
    amazon_listed.isCustomTime=amazonlisted.isCustomTime
8619 kshitij.so 1906
    amazon_listed.taxCode=amazonlisted.taxCode
10909 vikram.rag 1907
    amazon_listed.fbbtaxCode=amazonlisted.fbbtaxCode
12888 kshitij.so 1908
    amazon_listed.fbgtaxCode=amazonlisted.fbgtaxCode
15702 kshitij.so 1909
    amazon_listed.fbdtaxCode=amazonlisted.fbdtaxCode
8619 kshitij.so 1910
    if (amazon_listed.sellingPrice != amazonlisted.sellingPrice) and amazonlisted.sellingPrice > 0:
8168 kshitij.so 1911
        amazon_listed.mfnPriceLastUpdatedOn = datetime.datetime.now()
1912
        amazon_listed.sellingPrice=amazonlisted.sellingPrice
8619 kshitij.so 1913
    if (amazon_listed.fbaPrice != amazonlisted.fbaPrice) and amazonlisted.fbaPrice > 0:
8168 kshitij.so 1914
        amazon_listed.fbaPriceLastUpdatedOn = datetime.datetime.now()
1915
        amazon_listed.fbaPrice=amazonlisted.fbaPrice
10909 vikram.rag 1916
    if (amazon_listed.fbbPrice != amazonlisted.fbbPrice) and amazonlisted.fbbPrice > 0:
1917
        amazon_listed.fbbPriceLastUpdatedOn = datetime.datetime.now()
1918
        amazon_listed.fbbPrice=amazonlisted.fbbPrice
12888 kshitij.so 1919
    if (amazon_listed.fbgPrice != amazonlisted.fbgPrice) and amazonlisted.fbgPrice > 0:
1920
        amazon_listed.fbgPriceLastUpdatedOn = datetime.datetime.now()
1921
        amazon_listed.fbgPrice=amazonlisted.fbgPrice
15702 kshitij.so 1922
    if (amazon_listed.fbdPrice != amazonlisted.fbdPrice) and amazonlisted.fbdPrice > 0:
1923
        amazon_listed.fbdPriceLastUpdatedOn = datetime.datetime.now()
1924
        amazon_listed.fbdPrice=amazonlisted.fbdPrice
8168 kshitij.so 1925
    amazon_listed.suppressMfnPriceUpdate=amazonlisted.suppressMfnPriceUpdate
10909 vikram.rag 1926
    amazon_listed.suppressFbaPriceUpdate=amazonlisted.suppressFbaPriceUpdate
12363 kshitij.so 1927
    amazon_listed.suppressFbbPriceUpdate=amazonlisted.suppressFbbPriceUpdate
12888 kshitij.so 1928
    amazon_listed.suppressFbgPriceUpdate=amazonlisted.suppressFbgPriceUpdate
15702 kshitij.so 1929
    amazon_listed.suppressFbdPriceUpdate=amazonlisted.suppressFbdPriceUpdate
12363 kshitij.so 1930
    amazon_listed.overrrideWanlc = amazonlisted.overrrideWanlc
1931
    amazon_listed.exceptionalWanlc = amazonlisted.exceptionalWanlc
12396 kshitij.so 1932
    amazon_listed.autoDecrement = amazonlisted.autoDecrement
1933
    amazon_listed.autoIncrement = amazonlisted.autoIncrement
1934
    amazon_listed.autoFavourite = amazonlisted.autoFavourite
1935
    amazon_listed.manualFavourite = amazonlisted.manualFavourite
12448 kshitij.so 1936
    amazon_listed.otherCost = amazonlisted.otherCost
12663 kshitij.so 1937
    if amazon_listed.fbaPromoPrice != amazonlisted.fbaPromoPrice and amazonlisted.fbaPromoPrice > 0:
1938
        amazon_listed.fbaPromoPrice = amazonlisted.fbaPromoPrice
1939
        amazon_listed.fbaPriceLastUpdatedOn = datetime.datetime.now()
1940
    if amazon_listed.fbbPromoPrice != amazonlisted.fbbPromoPrice and amazonlisted.fbbPromoPrice > 0:
1941
        amazon_listed.fbbPromoPrice = amazonlisted.fbbPromoPrice
1942
        amazon_listed.fbbPriceLastUpdatedOn = datetime.datetime.now()
12888 kshitij.so 1943
    if amazon_listed.fbgPromoPrice != amazonlisted.fbgPromoPrice and amazonlisted.fbgPromoPrice > 0:
1944
        amazon_listed.fbgPromoPrice = amazonlisted.fbgPromoPrice
1945
        amazon_listed.fbgPriceLastUpdatedOn = datetime.datetime.now()
15702 kshitij.so 1946
    if amazon_listed.fbdPromoPrice != amazonlisted.fbdPromoPrice and amazonlisted.fbdPromoPrice > 0:
1947
        amazon_listed.fbdPromoPrice = amazonlisted.fbdPromoPrice
1948
        amazon_listed.fbdPriceLastUpdatedOn = datetime.datetime.now()
7281 kshitij.so 1949
    session.commit()
7770 kshitij.so 1950
 
7281 kshitij.so 1951
def add_amazon_item(amazonlisted):
1952
    if (not amazonlisted) or (not amazonlisted.itemid) or (not amazonlisted.asin):
1953
        return
7397 kshitij.so 1954
    amazonItem = Amazonlisted.get_by(itemId=amazonlisted.itemid)
1955
    if amazonItem is None:
1956
        amazon_item = Amazonlisted()
1957
        if amazonlisted.itemid:
1958
            amazon_item.itemId=amazonlisted.itemid
1959
        if amazonlisted.asin:
1960
            amazon_item.asin=amazonlisted.asin
1961
        if amazonlisted.brand:
1962
            amazon_item.brand=amazonlisted.brand
1963
        else:
1964
            amazon_item.brand=''
1965
        if amazonlisted.model:
1966
            amazon_item.model=amazonlisted.model
1967
        else:
1968
            amazon_item.model=''
1969
        if amazonlisted.manufacturer_name:
1970
            amazon_item.manufacturer_name=amazonlisted.manufacturer_name
1971
        else:
1972
            amazon_item.manufacturer_name=''
1973
        if amazonlisted.name:
1974
            amazon_item.name=amazonlisted.name
1975
        else:
1976
            amazon_item.name=''
1977
        if amazonlisted.part_number:
1978
            amazon_item.part_number=amazonlisted.part_number
1979
        else:
1980
            amazon_item.part_number=''
1981
        if amazonlisted.ean:
1982
            amazon_item.ean=amazonlisted.ean
1983
        else:
1984
            amazon_item.ean=''
1985
        if amazonlisted.upc:
1986
            amazon_item.upc=amazonlisted.upc
1987
        else:
1988
            amazon_item.upc=''
7770 kshitij.so 1989
        if amazonlisted.fbaPrice:
1990
            amazon_item.fbaPrice=amazonlisted.fbaPrice
7782 kshitij.so 1991
            amazon_item.fbaPriceLastUpdatedOnSc =  datetime.datetime.now()
7770 kshitij.so 1992
            amazon_item.fbaPriceLastUpdatedOn = datetime.datetime.now()
7397 kshitij.so 1993
        if amazonlisted.sellingPrice:
1994
            amazon_item.sellingPrice=amazonlisted.sellingPrice
7782 kshitij.so 1995
            amazon_item.mfnPriceLastUpdatedOnSc = datetime.datetime.now()
7770 kshitij.so 1996
            amazon_item.mfnPriceLastUpdatedOn = datetime.datetime.now()
7397 kshitij.so 1997
        if amazonlisted.category:
1998
            amazon_item.category=amazonlisted.category
1999
        else:
2000
            amazon_item.category=''
2001
        if amazonlisted.color:
2002
            amazon_item.color=amazonlisted.color
2003
        else:
7404 kshitij.so 2004
            amazon_item.color=''
8139 kshitij.so 2005
        amazon_item.suppressMfnPriceUpdate=False
8140 kshitij.so 2006
        amazon_item.suppressFbaPriceUpdate=False
8379 vikram.rag 2007
        amazon_item.isFba = False
2008
        amazon_item.isNonFba = False
2009
        amazon_item.isInventoryOverride = False
10947 vikram.rag 2010
        if amazonlisted.fbbPrice: 
2011
            amazon_item.fbbPrice = amazonlisted.fbbPrice 
2012
            amazon_item.fbbPriceLastUpdatedOnSc = datetime.datetime.now()
2013
            amazon_item.fbbPriceLastUpdatedOn = datetime.datetime.now()
10921 vikram.rag 2014
        amazon_item.isFbb = False
10909 vikram.rag 2015
        amazon_item.suppressFbbPriceUpdate = False
12888 kshitij.so 2016
        if amazonlisted.fbgPrice: 
15702 kshitij.so 2017
            amazon_item.fbgPrice = amazonlisted.fbgPrice 
12888 kshitij.so 2018
            amazon_item.fbgPriceLastUpdatedOnSc = datetime.datetime.now()
2019
            amazon_item.fbgPriceLastUpdatedOn = datetime.datetime.now()
2020
        amazon_item.isFbg = False
2021
        amazon_item.suppressFbgPriceUpdate = False
15702 kshitij.so 2022
        if amazonlisted.fbdPrice: 
2023
            amazon_item.fbdPrice = amazonlisted.fbdPrice 
2024
            amazon_item.fbdPriceLastUpdatedOnSc = datetime.datetime.now()
2025
            amazon_item.fbdPriceLastUpdatedOn = datetime.datetime.now()
2026
        amazon_item.isFbd = False
2027
        amazon_item.suppressFbdPriceUpdate = False
12773 kshitij.so 2028
        amazon_item.autoDecrement = True
2029
        amazon_item.autoIncrement = True
15717 kshitij.so 2030
        amazon_item.packagingHeight = amazonlisted.packagingHeight
2031
        amazon_item.packagingLength = amazonlisted.packagingLength
2032
        amazon_item.packagingWidth = amazonlisted.packagingWidth
2033
        amazon_item.packagingWeight = amazonlisted.packagingWeight
10909 vikram.rag 2034
 
7397 kshitij.so 2035
    elif (amazonItem.asin!=amazonlisted.asin):
2036
        if amazonlisted.asin:
2037
            amazonItem.asin=amazonlisted.asin
2038
        if amazonlisted.brand:
2039
            amazonItem.brand=amazonlisted.brand
2040
        else:
2041
            amazonItem.brand=''
2042
        if amazonlisted.model:
2043
            amazonItem.model=amazonlisted.model
2044
        else:
2045
            amazonItem.model=''
2046
        if amazonlisted.manufacturer_name:
2047
            amazonItem.manufacturer_name=amazonlisted.manufacturer_name
2048
        else:
2049
            amazonItem.manufacturer_name=''
2050
        if amazonlisted.name:
2051
            amazonItem.name=amazonlisted.name
2052
        else:
2053
            amazonItem.name=''
2054
        if amazonlisted.part_number:
2055
            amazonItem.part_number=amazonlisted.part_number
2056
        else:
2057
            amazonItem.part_number=''
2058
        if amazonlisted.ean:
2059
            amazonItem.ean=amazonlisted.ean
2060
        else:
2061
            amazonItem.ean=''
2062
        if amazonlisted.upc:
2063
            amazonItem.upc=amazonlisted.upc
2064
        else:
2065
            amazonItem.upc=''
2066
        if amazonlisted.sellingPrice:
8188 kshitij.so 2067
            amazonItem.sellingPrice=amazonlisted.sellingPrice
7397 kshitij.so 2068
        if amazonlisted.fbaPrice:
8188 kshitij.so 2069
            amazonItem.fbaPrice=amazonlisted.fbaPrice
7397 kshitij.so 2070
        if amazonlisted.isFba:
2071
            amazonItem.isFba=amazonlisted.isFba
2072
        if amazonlisted.isNonFba:
2073
            amazonItem.isNonFba=amazonlisted.isNonFba
2074
        if amazonlisted.isInventoryOverride:
2075
            amazonItem.isInventoryOverride=amazonlisted.isInventoryOverride
2076
        if amazonlisted.category:
2077
            amazonItem.category=amazonlisted.category
2078
        else:
2079
            amazonItem.category=''
2080
        if amazonlisted.color:
2081
            amazonItem.color=amazonlisted.color
2082
        else:
7404 kshitij.so 2083
            amazonItem.color=''
15717 kshitij.so 2084
        amazonItem.packagingHeight = amazonlisted.packagingHeight
2085
        amazonItem.packagingLength = amazonlisted.packagingLength
2086
        amazonItem.packagingWidth = amazonlisted.packagingWidth
2087
        amazonItem.packagingWeight = amazonlisted.packagingWeight
7316 kshitij.so 2088
    else:
7397 kshitij.so 2089
        return
7281 kshitij.so 2090
    session.commit()
7770 kshitij.so 2091
 
7291 vikram.rag 2092
def get_asin_items():
7296 amit.gupta 2093
    from_date=datetime.datetime.now() - datetime.timedelta(days=10)
7291 vikram.rag 2094
    return Item.query.filter(Item.updatedOn > from_date).all()
7770 kshitij.so 2095
 
7291 vikram.rag 2096
def get_all_fba_listed_items():
2097
    return Amazonlisted.query.filter(Amazonlisted.isFba==True).all()
7770 kshitij.so 2098
 
7291 vikram.rag 2099
def get_all_nonfba_listed_items():
2100
    return Amazonlisted.query.filter(Amazonlisted.isNonFba==True).all()
7460 kshitij.so 2101
 
2102
def update_item_inventory(itemId,holdInventory,defaultInventory):
2103
    item = get_item(itemId)
2104
    item.holdInventory = holdInventory
2105
    item.defaultInventory = defaultInventory
2106
    session.commit()
7770 kshitij.so 2107
 
2108
def update_timestamp_for_amazon_feeds(feedType,skuList,timestamp):
2109
    #amazonListed = get_all_amazon_listed_items()
7782 kshitij.so 2110
    #fbaItems = []
2111
    #mfnItems = []
7770 kshitij.so 2112
    if feedType == 'NonFbaPricing':
7782 kshitij.so 2113
        for sku in skuList:
7770 kshitij.so 2114
            amazonItem = Amazonlisted.get_by(itemId=sku)
2115
            amazonItem.mfnPriceLastUpdatedOnSc = to_py_date(timestamp)
12925 kshitij.so 2116
        session.commit()
7770 kshitij.so 2117
        return True
2118
    elif feedType == 'FbaPricing':
7782 kshitij.so 2119
        for sku in skuList:
7770 kshitij.so 2120
            amazonItem = Amazonlisted.get_by(itemId=sku)
2121
            amazonItem.fbaPriceLastUpdatedOnSc = to_py_date(timestamp)
12925 kshitij.so 2122
        session.commit()
7770 kshitij.so 2123
        return True
10924 vikram.rag 2124
    elif feedType == 'FbbPricing':
2125
        for sku in skuList:
2126
            amazonItem = Amazonlisted.get_by(itemId=sku)
2127
            amazonItem.fbbPriceLastUpdatedOnSc = to_py_date(timestamp)
12925 kshitij.so 2128
        session.commit()
10924 vikram.rag 2129
        return True
12888 kshitij.so 2130
    elif feedType == 'FbgPricing':
2131
        for sku in skuList:
2132
            amazonItem = Amazonlisted.get_by(itemId=sku)
2133
            amazonItem.fbgPriceLastUpdatedOnSc = to_py_date(timestamp)
12925 kshitij.so 2134
        session.commit()
12888 kshitij.so 2135
        return True
7770 kshitij.so 2136
    elif feedType== 'FullFbaPricing':
7782 kshitij.so 2137
        for sku in skuList:
7770 kshitij.so 2138
            amazonItem = Amazonlisted.get_by(itemId=sku)
2139
            amazonItem.fbaPriceLastUpdatedOnSc = to_py_date(timestamp)
12925 kshitij.so 2140
        session.commit()
7770 kshitij.so 2141
        return True
2142
    elif feedType== 'FullNonFbaPricing':
7782 kshitij.so 2143
        for sku in skuList:
7770 kshitij.so 2144
            amazonItem = Amazonlisted.get_by(itemId=sku)
2145
            amazonItem.mfnPriceLastUpdatedOnSc = to_py_date(timestamp)
12925 kshitij.so 2146
        session.commit()
12701 kshitij.so 2147
        return True
8386 vikram.rag 2148
    elif (feedType=='FbaListingFeed'):
2149
        for sku in skuList:
2150
            amazonItem = Amazonlisted.get_by(itemId=sku)
2151
            amazonItem.isFba = True
12925 kshitij.so 2152
        session.commit()
12701 kshitij.so 2153
        return True
12888 kshitij.so 2154
    elif (feedType=='FbgListingFeed'):
2155
        for sku in skuList:
2156
            amazonItem = Amazonlisted.get_by(itemId=sku)
2157
            amazonItem.isFbg = True
12925 kshitij.so 2158
        session.commit()
12888 kshitij.so 2159
        return True
8386 vikram.rag 2160
    elif (feedType=='NonFbaListingFeed'):
2161
        for sku in skuList:
2162
            amazonItem = Amazonlisted.get_by(itemId=sku)
2163
            amazonItem.isNonFba = True 
12925 kshitij.so 2164
        session.commit()
12701 kshitij.so 2165
        return True
10920 vikram.rag 2166
    elif (feedType=='FbbListingFeed'):
2167
        for sku in skuList:
2168
            amazonItem = Amazonlisted.get_by(itemId=sku)
15702 kshitij.so 2169
            amazonItem.fbbListedOn = to_py_date(timestamp)
2170
            amazonItem.isFbb = True 
12925 kshitij.so 2171
        session.commit()
12701 kshitij.so 2172
        return True
15702 kshitij.so 2173
    elif (feedType=='FbdListingFeed'):
2174
        for sku in skuList:
2175
            amazonItem = Amazonlisted.get_by(itemId=sku)
2176
            amazonItem.isFbd = True 
2177
        session.commit()
2178
        return True
7770 kshitij.so 2179
    else:
2180
        return False
7281 kshitij.so 2181
 
7897 amar.kumar 2182
def get_all_parent_categories():
2183
    return Category.query.filter_by(parent_category_id=10000).all()
7977 kshitij.so 2184
 
2185
def add_page_view_event(pageEvent):
2186
    page_view_event = PageViewEvents()
2187
    page_view_event.catalogId = pageEvent.catalogId
2188
    page_view_event.url = pageEvent.url
2189
    page_view_event.sellingPrice = pageEvent.sellingPrice
2190
    page_view_event.ip = pageEvent.ip
2191
    page_view_event.sessionId = pageEvent.sessionId
2192
    page_view_event.comingSoon = pageEvent.comingSoon
2193
    page_view_event.eventTimestamp = to_py_date(pageEvent.eventDate)
2194
    session.commit()
2195
 
2196
def add_cart_event(cartEvent):
2197
    cart_event = CartEvents()
2198
    cart_event.catalogId = cartEvent.catalogId
2199
    cart_event.itemId = cartEvent.itemId
2200
    cart_event.inStock = cartEvent.inStock
2201
    cart_event.ip = cartEvent.ip
2202
    cart_event.sessionId = cartEvent.sessionId
2203
    cart_event.comingSoon = cartEvent.comingSoon
2204
    cart_event.sellingPrice = cartEvent.sellingPrice
2205
    cart_event.eventTimestamp = to_py_date(cartEvent.eventDate)
2206
    session.commit()
8168 kshitij.so 2207
 
2208
def update_amazon_attributes_in_bulk(amazonlistedMap):
2209
    for itemId,amazonlisted in amazonlistedMap.iteritems():
12407 kshitij.so 2210
        amazon_item = (get_amazon_item_details(itemId))[0]
8168 kshitij.so 2211
        if amazon_item is not None:
2212
            if amazon_item.sellingPrice != amazonlisted.sellingPrice:
2213
                amazon_item.mfnPriceLastUpdatedOn = datetime.datetime.now()
2214
                amazon_item.sellingPrice = amazonlisted.sellingPrice
2215
            if amazon_item.fbaPrice != amazonlisted.fbaPrice:
2216
                amazon_item.fbaPriceLastUpdatedOn = datetime.datetime.now()
2217
                amazon_item.fbaPrice = amazonlisted.fbaPrice
10909 vikram.rag 2218
            if amazon_item.fbbPrice != amazonlisted.fbbPrice:
2219
                amazon_item.fbbPriceLastUpdatedOn = datetime.datetime.now()
2220
                amazon_item.fbbPrice = amazonlisted.fbbPrice
10929 vikram.rag 2221
            amazon_item.fbbtaxCode = amazonlisted.fbbtaxCode    
8619 kshitij.so 2222
            amazon_item.taxCode = amazonlisted.taxCode
10909 vikram.rag 2223
            amazon_item.isFbb = amazonlisted.isFbb
8168 kshitij.so 2224
            amazon_item.isFba = amazonlisted.isFba
2225
            amazon_item.isNonFba = amazonlisted.isNonFba
2226
            amazon_item.isInventoryOverride = amazonlisted.isInventoryOverride
2227
            amazon_item.suppressMfnPriceUpdate = amazonlisted.suppressMfnPriceUpdate
2228
            amazon_item.suppressFbaPriceUpdate = amazonlisted.suppressFbaPriceUpdate
10909 vikram.rag 2229
            amazon_item.suppressFbbPriceUpdate = amazonlisted.suppressFbbPriceUpdate
12505 kshitij.so 2230
            amazon_item.otherCost = amazonlisted.otherCost
8168 kshitij.so 2231
            session.commit()
2232
    return True
2233
 
7977 kshitij.so 2234
 
8182 amar.kumar 2235
def insert_ebay_item(ebayItem):
8241 amar.kumar 2236
    ebay_item = EbayItem.get_by(ebayListingId = ebayItem.ebayListingId)
2237
    if ebay_item is None:
2238
        ebay_item = EbayItem()
8182 amar.kumar 2239
    ebay_item.ebayListingId = ebayItem.ebayListingId
2240
    ebay_item.itemId = ebayItem.itemId
2241
    ebay_item.listingName = ebayItem.listingName
2242
    ebay_item.listingPrice = ebayItem.listingPrice
8281 amar.kumar 2243
    ebay_item.listingExpiryDate = to_py_date(ebayItem.listingExpiryDate)
8182 amar.kumar 2244
    ebay_item.subsidy = ebayItem.subsidy
2245
    ebay_item.defaultWarehouseId = ebayItem.defaultWarehouseId
2246
    session.commit()
2247
 
7977 kshitij.so 2248
 
8182 amar.kumar 2249
def get_ebay_item(listing_id):
2250
    ebay_item = EbayItem.get_by(ebayListingId = listing_id)
2251
    return ebay_item
7977 kshitij.so 2252
 
8182 amar.kumar 2253
 
2254
def update_ebay_item(ebayItem):
2255
    ebay_item = EbayItem.get_by(ebayListingId = ebayItem.ebayListingId)
2256
    #if ebay_item.listingExpiryDate < datetime.datetime.now():
2257
    ebay_item.listingName = ebayItem.listingName
2258
    ebay_item.listingPrice = ebayItem.listingPrice
2259
    ebay_item.listingExpiryDate = ebayItem.listingExpiryDate
2260
    ebay_item.subsidy = ebayItem.subsidy
2261
    ebay_item.defaultWarehouseId = ebayItem.defaultWarehouseId
2262
    session.commit()
8379 vikram.rag 2263
 
2264
def get_all_items_to_list_on_fba():
2265
    return Amazonlisted.query.filter(Amazonlisted.isFba==False).all()
2266
 
2267
def get_all_items_to_list_on_nonfba():
2268
    return Amazonlisted.query.filter(Amazonlisted.isNonFba==False).all()
8182 amar.kumar 2269
 
8619 kshitij.so 2270
def get_amazon_listed_items(offset,limit):
2271
    return session.query(Amazonlisted).offset(offset).limit(limit).all()
2272
 
2273
def search_amazon_items(search_terms, offset, limit):
2274
    query = Amazonlisted.query
2275
 
2276
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
2277
 
2278
    for search_term in search_terms:
2279
        query_clause = []
2280
        query_clause.append(Amazonlisted.itemId.like(search_term))
2281
        query_clause.append(Amazonlisted.brand.like(search_term))
2282
        query_clause.append(Amazonlisted.model.like(search_term))
2283
        query_clause.append(Amazonlisted.name.like(search_term))
2284
        query_clause.append(Amazonlisted.asin.like(search_term))
2285
        query = query.filter(or_(*query_clause))
2286
 
2287
    query = query.offset(offset)
2288
    if limit:
2289
        query = query.limit(limit)
2290
    amazon_items = query.all()
2291
    return amazon_items
2292
 
2293
def get_amazon_search_result_count(search_terms):
2294
    query = Amazonlisted.query
2295
 
2296
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
2297
 
2298
    for search_term in search_terms:
2299
        query_clause = []
2300
        query_clause.append(Amazonlisted.itemId.like(search_term))
2301
        query_clause.append(Amazonlisted.brand.like(search_term))
2302
        query_clause.append(Amazonlisted.model.like(search_term))
2303
        query_clause.append(Amazonlisted.name.like(search_term))
2304
        query_clause.append(Amazonlisted.asin.like(search_term))
2305
        query = query.filter(or_(*query_clause))
2306
 
2307
    return query.count()
2308
 
2309
def get_count_for_amazonlisted_items():
2310
    return session.query(func.count(Amazonlisted.itemId)).scalar()
2311
 
8739 vikram.rag 2312
def add_or_update_snapdeal_item(snapdealitem):
2313
    item = SnapdealItem.get_by(item_id=snapdealitem.item_id)
9779 kshitij.so 2314
    if not __validateSnapdealObject(snapdealitem):
2315
        print "Bad object"
2316
        return False
8739 vikram.rag 2317
    try:
2318
        if item is not None:
10097 kshitij.so 2319
            itemHistory = MarketPlaceUpdateHistory()
9242 kshitij.so 2320
            itemHistory.item_id = snapdealitem.item_id
10097 kshitij.so 2321
            itemHistory.source = OrderSource.SNAPDEAL
9242 kshitij.so 2322
            itemHistory.exceptionPrice = item.exceptionPrice
2323
            itemHistory.warehouseId = item.warehouseId
10097 kshitij.so 2324
            itemHistory.isListedOnSource = item.isListedOnSnapdeal
9242 kshitij.so 2325
            itemHistory.transferPrice = item.transferPrice
2326
            itemHistory.sellingPrice = item.sellingPrice
2327
            itemHistory.courierCost = item.courierCost
2328
            itemHistory.commission = item.commission
2329
            itemHistory.serviceTax = item.serviceTax
2330
            itemHistory.suppressPriceFeed = item.suppressPriceFeed
2331
            itemHistory.suppressInventoryFeed = item.suppressInventoryFeed
2332
            itemHistory.updatedOn = item.updatedOn
9478 kshitij.so 2333
            itemHistory.maxNlc = item.maxNlc
10097 kshitij.so 2334
            itemHistory.skuAtSource = item.skuAtSnapdeal
2335
            itemHistory.marketPlaceSerialNumber = item.supc
9779 kshitij.so 2336
            itemHistory.priceUpdatedBy = item.priceUpdatedBy
11095 kshitij.so 2337
            itemHistory.courierCostMarketplace = item.courierCostMarketplace
9242 kshitij.so 2338
 
9779 kshitij.so 2339
            if (item.sellingPrice!=snapdealitem.sellingPrice):
2340
                item.priceUpdatedBy = snapdealitem.updatedBy
2341
 
8739 vikram.rag 2342
            if snapdealitem.exceptionPrice is not None:
2343
                item.exceptionPrice = snapdealitem.exceptionPrice
2344
            if snapdealitem.warehouseId is not None:     
2345
                item.warehouseId = snapdealitem.warehouseId
2346
            if snapdealitem.isListedOnSnapdeal is not None:    
9242 kshitij.so 2347
                item.isListedOnSnapdeal = snapdealitem.isListedOnSnapdeal
2348
            if snapdealitem.transferPrice is not None:
2349
                item.transferPrice = snapdealitem.transferPrice
2350
            if snapdealitem.sellingPrice is not None:
2351
                item.sellingPrice = snapdealitem.sellingPrice
2352
            if snapdealitem.courierCost is not None:
2353
                item.courierCost = snapdealitem.courierCost    
2354
            if snapdealitem.commission is not None:
2355
                item.commission = snapdealitem.commission
2356
            if snapdealitem.serviceTax is not None:
2357
                item.serviceTax = snapdealitem.serviceTax
2358
            item.suppressPriceFeed =snapdealitem.suppressPriceFeed
9478 kshitij.so 2359
            item.suppressInventoryFeed =snapdealitem.suppressInventoryFeed
9581 kshitij.so 2360
            if snapdealitem.maxNlc is not None:
2361
                item.maxNlc = snapdealitem.maxNlc
9478 kshitij.so 2362
            item.skuAtSnapdeal = snapdealitem.skuAtSnapdeal
9242 kshitij.so 2363
            item.updatedOn = datetime.datetime.now()
9568 kshitij.so 2364
            item.supc = snapdealitem.supc
11095 kshitij.so 2365
            item.courierCostMarketplace = snapdealitem.courierCostMarketplace
14780 manish.sha 2366
            if snapdealitem.isVoiListed is not None:
2367
                item.isVoiListed = snapdealitem.isVoiListed
2368
            if snapdealitem.voiSellingPrice is not None:
2369
                item.voiSellingPrice = snapdealitem.voiSellingPrice
2370
            if snapdealitem.voiSellingPrice is not None:
2371
                item.voiPriceLastUpdatedOn = datetime.datetime.now()
2372
            if snapdealitem.voiSkuAtSnapdeal is not None:
2373
                item.voiSkuAtSnapdeal = snapdealitem.voiSkuAtSnapdeal
2374
            if snapdealitem.minimumPossibleSpVoi is not None:
2375
                item.minimumPossibleSpVoi = snapdealitem.minimumPossibleSpVoi
2376
            if snapdealitem.minimumPossibleTpVoi is not None:
2377
                item.minimumPossibleTpVoi = snapdealitem.minimumPossibleTpVoi
2378
            if snapdealitem.courierCostVoi is not None:
2379
                item.courierCostVoi = snapdealitem.courierCostVoi
2380
            if snapdealitem.serviceTaxVoi is not None:
2381
                item.serviceTaxVoi = snapdealitem.serviceTaxVoi
2382
            if snapdealitem.transferPriceVoi is not None:
2383
                item.transferPriceVoi = snapdealitem.transferPriceVoi
2384
            if snapdealitem.commissionVoi is not None:
2385
                item.commissionVoi = snapdealitem.commissionVoi
14862 manish.sha 2386
            if snapdealitem.courierCostMarketplaceVoi is not None:
2387
                item.courierCostMarketplaceVoi = snapdealitem.courierCostMarketplaceVoi
2388
            if snapdealitem.commissionPercentageVoi is not None:
2389
                item.commissionPercentageVoi = snapdealitem.commissionPercentageVoi
9779 kshitij.so 2390
            __markStatusForMarketplaceItems(snapdealitem,item)
2391
            return update_marketplace_attributes_for_item(snapdealitem.marketplaceItems)
8739 vikram.rag 2392
        else:
2393
            item = SnapdealItem()
2394
            if snapdealitem.item_id is not None:
2395
                item.item_id = snapdealitem.item_id
2396
                if snapdealitem.exceptionPrice is not None:
2397
                    item.exceptionPrice = snapdealitem.exceptionPrice
2398
                if snapdealitem.warehouseId is not None:    
2399
                    item.warehouseId = snapdealitem.warehouseId
2400
                if snapdealitem.isListedOnSnapdeal is not None: 
9242 kshitij.so 2401
                    item.isListedOnSnapdeal = snapdealitem.isListedOnSnapdeal
2402
                if snapdealitem.transferPrice is not None:
2403
                    item.transferPrice = snapdealitem.transferPrice
2404
                if snapdealitem.sellingPrice is not None:
2405
                    item.sellingPrice = snapdealitem.sellingPrice
2406
                if snapdealitem.courierCost is not None:
2407
                    item.courierCost = snapdealitem.courierCost    
2408
                if snapdealitem.commission is not None:
2409
                    item.commission = snapdealitem.commission
2410
                if snapdealitem.serviceTax is not None:
2411
                    item.serviceTax = snapdealitem.serviceTax
2412
                item.suppressPriceFeed =snapdealitem.suppressPriceFeed
2413
                item.suppressInventoryFeed =snapdealitem.suppressInventoryFeed 
9595 kshitij.so 2414
                item.maxNlc = snapdealitem.maxNlc
9478 kshitij.so 2415
                item.skuAtSnapdeal = snapdealitem.skuAtSnapdeal
9568 kshitij.so 2416
                item.supc = snapdealitem.supc
9779 kshitij.so 2417
                item.updatedOn = datetime.datetime.now()  
2418
                item.priceUpdatedBy = snapdealitem.updatedBy
11095 kshitij.so 2419
                item.courierCostMarketplace = snapdealitem.courierCostMarketplace
14780 manish.sha 2420
                if snapdealitem.isVoiListed is not None:
2421
                    item.isVoiListed = snapdealitem.isVoiListed
2422
                if snapdealitem.voiSellingPrice is not None:
2423
                    item.voiSellingPrice = snapdealitem.voiSellingPrice
2424
                if snapdealitem.voiSellingPrice is not None:
2425
                    item.voiPriceLastUpdatedOn = datetime.datetime.now()
2426
                if snapdealitem.voiSkuAtSnapdeal is not None:
2427
                    item.voiSkuAtSnapdeal = snapdealitem.voiSkuAtSnapdeal
2428
                if snapdealitem.minimumPossibleSpVoi is not None:
2429
                    item.minimumPossibleSpVoi = snapdealitem.minimumPossibleSpVoi
2430
                if snapdealitem.minimumPossibleTpVoi is not None:
2431
                    item.minimumPossibleTpVoi = snapdealitem.minimumPossibleTpVoi
2432
                if snapdealitem.courierCostVoi is not None:
2433
                    item.courierCostVoi = snapdealitem.courierCostVoi
2434
                if snapdealitem.serviceTaxVoi is not None:
2435
                    item.serviceTaxVoi = snapdealitem.serviceTaxVoi
2436
                if snapdealitem.transferPriceVoi is not None:
2437
                    item.transferPriceVoi = snapdealitem.transferPriceVoi
2438
                if snapdealitem.commissionVoi is not None:
2439
                    item.commissionVoi = snapdealitem.commissionVoi
14862 manish.sha 2440
                if snapdealitem.courierCostMarketplaceVoi is not None:
2441
                    item.courierCostMarketplaceVoi = snapdealitem.courierCostMarketplaceVoi
2442
                if snapdealitem.commissionPercentageVoi is not None:
2443
                    item.commissionPercentageVoi = snapdealitem.commissionPercentageVoi
9779 kshitij.so 2444
                __markStatusForMarketplaceItems(snapdealitem,item)
2445
                return update_marketplace_attributes_for_item(snapdealitem.marketplaceItems)  
2446
    except Exception as ex:
2447
        print "Unable to addOrupdate snapdealItem"
2448
        print ex
9242 kshitij.so 2449
        return False
8739 vikram.rag 2450
 
2451
def get_snapdeal_item(itemid):
8755 vikram.rag 2452
    item = session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id)).filter(SnapdealItem.item_id==itemid).first()
8747 vikram.rag 2453
    return item
9724 kshitij.so 2454
 
2455
def get_snapdeal_item_detail(itemid):
2456
    item = session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id)).filter(SnapdealItem.item_id==itemid).first()
2457
    try:
2458
        client = InventoryClient().get_client()
2459
        SnapdealInventoryItem = client.getSnapdealInventoryForItem(itemid)
2460
        return item, SnapdealInventoryItem
2461
    except Exception as e:
2462
        print e
2463
        return item,None
8739 vikram.rag 2464
 
2465
def get_all_snapdeal_items():
8754 vikram.rag 2466
    items = session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id)).all()
8739 vikram.rag 2467
    return items
2468
 
9242 kshitij.so 2469
def get_snapdeal_items(offset,limit):
2470
    return session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id)).offset(offset).limit(limit).all()
2471
 
8619 kshitij.so 2472
def update_asin(amazonAsinMap):
2473
    for item_id,t_item in amazonAsinMap.iteritems():
2474
        item = get_item(item_id)
2475
        item.asin=t_item.asin
2476
        item.defaultInventory = t_item.defaultInventory
2477
        item.holdInventory = t_item.holdInventory
2478
        item.updatedOn = datetime.datetime.now()
2479
    session.commit()
9242 kshitij.so 2480
 
2481
def search_snapdeal_items(search_terms,offset,limit):
2482
    query = session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id))
2483
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
2484
    for search_term in search_terms:
2485
        query_clause = []
2486
        query_clause.append(Item.id.like(search_term))
2487
        query_clause.append(Item.brand.like(search_term))
2488
        query_clause.append(Item.model_name.like(search_term))
2489
        query_clause.append(Item.model_number.like(search_term))
2490
        query_clause.append(Item.color.like(search_term))
2491
        query = query.filter(or_(*query_clause))
2492
 
2493
    query = query.offset(offset)
2494
    if limit:
2495
        query = query.limit(limit)
2496
    snapdeal_items = query.all()
2497
    return snapdeal_items
2498
 
2499
def get_snapdeal_search_result_count(search_terms):
2500
    query = session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id))
2501
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
2502
    for search_term in search_terms:
2503
        query_clause = []
2504
        query_clause.append(Item.id.like(search_term))
2505
        query_clause.append(Item.brand.like(search_term))
2506
        query_clause.append(Item.model_name.like(search_term))
2507
        query_clause.append(Item.model_number.like(search_term))
2508
        query_clause.append(Item.color.like(search_term))
2509
        query = query.filter(or_(*query_clause))
2510
    return query.count()
2511
 
2512
def get_count_for_snapdeal_items():
2513
    return session.query(func.count(SnapdealItem.item_id)).scalar()
2514
 
9456 vikram.rag 2515
def get_snapdealitem_by_skuatsnapdeal(sku):
2516
    snapdeal_item = SnapdealItem.get_by(skuAtSnapdeal=sku)
2517
    if snapdeal_item is not None: 
2518
        item = session.query(SnapdealItem,Item).join((Item,SnapdealItem.item_id==Item.id)).filter(SnapdealItem.item_id==snapdeal_item.item_id).first()
2519
    else:
2520
        return None    
2521
    return item
9242 kshitij.so 2522
 
9621 manish.sha 2523
def get_product_feed_submit(catalog_itemId):
2524
    product_feedsubmit = ProductFeedSubmit.get_by(catalogItemId=catalog_itemId)
2525
    return product_feedsubmit
9456 vikram.rag 2526
 
9621 manish.sha 2527
def add_product_feed_submit(productFeedSubmit):
2528
    feedSubmit = ProductFeedSubmit()
2529
    feedSubmit.catalogItemId = productFeedSubmit.catalogItemId
2530
    feedSubmit.stockLinkedFeed = productFeedSubmit.stockLinkedFeed
2531
    session.commit()
2532
    return True
2533
 
2534
def update_product_feed_submit(productFeedSubmit):
2535
    feedSubmit = get_product_feed_submit(productFeedSubmit.catalogItemId)
2536
    if feedSubmit:
2537
        feedSubmit.catalogItemId = productFeedSubmit.catalogItemId
2538
        feedSubmit.stockLinkedFeed = productFeedSubmit.stockLinkedFeed
2539
        session.commit()
2540
        return True
2541
    return False
2542
 
2543
def delete_product_feed_submit(catalog_itemId):
2544
    feedSubmit = get_product_feed_submit(catalog_itemId)
2545
    if feedSubmit:
2546
        feedSubmit.delete()
2547
        session.commit()
2548
        return True
2549
    return False
2550
 
2551
def get_all_product_feed_submit():
2552
    print session.query(ProductFeedSubmit).all()
2553
    return session.query(ProductFeedSubmit).all()
2554
 
9724 kshitij.so 2555
def get_marketplace_details_for_item(item_id, sourceId):
2556
    return MarketplaceItems.get_by(itemId=item_id,source=sourceId)
2557
 
2558
def update_marketplace_attributes_for_item(t_marketplaceItem):
2559
    if t_marketplaceItem.source is None or t_marketplaceItem.itemId is None:
2560
        return False
2561
    try:
2562
        marketplaceItem = get_marketplace_details_for_item(t_marketplaceItem.itemId,t_marketplaceItem.source)
2563
        if marketplaceItem is None:
2564
            marketplaceItem = MarketplaceItems()
2565
            marketplaceItem.itemId = t_marketplaceItem.itemId
2566
            marketplaceItem.source = t_marketplaceItem.source
9779 kshitij.so 2567
            marketplaceItem.emiFee = t_marketplaceItem.emiFee
2568
            marketplaceItem.closingFee = t_marketplaceItem.closingFee
2569
            marketplaceItem.returnProvision = t_marketplaceItem.returnProvision
2570
            marketplaceItem.commission = t_marketplaceItem.commission
9724 kshitij.so 2571
            marketplaceItem.vat = t_marketplaceItem.vat
12133 kshitij.so 2572
            if marketplaceItem.source == OrderSource.SNAPDEAL:
2573
                marketplaceItem.packagingCost = t_marketplaceItem.packagingCost
2574
            else:
2575
                marketplaceItem.packagingCost = 15.0
9779 kshitij.so 2576
            marketplaceItem.serviceTax = t_marketplaceItem.serviceTax
9724 kshitij.so 2577
            marketplaceItem.courierCost = t_marketplaceItem.courierCost
2578
            marketplaceItem.otherCost = t_marketplaceItem.otherCost
2579
            marketplaceItem.autoIncrement = t_marketplaceItem.autoIncrement
2580
            marketplaceItem.autoDecrement = t_marketplaceItem.autoDecrement
2581
            marketplaceItem.manualFavourite = t_marketplaceItem.manualFavourite
2582
            marketplaceItem.currentSp = t_marketplaceItem.currentSp
2583
            marketplaceItem.currentTp = t_marketplaceItem.currentTp
2584
            marketplaceItem.minimumPossibleSp = t_marketplaceItem.minimumPossibleSp
2585
            marketplaceItem.minimumPossibleTp = t_marketplaceItem.minimumPossibleTp
9923 kshitij.so 2586
            marketplaceItem.maximumSellingPrice = t_marketplaceItem.maximumSellingPrice
10287 kshitij.so 2587
            marketplaceItem.pgFee = t_marketplaceItem.pgFee
11095 kshitij.so 2588
            marketplaceItem.courierCostMarketplace = t_marketplaceItem.courierCostMarketplace
9724 kshitij.so 2589
        else:
2590
            marketplaceItem.courierCost = t_marketplaceItem.courierCost
2591
            marketplaceItem.otherCost = t_marketplaceItem.otherCost
2592
            marketplaceItem.autoIncrement = t_marketplaceItem.autoIncrement
2593
            marketplaceItem.autoDecrement = t_marketplaceItem.autoDecrement
2594
            marketplaceItem.manualFavourite = t_marketplaceItem.manualFavourite
2595
            marketplaceItem.currentSp = t_marketplaceItem.currentSp
2596
            marketplaceItem.currentTp = t_marketplaceItem.currentTp
2597
            marketplaceItem.minimumPossibleSp = t_marketplaceItem.minimumPossibleSp
2598
            marketplaceItem.minimumPossibleTp = t_marketplaceItem.minimumPossibleTp
9779 kshitij.so 2599
            marketplaceItem.emiFee = t_marketplaceItem.emiFee
2600
            marketplaceItem.closingFee = t_marketplaceItem.closingFee
2601
            marketplaceItem.returnProvision = t_marketplaceItem.returnProvision
2602
            marketplaceItem.commission = t_marketplaceItem.commission
12133 kshitij.so 2603
            if marketplaceItem.source == OrderSource.SNAPDEAL:
2604
                marketplaceItem.packagingCost = t_marketplaceItem.packagingCost
2605
            else:
2606
                marketplaceItem.packagingCost = 15.0
9779 kshitij.so 2607
            marketplaceItem.vat = t_marketplaceItem.vat
2608
            marketplaceItem.serviceTax = t_marketplaceItem.serviceTax
9923 kshitij.so 2609
            marketplaceItem.maximumSellingPrice = t_marketplaceItem.maximumSellingPrice
10287 kshitij.so 2610
            marketplaceItem.pgFee = t_marketplaceItem.pgFee
11095 kshitij.so 2611
            marketplaceItem.courierCostMarketplace = t_marketplaceItem.courierCostMarketplace
9724 kshitij.so 2612
        session.commit()
2613
        return True
2614
    except Exception as ex:
9779 kshitij.so 2615
        print "Unable to addOrupdate MarketplaceItem"
9724 kshitij.so 2616
        print ex
2617
        return False
9779 kshitij.so 2618
 
2619
def __markStatusForMarketplaceItems(snapdealItem,item):
2620
    try:
2621
        marketplaceItem = snapdealItem.marketplaceItems
2622
        markUpdatedItem = MarketPlaceItemPrice.query.filter(MarketPlaceItemPrice.item_id==snapdealItem.item_id).filter(MarketPlaceItemPrice.source==marketplaceItem.source).first()
2623
        if markUpdatedItem is None:
2624
            marketPlaceItemPrice = MarketPlaceItemPrice()
2625
            marketPlaceItemPrice.item_id = snapdealItem.item_id
2626
            marketPlaceItemPrice.source = marketplaceItem.source
2627
            marketPlaceItemPrice.lastUpdatedOn = item.updatedOn
2628
            marketPlaceItemPrice.sellingPrice = item.sellingPrice 
2629
            marketPlaceItemPrice.suppressPriceFeed = item.suppressPriceFeed
2630
            marketPlaceItemPrice.isListedOnSource = item.isListedOnSnapdeal
2631
        else:
2632
            if (markUpdatedItem.sellingPrice!=snapdealItem.sellingPrice or markUpdatedItem.suppressPriceFeed!=item.suppressPriceFeed or markUpdatedItem.isListedOnSource!=item.isListedOnSnapdeal):
2633
                markUpdatedItem.lastUpdatedOn = item.updatedOn
2634
            markUpdatedItem.sellingPrice = snapdealItem.sellingPrice
2635
            markUpdatedItem.suppressPriceFeed = item.suppressPriceFeed
2636
            markUpdatedItem.isListedOnSource = item.isListedOnSnapdeal
2637
        return True
2638
    except Exception as e:
2639
        print e
2640
        return False
9724 kshitij.so 2641
 
10097 kshitij.so 2642
def __markStatusForFlipkartItems(flipkartItem,item):
2643
    try:
2644
        marketplaceItem = flipkartItem.marketplaceItems
2645
        markUpdatedItem = MarketPlaceItemPrice.query.filter(MarketPlaceItemPrice.item_id==flipkartItem.item_id).filter(MarketPlaceItemPrice.source==marketplaceItem.source).first()
2646
        if markUpdatedItem is None:
2647
            marketPlaceItemPrice = MarketPlaceItemPrice()
2648
            marketPlaceItemPrice.item_id = flipkartItem.item_id
2649
            marketPlaceItemPrice.source = marketplaceItem.source
2650
            marketPlaceItemPrice.lastUpdatedOn = item.updatedOn
2651
            marketPlaceItemPrice.sellingPrice = marketplaceItem.currentSp 
2652
            marketPlaceItemPrice.suppressPriceFeed = item.suppressPriceFeed
2653
            marketPlaceItemPrice.isListedOnSource = item.isListedOnFlipkart
2654
        else:
2655
            if (markUpdatedItem.sellingPrice!=marketplaceItem.currentSp or markUpdatedItem.suppressPriceFeed!=item.suppressPriceFeed or markUpdatedItem.isListedOnSource!=item.isListedOnFlipkart):
2656
                markUpdatedItem.lastUpdatedOn = item.updatedOn
2657
            markUpdatedItem.sellingPrice = marketplaceItem.currentSp
2658
            markUpdatedItem.suppressPriceFeed = item.suppressPriceFeed
2659
            markUpdatedItem.isListedOnSource = item.isListedOnFlipkart
2660
        return True
2661
    except Exception as e:
2662
        print e
2663
        return False
2664
 
2665
 
9779 kshitij.so 2666
def get_costing_for_marketplace(source_id,itemId):
12133 kshitij.so 2667
    d_item = get_item(itemId)
10097 kshitij.so 2668
    time = datetime.datetime.now()
2669
    sip = SourceItemPercentage.query.filter(SourceItemPercentage.item_id==itemId).filter(SourceItemPercentage.source==source_id).filter(SourceItemPercentage.startDate<=time).filter(SourceItemPercentage.expiryDate>=time).first()
12133 kshitij.so 2670
    srm = SourceReturnPercentage.get_by(source=source_id,brand=d_item.brand,category_id=d_item.category)
10097 kshitij.so 2671
    if sip is not None:
12133 kshitij.so 2672
        sip.returnProvision = srm.returnProvision
10097 kshitij.so 2673
        return sip
9779 kshitij.so 2674
    else:
10097 kshitij.so 2675
        item = get_item(itemId)
2676
        scp = SourceCategoryPercentage.query.filter(SourceCategoryPercentage.category_id==item.category).filter(SourceCategoryPercentage.source==source_id).filter(SourceCategoryPercentage.startDate<=time).filter(SourceCategoryPercentage.expiryDate>=time).first()
2677
        if scp is not None:
12133 kshitij.so 2678
            scp.returnProvision = srm.returnProvision
10097 kshitij.so 2679
            return scp
2680
        else:
2681
            spm = SourcePercentageMaster.get_by(source=source_id)
12133 kshitij.so 2682
            spm.returnProvision = srm.returnProvision
10097 kshitij.so 2683
            return spm
9779 kshitij.so 2684
 
2685
def __validateSnapdealObject(snapdealItem):
2686
    if len(snapdealItem.supc)==0 or snapdealItem.supc is None or len(snapdealItem.skuAtSnapdeal)==0 or snapdealItem.skuAtSnapdeal is None or snapdealItem.sellingPrice==0 or snapdealItem.maxNlc==0:
2687
        return False
2688
    else:
2689
        return True
10097 kshitij.so 2690
 
2691
def __validateFlipkartObject(flipkartitem):
2692
    mpItem = flipkartitem.marketplaceItems
2693
    print mpItem
10116 kshitij.so 2694
    if mpItem.currentSp==0 or flipkartitem.maxNlc==0 or len(flipkartitem.flipkartSerialNumber)==0 or flipkartitem.flipkartSerialNumber is None or len(flipkartitem.skuAtFlipkart)==0 or flipkartitem.skuAtFlipkart is None:
10097 kshitij.so 2695
        return False
2696
    else:
2697
        return True
9779 kshitij.so 2698
 
2699
 
9776 vikram.rag 2700
def get_all_marketplace_items_for_priceupdate(source):
2701
    marketPlaceItemsPrices = MarketPlaceItemPrice.query.filter(MarketPlaceItemPrice.source == source).filter(MarketPlaceItemPrice.lastUpdatedOn > MarketPlaceItemPrice.lastUpdatedOnMarketplace).all()
2702
    return marketPlaceItemsPrices
9724 kshitij.so 2703
 
9816 kshitij.so 2704
def update_marketplace_priceupdate_status(skuList,timestamp,source_id):
9776 vikram.rag 2705
    for sku in skuList:
9816 kshitij.so 2706
            item = MarketPlaceItemPrice.get_by(item_id=sku,source=source_id)
9776 vikram.rag 2707
            if item is not None:
2708
                item.lastUpdatedOnMarketplace = to_py_date(timestamp)
9816 kshitij.so 2709
                mp_item = get_marketplace_details_for_item(sku,source_id)
2710
                if mp_item is not None:
2711
                    mp_item.lastCheckedTimestamp = to_py_date(timestamp)
9776 vikram.rag 2712
    session.commit()
9895 vikram.rag 2713
 
9907 vikram.rag 2714
def update_item_hold_inventory(itemHoldMap):
2715
    items = get_all_alive_items()
2716
    for item in items:
2717
        if item.holdOverride:
2718
            continue
2719
        if itemHoldMap.__contains__(item.id):
2720
            item.holdInventory = itemHoldMap[item.id]
2721
        else:
2722
            item.holdInventory = 1
2723
    session.commit()
2724
 
9895 vikram.rag 2725
def update_nlc_at_marketplaces(itemid,vendor_id,nlc):
2726
    try:
2727
        item = SnapdealItem.get_by(item_id=itemid)
2728
        if item is not None:
2729
            marketplaceitem =  MarketplaceItems.get_by(itemId=itemid,source=7)
2730
            ic = InventoryClient().get_client()
2731
            warehouse = ic.getWarehouse(item.warehouseId)
2732
            if(warehouse.vendor.id==vendor_id):
2733
                item.maxNlc = nlc
2734
                vat = (item.sellingPrice/(1+(marketplaceitem.vat/100))-(nlc/(1+(marketplaceitem.vat/100))))*(marketplaceitem.vat/100)
12133 kshitij.so 2735
                inHouseCost = marketplaceitem.packagingCost + vat + (marketplaceitem.returnProvision/100)*item.sellingPrice + marketplaceitem.otherCost
9895 vikram.rag 2736
                marketplaceitem.minimumPossibleTp  = nlc + inHouseCost
10287 kshitij.so 2737
                if (marketplaceitem.pgFee/100)*item.sellingPrice>=20:
12133 kshitij.so 2738
                    marketplaceitem.minimumPossibleSp = (nlc+(item.courierCostMarketplace+marketplaceitem.closingFee)*(1+(marketplaceitem.serviceTax/100))*(1+(marketplaceitem.vat/100))+(marketplaceitem.packagingCost+marketplaceitem.otherCost)*(1+(marketplaceitem.vat)/100))/(1-(marketplaceitem.commission/100+marketplaceitem.emiFee/100+marketplaceitem.pgFee/100)*(1+(marketplaceitem.serviceTax/100))*(1+(marketplaceitem.vat)/100)-(marketplaceitem.returnProvision/100)*(1+(marketplaceitem.vat)/100))
10287 kshitij.so 2739
                else:
12133 kshitij.so 2740
                    marketplaceitem.minimumPossibleSp = (nlc+(item.courierCostMarketplace+marketplaceitem.closingFee+20)*(1+(marketplaceitem.serviceTax/100))*(1+(marketplaceitem.vat/100))+(marketplaceitem.packagingCost+marketplaceitem.otherCost)*(1+(marketplaceitem.vat)/100))/(1-(marketplaceitem.commission/100+marketplaceitem.emiFee/100)*(1+(marketplaceitem.serviceTax/100))*(1+(marketplaceitem.vat)/100)-(marketplaceitem.returnProvision/100)*(1+(marketplaceitem.vat)/100))
9895 vikram.rag 2741
                session.commit()
10287 kshitij.so 2742
        flipkartitem = FlipkartItem.get_by(item_id=itemid)
2743
        if flipkartitem is not None:
2744
            ic = InventoryClient().get_client()
2745
            fmarketplaceitem =  MarketplaceItems.get_by(itemId=itemid,source=8)
2746
            warehouse = ic.getWarehouse(flipkartitem.warehouseId)
2747
            if(warehouse.vendor.id==vendor_id):
2748
                print 'Inside Flipkart maxnlc change'
2749
                flipkartitem.maxNlc = nlc
2750
                vat = (fmarketplaceitem.currentSp/(1+(fmarketplaceitem.vat/100))-(nlc/(1+(fmarketplaceitem.vat/100))))*(fmarketplaceitem.vat/100)
2751
                inHouseCost = 15 + vat + (fmarketplaceitem.returnProvision/100)*fmarketplaceitem.currentSp + fmarketplaceitem.otherCost
2752
                fmarketplaceitem.minimumPossibleTp  = nlc + inHouseCost
2753
                fmarketplaceitem.minimumPossibleSp = (nlc+(fmarketplaceitem.courierCost+fmarketplaceitem.closingFee)*(1+(fmarketplaceitem.serviceTax/100))*(1+(fmarketplaceitem.vat/100))+(15+fmarketplaceitem.otherCost)*(1+(fmarketplaceitem.vat)/100))/(1-(fmarketplaceitem.commission/100+fmarketplaceitem.emiFee/100)*(1+(fmarketplaceitem.serviceTax/100))*(1+(fmarketplaceitem.vat)/100)-(fmarketplaceitem.returnProvision/100)*(1+(fmarketplaceitem.vat)/100))
2754
                session.commit()
9895 vikram.rag 2755
    finally:
9945 vikram.rag 2756
        close_session()
2757
 
2758
def get_all_flipkart_items():
10103 kshitij.so 2759
    return session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id)).all()
10097 kshitij.so 2760
 
2761
def get_flipkart_item(itemid):
2762
    item = session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id)).filter(FlipkartItem.item_id==itemid).first()
2763
    return item
2764
 
2765
def add_or_update_flipkart_item(flipkartitem):
2766
    item = FlipkartItem.get_by(item_id=flipkartitem.item_id)
2767
    mpItem = get_marketplace_details_for_item(flipkartitem.item_id,OrderSource.FLIPKART)
2768
    t_mpItem = flipkartitem.marketplaceItems
2769
    if not __validateFlipkartObject(flipkartitem):
2770
        return False
2771
    try:
2772
        if item is not None:
2773
            itemHistory = MarketPlaceUpdateHistory()
2774
            itemHistory.item_id = flipkartitem.item_id
2775
            itemHistory.source = OrderSource.FLIPKART
2776
            itemHistory.exceptionPrice = item.exceptionPrice
2777
            itemHistory.warehouseId = item.warehouseId
2778
            itemHistory.isListedOnSource = item.isListedOnFlipkart
2779
            itemHistory.transferPrice = mpItem.currentTp
2780
            itemHistory.sellingPrice = mpItem.currentSp
2781
            itemHistory.courierCost = mpItem.courierCost
2782
            itemHistory.commission = item.commissionValue
2783
            itemHistory.serviceTax = item.serviceTaxValue
2784
            itemHistory.suppressPriceFeed = item.suppressPriceFeed
2785
            itemHistory.suppressInventoryFeed = item.suppressInventoryFeed
2786
            itemHistory.updatedOn = item.updatedOn
2787
            itemHistory.maxNlc = item.maxNlc
2788
            itemHistory.skuAtSource = item. skuAtFlipkart
2789
            itemHistory.marketPlaceSerialNumber = item.flipkartSerialNumber
2790
            itemHistory.priceUpdatedBy = item.updatedBy
2791
            if (mpItem.currentSp!=t_mpItem.currentSp):
2792
                item.updatedBy = flipkartitem.updatedBy
2793
            item.exceptionPrice = flipkartitem.exceptionPrice
2794
            item.warehouseId = flipkartitem.warehouseId
14780 manish.sha 2795
            if flipkartitem.isListedOnFlipkart:
2796
                item.isListedOnFlipkart = flipkartitem.isListedOnFlipkart
2797
                item.isFaListed = False
2798
            else:
2799
                item.isFaListed = flipkartitem.isFaListed
2800
                item.isListedOnFlipkart = flipkartitem.isListedOnFlipkart
10097 kshitij.so 2801
            item.commissionValue = flipkartitem.commissionValue
2802
            item.serviceTaxValue = flipkartitem.serviceTaxValue
2803
            item.suppressPriceFeed =flipkartitem.suppressPriceFeed
2804
            item.suppressInventoryFeed =flipkartitem.suppressInventoryFeed
2805
            item.maxNlc = flipkartitem.maxNlc
2806
            item.skuAtFlipkart = flipkartitem.skuAtFlipkart
2807
            item.flipkartSerialNumber = flipkartitem.flipkartSerialNumber
2808
            item.updatedOn = datetime.datetime.now()
14780 manish.sha 2809
            if flipkartitem.isFaListed:
2810
                item.isListedOnFlipkart = False
2811
                item.isFaListed = flipkartitem.isFaListed
2812
            else:
2813
                item.isFaListed = flipkartitem.isFaListed
2814
                item.isListedOnFlipkart = flipkartitem.isListedOnFlipkart
10097 kshitij.so 2815
            __markStatusForFlipkartItems(flipkartitem,item)
2816
            return update_marketplace_attributes_for_item(flipkartitem.marketplaceItems)
2817
        else:
2818
            item = FlipkartItem()
2819
            if flipkartitem.item_id is not None:
2820
                item.item_id = flipkartitem.item_id
2821
                item.exceptionPrice = flipkartitem.exceptionPrice
2822
                item.warehouseId = flipkartitem.warehouseId
14780 manish.sha 2823
                if flipkartitem.isListedOnFlipkart:
2824
                    item.isListedOnFlipkart = flipkartitem.isListedOnFlipkart
2825
                    item.isFaListed = False
2826
                else:
2827
                    item.isFaListed = flipkartitem.isFaListed
2828
                    item.isListedOnFlipkart = flipkartitem.isListedOnFlipkart
10097 kshitij.so 2829
                item.commissionValue = flipkartitem.commissionValue
2830
                item.serviceTaxValue = flipkartitem.serviceTaxValue
2831
                item.suppressPriceFeed =flipkartitem.suppressPriceFeed
2832
                item.suppressInventoryFeed =flipkartitem.suppressInventoryFeed 
2833
                item.maxNlc = flipkartitem.maxNlc
2834
                item.skuAtFlipkart = flipkartitem.skuAtFlipkart
2835
                item.flipkartSerialNumber = flipkartitem.flipkartSerialNumber
2836
                item.updatedOn = datetime.datetime.now()  
2837
                item.updatedBy = flipkartitem.updatedBy
14780 manish.sha 2838
                if flipkartitem.isFaListed:
2839
                    item.isListedOnFlipkart = False
2840
                    item.isFaListed = flipkartitem.isFaListed
2841
                else:
2842
                    item.isFaListed = flipkartitem.isFaListed
2843
                    item.isListedOnFlipkart = flipkartitem.isListedOnFlipkart                    
10097 kshitij.so 2844
                __markStatusForFlipkartItems(flipkartitem,item)
2845
                return update_marketplace_attributes_for_item(flipkartitem.marketplaceItems)  
2846
    except Exception as ex:
2847
        print "Unable to addOrupdate flipkart"
2848
        print ex
2849
        return False
2850
 
2851
def get_flipkart_item_detail(itemid):
2852
    item = session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id)).filter(FlipkartItem.item_id==itemid).first()
2853
    try:
2854
        client = InventoryClient().get_client()
2855
        FlipkartInventoryItem = client.getFlipkartlInventoryForItem(itemid)
2856
        return item, FlipkartInventoryItem
2857
    except Exception as e:
2858
        print e
2859
        return item,None
2860
 
2861
def get_flipkart_items(offset,limit):
2862
    return session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id)).offset(offset).limit(limit).all()
2863
 
2864
def search_flipkart_items(search_terms,offset,limit):
2865
    query = session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id))
2866
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
2867
    for search_term in search_terms:
2868
        query_clause = []
2869
        query_clause.append(Item.id.like(search_term))
2870
        query_clause.append(Item.brand.like(search_term))
2871
        query_clause.append(Item.model_name.like(search_term))
2872
        query_clause.append(Item.model_number.like(search_term))
2873
        query_clause.append(Item.color.like(search_term))
2874
        query = query.filter(or_(*query_clause))
2875
 
2876
    query = query.offset(offset)
2877
    if limit:
2878
        query = query.limit(limit)
2879
    flipkart_items = query.all()
2880
    return flipkart_items
2881
 
2882
def get_flipkart_search_result_count(search_terms):
2883
    query = session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id))
2884
    search_terms = ['%' + search_term + '%' for search_term in search_terms]
2885
    for search_term in search_terms:
2886
        query_clause = []
2887
        query_clause.append(Item.id.like(search_term))
2888
        query_clause.append(Item.brand.like(search_term))
2889
        query_clause.append(Item.model_name.like(search_term))
2890
        query_clause.append(Item.model_number.like(search_term))
2891
        query_clause.append(Item.color.like(search_term))
2892
        query = query.filter(or_(*query_clause))
2893
    return query.count()
2894
 
2895
def get_count_for_flipkart_items():
2896
    return session.query(func.count(FlipkartItem.item_id)).scalar()
2897
 
2898
def get_all_fk_items():
2899
    return session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id)).all()
2900
 
10140 vikram.rag 2901
def get_flipkart_item_by_sku_at_flipkart(sku):
10141 vikram.rag 2902
    return session.query(FlipkartItem,Item).join((Item,FlipkartItem.item_id==Item.id)).filter(FlipkartItem.skuAtFlipkart==sku).first()
10909 vikram.rag 2903
 
11015 kshitij.so 2904
def get_marketplace_history(source,offset,itemId):
2905
    return session.query(MarketPlaceHistory).filter(MarketPlaceHistory.item_id==itemId).filter(MarketPlaceHistory.source==source).filter(or_(MarketPlaceHistory.toGroup==True,MarketPlaceHistory.toGroup==None)).order_by(desc(MarketPlaceHistory.timestamp)).limit(11).offset(offset).all()
2906
 
10909 vikram.rag 2907
def get_all_fbb_listed_items():
15702 kshitij.so 2908
    return Amazonlisted.query.filter(Amazonlisted.isFbb==False).filter(or_(Amazonlisted.fbdtaxCode!=None,Amazonlisted.fbdtaxCode!="")).all()
11015 kshitij.so 2909
 
10924 vikram.rag 2910
def get_all_fbb_pricing_items():
12949 kshitij.so 2911
    #Removing fbbListedOn from query.Will have to fix this.(2014-10-17)
2912
    #return Amazonlisted.query.filter(Amazonlisted.isFbb==True).filter(Amazonlisted.suppressFbbPriceUpdate==False).filter(Amazonlisted.fbbListedOn != None).all()
2913
    return Amazonlisted.query.filter(Amazonlisted.isFbb==True).filter(Amazonlisted.suppressFbbPriceUpdate==False).all()
11015 kshitij.so 2914
def get_count_for_marketplaceHistory(source,itemId):
2915
    return len(session.query(MarketPlaceHistory).filter(MarketPlaceHistory.item_id==itemId).filter(MarketPlaceHistory.source==source).filter(or_(MarketPlaceHistory.toGroup==True,MarketPlaceHistory.toGroup==None)).all())   
2916
 
2917
def get_marketplace_history_by_date(source,startDate,endDate,offset,limit,itemId):
2918
    return session.query(MarketPlaceHistory).filter(MarketPlaceHistory.item_id==itemId).filter(MarketPlaceHistory.source==source).filter(MarketPlaceHistory.timestamp > to_py_date(startDate)).filter(MarketPlaceHistory.timestamp < to_py_date(endDate)).order_by(desc(MarketPlaceHistory.timestamp)).all()
2919
 
11531 vikram.rag 2920
def get_private_deal_details(itemid):
2921
    return PrivateDeals.get_by(item_id=itemid)
2922
 
2923
def get_private_deal_items(offset,limit):
12124 kshitij.so 2924
    if offset==0 and limit==0:
2925
        return session.query(Item).join((PrivateDeals,Item.id==PrivateDeals.item_id)).filter(PrivateDeals.isActive==True).all()
11614 vikram.rag 2926
    return session.query(Item).join((PrivateDeals,Item.id==PrivateDeals.item_id)).filter(PrivateDeals.isActive==True).offset(offset).limit(limit).all()
11531 vikram.rag 2927
 
11653 amit.gupta 2928
def get_all_active_private_deals(itemIds, daysDelta):
2929
        dealsMap = dict()
2930
        all_active_items_query =  session.query(PrivateDeals).filter(PrivateDeals.isActive==True).filter(now().between(PrivateDeals.startDate, PrivateDeals.endDate + datetime.timedelta(days=daysDelta)))
2931
        if itemIds is not None:  
11667 amit.gupta 2932
            all_active_items_query = all_active_items_query.filter(PrivateDeals.item_id.in_(itemIds))
11653 amit.gupta 2933
 
2934
        all_active_private_deals = all_active_items_query.all()
2935
        if all_active_private_deals is not None or all_active_private_deals!=[]:
11592 amit.gupta 2936
            for active_private_deal in all_active_private_deals:
13183 amit.gupta 2937
                item = get_item(active_private_deal.item_id)
2938
                if item.sellingPrice >  active_private_deal.dealPrice:
2939
                    dealsMap[active_private_deal.item_id] = to_t_private_deal(active_private_deal)
2940
        return dealsMap
11592 amit.gupta 2941
 
11531 vikram.rag 2942
def add_or_update_private_deal(privatedeal):
11606 vikram.rag 2943
    print 'Inside update private deals'
11531 vikram.rag 2944
    try:
2945
        deal =  PrivateDeals.get_by(item_id=privatedeal.item_id)
2946
        if deal is None:
2947
            deal = PrivateDeals()
2948
            deal.item_id = privatedeal.item_id
2949
            deal.dealFreebieItemId = privatedeal.dealFreebieItemId  
2950
            deal.dealPrice = privatedeal.dealPrice
11838 amit.gupta 2951
            deal.startDate =  to_py_date(privatedeal.startDate).replace(hour=0,second=0,minute=0)
2952
            deal.endDate = to_py_date(privatedeal.endDate).replace(hour=0,second=0,minute=0)
11566 vikram.rag 2953
            deal.dealTextOption = privatedeal.dealTextOption
11531 vikram.rag 2954
            deal.dealText = privatedeal.dealText
2955
            deal.isCod =  privatedeal.isCod
2956
            deal.rank = privatedeal.rank
11566 vikram.rag 2957
            deal.dealFreebieOption = privatedeal.dealFreebieOption
11606 vikram.rag 2958
            deal.isActive = privatedeal.isActive  
11531 vikram.rag 2959
        else:
2960
            deal.dealFreebieItemId = privatedeal.dealFreebieItemId  
2961
            deal.dealPrice = privatedeal.dealPrice
11896 amit.gupta 2962
            deal.startDate =  to_py_date(privatedeal.startDate).replace(hour=0,second=0,minute=0)
2963
            deal.endDate = to_py_date(privatedeal.endDate).replace(hour=0,second=0,minute=0)
11606 vikram.rag 2964
            deal.dealTextOption = privatedeal.dealTextOption
11531 vikram.rag 2965
            deal.dealText = privatedeal.dealText
2966
            deal.isCod =  privatedeal.isCod
2967
            deal.rank = privatedeal.rank
11566 vikram.rag 2968
            deal.dealFreebieOption = privatedeal.dealFreebieOption
11606 vikram.rag 2969
            deal.isActive = privatedeal.isActive
11531 vikram.rag 2970
        session.commit()
2971
        return True
2972
    except Exception as e:
11606 vikram.rag 2973
        print 'Exception in updating private deals'
11531 vikram.rag 2974
        print e
11606 vikram.rag 2975
        return False
11645 amit.gupta 2976
 
2977
def get_private_deals_query():
13076 amit.gupta 2978
    return session.query(Item).join((PrivateDeals,Item.id==PrivateDeals.item_id)).filter(Item.status==status.ACTIVE).filter(PrivateDeals.isActive==True).filter(now().between(PrivateDeals.startDate, PrivateDeals.endDate)).group_by(Item.catalog_item_id).order_by(desc(PrivateDeals.rank))
11635 vikram.rag 2979
 
11645 amit.gupta 2980
def get_private_deals_count():
11857 amit.gupta 2981
    return session.query(func.count(distinct(Item.catalog_item_id))).join((PrivateDeals,Item.id==PrivateDeals.item_id)).filter(Item.status==status.ACTIVE).filter(PrivateDeals.isActive==True).filter(now().between(PrivateDeals.startDate, PrivateDeals.endDate)).scalar()
11645 amit.gupta 2982
 
11635 vikram.rag 2983
def get_private_deals_catalog_ids(offset,limit):
11645 amit.gupta 2984
    private_deal_items = get_private_deals_query().offset(offset).limit(limit).all()
11635 vikram.rag 2985
    if private_deal_items is None:
11645 amit.gupta 2986
        return []
11635 vikram.rag 2987
    else:
11908 kshitij.so 2988
        return [item.catalog_item_id for item in private_deal_items]
2989
 
2990
def get_amazon_out_of_sync(itemId):
2991
    return AmazonOutOfSync.get_by(item_id=itemId)
2992
 
2993
def get_all_private_deals_comparison():
12133 kshitij.so 2994
    return session.query(PrivateDealsPriceComparison,Item).join((Item,PrivateDealsPriceComparison.item_id==Item.id)).all()
2995
 
13709 manish.sha 2996
'''    
2997
def get_all_deal_tags():
2998
    return session.query(DealTag).all()
2999
 
3000
def get_active_tags_for_item(itemId):
3001
    return session.query(ItemTag).filter(ItemTag.itemId == itemId).filter(ItemTag.status == True).all()
3002
 
3003
def get_item_tag_for_item(itemId, tagId):
3004
    tag = session.query(ItemTag).filter(ItemTag.itemId == itemId).filter(ItemTag.tagId == tagId).first()
3005
    if tag:
3006
        return tag
3007
    else:
3008
        return None
3009
 
3010
def get_all_item_tags_by_item_id(itemId):
3011
    tag_list = []
3012
    tag_list.append(session.query(ItemTag).filter(ItemTag.itemId == itemId).filter(ItemTag.status == True).first())
3013
    return tag_list
3014
 
3015
def add_update_item_tag(itemTag, makeStatusInactive):
3016
    if itemTag is None:
3017
        raise CatalogServiceException(109, "Item Tag not found")
3018
 
3019
    exist_tag = get_item_tag_for_item(itemTag.itemId, itemTag.tagId)
3020
    if makeStatusInactive :
3021
        for tag in get_active_tags_for_item(itemTag.itemId):
3022
            tag.status = False
3023
            session.commit()
3024
        return True
3025
    else:
3026
        if exist_tag:
3027
            exist_tag.startDate = to_py_date(itemTag.startDate)
3028
            if itemTag.endDate:
3029
                exist_tag.endDate = to_py_date(itemTag.endDate)
3030
            else:
3031
                exist_tag.endDate = None
3032
            exist_tag.status = True
3033
            session.commit()
3034
            return True
3035
        else:
3036
            tag = ItemTag()
3037
            tag.itemId = itemTag.itemId
3038
            tag.tagId = itemTag.tagId
3039
            tag.startDate = to_py_date(itemTag.startDate)
3040
            if itemTag.endDate:
3041
                tag.endDate = to_py_date(itemTag.endDate)
3042
            tag.status = True
3043
            session.commit()
3044
            return True    
3045
 
3046
    return False
3047
'''  
3048
 
12133 kshitij.so 3049
def get_all_snapdeal_marketplaceItem():
3050
    return session.query(SnapdealItem,MarketplaceItems,Item).join((MarketplaceItems,SnapdealItem.item_id==MarketplaceItems.itemId)).join((Item,SnapdealItem.item_id==Item.id)).filter(MarketplaceItems.source==OrderSource.SNAPDEAL).all()
3051
 
3052
def get_all_flipkart_marketplaceItem():
3053
    return session.query(FlipkartItem,MarketplaceItems,Item).join((MarketplaceItems,FlipkartItem.item_id==MarketplaceItems.itemId)).join((Item,FlipkartItem.item_id==Item.id)).filter(MarketplaceItems.source==OrderSource.FLIPKART).all()
3054
 
12243 kshitij.so 3055
def add_competitor_scraping(competitorScrapingMap):
12256 kshitij.so 3056
    cpr = __add_request_competitor_scraping(competitorScrapingMap.itervalues().next())
12243 kshitij.so 3057
    for competitorScraping in competitorScrapingMap.itervalues():
3058
        cp = CompetitorPricing()
3059
        cp.item_id = competitorScraping.item_id
3060
        cp.snapdealScraping = competitorScraping.isSnapdeal
3061
        cp.flipkartScraping = competitorScraping.isFlipkart
3062
        cp.amazonScraping = competitorScraping.isAmazon
12256 kshitij.so 3063
        cp.competitorPricing = cpr
12243 kshitij.so 3064
    session.commit()
12133 kshitij.so 3065
 
12256 kshitij.so 3066
def __add_request_competitor_scraping(data):
3067
    cpr = CompetitorPricingRequest()
3068
    cpr.requestId = data.uploadId
3069
    cpr.user = data.userEmail
3070
    return cpr
3071
 
3072
 
12243 kshitij.so 3073
def get_previous_competitor_scraping(delta):
3074
    result = []
12256 kshitij.so 3075
    items = session.query(func.count(CompetitorPricing.item_id),CompetitorPricing.competitorPricing_requestId,CompetitorPricingRequest.isProcessed,CompetitorPricingRequest.user).join((CompetitorPricingRequest,CompetitorPricingRequest.requestId==CompetitorPricing.competitorPricing_requestId)).group_by(CompetitorPricing.competitorPricing_requestId).order_by(desc(CompetitorPricing.competitorPricing_requestId)).limit(delta).all()
12243 kshitij.so 3076
    for item in items:
3077
        t_competitorPricing = TCompetitorPricing()
3078
        t_competitorPricing.item_id = item[0]
3079
        t_competitorPricing.uploadId = item[1]
3080
        t_competitorPricing.processed = item[2]
12256 kshitij.so 3081
        t_competitorPricing.userEmail = item[3]
12243 kshitij.so 3082
        result.append(t_competitorPricing)
3083
    return result
12256 kshitij.so 3084
 
3085
def get_upload_result_by_id(uploadId):
3086
    return session.query(CompetitorPricing,Item).join((Item,CompetitorPricing.item_id==Item.id)).filter(CompetitorPricing.competitorPricing_requestId==uploadId).all()
12363 kshitij.so 3087
 
3088
def add_amazon_promotion(amazonPromotions):
12947 kshitij.so 3089
    notAdded = []
12363 kshitij.so 3090
    for sku, amazonPromotion in amazonPromotions.iteritems():
12947 kshitij.so 3091
        amazonSku = sku.strip().upper()
3092
        if amazonSku.startswith('FBA'):
3093
            stateId = 1
3094
        elif amazonSku.startswith('FBB'):
3095
            stateId = 2
3096
        elif amazonSku.startswith('FBG'):
3097
            stateId = 3
15702 kshitij.so 3098
        elif amazonSku.startswith('FBD'):
3099
            stateId = 0
12947 kshitij.so 3100
        else:
3101
            notAdded.append(amazonSku)
3102
            continue
3103
        amazonItem = get_amazon_item_details(int(amazonSku[3:]))
3104
        if amazonItem[0] is None:
3105
            notAdded.append(amazonSku)
3106
            continue
12363 kshitij.so 3107
        d_amazonPromotion = AmazonPromotion()
12947 kshitij.so 3108
        d_amazonPromotion.sku = amazonSku
12363 kshitij.so 3109
        d_amazonPromotion.standardPrice = amazonPromotion.standardPrice
3110
        d_amazonPromotion.salePrice = amazonPromotion.salePrice
12464 kshitij.so 3111
        d_amazonPromotion.subsidy = amazonPromotion.subsidyAmount
12363 kshitij.so 3112
        d_amazonPromotion.startDate = to_py_date(amazonPromotion.startDate)
3113
        d_amazonPromotion.endDate = to_py_date(amazonPromotion.endDate)
12663 kshitij.so 3114
        d_amazonPromotion.addedOn = to_py_date(amazonPromotion.addedOn)
3115
        d_amazonPromotion.promotionActive = False
12363 kshitij.so 3116
        d_amazonPromotion.promotionType = amazonPromotion.promotionType
12947 kshitij.so 3117
        d_amazonPromotion.stateId = stateId
12663 kshitij.so 3118
        if d_amazonPromotion.promotionType == AmazonPromotionType._NAMES_TO_VALUES.get('LONGTERM'):
3119
            if d_amazonPromotion.stateId == 1:
3120
                amazonItem[0].fbaPromoPrice =  amazonPromotion.salePrice
3121
                amazonItem[0].fbaPromoStartDate = to_py_date(amazonPromotion.startDate)
3122
                amazonItem[0].fbaPromoEndDate =  to_py_date(amazonPromotion.endDate)
3123
                amazonItem[0].fbaPromoActive = False
12888 kshitij.so 3124
            elif d_amazonPromotion.stateId == 2:
12663 kshitij.so 3125
                amazonItem[0].fbbPromoPrice =  amazonPromotion.salePrice
3126
                amazonItem[0].fbbPromoStartDate = to_py_date(amazonPromotion.startDate)
3127
                amazonItem[0].fbbPromoEndDate =  to_py_date(amazonPromotion.endDate)
3128
                amazonItem[0].fbbPromoActive = False
15702 kshitij.so 3129
            elif d_amazonPromotion.stateId == 3:
12888 kshitij.so 3130
                amazonItem[0].fbgPromoPrice =  amazonPromotion.salePrice
3131
                amazonItem[0].fbgPromoStartDate = to_py_date(amazonPromotion.startDate)
3132
                amazonItem[0].fbgPromoEndDate =  to_py_date(amazonPromotion.endDate)
3133
                amazonItem[0].fbgPromoActive = False
15702 kshitij.so 3134
            else:
3135
                amazonItem[0].fbdPromoPrice =  amazonPromotion.salePrice
3136
                amazonItem[0].fbdPromoStartDate = to_py_date(amazonPromotion.startDate)
3137
                amazonItem[0].fbdPromoEndDate =  to_py_date(amazonPromotion.endDate)
3138
                amazonItem[0].fbdPromoActive = False
12663 kshitij.so 3139
        else:
3140
            d_amazonPromotion.promotionActive = True
12363 kshitij.so 3141
    session.commit()
12947 kshitij.so 3142
    return notAdded
12363 kshitij.so 3143
 
3144
 
12567 amit.gupta 3145
def get_vat_rates(itemId, categoryId):
3146
    vatRates = {}
3147
    item = get_item(itemId)
3148
    for stateinfo in fetchStateMaster().values():
3149
        price = item.sellingPrice
3150
        if VatType.MRP == stateinfo.vatType:
3151
            price = item.mrp
3152
        vatRates[stateinfo.id] = get_vat_percentage_for_item_category(itemId, stateinfo.id, price, categoryId)
3153
    return vatRates
3154
 
3155
def update_item_state_vat(itemId, stateVat):
3156
    for k,v in stateVat.iteritems():
3157
        itemVat = ItemVatMaster.query.filter(and_(ItemVatMaster.itemId==itemId, ItemVatMaster.stateId==k)).first()
3158
        if itemVat:
3159
            itemVat.vatPercentage = v
3160
        else:
3161
            itemVat = ItemVatMaster()
3162
            itemVat.itemId = itemId
3163
            itemVat.stateId = k
3164
            itemVat.vatPercentage = v
3165
    session.commit()
3166
    return True
3167
 
3168
def mark_partially_active(itemId, categoryId):
3169
    item = get_item(itemId)
3170
    item.category = categoryId
3171
    item.status = 8
3172
    item.status_description = 'Partially Active'
3173
    session.commit()
3174
    return True
3175
 
12363 kshitij.so 3176
def get_amazon_promotion(startDate,endDate):
3177
    return AmazonPromotion.query.filter(AmazonPromotion.startDate>=(to_py_date(startDate))).filter(AmazonPromotion.endDate<=(to_py_date(endDate))).all()
3178
 
3179
def update_amazon_promotion(amazonPromotions):
3180
    for amazonPromotion in amazonPromotions:
12666 kshitij.so 3181
        amp = AmazonPromotion.get_by(sku=amazonPromotion.sku,addedOn=to_py_date(amazonPromotion.addedOn), promotionType = amazonPromotion.promotionType )
12663 kshitij.so 3182
        amp.promotionActive = True
3183
        amp.updatedOnMarketplace = datetime.datetime.now()
12670 kshitij.so 3184
        if amp.promotionType == 1:
12663 kshitij.so 3185
            amazonItem = get_amazon_item_details(int(amp.sku[3:]))
3186
            if amp.stateId == 1:
12670 kshitij.so 3187
                amazonItem[0].fbaPromotionActive = True
12888 kshitij.so 3188
            elif amp.stateId == 2:
3189
                amazonItem[0].fbbPromotionActive = True
15702 kshitij.so 3190
            elif amp.stateId == 3:
3191
                amazonItem[0].fbgPromotionActive = True
12663 kshitij.so 3192
            else:
15702 kshitij.so 3193
                amazonItem[0].fbdPromotionActive = True
12363 kshitij.so 3194
    session.commit()
12668 kshitij.so 3195
    return True
12363 kshitij.so 3196
 
13136 amit.gupta 3197
def check_services(map_lines):
3198
    for key in map_lines.keys():
3199
        line = map_lines[key]
3200
        if line['insurer'] > 0 :
3201
                insurerId = get_preffered_insurer_for_item(key,InsurerType.DEVICE)
3202
                line['insurer'] = insurerId
3203
                line['insureramount'] = get_insurance_amount(key, line['amount'], insurerId, line['quantity'])
3204
        if line['dpinsurer'] > 0:
3205
                insurerId = get_preffered_insurer_for_item(key,InsurerType.DATA)
3206
                line['dpinsurer'] = insurerId
3207
                line['dpinsureramount'] = get_insurance_amount(key, line['amount'], insurerId, line['quantity'])
3208
    return map_lines
3209
 
12363 kshitij.so 3210
def __get_amazon_promotion_attributes_for_item(item_id):
3211
    timestamp = datetime.datetime.now()
12665 kshitij.so 3212
    fbaPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBA'+str(item_id)).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).filter(AmazonPromotion.updatedOnMarketplace>to_py_date(0)).order_by(desc(AmazonPromotion.updatedOnMarketplace)).limit(1).all()
3213
    fbbPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBB'+str(item_id)).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).filter(AmazonPromotion.updatedOnMarketplace>to_py_date(0)).order_by(desc(AmazonPromotion.updatedOnMarketplace)).limit(1).all()
12888 kshitij.so 3214
    fbgPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBG'+str(item_id)).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).filter(AmazonPromotion.updatedOnMarketplace>to_py_date(0)).order_by(desc(AmazonPromotion.updatedOnMarketplace)).limit(1).all()
15702 kshitij.so 3215
    fbdPromo = AmazonPromotion.query.filter(AmazonPromotion.sku=='FBD'+str(item_id)).filter(AmazonPromotion.startDate<=timestamp).filter(AmazonPromotion.endDate>=timestamp).filter(AmazonPromotion.updatedOnMarketplace>to_py_date(0)).order_by(desc(AmazonPromotion.updatedOnMarketplace)).limit(1).all()
3216
    return fbaPromo, fbbPromo, fbgPromo, fbdPromo
12665 kshitij.so 3217
 
3218
def get_ex_affiliate_item_info():
3219
        query = session.query(ExclusiveAffiliateItemInfo, OutboundAffiliateMaster.name).join((OutboundAffiliateMaster, ExclusiveAffiliateItemInfo.affiliateId==OutboundAffiliateMaster.id)).filter(ExclusiveAffiliateItemInfo.isActive == True).all()
3220
        close_session()
3221
        map = {}
3222
        for q in query:
3223
            map[q[0].itemId]=to_t_exclusive_affiliate_item_info(q) 
12888 kshitij.so 3224
        return map
3225
 
3226
def get_all_items_to_list_on_fbg():
3227
    return Amazonlisted.query.filter(Amazonlisted.isFbg==False).filter(or_(Amazonlisted.fbgtaxCode!=None,Amazonlisted.fbgtaxCode!="")).all()
3228
 
3229
def get_all_fbg_listed_items():
3230
    return Amazonlisted.query.filter(Amazonlisted.isFbg==True).all()
13709 manish.sha 3231
 
3232
def add_hs_item(hsItems):
3233
    for hsItem in hsItems:
3234
        hs_item = HsItem.get_by(hsItemId = hsItem.hsItemId)
3235
        if hs_item is None:
3236
            hs_item = HsItem()
3237
        hs_item.addedBy = hsItem.addedBy
3238
        hs_item.addedTimestamp = to_py_date(hsItem.addedTimestamp)
3239
        hs_item.defaultWarehouseId = hsItem.defaultWarehouseId
3240
        hs_item.hsItemId = hsItem.hsItemId
3241
        hs_item.hsProductId = hsItem.hsProductId
3242
        hs_item.itemId = hsItem.itemId
3243
        hs_item.listingPrice = hsItem.listingPrice
3244
    session.commit()
3245
 
3246
def update_hs_item(hsItem):
3247
    hs_item = HsItem.get_by(hsItemId = hsItem.hsItemId)
3248
    hs_item.addedBy = hsItem.addedBy
3249
    hs_item.addedTimestamp = to_py_date(hsItem.addedTimestamp)
3250
    hs_item.defaultWarehouseId = hsItem.defaultWarehouseId
3251
    hs_item.itemId = hsItem.itemId
3252
    hs_item.listingPrice = hsItem.listingPrice
3253
    session.commit()
3254
 
3255
def get_hs_item(hs_ItemId):
3256
    hsItem = HsItem.get_by(hsItemId = hs_ItemId)
14182 kshitij.so 3257
    return hsItem
3258
 
3259
def get_pricing_for_dtr(catalogItemId):
3260
    d_item = None
18719 kshitij.so 3261
    bulkPricingMap = {}
14182 kshitij.so 3262
    now = datetime.datetime.now()
3263
    items = Item.query.filter(Item.catalog_item_id == catalogItemId).all()
3264
    if items:
3265
        for item in items:
3266
            if item.status !=3 :
3267
                continue
3268
            pvt_deal_item = get_private_deal_details(item.id)
3269
            if pvt_deal_item is not None and pvt_deal_item.isActive ==1 and pvt_deal_item.startDate < now and pvt_deal_item.endDate > now:
3270
                item.sellingPrice = pvt_deal_item.dealPrice
3271
                d_item = item
3272
                break
3273
            else:
3274
                d_item = item
18719 kshitij.so 3275
    if d_item is not None:
3276
        bulkPricingList = get_bulk_pricing_by_item_id(d_item.id)
3277
        for bulkPricing in bulkPricingList:
3278
            bulkPricingMap[bulkPricing.quantity] = bulkPricing.price
3279
 
3280
    return d_item, bulkPricingMap
15702 kshitij.so 3281
 
3282
def get_all_items_to_list_on_fbd():
3283
    return Amazonlisted.query.filter(Amazonlisted.isFbd==False).filter(or_(Amazonlisted.fbdtaxCode!=None,Amazonlisted.fbdtaxCode!="")).all()
3284
 
3285
def get_all_fbd_listed_items():
3286
    return Amazonlisted.query.filter(Amazonlisted.isFbd==True).all()
3287
 
18150 kshitij.so 3288
def get_bulk_pricing_for_items(itemIds):
3289
    itemMap = {}
18450 kshitij.so 3290
    if len(itemIds) ==0:
3291
        items = BulkItemPricing.query.all()
3292
    else:
3293
        items = BulkItemPricing.query.filter(BulkItemPricing.item_id.in_(itemIds)).all()
18150 kshitij.so 3294
    for item in items:
3295
        if not itemMap.has_key(item.item_id):
3296
            itemMap[item.item_id] = [to_t_bulk_pricing(item)]
3297
        else:
3298
            (itemMap.get(item.item_id)).append(to_t_bulk_pricing(item))
3299
    return itemMap
3300
 
3301
def add_bulk_pricing_for_item(bulkItemPricing):
3302
    exist = BulkItemPricing.query.filter(BulkItemPricing.item_id==bulkItemPricing.item_id).filter(BulkItemPricing.quantity==bulkItemPricing.quantity).all()
3303
    if len(exist) > 0:
3304
        raise
3305
    d_BulkItemPricing = BulkItemPricing()
3306
    d_BulkItemPricing.item_id = bulkItemPricing.item_id
3307
    d_BulkItemPricing.quantity = bulkItemPricing.quantity
3308
    d_BulkItemPricing.price = bulkItemPricing.price
3309
    session.commit()
3310
    return d_BulkItemPricing
3311
 
3312
def get_bulk_pricing_by_item_id(itemId):
18719 kshitij.so 3313
    bulkPricingItems = BulkItemPricing.query.filter(BulkItemPricing.item_id==itemId).order_by(asc(BulkItemPricing.quantity)).all()
18150 kshitij.so 3314
    return bulkPricingItems
3315
 
3316
def delete_bulk_pricing_for_item_by_id(id):
3317
    bulkPricingItems = BulkItemPricing.query.filter(BulkItemPricing.id==id).all()
3318
    if len(bulkPricingItems) > 0:
3319
        bulkPricingItems[0].delete()
3320
        session.commit()
3321
        return True
3322
    else:
3323
        return False
3324
 
3325
def delete_bulk_pricing_for_item(itemId):
3326
    session.query(BulkItemPricing).filter_by(item_id=itemId).delete()
3327
    session.commit()
3328
    return True
3329
 
18450 kshitij.so 3330
def update_bulk_prices_on_production(itemId, bulkItemPricingList):
3331
    session.query(BulkItemPricing).filter_by(item_id=itemId).delete()
3332
    session.commit()
3333
    for bulkItem in bulkItemPricingList:
3334
        d_bulkItem = BulkItemPricing()
3335
        d_bulkItem.id = bulkItem.id
3336
        d_bulkItem.price = bulkItem.price
3337
        d_bulkItem.quantity = bulkItem.quantity
3338
        d_bulkItem.item_id = bulkItem.item_id
18595 kshitij.so 3339
    session.commit()
18764 kshitij.so 3340
    return True
18450 kshitij.so 3341
 
18764 kshitij.so 3342
def get_cart_by_value(cartIds):
3343
    itemList = []
3344
    uc = UserClient().get_client()
3345
    returnMap = uc.getCartByValue(cartIds)
3346
    cartMap = {}
3347
    for lines in returnMap.itervalues():
3348
        for line in lines:
3349
            if not line.itemId in itemList:
3350
                itemList.append(line.itemId)
3351
    items = session.query(Category.parent_category_id,Item.id).join((Item,Category.id==Item.category)).filter(Item.id.in_(itemList)).all()
3352
    for item in items:
18814 kshitij.so 3353
        if item[0] in (10001, 10009, 10049, 11001):
3354
            try:
3355
                itemList.remove(item[1])
3356
            except:
3357
                pass
18764 kshitij.so 3358
    for cart_id, lines in returnMap.iteritems():
3359
        actual_price = 0
3360
        for line in lines:
3361
            if line.itemId in itemList:
18813 kshitij.so 3362
                actual_price = actual_price + line.quantity*line.actualPrice
18764 kshitij.so 3363
        cartMap[cart_id] = actual_price
18815 kshitij.so 3364
    sorted_x = sorted(cartMap.items(), key=operator.itemgetter(1),reverse=True)
18765 kshitij.so 3365
    return [cart_id[0] for cart_id in sorted_x]
18764 kshitij.so 3366
 
15702 kshitij.so 3367
if __name__=='__main__':
3368
    DataService.initialize()
18450 kshitij.so 3369
    #update_bulk_prices_on_production(21053,[])
18765 kshitij.so 3370
    print get_cart_by_value([1005394,46868158])
18150 kshitij.so 3371