Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
9334 kshitij.so 1
#!/usr/bin/python
2
# coding: ascii
3
from elixir import *
4
from shop2020.model.v1.catalog.impl import DataService
5
from shop2020.model.v1.catalog.impl.DataService import Item, Category,\
6
    SnapdealItem
9359 kshitij.so 7
from shop2020.thriftpy.model.v1.inventory import ttypes
8
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, InventoryType
9334 kshitij.so 9
import optparse
10
import xlrd
11
from shop2020.clients.InventoryClient import InventoryClient
12
import xlwt
13
import urllib2
14
import time
9492 kshitij.so 15
from datetime import date
9334 kshitij.so 16
import simplejson as json
9365 kshitij.so 17
from shop2020.utils import EmailAttachmentSender
18
from shop2020.utils.EmailAttachmentSender import get_attachment_part
9334 kshitij.so 19
 
20
 
9365 kshitij.so 21
 
9334 kshitij.so 22
if __name__ == '__main__' and __package__ is None:
23
    import sys
24
    import os
25
    sys.path.insert(0, os.getcwd())
26
 
27
 
28
class _SnapdealItemInfo:
29
 
9426 kshitij.so 30
    def __init__(self, item_id, product_group, category_name, our_nlc, brand, model_name, model_number, color, weight, parent_category, risky, issue):
9334 kshitij.so 31
        self.item_id = item_id
32
        self.product_group = product_group
33
        self.category_name = category_name
34
        self.our_nlc = our_nlc
35
        self.brand = brand
36
        self.model_name = model_name
37
        self.model_number = model_number
38
        self.color = color
39
        self.weight = weight
40
        self.parent_category = parent_category
9359 kshitij.so 41
        self.risky = risky
9426 kshitij.so 42
        self.issue = issue
9334 kshitij.so 43
 
44
 
45
class SnapdealDetails:
9359 kshitij.so 46
    def __init__(self, supc, ourSp, offerPrice, ourInventory, otherInventory, rank, lowestSellerName,lowestSp,secondLowestSellerName,secondLowestSellerSp,secondLowestSellerInventory,lowestOfferPrice,secondLowestSellerOfferPrice,ourOfferPrice):
9334 kshitij.so 47
        self.supc = supc
48
        self.ourSp = ourSp
49
        self.offerPrice = offerPrice
50
        self.ourInventory = ourInventory
51
        self.otherInventory = otherInventory
52
        self.rank = rank
53
        self.lowestSellerName = lowestSellerName
54
        self.lowestSp = lowestSp
55
        self.secondLowestSellerName = secondLowestSellerName
56
        self.secondLowestSellerSp = secondLowestSellerSp
57
        self.secondLowestSellerInventory = secondLowestSellerInventory
9359 kshitij.so 58
        self.lowestOfferPrice = lowestOfferPrice
59
        self.secondLowestSellerOfferPrice = secondLowestSellerOfferPrice
60
        self.ourOfferPrice = ourOfferPrice
9334 kshitij.so 61
 
62
 
63
def fetchDetails(supc_code):
64
    url="http://www.snapdeal.com/json/gvbps?supc=%s&catId=91"%(supc_code)
65
    print url
66
    time.sleep(2)
67
    req = urllib2.Request(url)
68
    response = urllib2.urlopen(req)
69
    json_input = response.read()
70
    vendorInfo = json.loads(json_input)
71
    rank ,otherInventory ,ourInventory, offerPrice, ourSp,iterator = 0, 0, 0, 0, 0, 0
9337 kshitij.so 72
    secondLowestSellerName=''
73
    secondLowestSellerSp=0
74
    secondLowestSellerInventory=0
9359 kshitij.so 75
    lowestOfferPrice = 0
76
    secondLowestSellerOfferPrice = 0
77
    ourOfferPrice = 0
9334 kshitij.so 78
    for vendor in vendorInfo:
79
        if iterator == 0:
80
            lowestSellerName = vendor['vendorDisplayName']
9362 kshitij.so 81
            try:
82
                lowestSp = vendor['sellingPriceBefIntCashBack']
83
            except:
84
                lowestSp = vendor['sellingPrice']
9359 kshitij.so 85
            lowestOfferPrice = vendor['sellingPrice']
9334 kshitij.so 86
 
87
        if iterator ==1:
88
            secondLowestSellerName = vendor['vendorDisplayName']
9362 kshitij.so 89
            try:
90
                secondLowestSellerSp = vendor['sellingPriceBefIntCashBack']
91
            except:
92
                secondLowestSellerSp = vendor['sellingPrice'] 
9359 kshitij.so 93
            secondLowestSellerOfferPrice = vendor['sellingPrice'] 
9334 kshitij.so 94
            secondLowestSellerInventory = vendor['buyableInventory']
95
 
96
        if vendor['vendorDisplayName'] == 'MobilesnMore':
97
            ourInventory = vendor['buyableInventory']
9362 kshitij.so 98
            try:
99
                ourSp = vendor['sellingPriceBefIntCashBack']
100
            except:
101
                ourSp = vendor['sellingPrice']
9359 kshitij.so 102
            ourOfferPrice = vendor['sellingPrice']
9334 kshitij.so 103
            rank = iterator +1
104
        else:
105
            if rank==0:
106
                otherInventory = otherInventory +vendor['buyableInventory']
107
 
108
        iterator+=1
9359 kshitij.so 109
    snapdealDetails = SnapdealDetails(supc_code,ourSp,offerPrice,ourInventory,otherInventory,rank,lowestSellerName,lowestSp,secondLowestSellerName,secondLowestSellerSp,secondLowestSellerInventory,lowestOfferPrice,secondLowestSellerOfferPrice,ourOfferPrice)
9334 kshitij.so 110
    return snapdealDetails
111
 
112
 
113
def read_data(filename):
114
    all_lines = []
115
    all_supc=[]
116
    iclient = InventoryClient().get_client()
9337 kshitij.so 117
    DataService.initialize('catalog','192.168.166.135')
9334 kshitij.so 118
    workbook = xlrd.open_workbook(filename)
119
    sheet = workbook.sheet_by_index(0)
120
    num_rows = sheet.nrows
121
    for rownum in range(1, num_rows):
122
        print sheet.row_values(rownum)
9453 kshitij.so 123
        try:
9488 kshitij.so 124
            supc = sheet.row_values(rownum)[1]
9454 kshitij.so 125
            item_id = int(sheet.row_values(rownum)[0])
9453 kshitij.so 126
            item = Item.query.filter_by(id=item_id).one()
127
        except Exception as e:
9483 kshitij.so 128
            print "No item found.Maybe due to snapdeal item code in place of our sku id.Lets try again."
9453 kshitij.so 129
            print e
9483 kshitij.so 130
            try:
131
                item_id = sheet.row_values(rownum)[0]
132
                snapdeal_item = SnapdealItem.query.filter_by(skuAtSnapdeal=item_id).one()
133
                item = Item.query.filter_by(id=snapdeal_item.item_id).one()
134
            except Exception as ex:
135
                print ex
136
                one_line = _SnapdealItemInfo(sheet.row_values(rownum)[0], '', '', 0, '', '','', '', 0, '', False,"item_related")
137
                all_supc.append(supc)
138
                all_lines.append(one_line)
139
                continue
9453 kshitij.so 140
 
9485 vikram.rag 141
        category = Category.query.filter_by(id=item.category).one()
9426 kshitij.so 142
        parent_category = Category.query.filter_by(parent_category_id=category.parent_category_id).first()
143
        try:
9485 vikram.rag 144
            snapdeal_item = SnapdealItem.query.filter_by(item_id=item.id).one()
9426 kshitij.so 145
            warehouse = iclient.getWarehouse(snapdeal_item.warehouseId)
9484 kshitij.so 146
            item_pricing = iclient.getItemPricing(item.id, warehouse.vendor.id)
9426 kshitij.so 147
            one_line = _SnapdealItemInfo(item.id, item.product_group, parent_category.display_name, item_pricing.nlc, item.brand, item.model_name, item.model_number, item.color, item.weight, category.parent_category_id, item.risky,"")
148
        except Exception as e:
9484 kshitij.so 149
            print "Problem with item id ",item.id
9426 kshitij.so 150
            print e
151
            one_line = _SnapdealItemInfo(item.id, item.product_group, parent_category.display_name, item_pricing.nlc, item.brand, item.model_name, item.model_number, item.color, item.weight, category.parent_category_id, item.risky,"our_side")
152
 
9359 kshitij.so 153
        #TO BE USED LATER
154
        #inventory_snapshot = iclient.getInventorySnapshot(0)
155
        #warehouses_ours = iclient.getWarehouses(WarehouseType._NAMES_TO_VALUES.get("OURS"), InventoryType._NAMES_TO_VALUES.get("GOOD"), 0,0,0)
156
        #warehouses_third_party = iclient.getWarehouses(WarehouseType._NAMES_TO_VALUES.get("THIRD_PARTY "), InventoryType._NAMES_TO_VALUES.get("GOOD"), 0,0,0)
9334 kshitij.so 157
        all_supc.append(supc)
158
        all_lines.append(one_line)
159
    write_report("/tmp/snapdeal_running.xls", all_lines, all_supc)
160
 
9426 kshitij.so 161
 
162
def exception_sheet(items,wbk):
163
    sheet = wbk.add_sheet('Exception Item List')
164
 
165
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
9334 kshitij.so 166
 
9426 kshitij.so 167
    excel_integer_format = '0'
168
    integer_style = xlwt.XFStyle()
169
    integer_style.num_format_str = excel_integer_format
170
 
171
    sheet.write(0, 0, "Item ID", heading_xf)
172
    sheet.write(0, 1, "Problem Type", heading_xf)
173
 
174
    i=1
175
    for item in items:
176
        sheet.write(i, 0, item.item_id)
177
        if len(item.issue)!=0:
9457 kshitij.so 178
            sheet.write(i, 1, "Wrong item id or wrong warehouse Id")
9426 kshitij.so 179
        else:
180
            sheet.write(i, 1, "Unable to fetch info from snapdeal server")
181
        i+=1
182
 
183
 
184
 
9334 kshitij.so 185
 
9426 kshitij.so 186
 
9334 kshitij.so 187
def write_report(filename, all_lines, all_supc):
188
 
189
    buyBoxItems = []
9387 kshitij.so 190
    competitive = []
9396 kshitij.so 191
    competitiveNoInventory = []
9426 kshitij.so 192
    exceptionItems = []
9451 kshitij.so 193
    negativeMargin = []
9334 kshitij.so 194
 
195
    wbk = xlwt.Workbook()
9396 kshitij.so 196
    sheet = wbk.add_sheet('Can\'t Compete')
9334 kshitij.so 197
 
198
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
199
 
200
    excel_integer_format = '0'
201
    integer_style = xlwt.XFStyle()
202
    integer_style.num_format_str = excel_integer_format
203
 
204
    sheet.write(0, 0, "Item ID", heading_xf)
205
    sheet.write(0, 1, "Category", heading_xf)
206
    sheet.write(0, 2, "Product Group.", heading_xf)
207
    sheet.write(0, 3, "SUPC", heading_xf)
208
    sheet.write(0, 4, "Brand", heading_xf)
209
    sheet.write(0, 5, "Model Name", heading_xf)
210
    sheet.write(0, 6, "Model Number", heading_xf)
211
    sheet.write(0, 7, "Color", heading_xf)
9359 kshitij.so 212
    sheet.write(0, 8, "Weight", heading_xf)
9400 kshitij.so 213
    sheet.write(0, 9, "Courier Cost", heading_xf)
9399 kshitij.so 214
    sheet.write(0, 10, "Risky", heading_xf)
215
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 216
    sheet.write(0, 13, "Our TP", heading_xf)
217
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 218
    sheet.write(0, 14, "Our Rank", heading_xf)
219
    sheet.write(0, 15, "Lowest Seller", heading_xf)
220
    sheet.write(0, 16, "Lowest SP", heading_xf)
221
    sheet.write(0, 17, "Lowest TP", heading_xf)
222
    sheet.write(0, 18, "Lowest Offer Price", heading_xf)
223
    sheet.write(0, 19, "Inventory of Top Vendors", heading_xf)
224
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
225
    sheet.write(0, 21, "Our NLC", heading_xf)
226
    sheet.write(0, 22, "Lowest Possible TP", heading_xf)
227
    sheet.write(0, 23, "Lowest Possible SP", heading_xf)
228
    sheet.write(0, 24, "Competition Basis ", heading_xf)
229
    sheet.write(0, 25, "Can Compete", heading_xf)
230
    sheet.write(0, 26, "Target TP", heading_xf)
231
    sheet.write(0, 27, "Target SP", heading_xf)  
232
    sheet.write(0, 28, "Target NLC", heading_xf)
233
    sheet.write(0, 29, "Sales Potential", heading_xf)
9334 kshitij.so 234
 
9337 kshitij.so 235
    i, sheet_iterator=1,1
9334 kshitij.so 236
    for one_line in all_lines:
9426 kshitij.so 237
        if len(one_line.issue)!=0:
238
            exceptionItems.append(one_line)
239
            i+=1
240
            continue
9334 kshitij.so 241
        supc = all_supc[i-1]
9426 kshitij.so 242
        try:
243
            supc_data = fetchDetails(supc)
244
        except Exception as e:
245
            print "Unable to get information about SUPC Code: ",supc
246
            exceptionItems.append(one_line)
247
            i+=1
248
            continue
9334 kshitij.so 249
 
250
        courierCost = 45
251
 
252
        if one_line.weight:
9381 kshitij.so 253
            slab = int(((one_line.weight+0.05) - .001)/.5)
9334 kshitij.so 254
        for x in range (0,slab):
255
            courierCost = courierCost + 35
256
 
257
        courierCost = courierCost * 1.1236
258
 
9451 kshitij.so 259
        if one_line.parent_category ==10011:
260
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
261
        else:
262
            lowestTp = supc_data.lowestSp*0.9497-courierCost
263
 
264
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
265
 
9491 kshitij.so 266
        if (supc_data.ourSp*0.9597-courierCost < lowest_possible_tp and supc_data.ourSp > 0 and round((supc_data.ourSp*0.9597-courierCost) - lowest_possible_tp) < 0):
9451 kshitij.so 267
            temp=[]
268
            temp.append(supc_data)
269
            temp.append(one_line)
270
            negativeMargin.append(temp)
271
            i+=1
272
            continue
273
 
9334 kshitij.so 274
        if supc_data.rank==1:
275
            temp = []
276
            temp.append(supc_data)
277
            temp.append(one_line)
278
            buyBoxItems.append(temp)
279
            i+=1
280
            continue
281
 
9387 kshitij.so 282
 
9396 kshitij.so 283
        if (lowestTp > lowest_possible_tp and supc_data.ourInventory!=0):
9387 kshitij.so 284
            temp=[]
285
            temp.append(supc_data)
286
            temp.append(one_line)
287
            competitive.append(temp)
288
            i+=1
289
            continue
290
 
9396 kshitij.so 291
        if (lowestTp > lowest_possible_tp and supc_data.ourInventory==0):
292
            temp=[]
293
            temp.append(supc_data)
294
            temp.append(one_line)
295
            competitiveNoInventory.append(temp)
296
            i+=1
297
            continue
9387 kshitij.so 298
 
9451 kshitij.so 299
 
9337 kshitij.so 300
        sheet.write(sheet_iterator, 0, one_line.item_id)
301
        sheet.write(sheet_iterator, 1, one_line.category_name)
302
        sheet.write(sheet_iterator, 2, one_line.product_group)
303
        sheet.write(sheet_iterator, 3, supc)
304
        sheet.write(sheet_iterator, 4, one_line.brand)
305
        sheet.write(sheet_iterator, 5, one_line.model_name)
306
        sheet.write(sheet_iterator, 6, one_line.model_number)
307
        sheet.write(sheet_iterator, 7, one_line.color)
9359 kshitij.so 308
        sheet.write(sheet_iterator, 8, one_line.weight)
9400 kshitij.so 309
        sheet.write(sheet_iterator, 9, round(courierCost))
9399 kshitij.so 310
        sheet.write(sheet_iterator, 10, one_line.risky)
311
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9411 kshitij.so 312
        sheet.write(sheet_iterator, 13, round(supc_data.ourSp*0.9597-courierCost))
313
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
9399 kshitij.so 314
        sheet.write(sheet_iterator, 14, supc_data.rank)
315
        sheet.write(sheet_iterator, 15, supc_data.lowestSellerName)
316
        sheet.write(sheet_iterator, 16, supc_data.lowestSp)
9334 kshitij.so 317
        if one_line.parent_category ==10011:
318
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
319
        else:
320
            lowestTp = supc_data.lowestSp*0.9497-courierCost
9399 kshitij.so 321
        sheet.write(sheet_iterator, 17, round(lowestTp))
322
        sheet.write(sheet_iterator, 18, supc_data.lowestOfferPrice)
323
        sheet.write(sheet_iterator, 19, supc_data.otherInventory)
324
        sheet.write(sheet_iterator, 20, supc_data.ourInventory)
325
        sheet.write(sheet_iterator, 21, one_line.our_nlc)
9334 kshitij.so 326
        if supc_data.rank==1:
327
            i+=1
9337 kshitij.so 328
            sheet_iterator+=1
9334 kshitij.so 329
            continue
330
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
9366 kshitij.so 331
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9399 kshitij.so 332
        sheet.write(sheet_iterator, 22, round(lowest_possible_tp))
333
        sheet.write(sheet_iterator, 23, round(lowest_possible_sp))
9390 kshitij.so 334
        competitionBasis ='TP'
9411 kshitij.so 335
        if (supc_data.lowestOfferPrice == supc_data.lowestSp) and supc_data.ourOfferPrice == supc_data.ourSp:
9390 kshitij.so 336
            competitionBasis ='SP'
9399 kshitij.so 337
            sheet.write(sheet_iterator, 24, 'SP')
9366 kshitij.so 338
        else:
9399 kshitij.so 339
            sheet.write(sheet_iterator, 24, 'TP')
9334 kshitij.so 340
        proposed_tp = 0
341
        if lowestTp > lowest_possible_tp:
9399 kshitij.so 342
            sheet.write(sheet_iterator, 25, "Yes")
9334 kshitij.so 343
        else:
9399 kshitij.so 344
            sheet.write(sheet_iterator, 25, "No")
9396 kshitij.so 345
        if competitionBasis=='SP':
9411 kshitij.so 346
            proposed_sp = supc_data.lowestSp - max(10, supc_data.lowestSp*0.001)
9396 kshitij.so 347
            proposed_tp = proposed_sp*0.9597-courierCost
9399 kshitij.so 348
            sheet.write(sheet_iterator, 26, round(proposed_tp))
349
            sheet.write(sheet_iterator, 27, round(proposed_sp))
350
            sheet.write(sheet_iterator, 28, round(proposed_tp*0.988-21)) 
9396 kshitij.so 351
        else:    
9411 kshitij.so 352
            proposed_tp  = lowestTp - max(10, lowestTp*0.001)
9399 kshitij.so 353
            sheet.write(sheet_iterator, 26, round(proposed_tp))
354
            sheet.write(sheet_iterator, 27, round((proposed_tp+courierCost)/0.9597))
355
            sheet.write(sheet_iterator, 28, round(proposed_tp*0.988-21)) 
9381 kshitij.so 356
 
357
 
9366 kshitij.so 358
        if (supc_data.lowestOfferPrice - one_line.our_nlc) < 0:
9399 kshitij.so 359
            sheet.write(sheet_iterator, 29, "HIGH")
9366 kshitij.so 360
        elif (supc_data.lowestOfferPrice - one_line.our_nlc)/supc_data.lowestOfferPrice >=0 and (supc_data.lowestOfferPrice - one_line.our_nlc)/supc_data.lowestOfferPrice <= .02:
9399 kshitij.so 361
            sheet.write(sheet_iterator, 29, "MEDIUM")
9366 kshitij.so 362
        else:
9399 kshitij.so 363
            sheet.write(sheet_iterator, 29, "LOW")
9334 kshitij.so 364
        i= i+1
9337 kshitij.so 365
        sheet_iterator+=1
366
 
9334 kshitij.so 367
    createSheetForBuyBoxItems(buyBoxItems,wbk)
9387 kshitij.so 368
    createSheetForCometitiveItems(competitive,wbk)
9396 kshitij.so 369
    createSheetForCometitiveItemsNoInventory(competitiveNoInventory,wbk)
9426 kshitij.so 370
    exception_sheet(exceptionItems,wbk)
9451 kshitij.so 371
    createSheetForNegativeMargin(negativeMargin,wbk)
9334 kshitij.so 372
    wbk.save(filename)
9492 kshitij.so 373
    today = date.today()
374
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
375
    EmailAttachmentSender.mail("build@shop2020.in", "cafe@nes", ["chandan.kumar@saholic.com","manoj.kumar@saholic.com","yukti.jain@saholic.com"], " Snapdeal Sheet " + datestr, "", [get_attachment_part(filename)], ["rajneesh.arora@saholic.com","kshitij.sood@saholic.com","khushal.bhatia@saholic.com"], [])
9334 kshitij.so 376
 
9365 kshitij.so 377
 
378
 
9334 kshitij.so 379
def createSheetForBuyBoxItems(buyBoxItems,wbk):
9396 kshitij.so 380
    sheet = wbk.add_sheet('Lowest')
9334 kshitij.so 381
 
382
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
383
 
384
    excel_integer_format = '0'
385
    integer_style = xlwt.XFStyle()
386
    integer_style.num_format_str = excel_integer_format
387
 
388
    sheet.write(0, 0, "Item ID", heading_xf)
389
    sheet.write(0, 1, "Category", heading_xf)
390
    sheet.write(0, 2, "Product Group.", heading_xf)
391
    sheet.write(0, 3, "SUPC", heading_xf)
392
    sheet.write(0, 4, "Brand", heading_xf)
393
    sheet.write(0, 5, "Model Name", heading_xf)
394
    sheet.write(0, 6, "Model Number", heading_xf)
395
    sheet.write(0, 7, "Color", heading_xf)
9359 kshitij.so 396
    sheet.write(0, 8, "Weight", heading_xf)
9399 kshitij.so 397
    sheet.write(0, 9, "Courier Cost", heading_xf)
398
    sheet.write(0, 10, "Risky", heading_xf)
399
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 400
    sheet.write(0, 13, "Our TP", heading_xf)
401
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 402
    sheet.write(0, 14, "Our Rank", heading_xf)
403
    sheet.write(0, 15, "Lowest Seller", heading_xf)
404
    sheet.write(0, 16, "Second Lowest Seller", heading_xf)
405
    sheet.write(0, 17, "Second Lowest Price", heading_xf)
406
    sheet.write(0, 18, "Second Lowest Offer Price", heading_xf)
407
    sheet.write(0, 19, "Second Lowest Seller TP", heading_xf)
9396 kshitij.so 408
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
409
    sheet.write(0, 21, "Second Lowest Seller Inventory", heading_xf)
410
    sheet.write(0, 22, "Our NLC", heading_xf)
411
    sheet.write(0, 23, "Competition Basis", heading_xf)
412
    sheet.write(0, 24, "Target TP", heading_xf)
413
    sheet.write(0, 25, "Target SP", heading_xf)
9411 kshitij.so 414
    sheet.write(0, 26, "MARGIN INCREASED POTENTIAL", heading_xf)
9334 kshitij.so 415
 
416
    i=1
417
 
418
    for data in buyBoxItems:
419
        supc_data =data[0]
420
        one_line = data[1]
421
 
422
        courierCost = 45
423
 
424
        if one_line.weight:
9381 kshitij.so 425
            slab = int(((one_line.weight+0.05) - .001)/.5)
9334 kshitij.so 426
        for x in range (0,slab):
427
            courierCost = courierCost + 35
428
 
429
        courierCost = courierCost * 1.1236
430
 
431
        sheet.write(i, 0, one_line.item_id)
432
        sheet.write(i, 1, one_line.category_name)
433
        sheet.write(i, 2, one_line.product_group)
434
        sheet.write(i, 3, supc_data.supc)
435
        sheet.write(i, 4, one_line.brand)
436
        sheet.write(i, 5, one_line.model_name)
437
        sheet.write(i, 6, one_line.model_number)
438
        sheet.write(i, 7, one_line.color)
9359 kshitij.so 439
        sheet.write(i, 8, one_line.weight)
9400 kshitij.so 440
        sheet.write(i, 9, round(courierCost))
9399 kshitij.so 441
        sheet.write(i, 10, one_line.risky)
442
        sheet.write(i, 11, supc_data.ourSp)
9411 kshitij.so 443
        sheet.write(i, 13, round(supc_data.ourSp*0.9597-courierCost))
444
        sheet.write(i, 12, supc_data.ourOfferPrice)
9399 kshitij.so 445
        sheet.write(i, 14, supc_data.rank)
446
        sheet.write(i, 15, supc_data.lowestSellerName)
447
        sheet.write(i, 16, supc_data.secondLowestSellerName)
448
        sheet.write(i, 17, supc_data.secondLowestSellerSp)
449
        sheet.write(i, 18, supc_data.secondLowestSellerOfferPrice)
9334 kshitij.so 450
        if one_line.parent_category ==10011:
9396 kshitij.so 451
            secondlowestTp = (supc_data.secondLowestSellerSp*(1-.0803))-courierCost
9334 kshitij.so 452
        else:
9396 kshitij.so 453
            secondlowestTp = supc_data.secondLowestSellerSp*0.9497-courierCost
9381 kshitij.so 454
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
9396 kshitij.so 455
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9401 kshitij.so 456
        sheet.write(i, 19, round(secondlowestTp))
9396 kshitij.so 457
        sheet.write(i, 20, supc_data.ourInventory)
458
        sheet.write(i, 21, supc_data.secondLowestSellerInventory)
459
        sheet.write(i, 22, one_line.our_nlc)
460
 
461
        competitionBasis ='TP'
9411 kshitij.so 462
        if (supc_data.secondLowestSellerOfferPrice == supc_data.secondLowestSellerSp) and supc_data.ourOfferPrice==supc_data.ourSp:
9396 kshitij.so 463
            competitionBasis ='SP'
464
            sheet.write(i, 23, 'SP')
465
        else:
466
            sheet.write(i, 23, 'TP')
467
 
468
        if competitionBasis=='SP':
469
            proposed_sp = max(supc_data.secondLowestSellerSp - max((20, supc_data.secondLowestSellerSp*0.002)), lowest_possible_sp)
470
            proposed_tp = proposed_sp*0.9597-courierCost
471
            sheet.write(i, 24, round(proposed_tp))
472
            sheet.write(i, 25, round(proposed_sp))
473
        else:    
474
            proposed_tp  = max(secondlowestTp - max((20, secondlowestTp*0.002)), lowest_possible_tp)
475
            sheet.write(i, 24, round(proposed_tp))
476
            sheet.write(i, 25, round((proposed_tp+courierCost)/0.9597))
477
 
9411 kshitij.so 478
        sheet.write(i, 26, round(proposed_tp-(supc_data.ourSp*0.9597-courierCost)))     
9334 kshitij.so 479
        i+=1
9387 kshitij.so 480
 
481
 
482
def createSheetForCometitiveItems(competitiveItems,wbk):
9396 kshitij.so 483
    sheet = wbk.add_sheet('Can Compete-With Inventory')
9387 kshitij.so 484
 
485
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
9334 kshitij.so 486
 
9387 kshitij.so 487
    excel_integer_format = '0'
488
    integer_style = xlwt.XFStyle()
489
    integer_style.num_format_str = excel_integer_format
490
 
491
    sheet.write(0, 0, "Item ID", heading_xf)
492
    sheet.write(0, 1, "Category", heading_xf)
493
    sheet.write(0, 2, "Product Group.", heading_xf)
494
    sheet.write(0, 3, "SUPC", heading_xf)
495
    sheet.write(0, 4, "Brand", heading_xf)
496
    sheet.write(0, 5, "Model Name", heading_xf)
497
    sheet.write(0, 6, "Model Number", heading_xf)
498
    sheet.write(0, 7, "Color", heading_xf)
499
    sheet.write(0, 8, "Weight", heading_xf)
9399 kshitij.so 500
    sheet.write(0, 9, "Courier Cost", heading_xf)
501
    sheet.write(0, 10, "Risky", heading_xf)
502
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 503
    sheet.write(0, 13, "Our TP", heading_xf)
504
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 505
    sheet.write(0, 14, "Our Rank", heading_xf)
506
    sheet.write(0, 15, "Lowest Seller", heading_xf)
507
    sheet.write(0, 16, "Lowest SP", heading_xf)
508
    sheet.write(0, 17, "Lowest TP", heading_xf)
509
    sheet.write(0, 18, "Lowest Offer Price", heading_xf)
510
    sheet.write(0, 19, "Inventory of Top Vendors", heading_xf)
511
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
512
    sheet.write(0, 21, "Our NLC", heading_xf)
513
    sheet.write(0, 22, "Lowest Possible TP", heading_xf)
514
    sheet.write(0, 23, "Lowest Possible SP", heading_xf)
515
    sheet.write(0, 24, "Competition Basis ", heading_xf)
516
    sheet.write(0, 25, "Can Compete", heading_xf)
517
    sheet.write(0, 26, "Target TP", heading_xf)
518
    sheet.write(0, 27, "Target SP", heading_xf)  
519
    sheet.write(0, 28, "Sales Potential", heading_xf)
9387 kshitij.so 520
 
521
    i, sheet_iterator=1,1
522
    for data in competitiveItems:
523
        supc_data =data[0]
524
        one_line = data[1]
525
 
526
        courierCost = 45
527
 
528
        if one_line.weight:
529
            slab = int(((one_line.weight+0.05) - .001)/.5)
530
        for x in range (0,slab):
531
            courierCost = courierCost + 35
532
 
533
        courierCost = courierCost * 1.1236
534
 
535
 
536
        sheet.write(sheet_iterator, 0, one_line.item_id)
537
        sheet.write(sheet_iterator, 1, one_line.category_name)
538
        sheet.write(sheet_iterator, 2, one_line.product_group)
539
        sheet.write(sheet_iterator, 3, supc_data.supc)
540
        sheet.write(sheet_iterator, 4, one_line.brand)
541
        sheet.write(sheet_iterator, 5, one_line.model_name)
542
        sheet.write(sheet_iterator, 6, one_line.model_number)
543
        sheet.write(sheet_iterator, 7, one_line.color)
544
        sheet.write(sheet_iterator, 8, one_line.weight)
9400 kshitij.so 545
        sheet.write(sheet_iterator, 9, round(courierCost))
9399 kshitij.so 546
        sheet.write(sheet_iterator, 10, one_line.risky)
547
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9411 kshitij.so 548
        sheet.write(sheet_iterator, 13, round(supc_data.ourSp*0.9597-courierCost))
549
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
9399 kshitij.so 550
        sheet.write(sheet_iterator, 14, supc_data.rank)
551
        sheet.write(sheet_iterator, 15, supc_data.lowestSellerName)
552
        sheet.write(sheet_iterator, 16, supc_data.lowestSp)
9387 kshitij.so 553
        if one_line.parent_category ==10011:
554
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
555
        else:
556
            lowestTp = supc_data.lowestSp*0.9497-courierCost
9399 kshitij.so 557
        sheet.write(sheet_iterator, 17, round(lowestTp))
558
        sheet.write(sheet_iterator, 18, supc_data.lowestOfferPrice)
559
        sheet.write(sheet_iterator, 19, supc_data.otherInventory)
560
        sheet.write(sheet_iterator, 20, supc_data.ourInventory)
561
        sheet.write(sheet_iterator, 21, one_line.our_nlc)
9387 kshitij.so 562
        if supc_data.rank==1:
563
            i+=1
564
            sheet_iterator+=1
565
            continue
566
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
567
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9399 kshitij.so 568
        sheet.write(sheet_iterator, 22, round(lowest_possible_tp))
569
        sheet.write(sheet_iterator, 23, round(lowest_possible_sp))
9390 kshitij.so 570
        competitionBasis ='TP'
9411 kshitij.so 571
        if (supc_data.lowestOfferPrice == supc_data.lowestSp) and supc_data.ourOfferPrice==supc_data.ourSp:
9390 kshitij.so 572
            competitionBasis ='SP'
9399 kshitij.so 573
            sheet.write(sheet_iterator, 24, 'SP')
9387 kshitij.so 574
        else:
9399 kshitij.so 575
            sheet.write(sheet_iterator, 24, 'TP')
9387 kshitij.so 576
        proposed_tp = 0
577
        if lowestTp > lowest_possible_tp:
9399 kshitij.so 578
            sheet.write(sheet_iterator, 25, "Yes")
9390 kshitij.so 579
            if competitionBasis=='SP':
580
                proposed_sp = max(supc_data.lowestSp - max((10, supc_data.lowestSp*0.001)), lowest_possible_sp)
9396 kshitij.so 581
                proposed_tp = proposed_sp*.9597-courierCost
9399 kshitij.so 582
                sheet.write(sheet_iterator, 26, round(proposed_tp))
583
                sheet.write(sheet_iterator, 27, round(proposed_sp))
9390 kshitij.so 584
            else:
585
                proposed_tp  = max(lowestTp - max((10, lowestTp*0.001)), lowest_possible_tp)
9399 kshitij.so 586
                sheet.write(sheet_iterator, 26, round(proposed_tp))
587
                sheet.write(sheet_iterator, 27, round((proposed_tp+courierCost)/0.9597))
9387 kshitij.so 588
        else:
9399 kshitij.so 589
            sheet.write(sheet_iterator, 25, "No")
9387 kshitij.so 590
 
591
        if (supc_data.lowestOfferPrice - one_line.our_nlc) < 0:
9399 kshitij.so 592
            sheet.write(sheet_iterator, 28, "HIGH")
9387 kshitij.so 593
        elif (supc_data.lowestOfferPrice - one_line.our_nlc)/supc_data.lowestOfferPrice >=0 and (supc_data.lowestOfferPrice - one_line.our_nlc)/supc_data.lowestOfferPrice <= .02:
9399 kshitij.so 594
            sheet.write(sheet_iterator, 28, "MEDIUM")
9387 kshitij.so 595
        else:
9399 kshitij.so 596
            sheet.write(sheet_iterator, 28, "LOW")
9387 kshitij.so 597
        i= i+1
598
        sheet_iterator+=1
9334 kshitij.so 599
 
9396 kshitij.so 600
 
601
def createSheetForCometitiveItemsNoInventory(competitiveNoInventoryItems,wbk):
602
    sheet = wbk.add_sheet('Can Compete-No Inventory')
603
 
604
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
605
 
606
    excel_integer_format = '0'
607
    integer_style = xlwt.XFStyle()
608
    integer_style.num_format_str = excel_integer_format
609
 
610
    sheet.write(0, 0, "Item ID", heading_xf)
611
    sheet.write(0, 1, "Category", heading_xf)
612
    sheet.write(0, 2, "Product Group.", heading_xf)
613
    sheet.write(0, 3, "SUPC", heading_xf)
614
    sheet.write(0, 4, "Brand", heading_xf)
615
    sheet.write(0, 5, "Model Name", heading_xf)
616
    sheet.write(0, 6, "Model Number", heading_xf)
617
    sheet.write(0, 7, "Color", heading_xf)
618
    sheet.write(0, 8, "Weight", heading_xf)
9399 kshitij.so 619
    sheet.write(0, 9, "Courier Cost", heading_xf)
620
    sheet.write(0, 10, "Risky", heading_xf)
621
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 622
    sheet.write(0, 13, "Our TP", heading_xf)
623
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 624
    sheet.write(0, 14, "Our Rank", heading_xf)
625
    sheet.write(0, 15, "Lowest Seller", heading_xf)
626
    sheet.write(0, 16, "Lowest SP", heading_xf)
627
    sheet.write(0, 17, "Lowest TP", heading_xf)
628
    sheet.write(0, 18, "Lowest Offer Price", heading_xf)
629
    sheet.write(0, 19, "Inventory of Top Vendors", heading_xf)
630
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
631
    sheet.write(0, 21, "Our NLC", heading_xf)
632
    sheet.write(0, 22, "Lowest Possible TP", heading_xf)
633
    sheet.write(0, 23, "Lowest Possible SP", heading_xf)
634
    sheet.write(0, 24, "Competition Basis ", heading_xf)
635
    sheet.write(0, 25, "Can Compete", heading_xf)
636
    sheet.write(0, 26, "Target TP", heading_xf)
637
    sheet.write(0, 27, "Target SP", heading_xf)  
638
    sheet.write(0, 28, "Sales Potential", heading_xf)
9396 kshitij.so 639
 
640
    i, sheet_iterator=1,1
641
    for data in competitiveNoInventoryItems:
642
        supc_data =data[0]
643
        one_line = data[1]
644
 
645
        courierCost = 45
646
 
647
        if one_line.weight:
648
            slab = int(((one_line.weight+0.05) - .001)/.5)
649
        for x in range (0,slab):
650
            courierCost = courierCost + 35
651
 
652
        courierCost = courierCost * 1.1236
653
 
654
 
655
        sheet.write(sheet_iterator, 0, one_line.item_id)
656
        sheet.write(sheet_iterator, 1, one_line.category_name)
657
        sheet.write(sheet_iterator, 2, one_line.product_group)
658
        sheet.write(sheet_iterator, 3, supc_data.supc)
659
        sheet.write(sheet_iterator, 4, one_line.brand)
660
        sheet.write(sheet_iterator, 5, one_line.model_name)
661
        sheet.write(sheet_iterator, 6, one_line.model_number)
662
        sheet.write(sheet_iterator, 7, one_line.color)
663
        sheet.write(sheet_iterator, 8, one_line.weight)
9400 kshitij.so 664
        sheet.write(sheet_iterator, 9, round(courierCost))
9399 kshitij.so 665
        sheet.write(sheet_iterator, 10, one_line.risky)
666
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9411 kshitij.so 667
        sheet.write(sheet_iterator, 13, '-')
668
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
9399 kshitij.so 669
        sheet.write(sheet_iterator, 14, supc_data.rank)
670
        sheet.write(sheet_iterator, 15, supc_data.lowestSellerName)
671
        sheet.write(sheet_iterator, 16, supc_data.lowestSp)
9396 kshitij.so 672
        if one_line.parent_category ==10011:
673
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
674
        else:
675
            lowestTp = supc_data.lowestSp*0.9497-courierCost
9399 kshitij.so 676
        sheet.write(sheet_iterator, 17, round(lowestTp))
677
        sheet.write(sheet_iterator, 18, supc_data.lowestOfferPrice)
678
        sheet.write(sheet_iterator, 19, supc_data.otherInventory)
679
        sheet.write(sheet_iterator, 20, supc_data.ourInventory)
680
        sheet.write(sheet_iterator, 21, one_line.our_nlc)
9396 kshitij.so 681
        if supc_data.rank==1:
682
            i+=1
683
            sheet_iterator+=1
684
            continue
685
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
686
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9399 kshitij.so 687
        sheet.write(sheet_iterator, 22, round(lowest_possible_tp))
688
        sheet.write(sheet_iterator, 23, round(lowest_possible_sp))
9396 kshitij.so 689
        competitionBasis ='TP'
690
        if (supc_data.lowestOfferPrice == supc_data.lowestSp):
691
            competitionBasis ='SP'
9399 kshitij.so 692
            sheet.write(sheet_iterator, 24, 'SP')
9396 kshitij.so 693
        else:
9399 kshitij.so 694
            sheet.write(sheet_iterator, 24, 'TP')
9396 kshitij.so 695
        proposed_tp = 0
696
        if lowestTp > lowest_possible_tp:
9399 kshitij.so 697
            sheet.write(sheet_iterator, 25, "Yes")
9396 kshitij.so 698
            if competitionBasis=='SP':
699
                proposed_sp = max(supc_data.lowestSp - max((10, supc_data.lowestSp*0.001)), lowest_possible_sp)
700
                proposed_tp = proposed_sp*.9597-courierCost
9399 kshitij.so 701
                sheet.write(sheet_iterator, 26, round(proposed_tp))
702
                sheet.write(sheet_iterator, 27, round(proposed_sp))
9396 kshitij.so 703
            else:
704
                proposed_tp  = max(lowestTp - max((10, lowestTp*0.001)), lowest_possible_tp)
9399 kshitij.so 705
                sheet.write(sheet_iterator, 26, round(proposed_tp))
706
                sheet.write(sheet_iterator, 27, round((proposed_tp+courierCost)/0.9597))
9396 kshitij.so 707
        else:
9399 kshitij.so 708
            sheet.write(sheet_iterator, 25, "No")
9396 kshitij.so 709
 
710
        if (supc_data.lowestOfferPrice - one_line.our_nlc) < 0:
9399 kshitij.so 711
            sheet.write(sheet_iterator, 28, "HIGH")
9396 kshitij.so 712
        elif (supc_data.lowestOfferPrice - one_line.our_nlc)/supc_data.lowestOfferPrice >=0 and (supc_data.lowestOfferPrice - one_line.our_nlc)/supc_data.lowestOfferPrice <= .02:
9399 kshitij.so 713
            sheet.write(sheet_iterator, 28, "MEDIUM")
9396 kshitij.so 714
        else:
9399 kshitij.so 715
            sheet.write(sheet_iterator, 28, "LOW")
9396 kshitij.so 716
        i= i+1
717
        sheet_iterator+=1
718
 
9451 kshitij.so 719
def createSheetForNegativeMargin(negativeMargin,wbk):
720
    sheet = wbk.add_sheet('Negative Margin')
721
 
722
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
9396 kshitij.so 723
 
9451 kshitij.so 724
    excel_integer_format = '0'
725
    integer_style = xlwt.XFStyle()
726
    integer_style.num_format_str = excel_integer_format
727
 
728
    sheet.write(0, 0, "Item ID", heading_xf)
729
    sheet.write(0, 1, "Category", heading_xf)
730
    sheet.write(0, 2, "Product Group.", heading_xf)
731
    sheet.write(0, 3, "SUPC", heading_xf)
732
    sheet.write(0, 4, "Brand", heading_xf)
733
    sheet.write(0, 5, "Model Name", heading_xf)
734
    sheet.write(0, 6, "Model Number", heading_xf)
735
    sheet.write(0, 7, "Color", heading_xf)
736
    sheet.write(0, 8, "Weight", heading_xf)
737
    sheet.write(0, 9, "Courier Cost", heading_xf)
738
    sheet.write(0, 10, "Risky", heading_xf)
739
    sheet.write(0, 11, "Our SP", heading_xf)
740
    sheet.write(0, 13, "Our TP", heading_xf)
741
    sheet.write(0, 12, "Our Offer Price", heading_xf)
742
    sheet.write(0, 14, "Our Rank", heading_xf)
9483 kshitij.so 743
    sheet.write(0, 15, "Our NLC", heading_xf)
744
    sheet.write(0, 16, "Margin", heading_xf)
9451 kshitij.so 745
 
746
    i, sheet_iterator=1,1
747
    for data in negativeMargin:
748
        supc_data =data[0]
749
        one_line = data[1]
750
 
751
        courierCost = 45
752
 
753
        if one_line.weight:
754
            slab = int(((one_line.weight+0.05) - .001)/.5)
755
        for x in range (0,slab):
756
            courierCost = courierCost + 35
757
 
758
        courierCost = courierCost * 1.1236
759
 
9483 kshitij.so 760
        '''if one_line.parent_category ==10011:
761
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
762
        else:
763
            lowestTp = supc_data.lowestSp*0.9497-courierCost
764
        '''
9451 kshitij.so 765
 
9483 kshitij.so 766
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
767
 
9451 kshitij.so 768
        sheet.write(sheet_iterator, 0, one_line.item_id)
769
        sheet.write(sheet_iterator, 1, one_line.category_name)
770
        sheet.write(sheet_iterator, 2, one_line.product_group)
771
        sheet.write(sheet_iterator, 3, supc_data.supc)
772
        sheet.write(sheet_iterator, 4, one_line.brand)
773
        sheet.write(sheet_iterator, 5, one_line.model_name)
774
        sheet.write(sheet_iterator, 6, one_line.model_number)
775
        sheet.write(sheet_iterator, 7, one_line.color)
776
        sheet.write(sheet_iterator, 8, one_line.weight)
777
        sheet.write(sheet_iterator, 9, round(courierCost))
778
        sheet.write(sheet_iterator, 10, one_line.risky)
779
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9483 kshitij.so 780
        sheet.write(sheet_iterator, 13, round(supc_data.ourSp*0.9597-courierCost))
9451 kshitij.so 781
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
782
        sheet.write(sheet_iterator, 14, supc_data.rank)
9483 kshitij.so 783
        sheet.write(sheet_iterator, 15, one_line.our_nlc)
784
        sheet.write(sheet_iterator, 16, round((supc_data.ourSp*0.9597-courierCost) - lowest_possible_tp))
9451 kshitij.so 785
        i= i+1
786
        sheet_iterator+=1
787
 
9396 kshitij.so 788
 
9334 kshitij.so 789
def main():
790
    parser = optparse.OptionParser()
791
    parser.add_option("-f", "--file", dest="filename",
792
                   default="ItemList.xls", type="string",
793
                   help="Read the item list from FILE",
794
                   metavar="FILE")
795
    (options, args) = parser.parse_args()
796
    if len(args) != 0:
797
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
798
    filename = options.filename
799
    read_data(filename)
800
 
801
if __name__ == '__main__':
802
    main()
9451 kshitij.so 803