Subversion Repositories SmartDukaan

Rev

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