Subversion Repositories SmartDukaan

Rev

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