Subversion Repositories SmartDukaan

Rev

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

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