Subversion Repositories SmartDukaan

Rev

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