Subversion Repositories SmartDukaan

Rev

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