Subversion Repositories SmartDukaan

Rev

Rev 9457 | Rev 9484 | 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
15
import simplejson as json
9365 kshitij.so 16
from shop2020.utils import EmailAttachmentSender
17
from shop2020.utils.EmailAttachmentSender import get_attachment_part
9334 kshitij.so 18
 
19
 
9365 kshitij.so 20
 
9334 kshitij.so 21
if __name__ == '__main__' and __package__ is None:
22
    import sys
23
    import os
24
    sys.path.insert(0, os.getcwd())
25
 
26
 
27
class _SnapdealItemInfo:
28
 
9426 kshitij.so 29
    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 30
        self.item_id = item_id
31
        self.product_group = product_group
32
        self.category_name = category_name
33
        self.our_nlc = our_nlc
34
        self.brand = brand
35
        self.model_name = model_name
36
        self.model_number = model_number
37
        self.color = color
38
        self.weight = weight
39
        self.parent_category = parent_category
9359 kshitij.so 40
        self.risky = risky
9426 kshitij.so 41
        self.issue = issue
9334 kshitij.so 42
 
43
 
44
class SnapdealDetails:
9359 kshitij.so 45
    def __init__(self, supc, ourSp, offerPrice, ourInventory, otherInventory, rank, lowestSellerName,lowestSp,secondLowestSellerName,secondLowestSellerSp,secondLowestSellerInventory,lowestOfferPrice,secondLowestSellerOfferPrice,ourOfferPrice):
9334 kshitij.so 46
        self.supc = supc
47
        self.ourSp = ourSp
48
        self.offerPrice = offerPrice
49
        self.ourInventory = ourInventory
50
        self.otherInventory = otherInventory
51
        self.rank = rank
52
        self.lowestSellerName = lowestSellerName
53
        self.lowestSp = lowestSp
54
        self.secondLowestSellerName = secondLowestSellerName
55
        self.secondLowestSellerSp = secondLowestSellerSp
56
        self.secondLowestSellerInventory = secondLowestSellerInventory
9359 kshitij.so 57
        self.lowestOfferPrice = lowestOfferPrice
58
        self.secondLowestSellerOfferPrice = secondLowestSellerOfferPrice
59
        self.ourOfferPrice = ourOfferPrice
9334 kshitij.so 60
 
61
 
62
def fetchDetails(supc_code):
63
    url="http://www.snapdeal.com/json/gvbps?supc=%s&catId=91"%(supc_code)
64
    print url
65
    time.sleep(2)
66
    req = urllib2.Request(url)
67
    response = urllib2.urlopen(req)
68
    json_input = response.read()
69
    vendorInfo = json.loads(json_input)
70
    rank ,otherInventory ,ourInventory, offerPrice, ourSp,iterator = 0, 0, 0, 0, 0, 0
9337 kshitij.so 71
    secondLowestSellerName=''
72
    secondLowestSellerSp=0
73
    secondLowestSellerInventory=0
9359 kshitij.so 74
    lowestOfferPrice = 0
75
    secondLowestSellerOfferPrice = 0
76
    ourOfferPrice = 0
9334 kshitij.so 77
    for vendor in vendorInfo:
78
        if iterator == 0:
79
            lowestSellerName = vendor['vendorDisplayName']
9362 kshitij.so 80
            try:
81
                lowestSp = vendor['sellingPriceBefIntCashBack']
82
            except:
83
                lowestSp = vendor['sellingPrice']
9359 kshitij.so 84
            lowestOfferPrice = vendor['sellingPrice']
9334 kshitij.so 85
 
86
        if iterator ==1:
87
            secondLowestSellerName = vendor['vendorDisplayName']
9362 kshitij.so 88
            try:
89
                secondLowestSellerSp = vendor['sellingPriceBefIntCashBack']
90
            except:
91
                secondLowestSellerSp = vendor['sellingPrice'] 
9359 kshitij.so 92
            secondLowestSellerOfferPrice = vendor['sellingPrice'] 
9334 kshitij.so 93
            secondLowestSellerInventory = vendor['buyableInventory']
94
 
95
        if vendor['vendorDisplayName'] == 'MobilesnMore':
96
            ourInventory = vendor['buyableInventory']
9362 kshitij.so 97
            try:
98
                ourSp = vendor['sellingPriceBefIntCashBack']
99
            except:
100
                ourSp = vendor['sellingPrice']
9359 kshitij.so 101
            ourOfferPrice = vendor['sellingPrice']
9334 kshitij.so 102
            rank = iterator +1
103
        else:
104
            if rank==0:
105
                otherInventory = otherInventory +vendor['buyableInventory']
106
 
107
        iterator+=1
9359 kshitij.so 108
    snapdealDetails = SnapdealDetails(supc_code,ourSp,offerPrice,ourInventory,otherInventory,rank,lowestSellerName,lowestSp,secondLowestSellerName,secondLowestSellerSp,secondLowestSellerInventory,lowestOfferPrice,secondLowestSellerOfferPrice,ourOfferPrice)
9334 kshitij.so 109
    return snapdealDetails
110
 
111
 
112
def read_data(filename):
113
    all_lines = []
114
    all_supc=[]
115
    iclient = InventoryClient().get_client()
9337 kshitij.so 116
    DataService.initialize('catalog','192.168.166.135')
9334 kshitij.so 117
    workbook = xlrd.open_workbook(filename)
118
    sheet = workbook.sheet_by_index(0)
119
    num_rows = sheet.nrows
120
    for rownum in range(1, num_rows):
121
        print sheet.row_values(rownum)
9453 kshitij.so 122
        try:
9454 kshitij.so 123
            item_id = int(sheet.row_values(rownum)[0])
124
            supc = sheet.row_values(rownum)[1]
9453 kshitij.so 125
            item = Item.query.filter_by(id=item_id).one()
126
        except Exception as e:
9483 kshitij.so 127
            print "No item found.Maybe due to snapdeal item code in place of our sku id.Lets try again."
9453 kshitij.so 128
            print e
9483 kshitij.so 129
            try:
130
                item_id = sheet.row_values(rownum)[0]
131
                snapdeal_item = SnapdealItem.query.filter_by(skuAtSnapdeal=item_id).one()
132
                item = Item.query.filter_by(id=snapdeal_item.item_id).one()
133
            except Exception as ex:
134
                print "Ahh...Still unable to find"
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
 
9334 kshitij.so 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:
144
            snapdeal_item = SnapdealItem.query.filter_by(item_id=item_id).one()
145
            warehouse = iclient.getWarehouse(snapdeal_item.warehouseId)
146
            item_pricing = iclient.getItemPricing(item_id, warehouse.vendor.id)
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:
149
            print "Problem with item id ",item_id
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
 
266
        if (supc_data.ourSp*0.9597-courierCost < lowest_possible_tp):
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)
9365 kshitij.so 373
 
9367 kshitij.so 374
    EmailAttachmentSender.mail("build@shop2020.in", "cafe@nes", ["kshitij.sood@shop2020.in"], " " , "", [get_attachment_part(filename)], ["kshitij.sood@shop2020.in"], [])
9334 kshitij.so 375
 
9365 kshitij.so 376
 
377
 
9334 kshitij.so 378
def createSheetForBuyBoxItems(buyBoxItems,wbk):
9396 kshitij.so 379
    sheet = wbk.add_sheet('Lowest')
9334 kshitij.so 380
 
381
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
382
 
383
    excel_integer_format = '0'
384
    integer_style = xlwt.XFStyle()
385
    integer_style.num_format_str = excel_integer_format
386
 
387
    sheet.write(0, 0, "Item ID", heading_xf)
388
    sheet.write(0, 1, "Category", heading_xf)
389
    sheet.write(0, 2, "Product Group.", heading_xf)
390
    sheet.write(0, 3, "SUPC", heading_xf)
391
    sheet.write(0, 4, "Brand", heading_xf)
392
    sheet.write(0, 5, "Model Name", heading_xf)
393
    sheet.write(0, 6, "Model Number", heading_xf)
394
    sheet.write(0, 7, "Color", heading_xf)
9359 kshitij.so 395
    sheet.write(0, 8, "Weight", heading_xf)
9399 kshitij.so 396
    sheet.write(0, 9, "Courier Cost", heading_xf)
397
    sheet.write(0, 10, "Risky", heading_xf)
398
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 399
    sheet.write(0, 13, "Our TP", heading_xf)
400
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 401
    sheet.write(0, 14, "Our Rank", heading_xf)
402
    sheet.write(0, 15, "Lowest Seller", heading_xf)
403
    sheet.write(0, 16, "Second Lowest Seller", heading_xf)
404
    sheet.write(0, 17, "Second Lowest Price", heading_xf)
405
    sheet.write(0, 18, "Second Lowest Offer Price", heading_xf)
406
    sheet.write(0, 19, "Second Lowest Seller TP", heading_xf)
9396 kshitij.so 407
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
408
    sheet.write(0, 21, "Second Lowest Seller Inventory", heading_xf)
409
    sheet.write(0, 22, "Our NLC", heading_xf)
410
    sheet.write(0, 23, "Competition Basis", heading_xf)
411
    sheet.write(0, 24, "Target TP", heading_xf)
412
    sheet.write(0, 25, "Target SP", heading_xf)
9411 kshitij.so 413
    sheet.write(0, 26, "MARGIN INCREASED POTENTIAL", heading_xf)
9334 kshitij.so 414
 
415
    i=1
416
 
417
    for data in buyBoxItems:
418
        supc_data =data[0]
419
        one_line = data[1]
420
 
421
        courierCost = 45
422
 
423
        if one_line.weight:
9381 kshitij.so 424
            slab = int(((one_line.weight+0.05) - .001)/.5)
9334 kshitij.so 425
        for x in range (0,slab):
426
            courierCost = courierCost + 35
427
 
428
        courierCost = courierCost * 1.1236
429
 
430
        sheet.write(i, 0, one_line.item_id)
431
        sheet.write(i, 1, one_line.category_name)
432
        sheet.write(i, 2, one_line.product_group)
433
        sheet.write(i, 3, supc_data.supc)
434
        sheet.write(i, 4, one_line.brand)
435
        sheet.write(i, 5, one_line.model_name)
436
        sheet.write(i, 6, one_line.model_number)
437
        sheet.write(i, 7, one_line.color)
9359 kshitij.so 438
        sheet.write(i, 8, one_line.weight)
9400 kshitij.so 439
        sheet.write(i, 9, round(courierCost))
9399 kshitij.so 440
        sheet.write(i, 10, one_line.risky)
441
        sheet.write(i, 11, supc_data.ourSp)
9411 kshitij.so 442
        sheet.write(i, 13, round(supc_data.ourSp*0.9597-courierCost))
443
        sheet.write(i, 12, supc_data.ourOfferPrice)
9399 kshitij.so 444
        sheet.write(i, 14, supc_data.rank)
445
        sheet.write(i, 15, supc_data.lowestSellerName)
446
        sheet.write(i, 16, supc_data.secondLowestSellerName)
447
        sheet.write(i, 17, supc_data.secondLowestSellerSp)
448
        sheet.write(i, 18, supc_data.secondLowestSellerOfferPrice)
9334 kshitij.so 449
        if one_line.parent_category ==10011:
9396 kshitij.so 450
            secondlowestTp = (supc_data.secondLowestSellerSp*(1-.0803))-courierCost
9334 kshitij.so 451
        else:
9396 kshitij.so 452
            secondlowestTp = supc_data.secondLowestSellerSp*0.9497-courierCost
9381 kshitij.so 453
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
9396 kshitij.so 454
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9401 kshitij.so 455
        sheet.write(i, 19, round(secondlowestTp))
9396 kshitij.so 456
        sheet.write(i, 20, supc_data.ourInventory)
457
        sheet.write(i, 21, supc_data.secondLowestSellerInventory)
458
        sheet.write(i, 22, one_line.our_nlc)
459
 
460
        competitionBasis ='TP'
9411 kshitij.so 461
        if (supc_data.secondLowestSellerOfferPrice == supc_data.secondLowestSellerSp) and supc_data.ourOfferPrice==supc_data.ourSp:
9396 kshitij.so 462
            competitionBasis ='SP'
463
            sheet.write(i, 23, 'SP')
464
        else:
465
            sheet.write(i, 23, 'TP')
466
 
467
        if competitionBasis=='SP':
468
            proposed_sp = max(supc_data.secondLowestSellerSp - max((20, supc_data.secondLowestSellerSp*0.002)), lowest_possible_sp)
469
            proposed_tp = proposed_sp*0.9597-courierCost
470
            sheet.write(i, 24, round(proposed_tp))
471
            sheet.write(i, 25, round(proposed_sp))
472
        else:    
473
            proposed_tp  = max(secondlowestTp - max((20, secondlowestTp*0.002)), lowest_possible_tp)
474
            sheet.write(i, 24, round(proposed_tp))
475
            sheet.write(i, 25, round((proposed_tp+courierCost)/0.9597))
476
 
9411 kshitij.so 477
        sheet.write(i, 26, round(proposed_tp-(supc_data.ourSp*0.9597-courierCost)))     
9334 kshitij.so 478
        i+=1
9387 kshitij.so 479
 
480
 
481
def createSheetForCometitiveItems(competitiveItems,wbk):
9396 kshitij.so 482
    sheet = wbk.add_sheet('Can Compete-With Inventory')
9387 kshitij.so 483
 
484
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
9334 kshitij.so 485
 
9387 kshitij.so 486
    excel_integer_format = '0'
487
    integer_style = xlwt.XFStyle()
488
    integer_style.num_format_str = excel_integer_format
489
 
490
    sheet.write(0, 0, "Item ID", heading_xf)
491
    sheet.write(0, 1, "Category", heading_xf)
492
    sheet.write(0, 2, "Product Group.", heading_xf)
493
    sheet.write(0, 3, "SUPC", heading_xf)
494
    sheet.write(0, 4, "Brand", heading_xf)
495
    sheet.write(0, 5, "Model Name", heading_xf)
496
    sheet.write(0, 6, "Model Number", heading_xf)
497
    sheet.write(0, 7, "Color", heading_xf)
498
    sheet.write(0, 8, "Weight", heading_xf)
9399 kshitij.so 499
    sheet.write(0, 9, "Courier Cost", heading_xf)
500
    sheet.write(0, 10, "Risky", heading_xf)
501
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 502
    sheet.write(0, 13, "Our TP", heading_xf)
503
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 504
    sheet.write(0, 14, "Our Rank", heading_xf)
505
    sheet.write(0, 15, "Lowest Seller", heading_xf)
506
    sheet.write(0, 16, "Lowest SP", heading_xf)
507
    sheet.write(0, 17, "Lowest TP", heading_xf)
508
    sheet.write(0, 18, "Lowest Offer Price", heading_xf)
509
    sheet.write(0, 19, "Inventory of Top Vendors", heading_xf)
510
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
511
    sheet.write(0, 21, "Our NLC", heading_xf)
512
    sheet.write(0, 22, "Lowest Possible TP", heading_xf)
513
    sheet.write(0, 23, "Lowest Possible SP", heading_xf)
514
    sheet.write(0, 24, "Competition Basis ", heading_xf)
515
    sheet.write(0, 25, "Can Compete", heading_xf)
516
    sheet.write(0, 26, "Target TP", heading_xf)
517
    sheet.write(0, 27, "Target SP", heading_xf)  
518
    sheet.write(0, 28, "Sales Potential", heading_xf)
9387 kshitij.so 519
 
520
    i, sheet_iterator=1,1
521
    for data in competitiveItems:
522
        supc_data =data[0]
523
        one_line = data[1]
524
 
525
        courierCost = 45
526
 
527
        if one_line.weight:
528
            slab = int(((one_line.weight+0.05) - .001)/.5)
529
        for x in range (0,slab):
530
            courierCost = courierCost + 35
531
 
532
        courierCost = courierCost * 1.1236
533
 
534
 
535
        sheet.write(sheet_iterator, 0, one_line.item_id)
536
        sheet.write(sheet_iterator, 1, one_line.category_name)
537
        sheet.write(sheet_iterator, 2, one_line.product_group)
538
        sheet.write(sheet_iterator, 3, supc_data.supc)
539
        sheet.write(sheet_iterator, 4, one_line.brand)
540
        sheet.write(sheet_iterator, 5, one_line.model_name)
541
        sheet.write(sheet_iterator, 6, one_line.model_number)
542
        sheet.write(sheet_iterator, 7, one_line.color)
543
        sheet.write(sheet_iterator, 8, one_line.weight)
9400 kshitij.so 544
        sheet.write(sheet_iterator, 9, round(courierCost))
9399 kshitij.so 545
        sheet.write(sheet_iterator, 10, one_line.risky)
546
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9411 kshitij.so 547
        sheet.write(sheet_iterator, 13, round(supc_data.ourSp*0.9597-courierCost))
548
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
9399 kshitij.so 549
        sheet.write(sheet_iterator, 14, supc_data.rank)
550
        sheet.write(sheet_iterator, 15, supc_data.lowestSellerName)
551
        sheet.write(sheet_iterator, 16, supc_data.lowestSp)
9387 kshitij.so 552
        if one_line.parent_category ==10011:
553
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
554
        else:
555
            lowestTp = supc_data.lowestSp*0.9497-courierCost
9399 kshitij.so 556
        sheet.write(sheet_iterator, 17, round(lowestTp))
557
        sheet.write(sheet_iterator, 18, supc_data.lowestOfferPrice)
558
        sheet.write(sheet_iterator, 19, supc_data.otherInventory)
559
        sheet.write(sheet_iterator, 20, supc_data.ourInventory)
560
        sheet.write(sheet_iterator, 21, one_line.our_nlc)
9387 kshitij.so 561
        if supc_data.rank==1:
562
            i+=1
563
            sheet_iterator+=1
564
            continue
565
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
566
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9399 kshitij.so 567
        sheet.write(sheet_iterator, 22, round(lowest_possible_tp))
568
        sheet.write(sheet_iterator, 23, round(lowest_possible_sp))
9390 kshitij.so 569
        competitionBasis ='TP'
9411 kshitij.so 570
        if (supc_data.lowestOfferPrice == supc_data.lowestSp) and supc_data.ourOfferPrice==supc_data.ourSp:
9390 kshitij.so 571
            competitionBasis ='SP'
9399 kshitij.so 572
            sheet.write(sheet_iterator, 24, 'SP')
9387 kshitij.so 573
        else:
9399 kshitij.so 574
            sheet.write(sheet_iterator, 24, 'TP')
9387 kshitij.so 575
        proposed_tp = 0
576
        if lowestTp > lowest_possible_tp:
9399 kshitij.so 577
            sheet.write(sheet_iterator, 25, "Yes")
9390 kshitij.so 578
            if competitionBasis=='SP':
579
                proposed_sp = max(supc_data.lowestSp - max((10, supc_data.lowestSp*0.001)), lowest_possible_sp)
9396 kshitij.so 580
                proposed_tp = proposed_sp*.9597-courierCost
9399 kshitij.so 581
                sheet.write(sheet_iterator, 26, round(proposed_tp))
582
                sheet.write(sheet_iterator, 27, round(proposed_sp))
9390 kshitij.so 583
            else:
584
                proposed_tp  = max(lowestTp - max((10, lowestTp*0.001)), lowest_possible_tp)
9399 kshitij.so 585
                sheet.write(sheet_iterator, 26, round(proposed_tp))
586
                sheet.write(sheet_iterator, 27, round((proposed_tp+courierCost)/0.9597))
9387 kshitij.so 587
        else:
9399 kshitij.so 588
            sheet.write(sheet_iterator, 25, "No")
9387 kshitij.so 589
 
590
        if (supc_data.lowestOfferPrice - one_line.our_nlc) < 0:
9399 kshitij.so 591
            sheet.write(sheet_iterator, 28, "HIGH")
9387 kshitij.so 592
        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 593
            sheet.write(sheet_iterator, 28, "MEDIUM")
9387 kshitij.so 594
        else:
9399 kshitij.so 595
            sheet.write(sheet_iterator, 28, "LOW")
9387 kshitij.so 596
        i= i+1
597
        sheet_iterator+=1
9334 kshitij.so 598
 
9396 kshitij.so 599
 
600
def createSheetForCometitiveItemsNoInventory(competitiveNoInventoryItems,wbk):
601
    sheet = wbk.add_sheet('Can Compete-No Inventory')
602
 
603
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
604
 
605
    excel_integer_format = '0'
606
    integer_style = xlwt.XFStyle()
607
    integer_style.num_format_str = excel_integer_format
608
 
609
    sheet.write(0, 0, "Item ID", heading_xf)
610
    sheet.write(0, 1, "Category", heading_xf)
611
    sheet.write(0, 2, "Product Group.", heading_xf)
612
    sheet.write(0, 3, "SUPC", heading_xf)
613
    sheet.write(0, 4, "Brand", heading_xf)
614
    sheet.write(0, 5, "Model Name", heading_xf)
615
    sheet.write(0, 6, "Model Number", heading_xf)
616
    sheet.write(0, 7, "Color", heading_xf)
617
    sheet.write(0, 8, "Weight", heading_xf)
9399 kshitij.so 618
    sheet.write(0, 9, "Courier Cost", heading_xf)
619
    sheet.write(0, 10, "Risky", heading_xf)
620
    sheet.write(0, 11, "Our SP", heading_xf)
9411 kshitij.so 621
    sheet.write(0, 13, "Our TP", heading_xf)
622
    sheet.write(0, 12, "Our Offer Price", heading_xf)
9399 kshitij.so 623
    sheet.write(0, 14, "Our Rank", heading_xf)
624
    sheet.write(0, 15, "Lowest Seller", heading_xf)
625
    sheet.write(0, 16, "Lowest SP", heading_xf)
626
    sheet.write(0, 17, "Lowest TP", heading_xf)
627
    sheet.write(0, 18, "Lowest Offer Price", heading_xf)
628
    sheet.write(0, 19, "Inventory of Top Vendors", heading_xf)
629
    sheet.write(0, 20, "Our Snapdeal Inventory", heading_xf)
630
    sheet.write(0, 21, "Our NLC", heading_xf)
631
    sheet.write(0, 22, "Lowest Possible TP", heading_xf)
632
    sheet.write(0, 23, "Lowest Possible SP", heading_xf)
633
    sheet.write(0, 24, "Competition Basis ", heading_xf)
634
    sheet.write(0, 25, "Can Compete", heading_xf)
635
    sheet.write(0, 26, "Target TP", heading_xf)
636
    sheet.write(0, 27, "Target SP", heading_xf)  
637
    sheet.write(0, 28, "Sales Potential", heading_xf)
9396 kshitij.so 638
 
639
    i, sheet_iterator=1,1
640
    for data in competitiveNoInventoryItems:
641
        supc_data =data[0]
642
        one_line = data[1]
643
 
644
        courierCost = 45
645
 
646
        if one_line.weight:
647
            slab = int(((one_line.weight+0.05) - .001)/.5)
648
        for x in range (0,slab):
649
            courierCost = courierCost + 35
650
 
651
        courierCost = courierCost * 1.1236
652
 
653
 
654
        sheet.write(sheet_iterator, 0, one_line.item_id)
655
        sheet.write(sheet_iterator, 1, one_line.category_name)
656
        sheet.write(sheet_iterator, 2, one_line.product_group)
657
        sheet.write(sheet_iterator, 3, supc_data.supc)
658
        sheet.write(sheet_iterator, 4, one_line.brand)
659
        sheet.write(sheet_iterator, 5, one_line.model_name)
660
        sheet.write(sheet_iterator, 6, one_line.model_number)
661
        sheet.write(sheet_iterator, 7, one_line.color)
662
        sheet.write(sheet_iterator, 8, one_line.weight)
9400 kshitij.so 663
        sheet.write(sheet_iterator, 9, round(courierCost))
9399 kshitij.so 664
        sheet.write(sheet_iterator, 10, one_line.risky)
665
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9411 kshitij.so 666
        sheet.write(sheet_iterator, 13, '-')
667
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
9399 kshitij.so 668
        sheet.write(sheet_iterator, 14, supc_data.rank)
669
        sheet.write(sheet_iterator, 15, supc_data.lowestSellerName)
670
        sheet.write(sheet_iterator, 16, supc_data.lowestSp)
9396 kshitij.so 671
        if one_line.parent_category ==10011:
672
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
673
        else:
674
            lowestTp = supc_data.lowestSp*0.9497-courierCost
9399 kshitij.so 675
        sheet.write(sheet_iterator, 17, round(lowestTp))
676
        sheet.write(sheet_iterator, 18, supc_data.lowestOfferPrice)
677
        sheet.write(sheet_iterator, 19, supc_data.otherInventory)
678
        sheet.write(sheet_iterator, 20, supc_data.ourInventory)
679
        sheet.write(sheet_iterator, 21, one_line.our_nlc)
9396 kshitij.so 680
        if supc_data.rank==1:
681
            i+=1
682
            sheet_iterator+=1
683
            continue
684
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
685
        lowest_possible_sp = (lowest_possible_tp+courierCost)/0.9597
9399 kshitij.so 686
        sheet.write(sheet_iterator, 22, round(lowest_possible_tp))
687
        sheet.write(sheet_iterator, 23, round(lowest_possible_sp))
9396 kshitij.so 688
        competitionBasis ='TP'
689
        if (supc_data.lowestOfferPrice == supc_data.lowestSp):
690
            competitionBasis ='SP'
9399 kshitij.so 691
            sheet.write(sheet_iterator, 24, 'SP')
9396 kshitij.so 692
        else:
9399 kshitij.so 693
            sheet.write(sheet_iterator, 24, 'TP')
9396 kshitij.so 694
        proposed_tp = 0
695
        if lowestTp > lowest_possible_tp:
9399 kshitij.so 696
            sheet.write(sheet_iterator, 25, "Yes")
9396 kshitij.so 697
            if competitionBasis=='SP':
698
                proposed_sp = max(supc_data.lowestSp - max((10, supc_data.lowestSp*0.001)), lowest_possible_sp)
699
                proposed_tp = proposed_sp*.9597-courierCost
9399 kshitij.so 700
                sheet.write(sheet_iterator, 26, round(proposed_tp))
701
                sheet.write(sheet_iterator, 27, round(proposed_sp))
9396 kshitij.so 702
            else:
703
                proposed_tp  = max(lowestTp - max((10, lowestTp*0.001)), lowest_possible_tp)
9399 kshitij.so 704
                sheet.write(sheet_iterator, 26, round(proposed_tp))
705
                sheet.write(sheet_iterator, 27, round((proposed_tp+courierCost)/0.9597))
9396 kshitij.so 706
        else:
9399 kshitij.so 707
            sheet.write(sheet_iterator, 25, "No")
9396 kshitij.so 708
 
709
        if (supc_data.lowestOfferPrice - one_line.our_nlc) < 0:
9399 kshitij.so 710
            sheet.write(sheet_iterator, 28, "HIGH")
9396 kshitij.so 711
        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 712
            sheet.write(sheet_iterator, 28, "MEDIUM")
9396 kshitij.so 713
        else:
9399 kshitij.so 714
            sheet.write(sheet_iterator, 28, "LOW")
9396 kshitij.so 715
        i= i+1
716
        sheet_iterator+=1
717
 
9451 kshitij.so 718
def createSheetForNegativeMargin(negativeMargin,wbk):
719
    sheet = wbk.add_sheet('Negative Margin')
720
 
721
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
9396 kshitij.so 722
 
9451 kshitij.so 723
    excel_integer_format = '0'
724
    integer_style = xlwt.XFStyle()
725
    integer_style.num_format_str = excel_integer_format
726
 
727
    sheet.write(0, 0, "Item ID", heading_xf)
728
    sheet.write(0, 1, "Category", heading_xf)
729
    sheet.write(0, 2, "Product Group.", heading_xf)
730
    sheet.write(0, 3, "SUPC", heading_xf)
731
    sheet.write(0, 4, "Brand", heading_xf)
732
    sheet.write(0, 5, "Model Name", heading_xf)
733
    sheet.write(0, 6, "Model Number", heading_xf)
734
    sheet.write(0, 7, "Color", heading_xf)
735
    sheet.write(0, 8, "Weight", heading_xf)
736
    sheet.write(0, 9, "Courier Cost", heading_xf)
737
    sheet.write(0, 10, "Risky", heading_xf)
738
    sheet.write(0, 11, "Our SP", heading_xf)
739
    sheet.write(0, 13, "Our TP", heading_xf)
740
    sheet.write(0, 12, "Our Offer Price", heading_xf)
741
    sheet.write(0, 14, "Our Rank", heading_xf)
9483 kshitij.so 742
    sheet.write(0, 15, "Our NLC", heading_xf)
743
    sheet.write(0, 16, "Margin", heading_xf)
9451 kshitij.so 744
 
745
    i, sheet_iterator=1,1
746
    for data in negativeMargin:
747
        supc_data =data[0]
748
        one_line = data[1]
749
 
750
        courierCost = 45
751
 
752
        if one_line.weight:
753
            slab = int(((one_line.weight+0.05) - .001)/.5)
754
        for x in range (0,slab):
755
            courierCost = courierCost + 35
756
 
757
        courierCost = courierCost * 1.1236
758
 
9483 kshitij.so 759
        '''if one_line.parent_category ==10011:
760
            lowestTp = (supc_data.lowestSp*(1-.0803))-courierCost
761
        else:
762
            lowestTp = supc_data.lowestSp*0.9497-courierCost
763
        '''
9451 kshitij.so 764
 
9483 kshitij.so 765
        lowest_possible_tp = one_line.our_nlc/0.988+15+6
766
 
9451 kshitij.so 767
        sheet.write(sheet_iterator, 0, one_line.item_id)
768
        sheet.write(sheet_iterator, 1, one_line.category_name)
769
        sheet.write(sheet_iterator, 2, one_line.product_group)
770
        sheet.write(sheet_iterator, 3, supc_data.supc)
771
        sheet.write(sheet_iterator, 4, one_line.brand)
772
        sheet.write(sheet_iterator, 5, one_line.model_name)
773
        sheet.write(sheet_iterator, 6, one_line.model_number)
774
        sheet.write(sheet_iterator, 7, one_line.color)
775
        sheet.write(sheet_iterator, 8, one_line.weight)
776
        sheet.write(sheet_iterator, 9, round(courierCost))
777
        sheet.write(sheet_iterator, 10, one_line.risky)
778
        sheet.write(sheet_iterator, 11, supc_data.ourSp)
9483 kshitij.so 779
        sheet.write(sheet_iterator, 13, round(supc_data.ourSp*0.9597-courierCost))
9451 kshitij.so 780
        sheet.write(sheet_iterator, 12, supc_data.ourOfferPrice)
781
        sheet.write(sheet_iterator, 14, supc_data.rank)
9483 kshitij.so 782
        sheet.write(sheet_iterator, 15, one_line.our_nlc)
783
        sheet.write(sheet_iterator, 16, round((supc_data.ourSp*0.9597-courierCost) - lowest_possible_tp))
9451 kshitij.so 784
        i= i+1
785
        sheet_iterator+=1
786
 
9396 kshitij.so 787
 
9334 kshitij.so 788
def main():
789
    parser = optparse.OptionParser()
790
    parser.add_option("-f", "--file", dest="filename",
791
                   default="ItemList.xls", type="string",
792
                   help="Read the item list from FILE",
793
                   metavar="FILE")
794
    (options, args) = parser.parse_args()
795
    if len(args) != 0:
796
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
797
    filename = options.filename
798
    read_data(filename)
799
 
800
if __name__ == '__main__':
801
    main()
9451 kshitij.so 802