Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
11193 kshitij.so 1
from elixir import *
2
from sqlalchemy.sql import or_ ,func, asc
3
from shop2020.config.client.ConfigClient import ConfigClient
4
from shop2020.model.v1.catalog.impl import DataService
5
from shop2020.model.v1.catalog.script import FlipkartScraper
6
from shop2020.model.v1.catalog.impl.DataService import FlipkartItem, MarketplaceItems, Item, \
7
Category, SourcePercentageMaster, MarketPlaceHistory, MarketPlaceUpdateHistory, MarketPlaceItemPrice, \
12133 kshitij.so 8
SourceCategoryPercentage, SourceItemPercentage, SourceReturnPercentage
11193 kshitij.so 9
from shop2020.thriftpy.model.v1.order.ttypes import OrderSource
10
from shop2020.thriftpy.model.v1.catalog.ttypes import CompetitionCategory, CompetitionBasis, SalesPotential,\
11
Decision, RunType
12
from shop2020.clients.CatalogClient import CatalogClient
13
from shop2020.clients.InventoryClient import InventoryClient
14
import urllib2
15
import requests
16
import time
17
from datetime import date, datetime, timedelta
18
from shop2020.utils import EmailAttachmentSender
19
from shop2020.utils.EmailAttachmentSender import get_attachment_part
20
import math
21
from operator import itemgetter
11560 kshitij.so 22
from functools import partial
11193 kshitij.so 23
import simplejson as json
24
import xlwt
25
import optparse
26
import sys
27
import smtplib
11560 kshitij.so 28
import threading
29
from multiprocessing import Process 
11193 kshitij.so 30
from email.mime.text import MIMEText
31
import email
32
from email.mime.multipart import MIMEMultipart
33
import email.encoders
34
import cookielib
11561 kshitij.so 35
from multiprocessing import Pool
36
from multiprocessing.dummy import Pool as ThreadPool 
11193 kshitij.so 37
 
38
config_client = ConfigClient()
39
host = config_client.get_property('staging_hostname')
40
syncPrice=config_client.get_property('sync_price_on_marketplace')
41
 
42
 
43
DataService.initialize(db_hostname=host)
44
 
45
inventoryMap = {}
46
itemSaleMap = {}
11562 kshitij.so 47
scraper = FlipkartScraper.FlipkartScraper()
11615 kshitij.so 48
categoryMap = {}
11193 kshitij.so 49
 
50
class __FlipkartDetails:
51
 
52
    def __init__(self,rank ,ourSp , secondLowestSellerSp, prefSellerSp, lowestSellerSp, lowestSellerScore, prefSellerScore, secondLowestSellerScore, ourScore, shippingTimeLowerLimitLowestSeller,shippingTimeUpperLimitLowestSeller, \
53
    shippingTimeLowerLimitPrefSeller, shippingTimeUpperLimitPrefSeller, shippingTimeLowerLimitOur, shippingTimeUpperLimitOur, shippingTimeLowerLimitSecondLowestSeller, shippingTimeUpperLimitSecondLowestSeller, totalAvailableSeller, lowestSellerName, lowestSellerCode, secondLowestSellerName, secondLowestSellerCode, prefSellerName, prefSellerCode, lowestSellerBuyTrend, \
54
    ourBuyTrend, prefSellerBuyTrend, secondLowestSellerBuyTrend, ourCode ):
55
 
56
        self.rank = rank
57
        self.ourSp = ourSp
58
        self.secondLowestSellerSp = secondLowestSellerSp
59
        self.prefSellerSp = prefSellerSp
60
        self.lowestSellerSp = lowestSellerSp
61
        self.lowestSellerScore = lowestSellerScore
62
        self.prefSellerScore = prefSellerScore
63
        self.secondLowestSellerScore = secondLowestSellerScore
64
        self.ourScore = ourScore
65
        self.shippingTimeLowerLimitLowestSeller = shippingTimeLowerLimitLowestSeller
66
        self.shippingTimeUpperLimitLowestSeller = shippingTimeUpperLimitLowestSeller
67
        self.shippingTimeLowerLimitPrefSeller = shippingTimeLowerLimitPrefSeller
68
        self.shippingTimeUpperLimitPrefSeller = shippingTimeUpperLimitPrefSeller
69
        self.shippingTimeLowerLimitOur = shippingTimeLowerLimitOur
70
        self.shippingTimeUpperLimitOur = shippingTimeUpperLimitOur
71
        self.shippingTimeLowerLimitSecondLowestSeller = shippingTimeLowerLimitSecondLowestSeller
72
        self.shippingTimeUpperLimitSecondLowestSeller = shippingTimeUpperLimitSecondLowestSeller
73
        self.totalAvailableSeller = totalAvailableSeller
74
        self.lowestSellerName = lowestSellerName
75
        self.lowestSellerCode = lowestSellerCode
76
        self.secondLowestSellerName = secondLowestSellerName
77
        self.secondLowestSellerCode = secondLowestSellerCode
78
        self.prefSellerName = prefSellerName
79
        self.prefSellerCode = prefSellerCode
80
        self.lowestSellerBuyTrend = lowestSellerBuyTrend
81
        self.ourBuyTrend = ourBuyTrend
82
        self.prefSellerBuyTrend = prefSellerBuyTrend
83
        self.secondLowestSellerBuyTrend = secondLowestSellerBuyTrend
84
        self.ourCode = ourCode
85
 
86
class __FlipkartItemInfo:
87
 
11581 kshitij.so 88
    def __init__(self, fkSerialNumber, nlc, courierCost, item_id, product_group, brand, model_name, model_number, color, weight, parent_category, risky, warehouseId, vatRate, runType, parent_category_name, sourcePercentage, ourFlipkartInventory, skuAtFlipkart, flipkartDetails, stateId):
11193 kshitij.so 89
 
90
        self.fkSerialNumber = fkSerialNumber
91
        self.nlc = nlc
92
        self.courierCost = courierCost
93
        self.item_id = item_id
94
        self.product_group = product_group
95
        self.brand = brand
96
        self.model_name = model_name
97
        self.model_number = model_number
98
        self.color = color
99
        self.weight = weight
100
        self.parent_category = parent_category
101
        self.risky = risky
102
        self.warehouseId = warehouseId
103
        self.vatRate = vatRate
104
        self.runType = runType
105
        self.parent_category_name = parent_category_name
106
        self.sourcePercentage = sourcePercentage
11560 kshitij.so 107
        self.ourFlipkartInventory = ourFlipkartInventory
11571 kshitij.so 108
        self.skuAtFlipkart = skuAtFlipkart
11581 kshitij.so 109
        self.flipkartDetails = flipkartDetails
110
        self.stateId = stateId  
11193 kshitij.so 111
 
112
class __FlipkartPricing:
113
 
114
    def __init__(self, ourSp, ourTp, lowestTp, lowestPossibleTp, secondLowestSellerTp, lowestPossibleSp, prefSellerTp):
115
        self.ourTp = ourTp
116
        self.lowestTp = lowestTp
117
        self.lowestPossibleTp = lowestPossibleTp
118
        self.ourSp = ourSp
119
        self.secondLowestSellerTp = secondLowestSellerTp
120
        self.lowestPossibleSp = lowestPossibleSp
121
        self.prefSellerTp = prefSellerTp
122
 
123
def markReasonForMpItem(mpHistory,reason,decision):
124
    mpHistory.decision = decision
125
    mpHistory.reason = reason
126
 
127
def fetchItemsForAutoDecrease(time):
128
    successfulAutoDecrease = []
129
    autoDecrementItems = session.query(MarketPlaceHistory).join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
11615 kshitij.so 130
    .filter(MarketPlaceHistory.timestamp==time).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(or_(MarketPlaceHistory.competitiveCategory==CompetitionCategory.COMPETITIVE,MarketPlaceHistory.competitiveCategory==CompetitionCategory.PREF_BUT_NOT_CHEAP ))\
11193 kshitij.so 131
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketplaceItems.autoDecrement==True).all()
132
    inventory_client = InventoryClient().get_client()
133
    global inventoryMap
134
    inventoryMap = inventory_client.getInventorySnapshot(0)
135
    for autoDecrementItem in autoDecrementItems:
11825 kshitij.so 136
#        if not autoDecrementItem.risky:
137
#            markReasonForMpItem(autoDecrementItem,'Item is not risky',Decision.AUTO_DECREMENT_FAILED)
138
#            continue
11193 kshitij.so 139
        if math.ceil(autoDecrementItem.proposedSellingPrice) >= autoDecrementItem.ourSellingPrice:
140
            markReasonForMpItem(autoDecrementItem,'Proposed SP greater than or equal to current SP',Decision.AUTO_DECREMENT_FAILED)
141
            continue
142
        if autoDecrementItem.proposedSellingPrice < autoDecrementItem.lowestPossibleSp:
143
            markReasonForMpItem(autoDecrementItem,'Proposed SP less than lowest possible SP',Decision.AUTO_DECREMENT_FAILED)
144
            continue
145
        totalAvailability, totalReserved = 0,0
146
        if (not inventoryMap.has_key(autoDecrementItem.item_id)):
147
            markReasonForMpItem(autoDecrementItem,'Inventory info not available',Decision.AUTO_DECREMENT_FAILED)
148
            continue
149
        itemInventory=inventoryMap[autoDecrementItem.item_id]
150
        availableMap  = itemInventory.availability
151
        reserveMap = itemInventory.reserved
152
        for warehouse,availability in availableMap.iteritems():
153
            if warehouse==16:
154
                continue
155
            totalAvailability = totalAvailability+availability
156
        for warehouse,reserve in reserveMap.iteritems():
157
            if warehouse==16:
158
                continue
159
            totalReserved = totalReserved+reserve
160
        if (totalAvailability-totalReserved)<=0:
161
            markReasonForMpItem(autoDecrementItem,'Net availability is 0',Decision.AUTO_DECREMENT_FAILED)
162
            continue
163
        avgSalePerDay = (itemSaleMap.get(autoDecrementItem.item_id))[2]
164
        try:
165
            daysOfStock = (float(totalAvailability-totalReserved))/avgSalePerDay
166
        except ZeroDivisionError,e:
167
            daysOfStock = float("inf")
11825 kshitij.so 168
        if daysOfStock<2 and autoDecrementItem.risky:
11193 kshitij.so 169
            markReasonForMpItem(autoDecrementItem,'Our stock is not enough',Decision.AUTO_DECREMENT_FAILED)
170
            continue
11615 kshitij.so 171
 
172
        if autoDecrementItem.competitiveCategory == CompetitionCategory.PREF_BUT_NOT_CHEAP:
173
            avgSaleLastTwoDay = (itemSaleMap.get(autoDecrementItem.item_id))[6]
174
            if avgSaleLastTwoDay >= 3:
175
                markReasonForMpItem(autoDecrementItem,'Last two day avg sale is greater than 2',Decision.AUTO_DECREMENT_FAILED)
176
                continue
11193 kshitij.so 177
 
178
        autoDecrementItem.ourEnoughStock = True
179
        autoDecrementItem.decision = Decision.AUTO_DECREMENT_SUCCESS
180
        autoDecrementItem.reason = 'All conditions for auto decrement true'
181
        successfulAutoDecrease.append(autoDecrementItem)
182
    session.commit()
183
    return successfulAutoDecrease
184
 
185
def fetchItemsForAutoIncrease(time):
186
    successfulAutoIncrease = []
187
    autoIncrementItems = session.query(MarketPlaceHistory).join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
188
    .filter(MarketPlaceHistory.timestamp==time).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.BUY_BOX)\
189
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketplaceItems.autoIncrement==True).all()
190
    for autoIncrementItem in autoIncrementItems:
191
        if not autoIncrementItem.competitiveCategory == CompetitionCategory.BUY_BOX:
192
            markReasonForMpItem(autoIncrementItem,'Category is '+CompetitionCategory._VALUES_TO_NAMES.get(autoIncrementItem.competitiveCategory),Decision.AUTO_INCREMENT_FAILED)
193
            continue
194
        if autoIncrementItem.totalSeller==1 and autoIncrementItem.ourRank==1:
195
            markReasonForMpItem(autoIncrementItem,'We are the only seller',Decision.AUTO_INCREMENT_FAILED)
196
            continue
197
        if autoIncrementItem.proposedSellingPrice <= autoIncrementItem.ourSellingPrice:
198
            markReasonForMpItem(autoIncrementItem,'Proposed SP less than current SP',Decision.AUTO_INCREMENT_FAILED)
199
            continue
200
        if autoIncrementItem.proposedSellingPrice >=10000 and autoIncrementItem.ourSellingPrice<10000:
201
            markReasonForMpItem(autoIncrementItem,'Proposed SP is greater than 10,000 and current sp is less than 10,000',Decision.AUTO_INCREMENT_FAILED)
202
            continue
203
        if getLastDaySale(autoIncrementItem.item_id)<=2:
204
            markReasonForMpItem(autoIncrementItem,'Last day sale is less than 3',Decision.AUTO_INCREMENT_FAILED)
205
            continue
206
        antecedentPrice = session.query(MarketPlaceHistory.ourSellingPrice).filter(MarketPlaceHistory.item_id==autoIncrementItem.item_id).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.timestamp>time-timedelta(days=1)).order_by(asc(MarketPlaceHistory.timestamp)).first()
207
        if antecedentPrice is not None:
208
            if float(math.ceil(autoIncrementItem.ourSellingPrice+max(10,.01*autoIncrementItem.ourSellingPrice))-math.ceil(antecedentPrice[0]+max(10,.01*antecedentPrice[0])))/math.ceil(antecedentPrice[0]+max(10,.01*antecedentPrice[0]))>.02:
209
                markReasonForMpItem(autoIncrementItem,'Maximum price increase in last 24 hours should be 2%',Decision.AUTO_INCREMENT_FAILED)
210
                continue
211
        mpItem = MarketplaceItems.get_by(itemId=autoIncrementItem.item_id,source=OrderSource.FLIPKART)
212
        if mpItem.maximumSellingPrice is not None and mpItem.maximumSellingPrice > 0:
213
            if autoIncrementItem.ourSellingPrice+max(10,.01*autoIncrementItem.ourSellingPrice) > mpItem.maximumSellingPrice:
214
                markReasonForMpItem(autoIncrementItem,'Price cannot exceed Maximum Selling Price',Decision.AUTO_INCREMENT_FAILED)
215
                continue
216
        #oosStatus = inventory_client.getOosStatusesForXDaysForItem(autoIncrementItem.item_id,0,3)
217
        #count,sale,daysOfStock = 0,0,0
218
        #for obj in oosStatus:
219
        #    if not obj.is_oos:
220
        #        count+=1
221
        #        sale = sale+obj.num_orders
222
        #avgSalePerDay=0 if count==0 else (float(sale)/count)
223
        totalAvailability, totalReserved = 0,0
224
        if (not inventoryMap.has_key(autoIncrementItem.item_id)):
225
            markReasonForMpItem(autoIncrementItem,'Inventory info not available',Decision.AUTO_INCREMENT_FAILED)
226
            continue
227
        itemInventory=inventoryMap[autoIncrementItem.item_id]
228
        availableMap  = itemInventory.availability
229
        reserveMap = itemInventory.reserved
230
        for warehouse,availability in availableMap.iteritems():
231
            if warehouse==16:
232
                continue
233
            totalAvailability = totalAvailability+availability
234
        for warehouse,reserve in reserveMap.iteritems():
235
            if warehouse==16:
236
                continue
237
            totalReserved = totalReserved+reserve
238
        #if (totalAvailability-totalReserved)<=0:
239
        #    markReasonForMpItem(autoIncrementItem,'Our stock is 0',Decision.AUTO_INCREMENT_FAILED)
240
        #    continue
241
        avgSalePerDay = (itemSaleMap.get(autoIncrementItem.item_id))[2]
242
        if (avgSalePerDay==0):
243
            markReasonForMpItem(autoIncrementItem,'Average sale per day is zero',Decision.AUTO_INCREMENT_FAILED)
244
            continue
245
        daysOfStock = (float(totalAvailability-totalReserved))/avgSalePerDay
246
        if daysOfStock>5:
247
            markReasonForMpItem(autoIncrementItem,'Our stock is enough',Decision.AUTO_INCREMENT_FAILED)
248
            continue
249
 
250
        autoIncrementItem.ourEnoughStock = False
251
        autoIncrementItem.decision = Decision.AUTO_INCREMENT_SUCCESS
252
        autoIncrementItem.reason = 'All conditions for auto increment true'
253
        successfulAutoIncrease.append(autoIncrementItem)
254
    session.commit()
255
    return successfulAutoIncrease        
256
 
257
 
258
def commitExceptionList(exceptionList,timestamp):
259
    exceptionItems=[]
260
    for item in exceptionList:
261
        mpHistory = MarketPlaceHistory()
262
        mpHistory.item_id =item.item_id
263
        mpHistory.source = OrderSource.FLIPKART 
264
        mpHistory.competitiveCategory = CompetitionCategory.EXCEPTION
265
        mpHistory.risky = item.risky
266
        mpHistory.timestamp = timestamp
267
        mpHistory.run = RunType._NAMES_TO_VALUES.get(item.runType)
268
        exceptionItems.append(mpHistory)
269
    session.commit()
270
    return exceptionItems
271
 
272
def commitCantCompete(cantCompete,timestamp):
273
    for item in cantCompete:
274
        flipkartDetails = item[0]
275
        flipkartItemInfo = item[1]
276
        flipkartPricing = item[2]
277
        mpItem = item[3]
278
        mpHistory = MarketPlaceHistory()
279
        mpHistory.item_id = flipkartItemInfo.item_id
280
        mpHistory.source = OrderSource.FLIPKART
281
        mpHistory.lowestTp = flipkartPricing.lowestTp
282
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
283
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
284
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
285
        mpHistory.ourRank = flipkartDetails.rank
286
        mpHistory.competitiveCategory = CompetitionCategory.CANT_COMPETE
287
        mpHistory.risky = flipkartItemInfo.risky
288
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
289
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
290
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
291
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
292
        mpHistory.lowestSellerShippingTime = ''
293
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
294
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
295
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
296
        mpHistory.ourTp = flipkartPricing.ourTp
297
        mpHistory.ourNlc = flipkartItemInfo.nlc
298
        mpHistory.ourRating = flipkartDetails.ourScore
299
        mpHistory.ourShippingTime = ''
300
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
301
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
302
        mpHistory.prefferedSellerName = flipkartDetails.prefSellerName
303
        mpHistory.prefferedSellerCode = flipkartDetails.prefSellerCode
304
        mpHistory.prefferedSellerRating = flipkartDetails.prefSellerScore
305
        mpHistory.prefferedSellerSellingPrice = flipkartDetails.prefSellerSp
306
        mpHistory.prefferedSellerTp = flipkartPricing.prefSellerTp
307
        mpHistory.prefferedSellerShippingTime = ''
308
        mpHistory.prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
309
        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
310
        proposed_sp = flipkartDetails.lowestSellerSp - max(10, flipkartDetails.lowestSellerSp*0.001)
311
        proposed_tp = getTargetTp(proposed_sp,mpItem)
312
        target_nlc = proposed_tp - flipkartPricing.lowestPossibleTp + flipkartItemInfo.nlc
313
        mpHistory.proposedSellingPrice = round(proposed_sp,2)
314
        mpHistory.proposedTp = round(proposed_tp,2)
315
        mpHistory.targetNlc = round(target_nlc,2)
316
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
317
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
318
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
319
        mpHistory.salesPotential = SalesPotential._NAMES_TO_VALUES.get(getSalesPotential(flipkartDetails.lowestSellerSp,flipkartItemInfo.nlc))
320
        mpHistory.timestamp = timestamp
321
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
322
    session.commit()
323
 
324
def commitBuyBox(buyBoxItems,timestamp):
325
    for item in buyBoxItems:
326
        flipkartDetails = item[0]
327
        flipkartItemInfo = item[1]
328
        flipkartPricing = item[2]
329
        mpItem = item[3]
330
        mpHistory = MarketPlaceHistory()
331
        mpHistory.item_id = flipkartItemInfo.item_id
332
        mpHistory.source = OrderSource.FLIPKART
333
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
334
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
335
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
336
        mpHistory.ourRank = flipkartDetails.rank
337
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
338
        mpHistory.ourTp = flipkartPricing.ourTp
339
        mpHistory.ourNlc = flipkartItemInfo.nlc
340
        mpHistory.ourRating = flipkartDetails.ourScore
341
        mpHistory.ourShippingTime = ''
342
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
343
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
344
        mpHistory.competitiveCategory = CompetitionCategory.BUY_BOX
345
        mpHistory.risky = flipkartItemInfo.risky
346
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
347
        mpHistory.lowestTp = flipkartPricing.lowestTp
348
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
349
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
350
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
351
        mpHistory.lowestSellerShippingTime = ''
352
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
353
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
354
        proposed_sp = max(flipkartDetails.secondLowestSellerSp - max((20, flipkartDetails.secondLowestSellerSp*0.002)), flipkartPricing.lowestPossibleSp)
355
        proposed_tp = getTargetTp(proposed_sp,mpItem)
356
        #target_nlc = proposed_tp - flipkartPricing.lowestPossibleTp + flipkartItemInfo.nlc
357
        mpHistory.proposedSellingPrice = round(proposed_sp,2)
358
        mpHistory.proposedTp = round(proposed_tp,2)
359
        #mpHistory.targetNlc = target_nlc
360
        mpHistory.secondLowestSellerName = flipkartDetails.secondLowestSellerName
361
        mpHistory.secondLowestSellerCode = flipkartDetails.secondLowestSellerCode
362
        mpHistory.secondLowestSellingPrice = flipkartDetails.secondLowestSellerSp
363
        mpHistory.secondLowestTp = flipkartPricing.secondLowestSellerTp
364
        mpHistory.secondLowestSellerRating = flipkartDetails.secondLowestSellerScore
365
        mpHistory.secondLowestSellerShippingTime = ''
366
        mpHistory.secondLowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitSecondLowestSeller) if flipkartDetails.shippingTimeUpperLimitSecondLowestSeller==0\
367
        else str(flipkartDetails.shippingTimeLowerLimitSecondLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitSecondLowestSeller)
368
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
369
        mpHistory.marginIncreasedPotential = proposed_tp - flipkartPricing.ourTp
370
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
371
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
372
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
373
        mpHistory.timestamp = timestamp
374
    session.commit()
375
 
376
def commitCompetitiveNoInventory(competitiveNoInventory,timestamp):
377
    for item in competitiveNoInventory:
378
        flipkartDetails = item[0]
379
        flipkartItemInfo = item[1]
380
        flipkartPricing = item[2]
381
        mpItem = item[3]
382
        mpHistory = MarketPlaceHistory()
383
        mpHistory.item_id = flipkartItemInfo.item_id
384
        mpHistory.source = OrderSource.FLIPKART
385
        mpHistory.lowestTp = flipkartPricing.lowestTp
386
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
387
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
388
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
389
        mpHistory.ourRank = flipkartDetails.rank
390
        mpHistory.competitiveCategory = CompetitionCategory.COMPETITIVE_NO_INVENTORY
391
        mpHistory.risky = flipkartItemInfo.risky
392
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
393
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
394
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
395
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
396
        mpHistory.lowestSellerShippingTime = ''
397
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
398
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
399
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
400
        mpHistory.ourTp = flipkartPricing.ourTp
401
        mpHistory.ourNlc = flipkartItemInfo.nlc
402
        mpHistory.ourRating = flipkartDetails.ourScore
403
        mpHistory.ourShippingTime = ''
404
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
405
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
406
        mpHistory.prefferedSellerName = flipkartDetails.prefSellerName
407
        mpHistory.prefferedSellerCode = flipkartDetails.prefSellerCode
408
        mpHistory.prefferedSellerRating = flipkartDetails.prefSellerScore
409
        mpHistory.prefferedSellerSellingPrice = flipkartDetails.prefSellerSp
410
        mpHistory.prefferedSellerTp = flipkartPricing.prefSellerTp
411
        mpHistory.prefferedSellerShippingTime = ''
412
        mpHistory.prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
413
        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
414
        proposed_sp = max(flipkartDetails.lowestSellerSp - max((10, flipkartDetails.lowestSellerSp*0.001)), flipkartPricing.lowestPossibleSp)
415
        proposed_tp = getTargetTp(proposed_sp,mpItem)
416
        mpHistory.proposedSellingPrice = round(proposed_sp,2)
417
        mpHistory.proposedTp = round(proposed_tp,2)
418
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
419
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
420
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
421
        mpHistory.salesPotential = SalesPotential._NAMES_TO_VALUES.get(getSalesPotential(flipkartDetails.lowestSellerSp,flipkartItemInfo.nlc))
422
        mpHistory.timestamp = timestamp
423
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
424
    session.commit()
425
 
426
def commitCompetitive(competitive,timestamp):
427
    for item in competitive:
428
        flipkartDetails = item[0]
429
        flipkartItemInfo = item[1]
430
        flipkartPricing = item[2]
431
        mpItem = item[3]
432
        mpHistory = MarketPlaceHistory()
433
        mpHistory.item_id = flipkartItemInfo.item_id
434
        mpHistory.source = OrderSource.FLIPKART
435
        mpHistory.lowestTp = flipkartPricing.lowestTp
436
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
437
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
438
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
439
        mpHistory.ourRank = flipkartDetails.rank
440
        mpHistory.competitiveCategory = CompetitionCategory.COMPETITIVE
441
        mpHistory.risky = flipkartItemInfo.risky
442
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
443
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
444
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
445
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
446
        mpHistory.lowestSellerShippingTime = ''
447
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
448
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
449
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
450
        mpHistory.ourTp = flipkartPricing.ourTp
451
        mpHistory.ourNlc = flipkartItemInfo.nlc
452
        mpHistory.ourRating = flipkartDetails.ourScore
453
        mpHistory.ourShippingTime = ''
454
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
455
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
456
        mpHistory.prefferedSellerName = flipkartDetails.prefSellerName
457
        mpHistory.prefferedSellerCode = flipkartDetails.prefSellerCode
458
        mpHistory.prefferedSellerRating = flipkartDetails.prefSellerScore
459
        mpHistory.prefferedSellerSellingPrice = flipkartDetails.prefSellerSp
460
        mpHistory.prefferedSellerTp = flipkartPricing.prefSellerTp
461
        mpHistory.prefferedSellerShippingTime = ''
462
        mpHistory.prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
463
        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
464
        proposed_sp = max(flipkartDetails.lowestSellerSp - max((10, flipkartDetails.lowestSellerSp*0.001)), flipkartPricing.lowestPossibleSp)
465
        proposed_tp = getTargetTp(proposed_sp,mpItem)
466
        mpHistory.proposedSellingPrice = round(proposed_sp,2)
467
        mpHistory.proposedTp = round(proposed_tp,2)
468
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
469
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
470
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
471
        mpHistory.salesPotential = SalesPotential._NAMES_TO_VALUES.get(getSalesPotential(flipkartDetails.lowestSellerSp,flipkartItemInfo.nlc))
472
        mpHistory.timestamp = timestamp
473
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
474
    session.commit()
475
 
476
def commitNegativeMargin(negativeMargin,timestamp):
477
    for item in negativeMargin:
478
        flipkartDetails = item[0]
479
        flipkartItemInfo = item[1]
480
        flipkartPricing = item[2]
481
        mpHistory = MarketPlaceHistory()
482
        mpHistory.item_id = flipkartItemInfo.item_id
483
        mpHistory.source = OrderSource.FLIPKART
484
        mpHistory.lowestTp = flipkartPricing.lowestTp
485
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
486
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
487
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
488
        mpHistory.ourRank = flipkartDetails.rank
489
        mpHistory.competitiveCategory = CompetitionCategory.NEGATIVE_MARGIN
490
        mpHistory.risky = flipkartItemInfo.risky
491
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
492
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
493
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
494
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
495
        mpHistory.lowestSellerShippingTime = ''
496
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
497
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
498
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
499
        mpHistory.ourTp = flipkartPricing.ourTp
500
        mpHistory.ourNlc = flipkartItemInfo.nlc
501
        mpHistory.ourRating = flipkartDetails.ourScore
502
        mpHistory.ourShippingTime = ''
503
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
504
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
505
        mpHistory.prefferedSellerName = flipkartDetails.prefSellerName
506
        mpHistory.prefferedSellerCode = flipkartDetails.prefSellerCode
507
        mpHistory.prefferedSellerRating = flipkartDetails.prefSellerScore
508
        mpHistory.prefferedSellerSellingPrice = flipkartDetails.prefSellerSp
509
        mpHistory.prefferedSellerTp = flipkartPricing.prefSellerTp
510
        mpHistory.prefferedSellerShippingTime = ''
511
        mpHistory.prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
512
        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
513
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
514
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
515
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
516
        mpHistory.salesPotential = SalesPotential._NAMES_TO_VALUES.get(getSalesPotential(flipkartDetails.lowestSellerSp,flipkartItemInfo.nlc))
517
        mpHistory.timestamp = timestamp
518
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
519
    session.commit()
520
 
521
def commitCheapButNotPref(cheapButNotPref,timestamp):
522
    for item in cheapButNotPref:
523
        flipkartDetails = item[0]
524
        flipkartItemInfo = item[1]
525
        flipkartPricing = item[2]
526
        mpHistory = MarketPlaceHistory()
527
        mpHistory.item_id = flipkartItemInfo.item_id
528
        mpHistory.source = OrderSource.FLIPKART
529
        mpHistory.lowestTp = flipkartPricing.lowestTp
530
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
531
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
532
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
533
        mpHistory.ourRank = flipkartDetails.rank
534
        mpHistory.competitiveCategory = CompetitionCategory.CHEAP_BUT_NOT_PREF
535
        mpHistory.risky = flipkartItemInfo.risky
536
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
537
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
538
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
539
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
540
        mpHistory.lowestSellerShippingTime = ''
541
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
542
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
543
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
544
        mpHistory.ourTp = flipkartPricing.ourTp
545
        mpHistory.ourNlc = flipkartItemInfo.nlc
546
        mpHistory.ourRating = flipkartDetails.ourScore
547
        mpHistory.ourShippingTime = ''
548
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
549
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
550
        mpHistory.prefferedSellerName = flipkartDetails.prefSellerName
551
        mpHistory.prefferedSellerCode = flipkartDetails.prefSellerCode
552
        mpHistory.prefferedSellerRating = flipkartDetails.prefSellerScore
553
        mpHistory.prefferedSellerSellingPrice = flipkartDetails.prefSellerSp
554
        mpHistory.prefferedSellerTp = flipkartPricing.prefSellerTp
555
        mpHistory.prefferedSellerShippingTime = ''
556
        mpHistory.prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
557
        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
558
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
559
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
560
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
561
        mpHistory.salesPotential = SalesPotential._NAMES_TO_VALUES.get(getSalesPotential(flipkartDetails.lowestSellerSp,flipkartItemInfo.nlc))
562
        mpHistory.timestamp = timestamp
563
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
564
    session.commit()
565
 
566
def commitPrefButNotCheap(prefButNotCheap,timestamp):
567
    for item in prefButNotCheap:
568
        flipkartDetails = item[0]
569
        flipkartItemInfo = item[1]
570
        flipkartPricing = item[2]
11619 kshitij.so 571
        mpItem = item[3]
11193 kshitij.so 572
        mpHistory = MarketPlaceHistory()
573
        mpHistory.item_id = flipkartItemInfo.item_id
574
        mpHistory.source = OrderSource.FLIPKART
575
        mpHistory.lowestTp = flipkartPricing.lowestTp
576
        mpHistory.lowestPossibleTp = flipkartPricing.lowestPossibleTp
577
        mpHistory.lowestPossibleSp = flipkartPricing.lowestPossibleSp
578
        mpHistory.ourInventory = flipkartItemInfo.ourFlipkartInventory
579
        mpHistory.ourRank = flipkartDetails.rank
580
        mpHistory.competitiveCategory = CompetitionCategory.PREF_BUT_NOT_CHEAP
581
        mpHistory.risky = flipkartItemInfo.risky
582
        mpHistory.lowestSellingPrice = flipkartDetails.lowestSellerSp
583
        mpHistory.lowestSellerName = flipkartDetails.lowestSellerName
584
        mpHistory.lowestSellerCode = flipkartDetails.lowestSellerCode
585
        mpHistory.lowestSellerRating = flipkartDetails.lowestSellerScore
586
        mpHistory.lowestSellerShippingTime = ''
587
        mpHistory.lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
588
        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
589
        mpHistory.ourSellingPrice = flipkartPricing.ourSp
590
        mpHistory.ourTp = flipkartPricing.ourTp
591
        mpHistory.ourNlc = flipkartItemInfo.nlc
592
        mpHistory.ourRating = flipkartDetails.ourScore
593
        mpHistory.ourShippingTime = ''
594
        mpHistory.ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
595
        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
596
        mpHistory.prefferedSellerName = flipkartDetails.prefSellerName
597
        mpHistory.prefferedSellerCode = flipkartDetails.prefSellerCode
598
        mpHistory.prefferedSellerRating = flipkartDetails.prefSellerScore
599
        mpHistory.prefferedSellerSellingPrice = flipkartDetails.prefSellerSp
600
        mpHistory.prefferedSellerTp = flipkartPricing.prefSellerTp
601
        mpHistory.prefferedSellerShippingTime = ''
602
        mpHistory.prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
603
        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
604
        mpHistory.margin = mpHistory.ourTp - mpHistory.lowestPossibleTp
11775 kshitij.so 605
        proposed_sp = max(flipkartDetails.lowestSellerSp - max((10, flipkartDetails.lowestSellerSp*0.001)), flipkartPricing.lowestPossibleSp)
11619 kshitij.so 606
        proposed_tp = getTargetTp(proposed_sp,mpItem)
607
        mpHistory.proposedSellingPrice = proposed_sp
608
        mpHistory.proposedTp = proposed_tp  
11193 kshitij.so 609
        mpHistory.totalSeller = flipkartDetails.totalAvailableSeller
610
        mpHistory.avgSales = (itemSaleMap.get(flipkartItemInfo.item_id))[3]
611
        mpHistory.salesPotential = SalesPotential._NAMES_TO_VALUES.get(getSalesPotential(flipkartDetails.lowestSellerSp,flipkartItemInfo.nlc))
612
        mpHistory.timestamp = timestamp
613
        mpHistory.run = RunType._NAMES_TO_VALUES.get(flipkartItemInfo.runType)
614
    session.commit()
615
 
616
def populateStuff(runType,time):
11581 kshitij.so 617
    global itemSaleMap
11615 kshitij.so 618
    global categoryMap
619
 
11193 kshitij.so 620
    itemInfo = []
621
    if runType=='FAVOURITE':
622
        items = session.query(FlipkartItem,MarketplaceItems).join((MarketplaceItems,FlipkartItem.item_id==MarketplaceItems.itemId)).filter(MarketplaceItems.source==OrderSource.FLIPKART).\
623
        filter(or_(MarketplaceItems.autoFavourite==True, MarketplaceItems.manualFavourite==True)).all()
624
    else:
625
        #items = session.query(FlipkartItem,MarketplaceItems).join((MarketplaceItems,FlipkartItem.item_id==MarketplaceItems.itemId)).filter(MarketplaceItems.source==OrderSource.FLIPKART).all()
626
        items = session.query(FlipkartItem,MarketplaceItems).join((MarketplaceItems,FlipkartItem.item_id==MarketplaceItems.itemId)).filter(MarketplaceItems.source==OrderSource.FLIPKART).all()
11581 kshitij.so 627
 
628
    inventory_client = InventoryClient().get_client()
629
 
11193 kshitij.so 630
    for item in items:
631
        flipkart_item = item[0]
632
        mp_item = item[1]
633
        it = Item.query.filter_by(id=flipkart_item.item_id).one()
634
        category = Category.query.filter_by(id=it.category).one()
635
        parent_category = Category.query.filter_by(id=category.parent_category_id).first()
11615 kshitij.so 636
        if not categoryMap.has_key(category.id):
637
            temp = []
11616 kshitij.so 638
            temp.append(category.display_name)
639
            temp.append(parent_category.display_name)
11615 kshitij.so 640
            categoryMap[category.id] = temp
12134 kshitij.so 641
        srm = SourceReturnPercentage.get_by(source=OrderSource.FLIPKART,brand=it.brand,category_id=it.category)
11193 kshitij.so 642
        sip = SourceItemPercentage.query.filter(SourceItemPercentage.item_id==it.id).filter(SourceItemPercentage.source==OrderSource.FLIPKART).filter(SourceItemPercentage.startDate<=time).filter(SourceItemPercentage.expiryDate>=time).first()
643
        sourcePercentage = None
644
        if sip is not None:
645
            sourcePercentage = sip
12137 kshitij.so 646
            sourcePercentage.returnProvision = srm.returnProvision
11193 kshitij.so 647
        else:
648
            scp = SourceCategoryPercentage.query.filter(SourceCategoryPercentage.category_id==it.category).filter(SourceCategoryPercentage.source==OrderSource.FLIPKART).filter(SourceCategoryPercentage.startDate<=time).filter(SourceCategoryPercentage.expiryDate>=time).first()
649
            if scp is not None:
650
                sourcePercentage = scp
12137 kshitij.so 651
                sourcePercentage.returnProvision = srm.returnProvision
11193 kshitij.so 652
            else:
653
                spm = SourcePercentageMaster.get_by(source=OrderSource.FLIPKART)
654
                sourcePercentage = spm
12137 kshitij.so 655
                sourcePercentage.returnProvision = srm.returnProvision
656
 
657
 
11581 kshitij.so 658
 
659
        warehouse = inventory_client.getWarehouse(flipkart_item.warehouseId)    
660
        itemSaleList = []
661
        oosForAllSources = inventory_client.getOosStatusesForXDaysForItem(flipkart_item.item_id, 0, 3)
662
        oosForFlipkart = inventory_client.getOosStatusesForXDaysForItem(flipkart_item.item_id, OrderSource.FLIPKART, 5)
663
        oosForFlipkartLastDay = inventory_client.getOosStatusesForXDaysForItem(flipkart_item.item_id, OrderSource.FLIPKART, 1)
11615 kshitij.so 664
        oosForFlipkartTwoDay = inventory_client.getOosStatusesForXDaysForItem(flipkart_item.item_id, OrderSource.FLIPKART, 2)
11581 kshitij.so 665
        itemSaleList.append(oosForAllSources)
666
        itemSaleList.append(oosForFlipkart)
667
        itemSaleList.append(calculateAverageSale(oosForAllSources))
668
        itemSaleList.append(calculateAverageSale(oosForFlipkart))
669
        itemSaleList.append(calculateAverageSale(oosForFlipkartLastDay))
670
        itemSaleList.append(calculateTotalSale(oosForFlipkart))
11615 kshitij.so 671
        itemSaleList.append(calculateAverageSale(oosForFlipkartTwoDay))
11581 kshitij.so 672
        itemSaleMap[flipkart_item.item_id]=itemSaleList
673
 
11560 kshitij.so 674
#        try:
675
#            request_url = "https://api.flipkart.net/sellers/skus/%s/listings"%(str(flipkart_item.skuAtFlipkart))
676
#            r = requests.get(request_url, auth=('m2z93iskuj81qiid', '0c7ab6a5-98c0-4cdc-8be3-72c591e0add4'))
677
#            print "Inventory info",r.json()
678
#            stock_count = int((r.json()['attributeValues'])['stock_count'])
679
#        except:
680
#            stock_count = 0
11581 kshitij.so 681
        flipkartItemInfo = __FlipkartItemInfo(flipkart_item.flipkartSerialNumber, flipkart_item.maxNlc,mp_item.courierCost, it.id, it.product_group, it.brand, it.model_name, it.model_number, it.color, it.weight, category.parent_category_id, it.risky, flipkart_item.warehouseId, None, runType, parent_category.display_name,sourcePercentage,None,flipkart_item.skuAtFlipkart,None,warehouse.stateId)
11193 kshitij.so 682
        itemInfo.append(flipkartItemInfo)
12149 kshitij.so 683
    session.close()
11193 kshitij.so 684
    return itemInfo
685
 
686
def fetchDetails(flipkartSerialNumber,scraper):
687
    url = "http://www.flipkart.com/ps/%s"%(flipkartSerialNumber)
688
    #url = "http://www.flipkart.com/ps/MOBDTXVZXVY3GFG8"
689
    scraper.read(url)
690
    vendorsData = scraper.createData()
12183 kshitij.so 691
    print vendorsData
11193 kshitij.so 692
    sortedVendorsData = sorted(vendorsData, key=itemgetter('sellingPrice'))
11968 kshitij.so 693
    vendorsData[:]=[]
11193 kshitij.so 694
    rank ,ourSp, iterator, secondLowestSellerSp, prefSellerSp, lowestSellerSp, lowestSellerScore, prefSellerScore, secondLowestSellerScore, ourScore, shippingTimeLowerLimitLowestSeller,shippingTimeUpperLimitLowestSeller, \
695
    shippingTimeLowerLimitPrefSeller, shippingTimeUpperLimitPrefSeller, shippingTimeLowerLimitOur, shippingTimeUpperLimitOur, shippingTimeLowerLimitSecondLowestSeller, shippingTimeUpperLimitSecondLowestSeller, totalAvailableSeller= (0,)*19
696
    lowestSellerName, lowestSellerCode, secondLowestSellerName, secondLowestSellerCode, prefSellerName, prefSellerCode, lowestSellerBuyTrend, \
697
    ourBuyTrend, prefSellerBuyTrend, secondLowestSellerBuyTrend, ourCode = ('',)*11
698
    for data in sortedVendorsData:
699
        if iterator == 0:
700
            lowestSellerName = data['sellerName']
701
            lowestSellerScore = data['sellerScore']
702
            lowestSellerCode = data['sellerCode']
703
            lowestSellerSp = data['sellingPrice']
704
            lowestSellerBuyTrend = data['buyTrend']
705
            try:
706
                shippingTimeLowerLimitLowestSeller, shippingTimeUpperLimitLowestSeller = data['shippingTime'].split('-')
707
            except ValueError:
708
                shippingTimeLowerLimitLowestSeller = int(data['shippingTime'])
709
 
710
        if iterator ==1:
711
            secondLowestSellerName = data['sellerName']
712
            secondLowestSellerScore = data['sellerScore']
713
            secondLowestSellerCode = data['sellerCode']
714
            secondLowestSellerSp = data['sellingPrice']
715
            secondLowestSellerBuyTrend = data['buyTrend']
716
            try:
717
                shippingTimeLowerLimitSecondLowestSeller, shippingTimeUpperLimitSecondLowestSeller = data['shippingTime'].split('-')
718
            except ValueError:
719
                shippingTimeLowerLimitSecondLowestSeller = int(data['shippingTime'])
720
 
721
        if data['sellerName'] == 'Saholic':
722
            ourScore = data['sellerScore']
723
            ourCode = data['sellerCode']
724
            ourSp = data['sellingPrice']
725
            ourBuyTrend = data['buyTrend']
726
            try:
727
                shippingTimeLowerLimitOur, shippingTimeUpperLimitOur = data['shippingTime'].split('-')
728
            except ValueError:
729
                shippingTimeLowerLimitOur = int(data['shippingTime'])
730
            rank = iterator + 1
731
 
732
        if data['buyTrend'] in ('PrefCheap','PrefNCheap',''):
733
            prefSellerName = data['sellerName']
734
            prefSellerScore = data['sellerScore']
735
            prefSellerCode = data['sellerCode']
736
            prefSellerSp = data['sellingPrice']
737
            prefSellerBuyTrend = data['buyTrend']
738
            try:
739
                shippingTimeLowerLimitPrefSeller, shippingTimeUpperLimitPrefSeller = data['shippingTime'].split('-')
740
            except ValueError:
741
                shippingTimeLowerLimitPrefSeller = int(data['shippingTime'])
742
 
743
        iterator+=1
11774 kshitij.so 744
 
11193 kshitij.so 745
    flipkartDetails = __FlipkartDetails(rank ,ourSp , secondLowestSellerSp, prefSellerSp, lowestSellerSp, lowestSellerScore, prefSellerScore, secondLowestSellerScore, ourScore, int(shippingTimeLowerLimitLowestSeller),int(shippingTimeUpperLimitLowestSeller), \
746
    int(shippingTimeLowerLimitPrefSeller), int(shippingTimeUpperLimitPrefSeller), int(shippingTimeLowerLimitOur), int(shippingTimeUpperLimitOur), int(shippingTimeLowerLimitSecondLowestSeller), int(shippingTimeUpperLimitSecondLowestSeller), len(sortedVendorsData), lowestSellerName, lowestSellerCode, secondLowestSellerName, secondLowestSellerCode, prefSellerName, prefSellerCode, lowestSellerBuyTrend, \
747
    ourBuyTrend, prefSellerBuyTrend, secondLowestSellerBuyTrend, ourCode)
11774 kshitij.so 748
 
749
    if flipkartDetails.ourBuyTrend == 'PrefCheap'and flipkartDetails.rank!=1 and flipkartDetails.ourSp==flipkartDetails.secondLowestSellerSp:
11775 kshitij.so 750
        print "Under PrefCheap category.Switching data for ",flipkartSerialNumber
11774 kshitij.so 751
        flipkartDetails.lowestSellerSp, flipkartDetails.secondLowestSellerSp = flipkartDetails.secondLowestSellerSp,flipkartDetails.lowestSellerSp
752
        flipkartDetails.lowestSellerScore, flipkartDetails.secondLowestSellerScore = flipkartDetails.secondLowestSellerScore,flipkartDetails.lowestSellerScore
753
        flipkartDetails.shippingTimeLowerLimitLowestSeller, flipkartDetails.shippingTimeLowerLimitSecondLowestSeller = flipkartDetails.shippingTimeLowerLimitSecondLowestSeller,flipkartDetails.shippingTimeLowerLimitLowestSeller
754
        flipkartDetails.shippingTimeUpperLimitLowestSeller, flipkartDetails.shippingTimeUpperLimitSecondLowestSeller = flipkartDetails.shippingTimeUpperLimitSecondLowestSeller,flipkartDetails.shippingTimeUpperLimitLowestSeller
755
        flipkartDetails.lowestSellerName, flipkartDetails.secondLowestSellerName = flipkartDetails.secondLowestSellerName,flipkartDetails.lowestSellerName
756
        flipkartDetails.lowestSellerCode, flipkartDetails.secondLowestSellerCode = flipkartDetails.secondLowestSellerCode,flipkartDetails.lowestSellerCode
757
        flipkartDetails.lowestSellerBuyTrend, flipkartDetails.secondLowestSellerBuyTrend = flipkartDetails.secondLowestSellerBuyTrend,flipkartDetails.lowestSellerBuyTrend
758
        flipkartDetails.rank=1
759
 
760
    if flipkartDetails.ourBuyTrend == 'NPrefCheap'and flipkartDetails.rank!=1 and flipkartDetails.ourSp==flipkartDetails.lowestSellerSp:
11775 kshitij.so 761
        print "Under NPrefCheap category.Switching data for ",flipkartSerialNumber
11774 kshitij.so 762
        flipkartDetails.lowestSellerSp = flipkartDetails.ourSp
763
        flipkartDetails.lowestSellerScore = flipkartDetails.ourScore
764
        flipkartDetails.shippingTimeLowerLimitLowestSeller = flipkartDetails.shippingTimeLowerLimitOur
765
        flipkartDetails.shippingTimeUpperLimitLowestSeller = flipkartDetails.shippingTimeUpperLimitOur
766
        flipkartDetails.lowestSellerName = 'Saholic'
767
        flipkartDetails.lowestSellerCode = flipkartDetails.ourCode
768
        flipkartDetails.lowestSellerBuyTrend = flipkartDetails.ourBuyTrend
769
 
11193 kshitij.so 770
    return flipkartDetails
771
 
772
def calculateAverageSale(oosStatus):
773
    count,sale = 0,0
774
    for obj in oosStatus:
775
        if not obj.is_oos:
776
            count+=1
777
            sale = sale+obj.num_orders
778
    avgSalePerDay=0 if count==0 else (float(sale)/count)
779
    return round(avgSalePerDay,2)
780
 
781
def calculateTotalSale(oosStatus):
782
    sale = 0
783
    for obj in oosStatus:
784
        if not obj.is_oos:
785
            sale = sale+obj.num_orders
786
    return sale
787
 
788
def getNetAvailability(itemInventory):
789
    totalAvailability, totalReserved = 0,0
790
    availableMap  = itemInventory.availability
791
    reserveMap = itemInventory.reserved
792
    for warehouse,availability in availableMap.iteritems():
793
        if warehouse==16:
794
            continue
795
        totalAvailability = totalAvailability+availability
796
    for warehouse,reserve in reserveMap.iteritems():
797
        if warehouse==16:
798
            continue
799
        totalReserved = totalReserved+reserve
800
    return totalAvailability - totalReserved
801
 
802
def getOosString(oosStatus):
803
    lastNdaySale=""
804
    for obj in oosStatus:
805
        if obj.is_oos:
806
            lastNdaySale += "X-"
807
        else:
808
            lastNdaySale += str(obj.num_orders) + "-"
809
    return lastNdaySale[:-1]
810
 
811
def getLastDaySale(itemId):
812
    return (itemSaleMap.get(itemId))[4]
813
 
814
def getSalesPotential(lowestSellingPrice,ourNlc):
815
    if lowestSellingPrice - ourNlc < 0:
816
        return 'HIGH'
817
    elif (float(lowestSellingPrice - ourNlc))/lowestSellingPrice >=0 and (float(lowestSellingPrice - ourNlc))/lowestSellingPrice <=.02:
818
        return 'MEDIUM'
819
    else:
820
        return 'LOW'  
821
 
11571 kshitij.so 822
def decideCategory(itemInfo):
11193 kshitij.so 823
    global itemSaleMap
11560 kshitij.so 824
 
11571 kshitij.so 825
    cantCompete, buyBoxItems, competitive, competitiveNoInventory, exceptionItems, negativeMargin, cheapButNotPref, prefButNotCheap = [],[],[],[],[],[],[],[]
826
 
11193 kshitij.so 827
    catalog_client = CatalogClient().get_client()
828
 
11571 kshitij.so 829
    for val in itemInfo:
830
        spm = val.sourcePercentage
831
        flipkartDetails = val.flipkartDetails
11581 kshitij.so 832
        if (flipkartDetails is None or flipkartDetails.totalAvailableSeller==0):
11571 kshitij.so 833
            exceptionItems.append(val)
834
            continue
835
 
836
        mpItem = MarketplaceItems.get_by(itemId=val.item_id,source=OrderSource.FLIPKART)
837
        if flipkartDetails.rank==0:
838
            flipkartDetails.ourSp = mpItem.currentSp
839
            ourSp = mpItem.currentSp
840
        else:
841
            ourSp = flipkartDetails.ourSp
11581 kshitij.so 842
        vatRate = catalog_client.getVatPercentageForItem(val.item_id, val.stateId, flipkartDetails.ourSp)
11571 kshitij.so 843
        val.vatRate = vatRate
844
        if (flipkartDetails.ourBuyTrend == 'PrefCheap') or (flipkartDetails.rank==1 and flipkartDetails.totalAvailableSeller==1):
845
            temp=[]
846
            temp.append(flipkartDetails)
847
            temp.append(val)
848
            secondLowestTp=0 if flipkartDetails.totalAvailableSeller==1 else getOtherTp(flipkartDetails,val,spm,False)
849
            prefSellerTp=0 if flipkartDetails.totalAvailableSeller < 2 else getOtherTp(flipkartDetails,val,spm,True)  
850
            flipkartPricing = __FlipkartPricing(flipkartDetails.ourSp,getOurTp(flipkartDetails,val,spm,mpItem),None,getLowestPossibleTp(flipkartDetails,val,spm,mpItem),secondLowestTp,getLowestPossibleSp(flipkartDetails,val,spm,mpItem),prefSellerTp)
851
            temp.append(flipkartPricing)
852
            temp.append(mpItem)
853
            buyBoxItems.append(temp)
854
            continue
855
 
856
        if (flipkartDetails.ourBuyTrend == 'PrefNCheap'):
857
            temp=[]
858
            temp.append(flipkartDetails)
859
            temp.append(val)
11618 kshitij.so 860
            secondLowestTp=0 if flipkartDetails.totalAvailableSeller==1 else getSecondLowestSellerTp(flipkartDetails,val,spm,False)
11615 kshitij.so 861
            lowestTp=0 if flipkartDetails.totalAvailableSeller==1 else getOtherTp(flipkartDetails,val,spm,False)
11571 kshitij.so 862
            prefSellerTp=0 if flipkartDetails.totalAvailableSeller < 2 else getOtherTp(flipkartDetails,val,spm,True)  
863
            flipkartPricing = __FlipkartPricing(flipkartDetails.ourSp,getOurTp(flipkartDetails,val,spm,mpItem),None,getLowestPossibleTp(flipkartDetails,val,spm,mpItem),secondLowestTp,getLowestPossibleSp(flipkartDetails,val,spm,mpItem),prefSellerTp)
864
            temp.append(flipkartPricing)
865
            temp.append(mpItem)
866
            prefButNotCheap.append(temp)
867
            continue
868
 
869
        if (flipkartDetails.ourBuyTrend == 'NPrefCheap') and (flipkartDetails.rank==1):
870
            temp=[]
871
            temp.append(flipkartDetails)
872
            temp.append(val)
11615 kshitij.so 873
            secondLowestTp=0 if flipkartDetails.totalAvailableSeller==1 else getOtherTp(flipkartDetails,val,spm,False)
11571 kshitij.so 874
            prefSellerTp=0 if flipkartDetails.totalAvailableSeller < 2 else getOtherTp(flipkartDetails,val,spm,True)  
11615 kshitij.so 875
            flipkartPricing = __FlipkartPricing(flipkartDetails.ourSp,getOurTp(flipkartDetails,val,spm,mpItem),None,getLowestPossibleTp(flipkartDetails,val,spm,mpItem),secondLowestTp,getLowestPossibleSp(flipkartDetails,val,spm,mpItem),prefSellerTp)
11571 kshitij.so 876
            temp.append(flipkartPricing)
877
            temp.append(mpItem)
878
            cheapButNotPref.append(temp)
879
            continue
880
 
881
        lowestTp = getOtherTp(flipkartDetails,val,spm,False)
882
        ourTp = getOurTp(flipkartDetails,val,spm,mpItem)
883
        lowestPossibleTp = getLowestPossibleTp(flipkartDetails,val,spm,mpItem)
884
        lowestPossibleSp = getLowestPossibleSp(flipkartDetails,val,spm,mpItem)
885
        prefSellerTp = getOtherTp(flipkartDetails,val,spm,True)
886
 
887
        if (ourTp<lowestPossibleTp):
888
            temp=[]
889
            temp.append(flipkartDetails)
890
            temp.append(val)
12156 kshitij.so 891
            flipkartPricing = __FlipkartPricing(ourSp,ourTp,lowestTp,lowestPossibleTp,None,getLowestPossibleSp(flipkartDetails,val,spm,mpItem),None)
11571 kshitij.so 892
            temp.append(flipkartPricing)
893
            negativeMargin.append(temp)
894
            continue
895
 
896
        if (flipkartDetails.lowestSellerSp > lowestPossibleSp) and val.ourFlipkartInventory!=0:
897
            type(val.ourFlipkartInventory)
898
            temp=[]
899
            temp.append(flipkartDetails)
900
            temp.append(val)
901
            flipkartPricing = __FlipkartPricing(ourSp,ourTp,lowestTp,lowestPossibleTp,None,lowestPossibleSp,prefSellerTp)
902
            temp.append(flipkartPricing)
903
            temp.append(mpItem)
904
            competitive.append(temp)
905
            continue
906
 
907
        if (flipkartDetails.lowestSellerSp) > lowestPossibleSp and val.ourFlipkartInventory==0:
908
            temp=[]
909
            temp.append(flipkartDetails)
910
            temp.append(val)
911
            flipkartPricing = __FlipkartPricing(ourSp,ourTp,lowestTp,lowestPossibleTp,None,lowestPossibleSp,prefSellerTp)
912
            temp.append(flipkartPricing)
913
            temp.append(mpItem)
914
            competitiveNoInventory.append(temp)
915
            continue
916
 
11193 kshitij.so 917
        temp=[]
918
        temp.append(flipkartDetails)
919
        temp.append(val)
920
        flipkartPricing = __FlipkartPricing(ourSp,ourTp,lowestTp,lowestPossibleTp,None,lowestPossibleSp,prefSellerTp)
921
        temp.append(flipkartPricing)
922
        temp.append(mpItem)
11571 kshitij.so 923
        cantCompete.append(temp)
11193 kshitij.so 924
 
11969 kshitij.so 925
    itemInfo[:]=[]
11571 kshitij.so 926
    return cantCompete, buyBoxItems, competitive, competitiveNoInventory, exceptionItems, negativeMargin, cheapButNotPref, prefButNotCheap
11193 kshitij.so 927
 
928
def getOtherTp(flipkartDetails,val,spm,prefferedSeller):
929
    if val.parent_category==10011 or val.parent_category==12001:
930
        commissionPercentage = spm.competitorCommissionAccessory
931
    else:
932
        commissionPercentage = spm.competitorCommissionOther
933
    if flipkartDetails.rank==1 and not prefferedSeller:
934
        otherTp = flipkartDetails.secondLowestSellerSp- flipkartDetails.secondLowestSellerSp*(commissionPercentage/100+spm.emiFee/100)*(1+(spm.serviceTax/100))-(val.courierCost+spm.closingFee)*(1+(spm.serviceTax/100))
935
        return round(otherTp,2)
936
    if prefferedSeller:
937
        otherTp = flipkartDetails.prefSellerSp- flipkartDetails.prefSellerSp*(commissionPercentage/100+spm.emiFee/100)*(1+(spm.serviceTax/100))-(val.courierCost+spm.closingFee)*(1+(spm.serviceTax/100))
938
        return round(otherTp,2)
939
    otherTp = flipkartDetails.lowestSellerSp- flipkartDetails.lowestSellerSp*(commissionPercentage/100+spm.emiFee/100)*(1+(spm.serviceTax/100))-(val.courierCost+spm.closingFee)*(1+(spm.serviceTax/100))
940
    return round(otherTp,2)
11618 kshitij.so 941
 
942
def getSecondLowestSellerTp(flipkartDetails,val,spm,prefferedSeller):
943
    if val.parent_category==10011 or val.parent_category==12001:
944
        commissionPercentage = spm.competitorCommissionAccessory
945
    else:
946
        commissionPercentage = spm.competitorCommissionOther
947
    otherTp = flipkartDetails.secondLowestSellerSp- flipkartDetails.secondLowestSellerSp*(commissionPercentage/100+spm.emiFee/100)*(1+(spm.serviceTax/100))-(val.courierCost+spm.closingFee)*(1+(spm.serviceTax/100))
948
    return round(otherTp,2)
11193 kshitij.so 949
 
950
def getLowestPossibleTp(flipkartDetails,val,spm,mpItem):
951
    if flipkartDetails.rank==0:
952
        return mpItem.minimumPossibleTp
953
    vat = (flipkartDetails.ourSp/(1+(val.vatRate/100))-(val.nlc/(1+(val.vatRate/100))))*(val.vatRate/100);
954
    inHouseCost = 15+vat+(mpItem.returnProvision/100)*flipkartDetails.ourSp+mpItem.otherCost;
955
    lowest_possible_tp = val.nlc+inHouseCost;
956
    return round(lowest_possible_tp,2)
957
 
958
def getOurTp(flipkartDetails,val,spm,mpItem):
959
    if flipkartDetails.rank==0:
960
        return mpItem.currentTp
961
    ourTp = flipkartDetails.ourSp- flipkartDetails.ourSp*(mpItem.commission/100+mpItem.emiFee/100)*(1+(mpItem.serviceTax/100))-(val.courierCost+mpItem.closingFee)*(1+(mpItem.serviceTax/100))
962
    return round(ourTp,2)
963
 
964
def getLowestPossibleSp(flipkartDetails,val,spm,mpItem):
965
    if flipkartDetails.rank==0:
966
        return mpItem.minimumPossibleSp
967
    lowestPossibleSp = (val.nlc+(val.courierCost+mpItem.closingFee)*(1+(mpItem.serviceTax/100))*(1+(val.vatRate/100))+(15+mpItem.otherCost)*(1+(val.vatRate)/100))/(1-(mpItem.commission/100+mpItem.emiFee/100)*(1+(mpItem.serviceTax/100))*(1+(val.vatRate)/100)-(mpItem.returnProvision/100)*(1+(val.vatRate)/100));
968
    return round(lowestPossibleSp,2)
969
 
970
def getTargetTp(targetSp,mpItem):
971
    targetTp = targetSp- targetSp*(mpItem.commission/100+mpItem.emiFee/100)*(1+(mpItem.serviceTax/100))-(mpItem.courierCost+mpItem.closingFee)*(1+(mpItem.serviceTax/100))
972
    return round(targetTp,2)
973
 
974
def getTargetSp(targetTp,mpItem,ourSp):
975
    targetSp = float(targetTp+(mpItem.courierCost+mpItem.closingFee)*(1+(mpItem.serviceTax/100)))/(1-((mpItem.commission/100+mpItem.emiFee/100)*(1+(mpItem.serviceTax/100))))
976
    return round(targetSp,2)
977
 
11623 kshitij.so 978
def getNewLowestPossibleTp(mpItem,nlc,vatRate,proposedSellingPrice):
979
    vat = (proposedSellingPrice/(1+(vatRate/100))-(nlc/(1+(vatRate/100))))*(vatRate/100);
980
    inHouseCost = 15+vat+(mpItem.returnProvision/100)*proposedSellingPrice+mpItem.otherCost;
981
    lowest_possible_tp = nlc+inHouseCost;
982
    return round(lowest_possible_tp,2)
983
 
984
def getNewOurTp(mpItem,proposedSellingPrice):
11624 kshitij.so 985
    ourTp = proposedSellingPrice- proposedSellingPrice*(mpItem.commission/100+mpItem.emiFee/100)*(1+(mpItem.serviceTax/100))-(mpItem.courierCost+mpItem.closingFee)*(1+(mpItem.serviceTax/100))
11623 kshitij.so 986
    return round(ourTp,2)
987
 
988
def getNewLowestPossibleSp(mpItem,nlc,vatRate):
11624 kshitij.so 989
    lowestPossibleSp = (nlc+(mpItem.courierCost+mpItem.closingFee)*(1+(mpItem.serviceTax/100))*(1+(vatRate/100))+(15+mpItem.otherCost)*(1+(vatRate)/100))/(1-(mpItem.commission/100+mpItem.emiFee/100)*(1+(mpItem.serviceTax/100))*(1+(vatRate)/100)-(mpItem.returnProvision/100)*(1+(vatRate)/100));
11623 kshitij.so 990
    return round(lowestPossibleSp,2)    
991
 
992
 
11193 kshitij.so 993
def markAutoFavourite():
994
    previouslyAutoFav = []
995
    nowAutoFav = []
996
    marketplaceItems = session.query(MarketplaceItems).filter(MarketplaceItems.source==OrderSource.FLIPKART).all()
997
    fromDate = datetime.now()-timedelta(days = 3, hours=datetime.now().hour, minutes=datetime.now().minute, seconds=datetime.now().second)
998
    toDate = datetime.now()-timedelta(days = 0, hours=datetime.now().hour, minutes=datetime.now().minute, seconds=datetime.now().second)
11615 kshitij.so 999
    items = session.query(MarketPlaceHistory.item_id,func.max(MarketPlaceHistory.timestamp)).group_by(MarketPlaceHistory.item_id).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.timestamp.between (fromDate,toDate)).filter(or_(MarketPlaceHistory.competitiveCategory==CompetitionCategory.BUY_BOX,MarketPlaceHistory.competitiveCategory==CompetitionCategory.PREF_BUT_NOT_CHEAP)).all()
11193 kshitij.so 1000
    toUpdate = [key for key, value in itemSaleMap.items() if value[5] >= 1]
1001
    buyBoxLast3days = []
1002
    for item in items:
1003
        buyBoxLast3days.append(item[0])
1004
    for marketplaceItem in marketplaceItems:
1005
        reason = ""
1006
        toMark = False
1007
        if marketplaceItem.itemId in toUpdate:
1008
            toMark = True
1009
            reason+="Total sale is greater than 1 for last five days (Flipkart)."
1010
        if marketplaceItem.itemId in buyBoxLast3days:
1011
            toMark = True
1012
            reason+="Item is present in buy box in last 3 days"
1013
        if not marketplaceItem.autoFavourite:
1014
            print "Item is not under auto favourite"
1015
        if toMark:
1016
            temp=[]
1017
            temp.append(marketplaceItem.itemId)
1018
            temp.append(reason)
1019
            nowAutoFav.append(temp)
1020
        if (not toMark) and marketplaceItem.autoFavourite:
1021
            previouslyAutoFav.append(marketplaceItem.itemId)
1022
        marketplaceItem.autoFavourite = toMark
1023
    session.commit()
1024
    return previouslyAutoFav, nowAutoFav
1025
 
11615 kshitij.so 1026
def write_report(previousAutoFav, nowAutoFav,timestamp, runType):
11193 kshitij.so 1027
    wbk = xlwt.Workbook()
1028
    sheet = wbk.add_sheet('Can\'t Compete')
1029
    xstr = lambda s: s or ""
1030
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1031
 
1032
    excel_integer_format = '0'
1033
    integer_style = xlwt.XFStyle()
1034
    integer_style.num_format_str = excel_integer_format
1035
 
1036
    sheet.write(0, 0, "Item ID", heading_xf)
1037
    sheet.write(0, 1, "Category", heading_xf)
1038
    sheet.write(0, 2, "Product Group.", heading_xf)
1039
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1040
    sheet.write(0, 4, "Brand", heading_xf)
1041
    sheet.write(0, 5, "Product Name", heading_xf)
1042
    sheet.write(0, 6, "Weight", heading_xf)
1043
    sheet.write(0, 7, "Courier Cost", heading_xf)
1044
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1045
    sheet.write(0, 9, "Commission Rate", heading_xf)
1046
    sheet.write(0, 10, "Return Provision", heading_xf)
1047
    sheet.write(0, 11, "Our Rating", heading_xf)
1048
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1049
    sheet.write(0, 13, "Our Rank", heading_xf)
1050
    sheet.write(0, 14, "Our SP", heading_xf)
1051
    sheet.write(0, 15, "Our TP", heading_xf)
1052
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1053
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1054
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1055
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1056
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1057
    sheet.write(0, 21, "Preffered Seller", heading_xf)
1058
    sheet.write(0, 22, "Preffered Seller Rating", heading_xf)
1059
    sheet.write(0, 23, "Preffered Seller Shipping Time", heading_xf)
1060
    sheet.write(0, 24, "Preffer Seller SP", heading_xf)
1061
    sheet.write(0, 25, "Preffered Seller TP", heading_xf)
1062
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1063
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1064
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1065
    sheet.write(0, 29, "Average Sale", heading_xf)
1066
    sheet.write(0, 30, "Our NLC", heading_xf)
1067
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1068
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1069
    sheet.write(0, 33, "Target SP", heading_xf)
1070
    sheet.write(0, 34, "Target TP", heading_xf)  
1071
    sheet.write(0, 35, "Target NLC", heading_xf)
1072
    sheet.write(0, 36, "Sales Potential", heading_xf)
1073
    sheet.write(0, 37, "Total Seller", heading_xf)
11193 kshitij.so 1074
    sheet_iterator = 1
11620 kshitij.so 1075
    canCompeteItems = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
11622 kshitij.so 1076
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1077
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1078
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1079
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1080
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.CANT_COMPETE).all()
1081
    for item in canCompeteItems:
1082
        mpHistory = item[0]
1083
        flipkartItem = item[1]
1084
        mpItem = item[2]
1085
        catItem = item[3]
1086
        sheet.write(sheet_iterator,0,mpHistory.item_id)
1087
        sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1088
        sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1089
        sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1090
        sheet.write(sheet_iterator,4,catItem.brand)
1091
        sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1092
        sheet.write(sheet_iterator,6,catItem.weight)
1093
        sheet.write(sheet_iterator,7,mpItem.courierCost)
1094
        sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1095
        sheet.write(sheet_iterator,9,mpItem.commission)
1096
        sheet.write(sheet_iterator,10,mpItem.returnProvision)
1097
        sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1098
#        ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1099
#        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1100
        sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
1101
        sheet.write(sheet_iterator,13,mpHistory.ourRank)
1102
        sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
1103
        sheet.write(sheet_iterator,15,mpHistory.ourTp)
1104
        sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
1105
        sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 1106
#       lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
1107
#       else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 1108
        sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
1109
        sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
1110
        sheet.write(sheet_iterator,20,mpHistory.lowestTp)
1111
        sheet.write(sheet_iterator,21,mpHistory.prefferedSellerName)
1112
        sheet.write(sheet_iterator,22,mpHistory.prefferedSellerRating)
11615 kshitij.so 1113
#        prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
1114
#        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
11790 kshitij.so 1115
        sheet.write(sheet_iterator,23,mpHistory.prefferedSellerShippingTime)
1116
        sheet.write(sheet_iterator,24,mpHistory.prefferedSellerSellingPrice)
1117
        sheet.write(sheet_iterator,25,mpHistory.prefferedSellerTp)
1118
        sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 1119
        if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1120
            sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 1121
        else:
11790 kshitij.so 1122
            sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1123
        sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1124
        sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
1125
        sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
1126
        sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
1127
        sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
11615 kshitij.so 1128
        proposed_sp = mpHistory.lowestSellingPrice - max(10, mpHistory.lowestSellingPrice*0.001)
11193 kshitij.so 1129
        proposed_tp = getTargetTp(proposed_sp,mpItem)
11615 kshitij.so 1130
        target_nlc = proposed_tp - mpHistory.lowestPossibleTp + mpHistory.ourNlc
11790 kshitij.so 1131
        sheet.write(sheet_iterator, 33, proposed_sp)
1132
        sheet.write(sheet_iterator, 34, proposed_tp)
1133
        sheet.write(sheet_iterator, 35, target_nlc)
1134
        sheet.write(sheet_iterator, 36, getSalesPotential(mpHistory.lowestSellingPrice,mpHistory.ourNlc))
1135
        sheet.write(sheet_iterator, 37, mpHistory.totalSeller)
11193 kshitij.so 1136
        sheet_iterator+=1
11615 kshitij.so 1137
 
1138
    canCompeteItems[:] = []
1139
 
11193 kshitij.so 1140
 
1141
    sheet = wbk.add_sheet('Pref and Cheap')
1142
 
1143
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1144
 
1145
    excel_integer_format = '0'
1146
    integer_style = xlwt.XFStyle()
1147
    integer_style.num_format_str = excel_integer_format
1148
    xstr = lambda s: s or ""
1149
 
1150
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1151
 
1152
    excel_integer_format = '0'
1153
    integer_style = xlwt.XFStyle()
1154
    integer_style.num_format_str = excel_integer_format
1155
 
1156
    sheet.write(0, 0, "Item ID", heading_xf)
1157
    sheet.write(0, 1, "Category", heading_xf)
1158
    sheet.write(0, 2, "Product Group.", heading_xf)
1159
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1160
    sheet.write(0, 4, "Brand", heading_xf)
1161
    sheet.write(0, 5, "Product Name", heading_xf)
1162
    sheet.write(0, 6, "Weight", heading_xf)
1163
    sheet.write(0, 7, "Courier Cost", heading_xf)
1164
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1165
    sheet.write(0, 9, "Commission Rate", heading_xf)
1166
    sheet.write(0, 10, "Return Provision", heading_xf)
1167
    sheet.write(0, 11, "Our Rating", heading_xf)
1168
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1169
    sheet.write(0, 13, "Our Rank", heading_xf)
1170
    sheet.write(0, 14, "Our SP", heading_xf)
1171
    sheet.write(0, 15, "Our TP", heading_xf)
1172
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1173
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1174
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1175
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1176
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1177
    sheet.write(0, 21, "Second Lowest Seller", heading_xf)
1178
    sheet.write(0, 22, "Second Lowest Seller Rating", heading_xf)
1179
    sheet.write(0, 23, "Second Lowest Seller Shipping Time", heading_xf)
1180
    sheet.write(0, 24, "Second Lowest Seller SP", heading_xf)
1181
    sheet.write(0, 25, "Second Lowest Seller TP", heading_xf)
1182
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1183
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1184
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1185
    sheet.write(0, 29, "Average Sale", heading_xf)
1186
    sheet.write(0, 30, "Our NLC", heading_xf)
1187
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1188
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1189
    sheet.write(0, 33, "Target SP", heading_xf)
1190
    sheet.write(0, 34, "Target TP", heading_xf)  
1191
    sheet.write(0, 35, "Margin Increased Potential", heading_xf)
1192
    sheet.write(0, 36, "Total Seller", heading_xf)
1193
    sheet.write(0, 37, "Auto Pricing Decision", heading_xf)
1194
    sheet.write(0, 38, "Reason", heading_xf)
1195
    sheet.write(0, 39, "Updated Price", heading_xf)
11193 kshitij.so 1196
    sheet_iterator = 1
11615 kshitij.so 1197
 
11622 kshitij.so 1198
    buyBoxItems = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1199
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1200
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1201
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1202
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1203
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.BUY_BOX).all()
1204
 
1205
 
11193 kshitij.so 1206
    for item in buyBoxItems:
11615 kshitij.so 1207
        mpHistory = item[0]
1208
        flipkartItem = item[1]
1209
        mpItem = item[2]
1210
        catItem = item[3]
1211
        sheet.write(sheet_iterator,0,mpHistory.item_id)
1212
        sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1213
        sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1214
        sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1215
        sheet.write(sheet_iterator,4,catItem.brand)
1216
        sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1217
        sheet.write(sheet_iterator,6,catItem.weight)
1218
        sheet.write(sheet_iterator,7,mpItem.courierCost)
1219
        sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1220
        sheet.write(sheet_iterator,9,mpItem.commission)
1221
        sheet.write(sheet_iterator,10,mpItem.returnProvision)
1222
        sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1223
#        ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1224
#        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1225
        sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
1226
        sheet.write(sheet_iterator,13,mpHistory.ourRank)
1227
        sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
1228
        sheet.write(sheet_iterator,15,mpHistory.ourTp)
1229
        sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
1230
        sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 1231
#        lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
1232
#        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 1233
        sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
1234
        sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
1235
        sheet.write(sheet_iterator,20,mpHistory.lowestTp)
1236
        sheet.write(sheet_iterator,21,mpHistory.secondLowestSellerName)
1237
        sheet.write(sheet_iterator,22,mpHistory.secondLowestSellerRating)
11615 kshitij.so 1238
#        secondLowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitSecondLowestSeller) if flipkartDetails.shippingTimeUpperLimitSecondLowestSeller==0\
1239
#        else str(flipkartDetails.shippingTimeLowerLimitSecondLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitSecondLowestSeller)
11790 kshitij.so 1240
        sheet.write(sheet_iterator,23,mpHistory.secondLowestSellerShippingTime)
1241
        sheet.write(sheet_iterator,24,mpHistory.secondLowestSellingPrice)
1242
        sheet.write(sheet_iterator,25,mpHistory.secondLowestTp)
1243
        sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 1244
        if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1245
            sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 1246
        else:
11790 kshitij.so 1247
            sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1248
        sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1249
        sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
1250
        sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
1251
        sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
1252
        sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
11615 kshitij.so 1253
        proposed_sp = max(mpHistory.secondLowestSellingPrice - max((20, mpHistory.secondLowestSellingPrice*0.002)), mpHistory.lowestPossibleSp)
11193 kshitij.so 1254
        proposed_tp = getTargetTp(proposed_sp,mpItem)
11615 kshitij.so 1255
        target_nlc = proposed_tp -  mpHistory.lowestPossibleTp + mpHistory.ourNlc
11790 kshitij.so 1256
        sheet.write(sheet_iterator, 33, proposed_sp)
1257
        sheet.write(sheet_iterator, 34, proposed_tp)
1258
        sheet.write(sheet_iterator, 35, proposed_tp -mpHistory.ourTp )
1259
        sheet.write(sheet_iterator, 36, mpHistory.totalSeller)
11775 kshitij.so 1260
        if mpHistory.decision is None:
11790 kshitij.so 1261
            sheet.write(sheet_iterator, 37, 'Auto Pricing Inactive')
11775 kshitij.so 1262
            sheet_iterator+=1
1263
            continue
11790 kshitij.so 1264
        sheet.write(sheet_iterator, 37, Decision._VALUES_TO_NAMES.get(mpHistory.decision))
1265
        sheet.write(sheet_iterator, 38, mpHistory.reason)
11776 kshitij.so 1266
        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_DECREMENT_SUCCESS":
11790 kshitij.so 1267
            sheet.write(sheet_iterator, 39, math.ceil(mpHistory.proposedSellingPrice))
11776 kshitij.so 1268
        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_INCREMENT_SUCCESS":
11790 kshitij.so 1269
            sheet.write(sheet_iterator, 39, math.ceil(mpHistory.ourSellingPrice+max(10,.01*mpHistory.ourSellingPrice)))
11776 kshitij.so 1270
 
11193 kshitij.so 1271
        sheet_iterator+=1
1272
 
11615 kshitij.so 1273
    buyBoxItems[:] = []
11193 kshitij.so 1274
 
11615 kshitij.so 1275
    sheet = wbk.add_sheet('Pref Not Cheap')
11193 kshitij.so 1276
 
1277
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1278
 
1279
    excel_integer_format = '0'
1280
    integer_style = xlwt.XFStyle()
1281
    integer_style.num_format_str = excel_integer_format
1282
    xstr = lambda s: s or ""
1283
 
1284
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1285
 
1286
    excel_integer_format = '0'
1287
    integer_style = xlwt.XFStyle()
1288
    integer_style.num_format_str = excel_integer_format
1289
 
1290
    sheet.write(0, 0, "Item ID", heading_xf)
1291
    sheet.write(0, 1, "Category", heading_xf)
1292
    sheet.write(0, 2, "Product Group.", heading_xf)
1293
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1294
    sheet.write(0, 4, "Brand", heading_xf)
1295
    sheet.write(0, 5, "Product Name", heading_xf)
1296
    sheet.write(0, 6, "Weight", heading_xf)
1297
    sheet.write(0, 7, "Courier Cost", heading_xf)
1298
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1299
    sheet.write(0, 9, "Commission Rate", heading_xf)
1300
    sheet.write(0, 10, "Return Provision", heading_xf)
1301
    sheet.write(0, 11, "Our Rating", heading_xf)
1302
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1303
    sheet.write(0, 13, "Our Rank", heading_xf)
1304
    sheet.write(0, 14, "Our SP", heading_xf)
1305
    sheet.write(0, 15, "Our TP", heading_xf)
1306
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1307
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1308
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1309
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1310
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1311
    sheet.write(0, 21, "Preffered Seller", heading_xf)
1312
    sheet.write(0, 22, "Preffered Seller Rating", heading_xf)
1313
    sheet.write(0, 23, "Preffered Seller Shipping Time", heading_xf)
1314
    sheet.write(0, 24, "Preffered Seller SP", heading_xf)
1315
    sheet.write(0, 25, "Preffered Seller TP", heading_xf)
1316
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1317
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1318
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1319
    sheet.write(0, 29, "Average Sale", heading_xf)
1320
    sheet.write(0, 30, "Our NLC", heading_xf)
1321
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1322
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1323
    sheet.write(0, 33, "Target SP", heading_xf)
1324
    sheet.write(0, 34, "Target TP", heading_xf)  
1325
    sheet.write(0, 35, "Total Seller", heading_xf)
1326
    sheet.write(0, 36, "Auto Pricing Decision", heading_xf)
1327
    sheet.write(0, 37, "Reason", heading_xf)
1328
    sheet.write(0, 38, "Updated Price", heading_xf)
11775 kshitij.so 1329
 
11193 kshitij.so 1330
    sheet_iterator = 1
11615 kshitij.so 1331
 
11622 kshitij.so 1332
    prefNotCheapItems = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1333
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1334
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1335
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1336
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1337
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.PREF_BUT_NOT_CHEAP).all()
1338
 
1339
 
1340
    for item in prefNotCheapItems:
1341
        mpHistory = item[0]
1342
        flipkartItem = item[1]
1343
        mpItem = item[2]
1344
        catItem = item[3]
1345
        sheet.write(sheet_iterator,0,mpHistory.item_id)
1346
        sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1347
        sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1348
        sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1349
        sheet.write(sheet_iterator,4,catItem.brand)
1350
        sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1351
        sheet.write(sheet_iterator,6,catItem.weight)
1352
        sheet.write(sheet_iterator,7,mpItem.courierCost)
1353
        sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1354
        sheet.write(sheet_iterator,9,mpItem.commission)
1355
        sheet.write(sheet_iterator,10,mpItem.returnProvision)
1356
        sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1357
#        ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1358
#        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1359
        sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
1360
        sheet.write(sheet_iterator,13,mpHistory.ourRank)
1361
        sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
1362
        sheet.write(sheet_iterator,15,mpHistory.ourTp)
1363
        sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
1364
        sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 1365
#        lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
1366
#        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 1367
        sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
1368
        sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
1369
        sheet.write(sheet_iterator,20,mpHistory.lowestTp)
1370
        sheet.write(sheet_iterator,21,mpHistory.prefferedSellerName)
1371
        sheet.write(sheet_iterator,22,mpHistory.prefferedSellerRating)
11615 kshitij.so 1372
#        secondLowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitSecondLowestSeller) if flipkartDetails.shippingTimeUpperLimitSecondLowestSeller==0\
1373
#        else str(flipkartDetails.shippingTimeLowerLimitSecondLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitSecondLowestSeller)
11790 kshitij.so 1374
        sheet.write(sheet_iterator,23,mpHistory.prefferedSellerShippingTime)
1375
        sheet.write(sheet_iterator,24,mpHistory.prefferedSellerSellingPrice)
1376
        sheet.write(sheet_iterator,25,mpHistory.prefferedSellerTp)
1377
        sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 1378
        if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1379
            sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 1380
        else:
11790 kshitij.so 1381
            sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1382
        sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1383
        sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
1384
        sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
1385
        sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
1386
        sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
11775 kshitij.so 1387
        proposed_sp = max(mpHistory.lowestSellingPrice - max((10, mpHistory.lowestSellingPrice*0.001)), mpHistory.lowestPossibleSp)
11615 kshitij.so 1388
        proposed_tp = getTargetTp(proposed_sp,mpItem)
1389
        target_nlc = proposed_tp -  mpHistory.lowestPossibleTp + mpHistory.ourNlc
11790 kshitij.so 1390
        sheet.write(sheet_iterator, 33, proposed_sp)
1391
        sheet.write(sheet_iterator, 34, proposed_tp)
1392
        sheet.write(sheet_iterator, 35, mpHistory.totalSeller)
11775 kshitij.so 1393
        if mpHistory.decision is None:
11790 kshitij.so 1394
            sheet.write(sheet_iterator, 36, 'Auto Pricing Inactive')
11775 kshitij.so 1395
            sheet_iterator+=1
1396
            continue
11790 kshitij.so 1397
        sheet.write(sheet_iterator, 36, Decision._VALUES_TO_NAMES.get(mpHistory.decision))
1398
        sheet.write(sheet_iterator, 37, mpHistory.reason)
11776 kshitij.so 1399
        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_DECREMENT_SUCCESS":
11790 kshitij.so 1400
            sheet.write(sheet_iterator, 38, math.ceil(mpHistory.proposedSellingPrice))
11776 kshitij.so 1401
        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_INCREMENT_SUCCESS":
11790 kshitij.so 1402
            sheet.write(sheet_iterator, 38, math.ceil(mpHistory.ourSellingPrice+max(10,.01*mpHistory.ourSellingPrice)))
11775 kshitij.so 1403
 
11193 kshitij.so 1404
        sheet_iterator+=1
11615 kshitij.so 1405
 
1406
    prefNotCheapItems[:] = []
11193 kshitij.so 1407
 
1408
    sheet = wbk.add_sheet('Cheap But Not Pref')
1409
 
1410
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1411
 
1412
    excel_integer_format = '0'
1413
    integer_style = xlwt.XFStyle()
1414
    integer_style.num_format_str = excel_integer_format
1415
    xstr = lambda s: s or ""
1416
 
1417
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1418
 
1419
    excel_integer_format = '0'
1420
    integer_style = xlwt.XFStyle()
1421
    integer_style.num_format_str = excel_integer_format
1422
 
1423
    sheet.write(0, 0, "Item ID", heading_xf)
1424
    sheet.write(0, 1, "Category", heading_xf)
1425
    sheet.write(0, 2, "Product Group.", heading_xf)
1426
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1427
    sheet.write(0, 4, "Brand", heading_xf)
1428
    sheet.write(0, 5, "Product Name", heading_xf)
1429
    sheet.write(0, 6, "Weight", heading_xf)
1430
    sheet.write(0, 7, "Courier Cost", heading_xf)
1431
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1432
    sheet.write(0, 9, "Commission Rate", heading_xf)
1433
    sheet.write(0, 10, "Return Provision", heading_xf)
1434
    sheet.write(0, 11, "Our Rank", heading_xf)
1435
    sheet.write(0, 12, "Lowest Seller", heading_xf)
1436
    sheet.write(0, 13, "Our Rating", heading_xf)
1437
    sheet.write(0, 14, "Our Shipping Time", heading_xf)
1438
    sheet.write(0, 15, "Our SP", heading_xf)
1439
    sheet.write(0, 16, "Our TP", heading_xf)
1440
    sheet.write(0, 17, "Preffered Seller", heading_xf)
1441
    sheet.write(0, 18, "Preffered Seller Rating", heading_xf)
1442
    sheet.write(0, 19, "Preffered Seller Shipping Time", heading_xf)
1443
    sheet.write(0, 20, "Preffered Seller SP", heading_xf)
1444
    sheet.write(0, 21, "Preffered Seller TP", heading_xf)
1445
    sheet.write(0, 22, "Our Flipkart Inventory", heading_xf)
1446
    sheet.write(0, 23, "Our Net Availability",heading_xf)
1447
    sheet.write(0, 24, "Last Five Day Sale", heading_xf)
1448
    sheet.write(0, 25, "Average Sale", heading_xf)
1449
    sheet.write(0, 26, "Our NLC", heading_xf)
1450
    sheet.write(0, 27, "Lowest Possible SP", heading_xf)
1451
    sheet.write(0, 28, "Lowest Possible TP", heading_xf)
1452
    sheet.write(0, 29, "Total Seller", heading_xf)
11193 kshitij.so 1453
    sheet_iterator = 1
11615 kshitij.so 1454
 
11622 kshitij.so 1455
    cheapNotPrefferedItems = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1456
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1457
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1458
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1459
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1460
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.CHEAP_BUT_NOT_PREF).all()
1461
 
1462
    for item in cheapNotPrefferedItems:
1463
        mpHistory = item[0]
1464
        flipkartItem = item[1]
1465
        mpItem = item[2]
1466
        catItem = item[3]
1467
        sheet.write(sheet_iterator,0,mpHistory.item_id)
1468
        sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1469
        sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1470
        sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1471
        sheet.write(sheet_iterator,4,catItem.brand)
1472
        sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1473
        sheet.write(sheet_iterator,6,catItem.weight)
1474
        sheet.write(sheet_iterator,7,mpItem.courierCost)
1475
        sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1476
        sheet.write(sheet_iterator,9,mpItem.commission)
1477
        sheet.write(sheet_iterator,10,mpItem.returnProvision)
1478
        sheet.write(sheet_iterator,11,mpHistory.ourRank)
1479
        sheet.write(sheet_iterator,12,mpHistory.lowestSellerName)
1480
        sheet.write(sheet_iterator,13,mpHistory.ourRating)
11615 kshitij.so 1481
#        ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1482
#        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1483
        sheet.write(sheet_iterator,14,mpHistory.lowestSellerShippingTime)
1484
        sheet.write(sheet_iterator,15,mpHistory.lowestSellingPrice)
1485
        sheet.write(sheet_iterator,16,mpHistory.lowestTp)
1486
        sheet.write(sheet_iterator,17,mpHistory.prefferedSellerName)
1487
        sheet.write(sheet_iterator,18,mpHistory.prefferedSellerRating)
11615 kshitij.so 1488
#        prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
1489
#        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
11790 kshitij.so 1490
        sheet.write(sheet_iterator,19,mpHistory.prefferedSellerShippingTime)
1491
        sheet.write(sheet_iterator,20,mpHistory.prefferedSellerSellingPrice)
1492
        sheet.write(sheet_iterator,21,mpHistory.prefferedSellerTp)
1493
        sheet.write(sheet_iterator,22,mpHistory.ourInventory)
11615 kshitij.so 1494
        if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1495
            sheet.write(sheet_iterator, 23, 'Info not available')
11193 kshitij.so 1496
        else:
11790 kshitij.so 1497
            sheet.write(sheet_iterator, 23, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1498
        sheet.write(sheet_iterator, 24, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1499
        sheet.write(sheet_iterator, 25, (itemSaleMap.get(mpHistory.item_id))[3])
1500
        sheet.write(sheet_iterator, 26, mpHistory.ourNlc)
1501
        sheet.write(sheet_iterator, 27, mpHistory.lowestPossibleSp)
1502
        sheet.write(sheet_iterator, 28, mpHistory.lowestPossibleTp)
11193 kshitij.so 1503
        #proposed_sp = max(flipkartDetails.secondLowestSellerSp - max((20, flipkartDetails.secondLowestSellerSp*0.002)), flipkartPricing.lowestPossibleSp)
1504
        #proposed_tp = getTargetTp(proposed_sp,mpItem)
1505
        #target_nlc = proposed_tp - flipkartPricing.lowestPossibleTp + flipkartItemInfo.nlc
11790 kshitij.so 1506
        sheet.write(sheet_iterator, 29, mpHistory.totalSeller)
11193 kshitij.so 1507
        sheet_iterator+=1
11615 kshitij.so 1508
 
1509
    cheapNotPrefferedItems[:]=[]
11193 kshitij.so 1510
 
1511
    sheet = wbk.add_sheet('Can Compete-With Inventory')
1512
    xstr = lambda s: s or ""
1513
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1514
 
1515
    excel_integer_format = '0'
1516
    integer_style = xlwt.XFStyle()
1517
    integer_style.num_format_str = excel_integer_format
1518
 
1519
    sheet.write(0, 0, "Item ID", heading_xf)
1520
    sheet.write(0, 1, "Category", heading_xf)
1521
    sheet.write(0, 2, "Product Group.", heading_xf)
1522
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1523
    sheet.write(0, 4, "Brand", heading_xf)
1524
    sheet.write(0, 5, "Product Name", heading_xf)
1525
    sheet.write(0, 6, "Weight", heading_xf)
1526
    sheet.write(0, 7, "Courier Cost", heading_xf)
1527
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1528
    sheet.write(0, 9, "Commission Rate", heading_xf)
1529
    sheet.write(0, 10, "Return Provision", heading_xf)
1530
    sheet.write(0, 11, "Our Rating", heading_xf)
1531
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1532
    sheet.write(0, 13, "Our Rank", heading_xf)
1533
    sheet.write(0, 14, "Our SP", heading_xf)
1534
    sheet.write(0, 15, "Our TP", heading_xf)
1535
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1536
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1537
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1538
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1539
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1540
    sheet.write(0, 21, "Preffered Seller", heading_xf)
1541
    sheet.write(0, 22, "Preffered Seller Rating", heading_xf)
1542
    sheet.write(0, 23, "Preffered Seller Shipping Time", heading_xf)
1543
    sheet.write(0, 24, "Preffer Seller SP", heading_xf)
1544
    sheet.write(0, 25, "Preffered Seller TP", heading_xf)
1545
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1546
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1547
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1548
    sheet.write(0, 29, "Average Sale", heading_xf)
1549
    sheet.write(0, 30, "Our NLC", heading_xf)
1550
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1551
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1552
    sheet.write(0, 33, "Target SP", heading_xf)
1553
    sheet.write(0, 34, "Target TP", heading_xf)  
1554
    sheet.write(0, 35, "Target NLC", heading_xf)
1555
    sheet.write(0, 36, "Sales Potential", heading_xf)
1556
    sheet.write(0, 37, "Total Seller", heading_xf)
1557
    sheet.write(0, 38, "Auto Pricing Decision", heading_xf)
1558
    sheet.write(0, 39, "Reason", heading_xf)
1559
    sheet.write(0, 40, "Updated Price", heading_xf)
11193 kshitij.so 1560
    sheet_iterator = 1
11615 kshitij.so 1561
 
11622 kshitij.so 1562
    competitiveItems = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1563
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1564
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1565
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1566
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1567
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.COMPETITIVE).all()
1568
 
1569
    for item in competitiveItems:
1570
        mpHistory = item[0]
1571
        flipkartItem = item[1]
1572
        mpItem = item[2]
1573
        catItem = item[3]
1574
        sheet.write(sheet_iterator,0,mpHistory.item_id)
1575
        sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1576
        sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1577
        sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1578
        sheet.write(sheet_iterator,4,catItem.brand)
1579
        sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1580
        sheet.write(sheet_iterator,6,catItem.weight)
1581
        sheet.write(sheet_iterator,7,mpItem.courierCost)
1582
        sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1583
        sheet.write(sheet_iterator,9,mpItem.commission)
1584
        sheet.write(sheet_iterator,10,mpItem.returnProvision)
1585
        sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1586
#        ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1587
#        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1588
        sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
1589
        sheet.write(sheet_iterator,13,mpHistory.ourRank)
1590
        sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
1591
        sheet.write(sheet_iterator,15,mpHistory.ourTp)
1592
        sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
1593
        sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 1594
#        lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
1595
#        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 1596
        sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
1597
        sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
1598
        sheet.write(sheet_iterator,20,mpHistory.lowestTp)
1599
        sheet.write(sheet_iterator,21,mpHistory.prefferedSellerName)
1600
        sheet.write(sheet_iterator,22,mpHistory.prefferedSellerRating)
11615 kshitij.so 1601
#        prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
1602
#        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
11790 kshitij.so 1603
        sheet.write(sheet_iterator,23,mpHistory.prefferedSellerShippingTime)
1604
        sheet.write(sheet_iterator,24,mpHistory.prefferedSellerSellingPrice)
1605
        sheet.write(sheet_iterator,25,mpHistory.prefferedSellerTp)
1606
        sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 1607
        if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1608
            sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 1609
        else:
11790 kshitij.so 1610
            sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1611
        sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1612
        sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
1613
        sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
1614
        sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
1615
        sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
11775 kshitij.so 1616
        proposed_sp = max(mpHistory.lowestSellingPrice - max((10, mpHistory.lowestSellingPrice*0.001)), mpHistory.lowestPossibleSp)
11193 kshitij.so 1617
        proposed_tp = getTargetTp(proposed_sp,mpItem)
11615 kshitij.so 1618
        target_nlc = proposed_tp - mpHistory.lowestPossibleTp + mpHistory.ourNlc
11790 kshitij.so 1619
        sheet.write(sheet_iterator, 33, proposed_sp)
1620
        sheet.write(sheet_iterator, 34, proposed_tp)
1621
        sheet.write(sheet_iterator, 35, target_nlc)
1622
        sheet.write(sheet_iterator, 36, getSalesPotential(mpHistory.lowestSellingPrice,mpHistory.ourNlc))
1623
        sheet.write(sheet_iterator, 37, mpHistory.totalSeller)
11775 kshitij.so 1624
        if mpHistory.decision is None:
11790 kshitij.so 1625
            sheet.write(sheet_iterator, 38, 'Auto Pricing Inactive')
11775 kshitij.so 1626
            sheet_iterator+=1
1627
            continue
11790 kshitij.so 1628
        sheet.write(sheet_iterator, 38, Decision._VALUES_TO_NAMES.get(mpHistory.decision))
1629
        sheet.write(sheet_iterator, 39, mpHistory.reason)
11776 kshitij.so 1630
        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_DECREMENT_SUCCESS":
11790 kshitij.so 1631
            sheet.write(sheet_iterator, 40, math.ceil(mpHistory.proposedSellingPrice))
11776 kshitij.so 1632
        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_INCREMENT_SUCCESS":
11790 kshitij.so 1633
            sheet.write(sheet_iterator, 40, math.ceil(mpHistory.ourSellingPrice+max(10,.01*mpHistory.ourSellingPrice)))
11775 kshitij.so 1634
 
11193 kshitij.so 1635
        sheet_iterator+=1
11615 kshitij.so 1636
 
1637
    competitiveItems[:]=[]
1638
 
11193 kshitij.so 1639
    sheet = wbk.add_sheet('Negative Margin')
1640
    xstr = lambda s: s or ""
1641
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1642
 
1643
    excel_integer_format = '0'
1644
    integer_style = xlwt.XFStyle()
1645
    integer_style.num_format_str = excel_integer_format
1646
 
1647
    sheet.write(0, 0, "Item ID", heading_xf)
1648
    sheet.write(0, 1, "Category", heading_xf)
1649
    sheet.write(0, 2, "Product Group.", heading_xf)
1650
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1651
    sheet.write(0, 4, "Brand", heading_xf)
1652
    sheet.write(0, 5, "Product Name", heading_xf)
1653
    sheet.write(0, 6, "Weight", heading_xf)
1654
    sheet.write(0, 7, "Courier Cost", heading_xf)
1655
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1656
    sheet.write(0, 9, "Commission Rate", heading_xf)
1657
    sheet.write(0, 10, "Return Provision", heading_xf)
1658
    sheet.write(0, 11, "Our Rating", heading_xf)
1659
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1660
    sheet.write(0, 13, "Our Rank", heading_xf)
1661
    sheet.write(0, 14, "Our SP", heading_xf)
1662
    sheet.write(0, 15, "Our TP", heading_xf)
1663
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1664
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1665
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1666
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1667
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1668
    sheet.write(0, 21, "Preffered Seller", heading_xf)
1669
    sheet.write(0, 22, "Preffered Seller Rating", heading_xf)
1670
    sheet.write(0, 23, "Preffered Seller Shipping Time", heading_xf)
1671
    sheet.write(0, 24, "Preffer Seller SP", heading_xf)
1672
    sheet.write(0, 25, "Preffered Seller TP", heading_xf)
1673
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1674
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1675
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1676
    sheet.write(0, 29, "Average Sale", heading_xf)
1677
    sheet.write(0, 30, "Our NLC", heading_xf)
1678
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1679
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1680
    sheet.write(0, 33, "Margin", heading_xf)
1681
    sheet.write(0, 34, "Total Seller", heading_xf)
11193 kshitij.so 1682
    sheet_iterator = 1
11615 kshitij.so 1683
 
11622 kshitij.so 1684
    negativeMargin = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1685
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1686
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1687
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1688
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1689
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.NEGATIVE_MARGIN).all()
1690
 
11193 kshitij.so 1691
    for item in negativeMargin:
11615 kshitij.so 1692
        mpHistory = item[0]
1693
        flipkartItem = item[1]
1694
        mpItem = item[2]
1695
        catItem = item[3]
1696
        sheet.write(sheet_iterator,0,mpHistory.item_id)
1697
        sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1698
        sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1699
        sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1700
        sheet.write(sheet_iterator,4,catItem.brand)
1701
        sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1702
        sheet.write(sheet_iterator,6,catItem.weight)
1703
        sheet.write(sheet_iterator,7,mpItem.courierCost)
1704
        sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1705
        sheet.write(sheet_iterator,9,mpItem.commission)
1706
        sheet.write(sheet_iterator,10,mpItem.returnProvision)
1707
        sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1708
#        ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1709
#        else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1710
        sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
1711
        sheet.write(sheet_iterator,13,mpHistory.ourRank)
1712
        sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
1713
        sheet.write(sheet_iterator,15,mpHistory.ourTp)
1714
        sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
1715
        sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 1716
#        lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
1717
#        else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 1718
        sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
1719
        sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
1720
        sheet.write(sheet_iterator,20,mpHistory.lowestTp)
1721
        sheet.write(sheet_iterator,21,mpHistory.prefferedSellerName)
1722
        sheet.write(sheet_iterator,22,mpHistory.prefferedSellerRating)
11615 kshitij.so 1723
#        prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
1724
#        else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
11790 kshitij.so 1725
        sheet.write(sheet_iterator,23,mpHistory.prefferedSellerShippingTime)
1726
        sheet.write(sheet_iterator,24,mpHistory.prefferedSellerSellingPrice)
1727
        sheet.write(sheet_iterator,25,mpHistory.prefferedSellerTp)
1728
        sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 1729
        if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1730
            sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 1731
        else:
11790 kshitij.so 1732
            sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1733
        sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1734
        sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
1735
        sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
1736
        sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
1737
        sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
1738
        sheet.write(sheet_iterator, 33, round((mpHistory.ourTp - mpHistory.lowestPossibleTp),2))
1739
        sheet.write(sheet_iterator, 34, mpHistory.totalSeller)
11193 kshitij.so 1740
        sheet_iterator+=1
11615 kshitij.so 1741
 
1742
    negativeMargin[:]=[]
11193 kshitij.so 1743
 
1744
    if (runType=='FULL'):    
1745
        sheet = wbk.add_sheet('Auto Favorites')
1746
 
1747
        heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1748
 
1749
        excel_integer_format = '0'
1750
        integer_style = xlwt.XFStyle()
1751
        integer_style.num_format_str = excel_integer_format
1752
        xstr = lambda s: s or ""
1753
 
1754
        sheet.write(0, 0, "Item ID", heading_xf)
1755
        sheet.write(0, 1, "Brand", heading_xf)
1756
        sheet.write(0, 2, "Product Name", heading_xf)
1757
        sheet.write(0, 3, "Auto Favourite", heading_xf)
1758
        sheet.write(0, 4, "Reason", heading_xf)
1759
 
1760
        sheet_iterator=1
1761
        for autoFav in nowAutoFav:
1762
            itemId = autoFav[0]
1763
            reason = autoFav[1]
1764
            it = Item.query.filter_by(id=itemId).one()
1765
            sheet.write(sheet_iterator, 0, itemId)
1766
            sheet.write(sheet_iterator, 1, it.brand)
1767
            sheet.write(sheet_iterator, 2, xstr(it.brand)+" "+xstr(it.model_name)+" "+xstr(it.model_number)+" "+xstr(it.color))
1768
            sheet.write(sheet_iterator, 3, "True")
1769
            sheet.write(sheet_iterator, 4, reason)
1770
            sheet_iterator+=1
1771
        for prevFav in previousAutoFav:
1772
            it = Item.query.filter_by(id=prevFav).one()
1773
            sheet.write(sheet_iterator, 0, prevFav)
1774
            sheet.write(sheet_iterator, 1, it.brand)
1775
            sheet.write(sheet_iterator, 2, xstr(it.brand)+" "+xstr(it.model_name)+" "+xstr(it.model_number)+" "+xstr(it.color))
1776
            sheet.write(sheet_iterator, 3, "False")
1777
            sheet_iterator+=1
1778
 
1779
    sheet = wbk.add_sheet('Exception Item List')
1780
 
1781
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1782
 
1783
    excel_integer_format = '0'
1784
    integer_style = xlwt.XFStyle()
1785
    integer_style.num_format_str = excel_integer_format
1786
    xstr = lambda s: s or ""
1787
 
1788
    sheet.write(0, 0, "Item ID", heading_xf)
1789
    sheet.write(0, 1, "FK Serial number", heading_xf)
1790
    sheet.write(0, 2, "Brand", heading_xf)
1791
    sheet.write(0, 3, "Product Name", heading_xf)
1792
    sheet.write(0, 4, "Reason", heading_xf)
1793
    sheet_iterator=1
11615 kshitij.so 1794
 
11622 kshitij.so 1795
    exeptionItems = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1796
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1797
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1798
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1799
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1800
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.EXCEPTION).all()
1801
 
1802
    for item in exeptionItems:
1803
        mpHistory = item[0]
1804
        flipkartItem = item[1]
1805
        mpItem = item[2]
1806
        catItem = item[3]
1807
        sheet.write(sheet_iterator, 0, mpHistory.item_id)
1808
        sheet.write(sheet_iterator, 1, flipkartItem.flipkartSerialNumber)
1809
        sheet.write(sheet_iterator, 2, catItem.brand)
1810
        sheet.write(sheet_iterator, 3, xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
11193 kshitij.so 1811
        try:
11615 kshitij.so 1812
            if mpHistory.totalSeller is None:
11193 kshitij.so 1813
                pass
1814
        except:
1815
            sheet.write(sheet_iterator, 4, "Unable to fetch info from Flipkart")
1816
            sheet_iterator+=1
1817
            continue
1818
        sheet.write(sheet_iterator, 4, "No Seller Available")
1819
        sheet_iterator+=1
11615 kshitij.so 1820
 
1821
    exeptionItems[:]=[]
11193 kshitij.so 1822
 
1823
    sheet = wbk.add_sheet('Can Compete-No Inv')
1824
    xstr = lambda s: s or ""
1825
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1826
 
1827
    excel_integer_format = '0'
1828
    integer_style = xlwt.XFStyle()
1829
    integer_style.num_format_str = excel_integer_format
1830
 
1831
    sheet.write(0, 0, "Item ID", heading_xf)
1832
    sheet.write(0, 1, "Category", heading_xf)
1833
    sheet.write(0, 2, "Product Group.", heading_xf)
1834
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1835
    sheet.write(0, 4, "Brand", heading_xf)
1836
    sheet.write(0, 5, "Product Name", heading_xf)
1837
    sheet.write(0, 6, "Weight", heading_xf)
1838
    sheet.write(0, 7, "Courier Cost", heading_xf)
1839
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1840
    sheet.write(0, 9, "Commission Rate", heading_xf)
1841
    sheet.write(0, 10, "Return Provision", heading_xf)
1842
    sheet.write(0, 11, "Our Rating", heading_xf)
1843
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1844
    sheet.write(0, 13, "Our Rank", heading_xf)
1845
    sheet.write(0, 14, "Our SP", heading_xf)
1846
    sheet.write(0, 15, "Our TP", heading_xf)
1847
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1848
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1849
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1850
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1851
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1852
    sheet.write(0, 21, "Preffered Seller", heading_xf)
1853
    sheet.write(0, 22, "Preffered Seller Rating", heading_xf)
1854
    sheet.write(0, 23, "Preffered Seller Shipping Time", heading_xf)
1855
    sheet.write(0, 24, "Preffer Seller SP", heading_xf)
1856
    sheet.write(0, 25, "Preffered Seller TP", heading_xf)
1857
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1858
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1859
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1860
    sheet.write(0, 29, "Average Sale", heading_xf)
1861
    sheet.write(0, 30, "Our NLC", heading_xf)
1862
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1863
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1864
    sheet.write(0, 33, "Target SP", heading_xf)
1865
    sheet.write(0, 34, "Target TP", heading_xf)  
1866
    sheet.write(0, 35, "Sales Potential", heading_xf)
1867
    sheet.write(0, 36, "Total Seller", heading_xf)
11193 kshitij.so 1868
    sheet_iterator = 1
11615 kshitij.so 1869
 
11622 kshitij.so 1870
    competitiveNoInventory = session.query(MarketPlaceHistory,FlipkartItem,MarketplaceItems,Item)\
1871
    .join((FlipkartItem,MarketPlaceHistory.item_id==FlipkartItem.item_id))\
1872
    .join((MarketplaceItems,MarketPlaceHistory.item_id==MarketplaceItems.itemId))\
1873
    .join((Item,MarketPlaceHistory.item_id==Item.id))\
11615 kshitij.so 1874
    .filter(MarketplaceItems.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.source==OrderSource.FLIPKART)\
1875
    .filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.COMPETITIVE_NO_INVENTORY).all()
1876
 
11193 kshitij.so 1877
    for item in competitiveNoInventory:
11615 kshitij.so 1878
        mpHistory = item[0]
1879
        flipkartItem = item[1]
1880
        mpItem = item[2]
1881
        catItem = item[3]
1882
        if ((not inventoryMap.has_key(mpHistory.item_id)) or getNetAvailability(inventoryMap.get(mpHistory.item_id))<=0):
1883
            sheet.write(sheet_iterator,0,mpHistory.item_id)
1884
            sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1885
            sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1886
            sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1887
            sheet.write(sheet_iterator,4,catItem.brand)
1888
            sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1889
            sheet.write(sheet_iterator,6,catItem.weight)
1890
            sheet.write(sheet_iterator,7,mpItem.courierCost)
1891
            sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1892
            sheet.write(sheet_iterator,9,mpItem.commission)
1893
            sheet.write(sheet_iterator,10,mpItem.returnProvision)
1894
            sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1895
#            ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1896
#            else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 1897
            sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
1898
            sheet.write(sheet_iterator,13,mpHistory.ourRank)
1899
            sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
1900
            sheet.write(sheet_iterator,15,mpHistory.ourTp)
1901
            sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
1902
            sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 1903
#            lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
1904
#            else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 1905
            sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
1906
            sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
1907
            sheet.write(sheet_iterator,20,mpHistory.lowestTp)
1908
            sheet.write(sheet_iterator,21,mpHistory.prefferedSellerName)
1909
            sheet.write(sheet_iterator,22,mpHistory.prefferedSellerRating)
11615 kshitij.so 1910
#            prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
1911
#            else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
11790 kshitij.so 1912
            sheet.write(sheet_iterator,23,mpHistory.prefferedSellerShippingTime)
1913
            sheet.write(sheet_iterator,24,mpHistory.prefferedSellerSellingPrice)
1914
            sheet.write(sheet_iterator,25,mpHistory.prefferedSellerTp)
1915
            sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 1916
            if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 1917
                sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 1918
            else:
11790 kshitij.so 1919
                sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
1920
            sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
1921
            sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
1922
            sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
1923
            sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
1924
            sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
11615 kshitij.so 1925
            proposed_sp = max(mpHistory.lowestSellingPrice - max((10, mpHistory.lowestSellingPrice*0.001)), mpHistory.lowestPossibleSp)
11193 kshitij.so 1926
            proposed_tp = getTargetTp(proposed_sp,mpItem)
11790 kshitij.so 1927
            sheet.write(sheet_iterator, 33, proposed_sp)
1928
            sheet.write(sheet_iterator, 34, proposed_tp)
1929
            sheet.write(sheet_iterator, 35, getSalesPotential(mpHistory.lowestPossibleSp,mpHistory.ourNlc))
1930
            sheet.write(sheet_iterator, 36, mpHistory.totalSeller)
11193 kshitij.so 1931
            sheet_iterator+=1
1932
 
11615 kshitij.so 1933
 
11193 kshitij.so 1934
    sheet = wbk.add_sheet('Can Compete-No Inv On FK')
1935
    xstr = lambda s: s or ""
1936
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
1937
 
1938
    excel_integer_format = '0'
1939
    integer_style = xlwt.XFStyle()
1940
    integer_style.num_format_str = excel_integer_format
1941
 
1942
    sheet.write(0, 0, "Item ID", heading_xf)
1943
    sheet.write(0, 1, "Category", heading_xf)
1944
    sheet.write(0, 2, "Product Group.", heading_xf)
1945
    sheet.write(0, 3, "FK Serial Number", heading_xf)
1946
    sheet.write(0, 4, "Brand", heading_xf)
1947
    sheet.write(0, 5, "Product Name", heading_xf)
1948
    sheet.write(0, 6, "Weight", heading_xf)
1949
    sheet.write(0, 7, "Courier Cost", heading_xf)
1950
    sheet.write(0, 8, "Risky", heading_xf)
11790 kshitij.so 1951
    sheet.write(0, 9, "Commission Rate", heading_xf)
1952
    sheet.write(0, 10, "Return Provision", heading_xf)
1953
    sheet.write(0, 11, "Our Rating", heading_xf)
1954
    sheet.write(0, 12, "Our Shipping Time", heading_xf)
1955
    sheet.write(0, 13, "Our Rank", heading_xf)
1956
    sheet.write(0, 14, "Our SP", heading_xf)
1957
    sheet.write(0, 15, "Our TP", heading_xf)
1958
    sheet.write(0, 16, "Lowest Seller", heading_xf)
1959
    sheet.write(0, 17, "Lowest Seller Rating", heading_xf)
1960
    sheet.write(0, 18, "Lowest Seller Shipping Time", heading_xf)
1961
    sheet.write(0, 19, "Lowest Seller SP", heading_xf)
1962
    sheet.write(0, 20, "Lowest Seller TP", heading_xf)
1963
    sheet.write(0, 21, "Preffered Seller", heading_xf)
1964
    sheet.write(0, 22, "Preffered Seller Rating", heading_xf)
1965
    sheet.write(0, 23, "Preffered Seller Shipping Time", heading_xf)
1966
    sheet.write(0, 24, "Preffer Seller SP", heading_xf)
1967
    sheet.write(0, 25, "Preffered Seller TP", heading_xf)
1968
    sheet.write(0, 26, "Our Flipkart Inventory", heading_xf)
1969
    sheet.write(0, 27, "Our Net Availability",heading_xf)
1970
    sheet.write(0, 28, "Last Five Day Sale", heading_xf)
1971
    sheet.write(0, 29, "Average Sale", heading_xf)
1972
    sheet.write(0, 30, "Our NLC", heading_xf)
1973
    sheet.write(0, 31, "Lowest Possible SP", heading_xf)
1974
    sheet.write(0, 32, "Lowest Possible TP", heading_xf)
1975
    sheet.write(0, 33, "Target SP", heading_xf)
1976
    sheet.write(0, 34, "Target TP", heading_xf)  
1977
    sheet.write(0, 35, "Sales Potential", heading_xf)
1978
    sheet.write(0, 36, "Total Seller", heading_xf)
11193 kshitij.so 1979
    sheet_iterator = 1
1980
    for item in competitiveNoInventory:
11615 kshitij.so 1981
        mpHistory = item[0]
1982
        flipkartItem = item[1]
1983
        mpItem = item[2]
1984
        catItem = item[3]
1985
        if (inventoryMap.has_key(mpHistory.item_id) and getNetAvailability(inventoryMap.get(mpHistory.item_id))>0):
1986
            sheet.write(sheet_iterator,0,mpHistory.item_id)
1987
            sheet.write(sheet_iterator,1,categoryMap.get(catItem.category)[0])
1988
            sheet.write(sheet_iterator,2,categoryMap.get(catItem.category)[1])
1989
            sheet.write(sheet_iterator,3,flipkartItem.flipkartSerialNumber)
1990
            sheet.write(sheet_iterator,4,catItem.brand)
1991
            sheet.write(sheet_iterator,5,xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color))
1992
            sheet.write(sheet_iterator,6,catItem.weight)
1993
            sheet.write(sheet_iterator,7,mpItem.courierCost)
1994
            sheet.write(sheet_iterator,8,catItem.risky)
11790 kshitij.so 1995
            sheet.write(sheet_iterator,9,mpItem.commission)
1996
            sheet.write(sheet_iterator,10,mpItem.returnProvision)
1997
            sheet.write(sheet_iterator,11,mpHistory.ourRating)
11615 kshitij.so 1998
#            ourShippingTime= str(flipkartDetails.shippingTimeLowerLimitOur) if flipkartDetails.shippingTimeUpperLimitOur==0\
1999
#            else str(flipkartDetails.shippingTimeLowerLimitOur)+'-'+str(flipkartDetails.shippingTimeUpperLimitOur)
11790 kshitij.so 2000
            sheet.write(sheet_iterator,12,mpHistory.ourShippingTime)
2001
            sheet.write(sheet_iterator,13,mpHistory.ourRank)
2002
            sheet.write(sheet_iterator,14,mpHistory.ourSellingPrice)
2003
            sheet.write(sheet_iterator,15,mpHistory.ourTp)
2004
            sheet.write(sheet_iterator,16,mpHistory.lowestSellerName)
2005
            sheet.write(sheet_iterator,17,mpHistory.lowestSellerRating)
11615 kshitij.so 2006
#            lowestSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitLowestSeller) if flipkartDetails.shippingTimeUpperLimitLowestSeller==0\
2007
#            else str(flipkartDetails.shippingTimeLowerLimitLowestSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitLowestSeller)
11790 kshitij.so 2008
            sheet.write(sheet_iterator,18,mpHistory.lowestSellerShippingTime)
2009
            sheet.write(sheet_iterator,19,mpHistory.lowestSellingPrice)
2010
            sheet.write(sheet_iterator,20,mpHistory.lowestTp)
2011
            sheet.write(sheet_iterator,21,mpHistory.prefferedSellerName)
2012
            sheet.write(sheet_iterator,22,mpHistory.prefferedSellerRating)
11615 kshitij.so 2013
#            prefferedSellerShippingTime= str(flipkartDetails.shippingTimeLowerLimitPrefSeller) if flipkartDetails.shippingTimeUpperLimitPrefSeller==0\
2014
#            else str(flipkartDetails.shippingTimeLowerLimitPrefSeller)+'-'+str(flipkartDetails.shippingTimeUpperLimitPrefSeller)
11790 kshitij.so 2015
            sheet.write(sheet_iterator,23,mpHistory.prefferedSellerShippingTime)
2016
            sheet.write(sheet_iterator,24,mpHistory.prefferedSellerSellingPrice)
2017
            sheet.write(sheet_iterator,25,mpHistory.prefferedSellerTp)
2018
            sheet.write(sheet_iterator,26,mpHistory.ourInventory)
11615 kshitij.so 2019
            if (not inventoryMap.has_key(mpHistory.item_id)):
11790 kshitij.so 2020
                sheet.write(sheet_iterator, 27, 'Info not available')
11193 kshitij.so 2021
            else:
11790 kshitij.so 2022
                sheet.write(sheet_iterator, 27, getNetAvailability(inventoryMap.get(mpHistory.item_id)))
2023
            sheet.write(sheet_iterator, 28, getOosString((itemSaleMap.get(mpHistory.item_id))[1]))
2024
            sheet.write(sheet_iterator, 29, (itemSaleMap.get(mpHistory.item_id))[3])
2025
            sheet.write(sheet_iterator, 30, mpHistory.ourNlc)
2026
            sheet.write(sheet_iterator, 31, mpHistory.lowestPossibleSp)
2027
            sheet.write(sheet_iterator, 32, mpHistory.lowestPossibleTp)
11615 kshitij.so 2028
            proposed_sp = max(mpHistory.lowestSellingPrice - max((10, mpHistory.lowestSellingPrice*0.001)), mpHistory.lowestPossibleSp)
11193 kshitij.so 2029
            proposed_tp = getTargetTp(proposed_sp,mpItem)
11790 kshitij.so 2030
            sheet.write(sheet_iterator, 33, proposed_sp)
2031
            sheet.write(sheet_iterator, 34, proposed_tp)
2032
            sheet.write(sheet_iterator, 35, getSalesPotential(mpHistory.lowestPossibleSp,mpHistory.ourNlc))
2033
            sheet.write(sheet_iterator, 36, mpHistory.totalSeller)
11193 kshitij.so 2034
            sheet_iterator+=1
11615 kshitij.so 2035
    competitiveNoInventory[:]=[]
11193 kshitij.so 2036
 
11775 kshitij.so 2037
#    autoPricingItems = session.query(MarketPlaceHistory,Item).join((Item,MarketPlaceHistory.item_id==Item.id)).filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.decision.in_([1,2,3,4])).all()
2038
#    sheet = wbk.add_sheet('Auto Inc and Dec')
2039
#
2040
#    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
2041
#    
2042
#    excel_integer_format = '0'
2043
#    integer_style = xlwt.XFStyle()
2044
#    integer_style.num_format_str = excel_integer_format
2045
#    xstr = lambda s: s or ""
2046
#    
2047
#    sheet.write(0, 0, "Item ID", heading_xf)
2048
#    sheet.write(0, 1, "Brand", heading_xf)
2049
#    sheet.write(0, 2, "Product Name", heading_xf)
2050
#    sheet.write(0, 3, "Decision", heading_xf)
2051
#    sheet.write(0, 4, "Reason", heading_xf)
2052
#    sheet.write(0, 5, "Old Selling Price", heading_xf)
2053
#    sheet.write(0, 6, "Selling Price Updated",heading_xf)
2054
#    
2055
#    sheet_iterator=1
2056
#    for autoPricingItem in autoPricingItems:
2057
#        mpHistory = autoPricingItem[0]
2058
#        item = autoPricingItem[1]
2059
#        it = Item.query.filter_by(id=item.id).one()
2060
#        sheet.write(sheet_iterator, 0, item.id)
2061
#        sheet.write(sheet_iterator, 1, it.brand)
2062
#        sheet.write(sheet_iterator, 2, xstr(it.brand)+" "+xstr(it.model_name)+" "+xstr(it.model_number)+" "+xstr(it.color))
2063
#        sheet.write(sheet_iterator, 3, Decision._VALUES_TO_NAMES.get(mpHistory.decision))
2064
#        sheet.write(sheet_iterator, 4, mpHistory.reason)
2065
#        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_DECREMENT_SUCCESS":
2066
#            sheet.write(sheet_iterator, 5, mpHistory.ourSellingPrice)
2067
#            sheet.write(sheet_iterator, 6, math.ceil(mpHistory.proposedSellingPrice))
2068
#        if Decision._VALUES_TO_NAMES.get(mpHistory.decision) == "AUTO_INCREMENT_SUCCESS":
2069
#            sheet.write(sheet_iterator, 5, mpHistory.ourSellingPrice)
2070
#            sheet.write(sheet_iterator, 6, math.ceil(mpHistory.ourSellingPrice+max(10,.01*mpHistory.ourSellingPrice)))
2071
#        sheet_iterator+=1
11193 kshitij.so 2072
 
2073
    filename = "/tmp/flipkart-report-"+runType+" " + str(timestamp) + ".xls"
2074
    wbk.save(filename)
2075
    try:
12181 kshitij.so 2076
        EmailAttachmentSender.mail("build@shop2020.in", "cafe@nes", ["kshitij.sood@saholic.com"], " Flipkart Auto Pricing "+runType+" " + str(timestamp), "", [get_attachment_part(filename)], [""], [])
2077
        #EmailAttachmentSender.mail("build@shop2020.in", "cafe@nes", ["chandan.kumar@saholic.com","manoj.kumar@saholic.com","yukti.jain@saholic.com","ankush.dhingra@saholic.com","manoj.pal@saholic.com"], " Flipkart Scraping "+runType+" " + str(timestamp), "", [get_attachment_part(filename)], ["rajneesh.arora@saholic.com","anikendra.das@saholic.com","vikram.raghav@saholic.com","kshitij.sood@saholic.com","chaitnaya.vats@saholic.com","khushal.bhatia@saholic.com"], [])
11193 kshitij.so 2078
    except Exception as e:
2079
        print e
2080
        print "Unable to send report.Trying with local SMTP"
2081
        smtpServer = smtplib.SMTP('localhost')
2082
        smtpServer.set_debuglevel(1)
11779 kshitij.so 2083
        sender = 'build@shop2020.in'
12181 kshitij.so 2084
        recipients = ["kshitij.sood@saholic.com"]
11193 kshitij.so 2085
        msg = MIMEMultipart()
11228 kshitij.so 2086
        msg['Subject'] = "Flipkart Scraping" + ' '+runType+' - ' + str(datetime.now())
11193 kshitij.so 2087
        msg['From'] = sender
12181 kshitij.so 2088
        #recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','vikram.raghav@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
11193 kshitij.so 2089
        msg['To'] = ",".join(recipients)
2090
        fileMsg = email.mime.base.MIMEBase('application','vnd.ms-excel')
2091
        fileMsg.set_payload(file(filename).read())
2092
        email.encoders.encode_base64(fileMsg)
2093
        fileMsg.add_header('Content-Disposition','attachment;filename=flipkart.xls')
2094
        msg.attach(fileMsg)
2095
        try:
2096
            smtpServer.sendmail(sender, recipients, msg.as_string())
2097
            print "Successfully sent email"
2098
        except:
2099
            print "Error: unable to send email."
11560 kshitij.so 2100
 
11571 kshitij.so 2101
def populateScrapingResults(val):
2102
    try:
2103
        flipkartDetails = fetchDetails(val.fkSerialNumber,scraper)
2104
        val.flipkartDetails = flipkartDetails 
2105
    except Exception as e:
2106
        print "Unable to fetch details of",val.fkSerialNumber
2107
        print e
2108
        val.flipkartDetails = None
2109
        return
2110
 
12181 kshitij.so 2111
#    try:
2112
#        request_url = "https://api.flipkart.net/sellers/skus/%s/listings"%(str(val.skuAtFlipkart))
2113
#        r = requests.get(request_url, auth=('m2z93iskuj81qiid', '0c7ab6a5-98c0-4cdc-8be3-72c591e0add4'))
2114
#        print "Inventory info",r.json()
2115
#        stock_count = int((r.json()['attributeValues'])['stock_count'])
2116
#    except:
2117
#        stock_count = 0
2118
#    finally:
2119
#        r={}
2120
#    
2121
    val.ourFlipkartInventory = 0
11560 kshitij.so 2122
 
2123
def threadsToSpawn(runType,itemInfo,scraper,itemPopulated):
2124
    if runType == RunType.FAVOURITE:
11615 kshitij.so 2125
        count = 0
2126
        pool = ThreadPool(3)
2127
        startOffset = 0
11560 kshitij.so 2128
        endOffset = startOffset
11615 kshitij.so 2129
        while(count<3 and endOffset<len(itemInfo)):
11560 kshitij.so 2130
            endOffset = startOffset + 20
2131
            if (endOffset >= len(itemInfo)):
2132
                endOffset = len(itemInfo)
11615 kshitij.so 2133
            print "pool offset start end count"+str(startOffset)+" "+str(endOffset)+" "+str(count)
2134
            pool.map(populateScrapingResults,itemInfo[startOffset:endOffset])
2135
            #t = Process(target=decideCategory,args=(itemInfo[startOffset:endOffset], scraper))
2136
            #t = threading.Thread(target=partial(decideCategory, itemInfo[startOffset:endOffset], scraper))
11560 kshitij.so 2137
            #t = threading.Thread(target=partial(test, startOffset, endOffset))
11615 kshitij.so 2138
            #threads.append(t)
11560 kshitij.so 2139
            startOffset = startOffset + 20
11615 kshitij.so 2140
            count+=1
2141
        #[t.start() for t in threads]
2142
        #[t.join() for t in threads] 
2143
        #threads = []
2144
        pool.close()
2145
        pool.join()
11560 kshitij.so 2146
        return endOffset
2147
    else:
11561 kshitij.so 2148
        count = 0
12181 kshitij.so 2149
        pool = ThreadPool(10)
11581 kshitij.so 2150
        startOffset = 0
11560 kshitij.so 2151
        endOffset = startOffset
12184 kshitij.so 2152
        while(count<10 and endOffset<len(itemInfo)):
11581 kshitij.so 2153
            endOffset = startOffset + 20
11560 kshitij.so 2154
            if (endOffset >= len(itemInfo)):
2155
                endOffset = len(itemInfo)
11581 kshitij.so 2156
            print "pool offset start end count"+str(startOffset)+" "+str(endOffset)+" "+str(count)
11571 kshitij.so 2157
            pool.map(populateScrapingResults,itemInfo[startOffset:endOffset])
11561 kshitij.so 2158
            #t = Process(target=decideCategory,args=(itemInfo[startOffset:endOffset], scraper))
11560 kshitij.so 2159
            #t = threading.Thread(target=partial(decideCategory, itemInfo[startOffset:endOffset], scraper))
2160
            #t = threading.Thread(target=partial(test, startOffset, endOffset))
11561 kshitij.so 2161
            #threads.append(t)
11581 kshitij.so 2162
            startOffset = startOffset + 20
11561 kshitij.so 2163
            count+=1
2164
        #[t.start() for t in threads]
2165
        #[t.join() for t in threads] 
2166
        #threads = []
11581 kshitij.so 2167
        print "terminating while"
11563 kshitij.so 2168
        pool.close()
2169
        pool.join()
11581 kshitij.so 2170
        print "joining threads"
2171
        print "returning offset******"
11560 kshitij.so 2172
        return endOffset
2173
 
11623 kshitij.so 2174
def sendAutoPricingMail(successfulAutoDecrease,successfulAutoIncrease):
2175
    if len(successfulAutoDecrease)==0 and len(successfulAutoIncrease)==0 :
2176
        return
2177
    xstr = lambda s: s or ""
2178
    catalog_client = CatalogClient().get_client()
2179
    inventory_client = InventoryClient().get_client()
2180
    message="""<html>
2181
            <body>
11625 kshitij.so 2182
            <h3 style="color:red;font-weight:bold;">This is test run.Prices are not being updated by system.</h3>
11623 kshitij.so 2183
            <h3>Auto Decrease Items</h3>
2184
            <table border="1" style="width:100%;">
2185
            <thead>
2186
            <tr><th>Item Id</th>
2187
            <th>Product Name</th>
2188
            <th>Old Price</th>
2189
            <th>New Price</th>
2190
            <th>Old Margin</th>
2191
            <th>New Margin</th>
11790 kshitij.so 2192
            <th>Commission %</th>
2193
            <th>Return Provision %</th>
11623 kshitij.so 2194
            <th>Flipkart Inventory</th>
2195
            <th>Sales History</th>
12158 kshitij.so 2196
            <th>Category</th>
11623 kshitij.so 2197
            </tr></thead>
2198
            <tbody>"""
2199
    for item in successfulAutoDecrease:
2200
        it = Item.query.filter_by(id=item.item_id).one()
2201
        mpItem = MarketplaceItems.get_by(itemId=item.item_id,source=OrderSource.FLIPKART)
2202
        fkItem = FlipkartItem.get_by(item_id=item.item_id)
2203
        warehouse = inventory_client.getWarehouse(fkItem.warehouseId)
2204
        vatRate = catalog_client.getVatPercentageForItem(item.item_id, warehouse.stateId, item.proposedSellingPrice)
2205
        newMargin = round(getNewOurTp(mpItem,item.proposedSellingPrice) - getNewLowestPossibleTp(mpItem,item.ourNlc,vatRate,item.proposedSellingPrice))  
2206
        message+="""<tr>
2207
                <td style="text-align:center">"""+str(item.item_id)+"""</td>
2208
                <td style="text-align:center">"""+xstr(it.brand)+" "+xstr(it.model_name)+" "+xstr(it.model_number)+" "+xstr(it.color)+"""</td>
2209
                <td style="text-align:center">"""+str(item.ourSellingPrice)+"""</td>
2210
                <td style="text-align:center">"""+str(math.ceil(item.proposedSellingPrice))+"""</td>
2211
                <td style="text-align:center">"""+str(round(item.margin))+" ("+str(round((item.margin/item.ourSellingPrice)*100,1))+"%)"+"""</td>
2212
                <td style="text-align:center">"""+str(newMargin)+" ("+str(round((newMargin/item.proposedSellingPrice)*100,1))+"%)"+"""</td>
11806 kshitij.so 2213
                <td style="text-align:center">"""+str(mpItem.commission)+" %"+"""</td>
11790 kshitij.so 2214
                <td style="text-align:center">"""+str(mpItem.returnProvision)+" %"+"""</td>
11806 kshitij.so 2215
                <td style="text-align:center">"""+str(item.ourInventory)+"""</td>
11623 kshitij.so 2216
                <td style="text-align:center">"""+getOosString((itemSaleMap.get(item.item_id))[1])+"""</td>
12158 kshitij.so 2217
                <td style="text-align:center">"""+str(CompetitionCategory._VALUES_TO_NAMES.get(item.competitiveCategory))+"""</td>
11623 kshitij.so 2218
                </tr>"""
2219
    message+="""</tbody></table><h3>Auto Increase Items</h3><table border="1" style="width:100%;">
2220
            <thead>
2221
            <tr><th>Item Id</th>
2222
            <th>Product Name</th>
2223
            <th>Old Price</th>
2224
            <th>New Price</th>
2225
            <th>Old Margin</th>
2226
            <th>New Margin</th>
11790 kshitij.so 2227
            <th>Commission %</th>
2228
            <th>Return Provision %</th>
11623 kshitij.so 2229
            <th>Flipkart Inventory</th>
2230
            <th>Sales History</th>
12158 kshitij.so 2231
            <th>Category</th>
11623 kshitij.so 2232
            </tr></thead>
2233
            <tbody>"""
2234
    for item in successfulAutoIncrease:
2235
        it = Item.query.filter_by(id=item.item_id).one()
2236
        mpItem = MarketplaceItems.get_by(itemId=item.item_id,source=OrderSource.FLIPKART)
2237
        fkItem = FlipkartItem.get_by(item_id=item.item_id)
2238
        warehouse = inventory_client.getWarehouse(fkItem.warehouseId)
2239
        vatRate = catalog_client.getVatPercentageForItem(item.item_id, warehouse.stateId, math.ceil(item.ourSellingPrice+max(10,.01*item.ourSellingPrice)))
2240
        newMargin = round(getNewOurTp(mpItem,item.ourSellingPrice+max(10,.01*item.ourSellingPrice)) - getNewLowestPossibleTp(mpItem,item.ourNlc,vatRate,item.ourSellingPrice+max(10,.01*item.ourSellingPrice)))  
2241
        message+="""<tr>
2242
                <td style="text-align:center">"""+str(item.item_id)+"""</td>
2243
                <td style="text-align:center">"""+xstr(it.brand)+" "+xstr(it.model_name)+" "+xstr(it.model_number)+" "+xstr(it.color)+"""</td>
2244
                <td style="text-align:center">"""+str(item.ourSellingPrice)+"""</td>
2245
                <td style="text-align:center">"""+str(math.ceil(item.ourSellingPrice+max(10,.01*item.ourSellingPrice)))+"""</td>
2246
                <td style="text-align:center">"""+str(round((item.margin),1))+" ("+str(round((item.margin/item.ourSellingPrice)*100,1))+"%)"+"""</td>
2247
                <td style="text-align:center">"""+str(newMargin)+" ("+str(round((newMargin/(item.ourSellingPrice+max(10,.01*item.ourSellingPrice)))*100,1))+"%)"+"""</td>
11806 kshitij.so 2248
                <td style="text-align:center">"""+str(mpItem.commission)+" %"+"""</td>
11790 kshitij.so 2249
                <td style="text-align:center">"""+str(mpItem.returnProvision)+" %"+"""</td>
11623 kshitij.so 2250
                <td style="text-align:center">"""+str(item.ourInventory)+"""</td>
2251
                <td style="text-align:center">"""+getOosString((itemSaleMap.get(item.item_id))[1])+"""</td>
12158 kshitij.so 2252
                <td style="text-align:center">"""+str(CompetitionCategory._VALUES_TO_NAMES.get(item.competitiveCategory))+"""</td>
11623 kshitij.so 2253
                </tr>"""
2254
    message+="""</tbody></table></body></html>"""
2255
    print message
2256
    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
2257
    mailServer.ehlo()
2258
    mailServer.starttls()
2259
    mailServer.ehlo()
2260
 
12181 kshitij.so 2261
    recipients = ['kshitij.sood@saholic.com']
2262
    #recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','vikram.raghav@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
11623 kshitij.so 2263
    msg = MIMEMultipart()
2264
    msg['Subject'] = "Flipkart Auto Pricing" + ' - ' + str(datetime.now())
2265
    msg['From'] = ""
2266
    msg['To'] = ",".join(recipients)
2267
    msg.preamble = "Flipkart Auto Pricing" + ' - ' + str(datetime.now())
2268
    html_msg = MIMEText(message, 'html')
2269
    msg.attach(html_msg)
2270
    try:
2271
        mailServer.login("build@shop2020.in", "cafe@nes")
2272
        #mailServer.sendmail("cafe@nes", ['kshitij.sood@saholic.com'], msg.as_string())
2273
        mailServer.sendmail("cafe@nes", recipients, msg.as_string())
2274
    except Exception as e:
2275
        print e
2276
        print "Unable to send pricing mail.Lets try with local SMTP."
2277
        smtpServer = smtplib.SMTP('localhost')
2278
        smtpServer.set_debuglevel(1)
11779 kshitij.so 2279
        sender = 'build@shop2020.in'
11623 kshitij.so 2280
        try:
2281
            smtpServer.sendmail(sender, recipients, msg.as_string())
2282
            print "Successfully sent email"
2283
        except:
2284
            print "Error: unable to send email."
2285
 
2286
def processLostBuyBoxItems(previousProcessingTimestamp,currentTimestamp):
2287
    previous_buy_box = session.query(MarketPlaceHistory.item_id).filter(MarketPlaceHistory.timestamp==previousProcessingTimestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(or_(MarketPlaceHistory.competitiveCategory==CompetitionCategory.BUY_BOX,MarketPlaceHistory.competitiveCategory==CompetitionCategory.PREF_BUT_NOT_CHEAP)).all()
2288
    cant_compete = session.query(MarketPlaceHistory.item_id).filter(MarketPlaceHistory.timestamp==currentTimestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.CANT_COMPETE).all()
2289
    if previous_buy_box is None:
2290
        print "No item in buy box for last run"
2291
        return
2292
    lost_buy_box = list(set(list(zip(*previous_buy_box)[0]))&set(list(zip(*cant_compete)[0])))
2293
    if len(lost_buy_box)==0:
2294
        return
2295
    xstr = lambda s: s or ""
2296
    message="""<html>
2297
            <body>
2298
            <h3>Lost Buy Box</h3>
2299
            <table border="1" style="width:100%;">
2300
            <thead>
2301
            <tr><th>Item Id</th>
2302
            <th>Product Name</th>
2303
            <th>Current Price</th>
2304
            <th>Current Margin</th>
11844 kshitij.so 2305
            <th>Lowest Seller</th>
2306
            <th>Lowest Selling Price</th>
2307
            <th>Preffered Seller</th>
2308
            <th>Preffered Selling Price</th>
11623 kshitij.so 2309
            <th>NLC</th>
2310
            <th>Target NLC</th>
11790 kshitij.so 2311
            <th>Commission %</th>
2312
            <th>Return Provision %</th>
11623 kshitij.so 2313
            <th>Flipkart Inventory</th>
2314
            <th>Total Inventory</th>
2315
            <th>Sales History</th>
2316
            </tr></thead>
2317
            <tbody>"""
2318
    items = session.query(MarketPlaceHistory).filter(MarketPlaceHistory.timestamp==currentTimestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.item_id.in_(lost_buy_box)).all()
2319
    for item in items:
2320
        it = Item.query.filter_by(id=item.item_id).one()
11790 kshitij.so 2321
        mpItem = MarketplaceItems.get_by(itemId=item.item_id,source=OrderSource.FLIPKART)
11623 kshitij.so 2322
        netInventory=''
2323
        if not inventoryMap.has_key(item.item_id):
2324
            netInventory='Info Not Available'
2325
        else:
2326
            netInventory = str(getNetAvailability(inventoryMap.get(item.item_id)))
2327
        message+="""<tr>
2328
                <td style="text-align:center">"""+str(item.item_id)+"""</td>
2329
                <td style="text-align:center">"""+xstr(it.brand)+" "+xstr(it.model_name)+" "+xstr(it.model_number)+" "+xstr(it.color)+"""</td>
2330
                <td style="text-align:center">"""+str(item.ourSellingPrice)+"""</td>
2331
                <td style="text-align:center">"""+str(round(item.margin))+" ("+str(round((item.margin/item.ourSellingPrice)*100,1))+"%)"+"""</td>
11844 kshitij.so 2332
                <td style="text-align:center">"""+str(item.lowestSellerName)+"""</td>
2333
                <td style="text-align:center">"""+str(item.lowestSellingPrice)+"""</td>
2334
                <td style="text-align:center">"""+str(item.prefferedSellerName)+"""</td>
2335
                <td style="text-align:center">"""+str(item.prefferedSellerSellingPrice)+"""</td>
11623 kshitij.so 2336
                <td style="text-align:center">"""+str(item.ourNlc)+"""</td>
2337
                <td style="text-align:center">"""+str(item.targetNlc)+"""</td>
11790 kshitij.so 2338
                <td style="text-align:center">"""+str(mpItem.commission)+"""</td>
2339
                <td style="text-align:center">"""+str(mpItem.returnProvision)+" %"+"""</td>
11623 kshitij.so 2340
                <td style="text-align:center">"""+str(item.ourInventory)+"""</td>
2341
                <td style="text-align:center">"""+netInventory+"""</td>
2342
                <td style="text-align:center">"""+getOosString((itemSaleMap.get(item.item_id))[1])+"""</td>
2343
                </tr>"""
2344
    message+="""</tbody></table></body></html>"""
2345
    print message
2346
    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
2347
    mailServer.ehlo()
2348
    mailServer.starttls()
2349
    mailServer.ehlo()
2350
 
11791 kshitij.so 2351
    #recipients = ['kshitij.sood@saholic.com']
2352
    recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','vikram.raghav@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
11623 kshitij.so 2353
    msg = MIMEMultipart()
2354
    msg['Subject'] = "Flipkart Lost Buy Box" + ' - ' + str(datetime.now())
2355
    msg['From'] = ""
2356
    msg['To'] = ",".join(recipients)
2357
    msg.preamble = "Flipkart Lost Buy Box" + ' - ' + str(datetime.now())
2358
    html_msg = MIMEText(message, 'html')
2359
    msg.attach(html_msg)
2360
    try:
2361
        mailServer.login("build@shop2020.in", "cafe@nes")
2362
        #mailServer.sendmail("cafe@nes", ['kshitij.sood@saholic.com'], msg.as_string())
2363
        mailServer.sendmail("cafe@nes", recipients, msg.as_string())
2364
    except Exception as e:
2365
        print e
2366
        print "Unable to send lost buy box mail.Lets try local SMTP"
2367
        smtpServer = smtplib.SMTP('localhost')
2368
        smtpServer.set_debuglevel(1)
11779 kshitij.so 2369
        sender = 'build@shop2020.in'
11623 kshitij.so 2370
        try:
2371
            smtpServer.sendmail(sender, recipients, msg.as_string())
2372
            print "Successfully sent email"
2373
        except:
2374
            print "Error: unable to send email."
2375
 
2376
def cheapButNotPrefAlert(timestamp):
11626 kshitij.so 2377
    cheap_but_not_pref = session.query(MarketPlaceHistory,Item).join((Item,MarketPlaceHistory.item_id==Item.id)).filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.CHEAP_BUT_NOT_PREF).all()
11758 kshitij.so 2378
    if len(cheap_but_not_pref)==0:
11623 kshitij.so 2379
        return
2380
    xstr = lambda s: s or ""
2381
    message="""<html>
2382
            <body>
2383
            <h3>Cheap But Not Preferred</h3>
2384
            <table border="1" style="width:100%;">
2385
            <thead>
2386
            <tr><th>Item Id</th>
2387
            <th>Product Name</th>
2388
            <th>Current Price</th>
11670 kshitij.so 2389
            <th>Our Rating</th>
2390
            <th>Our Shipping Time</th>
11623 kshitij.so 2391
            <th>Preffered Seller</th>
2392
            <th>Preffered Seller SP</th>
11670 kshitij.so 2393
            <th>Preffered Seller Rating</th>
2394
            <th>Preffered Seller Shipping Time</th>
2395
            <th>Price Variance %</th>
11792 kshitij.so 2396
            <th>Commission %</th>
2397
            <th>Return Provision %</th>
11623 kshitij.so 2398
            <th>Flipkart Inventory</th>
2399
            <th>Total Inventory</th>
2400
            <th>Sales History</th>
2401
            </tr></thead>
2402
            <tbody>"""
2403
    for item in cheap_but_not_pref:
2404
        mpHistory = item[0]
2405
        catItem = item[1]
2406
        netInventory=''
2407
        if not inventoryMap.has_key(mpHistory.item_id):
2408
            netInventory='Info Not Available'
2409
        else:
2410
            netInventory = str(getNetAvailability(inventoryMap.get(mpHistory.item_id)))
11670 kshitij.so 2411
        ourSt = mpHistory.ourShippingTime.split('-')
2412
        pfSt = mpHistory.prefferedSellerShippingTime.split('-')
11792 kshitij.so 2413
        mpItem = MarketplaceItems.get_by(itemId=mpHistory.item_id,source=OrderSource.FLIPKART)
11670 kshitij.so 2414
        if mpHistory.prefferedSellerName=='WS Retail' and mpHistory.ourRating > mpHistory.prefferedSellerRating and int(ourSt[0])<=int(pfSt[0]):
11623 kshitij.so 2415
            style="""background-color:red;\""""
2416
        else:
2417
            style="\""
11754 kshitij.so 2418
        message+="""<tr>
2419
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.item_id)+"""</td>
2420
            <td style="text-align:center;"""+str(style)+""">"""+xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color)+"""</td>
2421
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.ourSellingPrice)+"""</td>
2422
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.ourRating)+"""</td>
2423
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.ourShippingTime)+"""</td>
2424
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.prefferedSellerName)+"""</td>
2425
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.prefferedSellerSellingPrice)+"""</td>
2426
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.prefferedSellerRating)+"""</td>
2427
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.prefferedSellerShippingTime)+"""</td>
2428
            <td style="text-align:center;"""+str(style)+""">"""+str(round(((mpHistory.prefferedSellerSellingPrice-mpHistory.ourSellingPrice)/mpHistory.ourSellingPrice)*100))+"%"+"""</td>
11806 kshitij.so 2429
            <td style="text-align:center">"""+str(mpItem.commission)+" %"+"""</td>
11792 kshitij.so 2430
            <td style="text-align:center">"""+str(mpItem.returnProvision)+" %"+"""</td>
11754 kshitij.so 2431
            <td style="text-align:center;"""+str(style)+""">"""+str(mpHistory.ourInventory)+"""</td>
2432
            <td style="text-align:center;"""+str(style)+""">"""+netInventory+"""</td>
2433
            <td style="text-align:center;"""+str(style)+""">"""+getOosString((itemSaleMap.get(mpHistory.item_id))[1])+"""</td>
2434
            </tr>"""
11623 kshitij.so 2435
    message+="""</tbody></table></body></html>"""
2436
    print message
2437
    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
2438
    mailServer.ehlo()
2439
    mailServer.starttls()
2440
    mailServer.ehlo()
2441
 
12181 kshitij.so 2442
    recipients = ['kshitij.sood@saholic.com']
2443
    #recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','vikram.raghav@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
11623 kshitij.so 2444
    msg = MIMEMultipart()
2445
    msg['Subject'] = "Flipkart Cheap But Not In BuyBox Items" + ' - ' + str(datetime.now())
2446
    msg['From'] = ""
2447
    msg['To'] = ",".join(recipients)
2448
    msg.preamble = "Flipkart Cheap But Not In BuyBox Items" + ' - ' + str(datetime.now())
2449
    html_msg = MIMEText(message, 'html')
2450
    msg.attach(html_msg)
2451
    try:
2452
        mailServer.login("build@shop2020.in", "cafe@nes")
2453
        #mailServer.sendmail("cafe@nes", ['kshitij.sood@saholic.com'], msg.as_string())
2454
        mailServer.sendmail("cafe@nes", recipients, msg.as_string())
2455
    except Exception as e:
2456
        print e
2457
        print "Unable to send Flipkart Cheap But Not In BuyBox Items mail.Lets try local SMTP"
2458
        smtpServer = smtplib.SMTP('localhost')
2459
        smtpServer.set_debuglevel(1)
11779 kshitij.so 2460
        sender = 'build@shop2020.in'
11623 kshitij.so 2461
        try:
2462
            smtpServer.sendmail(sender, recipients, msg.as_string())
2463
            print "Successfully sent email"
2464
        except:
2465
            print "Error: unable to send email."
11754 kshitij.so 2466
 
2467
def sendPricingMismatch(timestamp):
2468
    xstr = lambda s: s or ""
2469
    message="""<html>
2470
            <body>
2471
            <h3>Flipkart Pricing Mismatch</h3>
2472
            <table border="1" style="width:100%;">
2473
            <thead>
2474
            <tr><th>Item Id</th>
2475
            <th>Product Name</th>
2476
            <th>Our System Price</th>
2477
            <th>Flipkart Price</th>
2478
            <th>Flipkart Inventory</th>
2479
            <th>Total Inventory</th>
2480
            <th>Sales History</th>
2481
            </tr></thead>
2482
            <tbody>"""
2483
    flipkartPricing = {}
2484
    saholicPricing = {}
2485
    mpHistoryItems = session.query(MarketPlaceHistory,Item).join((Item,MarketPlaceHistory.item_id==Item.id)).filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).all()
2486
    for val in mpHistoryItems:
2487
        temp = []
2488
        temp.append(val[0].ourSellingPrice)
2489
        temp.append(xstr(val[1].brand)+" "+xstr(val[1].model_name)+" "+xstr(val[1].model_number)+" "+xstr(val[1].color))
11755 kshitij.so 2490
        temp.append(val[0].ourInventory)
11754 kshitij.so 2491
        flipkartPricing[val[0].item_id] = temp
2492
    mpHistoryItems[:] = []
2493
    mpItems = session.query(MarketplaceItems).filter(MarketplaceItems.source==OrderSource.FLIPKART).all()
2494
    for val in mpItems:
2495
        saholicPricing[val.itemId] = val.currentSp
2496
    mpItems[:] = []
2497
    mismatches = []
2498
    for k,v in flipkartPricing.iteritems():
2499
        flipkartSellingPrice = v[0]
2500
        ourSellingPrice = saholicPricing.get(k)
11771 kshitij.so 2501
        if flipkartSellingPrice is not None and not((ourSellingPrice - flipkartSellingPrice >= -3) and (ourSellingPrice - flipkartSellingPrice <=3)):
11754 kshitij.so 2502
            mismatches.append(k)
2503
    print "mismatches are ",mismatches
11755 kshitij.so 2504
    if len(mismatches)==0:
2505
        return
11754 kshitij.so 2506
    for item in mismatches:
2507
        netInventory=''
2508
        if not inventoryMap.has_key(item):
2509
            netInventory='Info Not Available'
2510
        else:
2511
            netInventory = str(getNetAvailability(inventoryMap.get(item)))
2512
        message+="""<tr>
11756 kshitij.so 2513
            <td style="text-align:center">"""+str(item)+"""</td>
2514
            <td style="text-align:center">"""+str((flipkartPricing.get(item))[1])+"""</td>
2515
            <td style="text-align:center">"""+str(saholicPricing.get(item))+"""</td>
2516
            <td style="text-align:center">"""+str((flipkartPricing.get(item))[0])+"""</td>
2517
            <td style="text-align:center">"""+str((flipkartPricing.get(item))[2])+"""</td>
2518
            <td style="text-align:center">"""+netInventory+"""</td>
2519
            <td style="text-align:center">"""+getOosString((itemSaleMap.get(item))[1])+"""</td>
11754 kshitij.so 2520
            </tr>"""
2521
    message+="""</tbody></table></body></html>"""
2522
    print message
2523
    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
2524
    mailServer.ehlo()
2525
    mailServer.starttls()
2526
    mailServer.ehlo()
2527
 
12181 kshitij.so 2528
    recipients = ['kshitij.sood@saholic.com']
2529
    #recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','vikram.raghav@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
11754 kshitij.so 2530
    msg = MIMEMultipart()
2531
    msg['Subject'] = "Flipkart Price Mismatch" + ' - ' + str(datetime.now())
2532
    msg['From'] = ""
2533
    msg['To'] = ",".join(recipients)
2534
    msg.preamble = "Flipkart Price Mismatch" + ' - ' + str(datetime.now())
2535
    html_msg = MIMEText(message, 'html')
2536
    msg.attach(html_msg)
2537
    try:
2538
        mailServer.login("build@shop2020.in", "cafe@nes")
2539
        #mailServer.sendmail("cafe@nes", ['kshitij.sood@saholic.com'], msg.as_string())
2540
        mailServer.sendmail("cafe@nes", recipients, msg.as_string())
2541
    except Exception as e:
2542
        print e
2543
        print "Unable to send Flipkart Price Mismatch mail.Lets try local SMTP"
2544
        smtpServer = smtplib.SMTP('localhost')
2545
        smtpServer.set_debuglevel(1)
11779 kshitij.so 2546
        sender = 'build@shop2020.in'
11754 kshitij.so 2547
        try:
2548
            smtpServer.sendmail(sender, recipients, msg.as_string())
2549
            print "Successfully sent email"
2550
        except:
2551
            print "Error: unable to send email."
11775 kshitij.so 2552
 
2553
def sendAlertForNegativeMargins(timestamp):
2554
    xstr = lambda s: s or ""
2555
    negativeMargins = session.query(MarketPlaceHistory,Item).join((Item,MarketPlaceHistory.item_id==Item.id)).filter(MarketPlaceHistory.timestamp==timestamp).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).filter(MarketPlaceHistory.competitiveCategory==CompetitionCategory.NEGATIVE_MARGIN).all()
2556
    if len(negativeMargins) == 0:
2557
        return
2558
    message="""<html>
2559
            <body>
2560
            <h3 style="color:red;font-weight:bold;">Flipkart Negative Margins</h3>
2561
            <table border="1" style="width:100%;">
2562
            <thead>
2563
            <tr><th>Item Id</th>
2564
            <th>Product Name</th>
2565
            <th>SP</th>
2566
            <th>TP</th>
2567
            <th>Lowest Possible SP</th>
2568
            <th>Lowest Possible TP</th>
2569
            <th>Margin</th>
2570
            <th>Margin %</th>
11790 kshitij.so 2571
            <th>Commission %</th>
2572
            <th>Return Provision %</th>
11775 kshitij.so 2573
            <th>Flipkart Inventory</th>
2574
            <th>Total Inventory</th>
2575
            <th>Sales History</th>
2576
            </tr></thead>
2577
            <tbody>"""
2578
    for item in negativeMargins:
2579
        mpHistory = item[0]
2580
        catItem = item[1]
2581
        netInventory=''
11776 kshitij.so 2582
        if not inventoryMap.has_key(mpHistory.item_id):
11775 kshitij.so 2583
            netInventory='Info Not Available'
2584
        else:
11776 kshitij.so 2585
            netInventory = str(getNetAvailability(inventoryMap.get(mpHistory.item_id)))
11790 kshitij.so 2586
        mpItem = MarketplaceItems.get_by(itemId=mpHistory.item_id,source=OrderSource.FLIPKART)
11775 kshitij.so 2587
        message+="""<tr>
2588
            <td style="text-align:center">"""+str(mpHistory.item_id)+"""</td>
2589
            <td style="text-align:center">"""+xstr(catItem.brand)+" "+xstr(catItem.model_name)+" "+xstr(catItem.model_number)+" "+xstr(catItem.color)+"""</td>
2590
            <td style="text-align:center">"""+str(mpHistory.ourSellingPrice)+"""</td>
2591
            <td style="text-align:center">"""+str(mpHistory.ourTp)+"""</td>
2592
            <td style="text-align:center">"""+str(mpHistory.lowestPossibleSp)+"""</td>
2593
            <td style="text-align:center">"""+str(mpHistory.lowestPossibleTp)+"""</td>
2594
            <td style="text-align:center">"""+str(mpHistory.margin)+"""</td>
11952 kshitij.so 2595
            <td style="text-align:center">"""+str(round((mpHistory.margin/mpHistory.ourSellingPrice)*100,1))+" %"+"""</td>
11790 kshitij.so 2596
            <td style="text-align:center">"""+str(mpItem.commission)+"""</td>
2597
            <td style="text-align:center">"""+str(mpItem.returnProvision)+" %"+"""</td>
11775 kshitij.so 2598
            <td style="text-align:center">"""+str(mpHistory.ourInventory)+"""</td>
2599
            <td style="text-align:center">"""+netInventory+"""</td>
11776 kshitij.so 2600
            <td style="text-align:center">"""+getOosString((itemSaleMap.get(mpHistory.item_id))[1])+"""</td>
11775 kshitij.so 2601
            </tr>"""
2602
    message+="""</tbody></table></body></html>"""
2603
    print message
2604
    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
2605
    mailServer.ehlo()
2606
    mailServer.starttls()
2607
    mailServer.ehlo()
2608
 
12181 kshitij.so 2609
    recipients = ['kshitij.sood@saholic.com']
2610
    #recipients = ['rajneesh.arora@saholic.com','anikendra.das@saholic.com','vikram.raghav@saholic.com','kshitij.sood@saholic.com','khushal.bhatia@saholic.com','chaitnaya.vats@saholic.com','chandan.kumar@saholic.com','manoj.kumar@saholic.com','yukti.jain@saholic.com','ankush.dhingra@saholic.com','manoj.pal@saholic.com']
11775 kshitij.so 2611
    msg = MIMEMultipart()
2612
    msg['Subject'] = "Flipkart Negative Margin" + ' - ' + str(datetime.now())
2613
    msg['From'] = ""
2614
    msg['To'] = ",".join(recipients)
2615
    msg.preamble = "Flipkart Negative Margin" + ' - ' + str(datetime.now())
2616
    html_msg = MIMEText(message, 'html')
2617
    msg.attach(html_msg)
2618
    try:
2619
        mailServer.login("build@shop2020.in", "cafe@nes")
2620
        #mailServer.sendmail("cafe@nes", ['kshitij.sood@saholic.com'], msg.as_string())
2621
        mailServer.sendmail("cafe@nes", recipients, msg.as_string())
2622
    except Exception as e:
2623
        print e
2624
        print "Unable to send Flipkart Negative margin mail.Lets try local SMTP"
2625
        smtpServer = smtplib.SMTP('localhost')
2626
        smtpServer.set_debuglevel(1)
11779 kshitij.so 2627
        sender = 'build@shop2020.in'
11775 kshitij.so 2628
        try:
2629
            smtpServer.sendmail(sender, recipients, msg.as_string())
2630
            print "Successfully sent email"
2631
        except:
2632
            print "Error: unable to send email."
11560 kshitij.so 2633
 
11623 kshitij.so 2634
 
11775 kshitij.so 2635
 
2636
 
11193 kshitij.so 2637
def main():
2638
    parser = optparse.OptionParser()
2639
    parser.add_option("-t", "--type", dest="runType",
2640
                   default="FULL", type="string",
2641
                   help="Run type FULL or FAVOURITE")
2642
    (options, args) = parser.parse_args()
2643
    if options.runType not in ('FULL','FAVOURITE'):
2644
        print "Run type argument illegal."
2645
        sys.exit(1)
2646
    timestamp = datetime.now()
11581 kshitij.so 2647
    previousProcessingTimestamp = session.query(func.max(MarketPlaceHistory.timestamp)).filter(MarketPlaceHistory.source==OrderSource.FLIPKART).one()
11193 kshitij.so 2648
    itemInfo= populateStuff(options.runType,timestamp)
11560 kshitij.so 2649
    itemsPopulated = 0
11615 kshitij.so 2650
    while (len(itemInfo)>0):
11560 kshitij.so 2651
        itemsPopulated = threadsToSpawn(options.runType,itemInfo,scraper,itemsPopulated)
11581 kshitij.so 2652
        cantCompete, buyBoxItems, competitive, competitiveNoInventory, exceptionItems, negativeMargin, cheapButNotPref, prefButNotCheap = decideCategory(itemInfo[0:itemsPopulated])
2653
        itemInfo[0:itemsPopulated] = []
2654
        commitExceptionList(exceptionItems,timestamp)
2655
        commitCantCompete(cantCompete,timestamp)
2656
        commitBuyBox(buyBoxItems,timestamp)
2657
        commitCompetitive(competitive,timestamp)
2658
        commitCompetitiveNoInventory(competitiveNoInventory,timestamp)
2659
        commitNegativeMargin(negativeMargin,timestamp)
2660
        commitCheapButNotPref(cheapButNotPref,timestamp)
2661
        commitPrefButNotCheap(prefButNotCheap, timestamp)
2662
        cantCompete[:], buyBoxItems[:], competitive[:], competitiveNoInventory[:], exceptionItems[:], negativeMargin[:], cheapButNotPref[:], prefButNotCheap[:] =[],[],[],[],[],[],[],[]
2663
 
11615 kshitij.so 2664
    successfulAutoDecrease = fetchItemsForAutoDecrease(timestamp)
2665
    successfulAutoIncrease = fetchItemsForAutoIncrease(timestamp)
2666
    if options.runType=='FULL':
2667
        previousAutoFav, nowAutoFav = markAutoFavourite()
11621 kshitij.so 2668
    if options.runType =='FULL':
2669
        write_report(previousAutoFav,nowAutoFav,timestamp,options.runType)
2670
    else:
2671
        write_report(None,None,timestamp,options.runType)
11623 kshitij.so 2672
    sendAutoPricingMail(successfulAutoDecrease,successfulAutoIncrease)
11625 kshitij.so 2673
    if previousProcessingTimestamp[0] is not None:
2674
        processLostBuyBoxItems(previousProcessingTimestamp[0],timestamp)
11623 kshitij.so 2675
    if options.runType=='FULL':
2676
        cheapButNotPrefAlert(timestamp)
11754 kshitij.so 2677
        sendPricingMismatch(timestamp)
11775 kshitij.so 2678
        sendAlertForNegativeMargins(timestamp)
11193 kshitij.so 2679
 
2680
if __name__ == '__main__':
2681
    main()