Subversion Repositories SmartDukaan

Rev

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