Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13774 amit.gupta 1
# coding=utf-8
13569 amit.gupta 2
'''
3
Created on Jan 15, 2015
4
 
5
@author: amit
6
'''
13774 amit.gupta 7
from base64 import encode
8
from bs4 import BeautifulSoup
17231 amit.gupta 9
from datetime import datetime, timedelta, date
16874 amit.gupta 10
from dtr.api.Order import process_rejects
14650 amit.gupta 11
from dtr.dao import Order, SubOrder, AmazonAffiliateInfo
14464 amit.gupta 12
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
14624 amit.gupta 13
    ungzipResponse, tprint
14650 amit.gupta 14
from dtr.sources.flipkart import todict, AFF_REPORT_URL
16986 amit.gupta 15
from dtr.storage.DataService import OrdersRaw, Orders, Order_Parse_Info,\
16
    All_user_addresses
16874 amit.gupta 17
from dtr.storage.Mongo import getDealRank
18
from dtr.utils.utils import fetchResponseUsingProxy, readSSh
19
from elixir import *
14650 amit.gupta 20
import base64
16874 amit.gupta 21
import dtr
14650 amit.gupta 22
import gzip
14624 amit.gupta 23
import mechanize
14285 amit.gupta 24
import os.path
13774 amit.gupta 25
import re
14033 amit.gupta 26
import time
13809 amit.gupta 27
import traceback
14650 amit.gupta 28
import urllib2
13774 amit.gupta 29
 
30
ORDER_REDIRECT_URL = 'https://www.amazon.in/gp/css/summary/edit.html?orderID=%s'
13810 amit.gupta 31
ORDER_SUCCESS_URL = 'https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html'
13823 amit.gupta 32
THANKYOU_URL = 'https://www.amazon.in/gp/buy/thankyou/handlers/display.html'
14624 amit.gupta 33
AMAZON_AFF_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/listReports'
14650 amit.gupta 34
AMAZON_AFF_FILE_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/getReport?filename=saholic-21-orders-report-%s.tsv.gz'
13774 amit.gupta 35
class Store(MStore):
13821 amit.gupta 36
 
14032 amit.gupta 37
    orderStatusRegexMap = { MStore.ORDER_PLACED : ['ordered from', 'not yet dispatched','dispatching now', 'preparing for dispatch'],
14064 amit.gupta 38
                            MStore.ORDER_SHIPPED : ['dispatched on','dispatched', 'on the way', 'out for delivery', 'Out for delivery'],
14032 amit.gupta 39
                            MStore.ORDER_CANCELLED : ['return complete', 'refunded', 'cancelled'],
17258 amit.gupta 40
                            MStore.ORDER_DELIVERED : ['delivered', 'your package was delivered', 'package was handed directly to customer']
13821 amit.gupta 41
                           }
13774 amit.gupta 42
 
43
    def __init__(self,store_id):
44
        super(Store, self).__init__(store_id)
45
 
46
    def getName(self):
14749 amit.gupta 47
        return "amazon"
13774 amit.gupta 48
 
14945 amit.gupta 49
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl, track=False):
14958 amit.gupta 50
        parseString = "Tracking" if track else "Transacted"
51
        print parseString, "Order Id to be parsed is :", orderId
13796 amit.gupta 52
        resp = {}
14813 amit.gupta 53
        resp['result'] = 'ORDER_NOT_CREATED'
13821 amit.gupta 54
        if ORDER_SUCCESS_URL in orderSuccessUrl or THANKYOU_URL in orderSuccessUrl:
13774 amit.gupta 55
            try:
56
                soup = BeautifulSoup(rawHtml)
14608 amit.gupta 57
                try:
58
                    orderUrl = soup.find('div', {"id":"thank-you-box-wrapper"}).div.findAll('div', recursive=False)[1].a['href']
59
                    merchantOrderId = re.findall(r'.*&oid=(.*)&?.*?', orderUrl)[0]
60
                except:
61
                    merchantOrderId = soup.find(id="orders-list").div.span.b.text
14699 amit.gupta 62
                order = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl, True)
14972 amit.gupta 63
                order.orderTrackingUrl = ORDER_REDIRECT_URL % (merchantOrderId)
64
                order.orderSuccessUrl = orderSuccessUrl
14211 amit.gupta 65
                order.merchantOrderId = merchantOrderId
14291 amit.gupta 66
                order.requireDetail = True
14698 amit.gupta 67
                order.status = 'html_required'
14297 amit.gupta 68
                order.closed = None
14312 amit.gupta 69
                if self._saveToOrder(todict(order)):
70
                    resp['result'] = 'ORDER_CREATED'
71
                    resp["url"] = ORDER_REDIRECT_URL % (merchantOrderId)
72
                    resp["htmlRequired"] = True
73
                    resp['orderId'] = orderId
74
                else:
75
                    resp['result'] = 'ORDER_ALREADY_CREATED_IGNORED'
76
 
13774 amit.gupta 77
            except:
14813 amit.gupta 78
                #Write all cases here for Order Not created Known
14809 amit.gupta 79
                try:
16874 amit.gupta 80
                    if not soup.body:
81
                        resp['result'] = 'ORDER_NOT_CREATED_KNOWN'
16878 amit.gupta 82
                    elif 'Securely redirecting you' in soup.h3.text.strip() or soup.h3.text.strip()=="Orders":
14813 amit.gupta 83
                        resp['result'] = 'ORDER_NOT_CREATED_KNOWN'
14809 amit.gupta 84
                    else:
14813 amit.gupta 85
                        raise
14809 amit.gupta 86
                except:
14814 amit.gupta 87
                    try:
16880 amit.gupta 88
                        if soup.h1.text.strip() in ['This is a duplicate order', 'There was a problem with your payment.', 'Your Orders', 'Your Shopping Cart is empty.', 'Select a payment method', 'Edit quantities'] or "Saved for later" in soup.h1.text.strip():
14814 amit.gupta 89
                            resp['result'] = 'ORDER_NOT_CREATED_KNOWN'
90
                        else:
91
                            raise
92
                    except:
15046 amit.gupta 93
                        try:
16874 amit.gupta 94
                            if soup.h2.text.strip() in ['Web page not available','Webpage not available']:
15046 amit.gupta 95
                                resp['result'] = 'ORDER_NOT_CREATED_KNOWN'
96
                            else:
97
                                raise
98
                        except:
15565 amit.gupta 99
                            try:
16876 amit.gupta 100
                                if soup.find(id="loading-spinner-img") is not None or soup.find(id="anonCarousel1") is not None or soup.find(id="ap_signin_pagelet_title") is not None or soup.find(id="nav-greeting-name") is not None:
15565 amit.gupta 101
                                    resp['result'] = 'ORDER_NOT_CREATED_KNOWN'
16877 amit.gupta 102
                                elif soup.find("b", {'class':'h1'}).text.strip().find("We're sorry") > -1:
103
                                    resp['result'] = 'ORDER_NOT_CREATED_KNOWN'
15565 amit.gupta 104
                                else:
105
                                    raise
106
                            except:
107
                                resp['result'] = 'ORDER_NOT_CREATED_UNKNOWN'
108
 
13774 amit.gupta 109
        else:
13781 amit.gupta 110
            try:
14722 amit.gupta 111
                mo = self.db.merchantOrder.find_one({"orderId":orderId})
112
                if mo is not None:
14749 amit.gupta 113
                    merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl, False)
14722 amit.gupta 114
                    merchantOrder.createdOn = mo.get("createdOn")
115
                    merchantOrder.createdOnInt =  mo.get("createdOnInt")
116
                else:
14945 amit.gupta 117
                    print "Could not find amazon order with order Id", orderId
14749 amit.gupta 118
                    merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl)
14464 amit.gupta 119
                soup = BeautifulSoup(rawHtml)
120
                try:
14961 amit.gupta 121
                    self.parseNewStlye(merchantOrder, soup)
15046 amit.gupta 122
                    resp['result'] = 'DETAIL_CREATED'
14464 amit.gupta 123
                except:
14545 amit.gupta 124
                    try:
14566 amit.gupta 125
                        traceback.print_exc()
14961 amit.gupta 126
                        self.parseOldStlye(merchantOrder, soup)
15046 amit.gupta 127
                        resp['result'] = 'DETAIL_CREATED'
14545 amit.gupta 128
                    except:
14566 amit.gupta 129
                        traceback.print_exc()
15056 amit.gupta 130
                        try:
131
                            self.parseCancelled(merchantOrder, soup)
132
                            resp['result'] = 'ORDER_CANCELLED'
133
                        except:
15059 amit.gupta 134
                            try:
16780 amit.gupta 135
                                if soup.h1.span.text=="Account" or soup.h1.text.strip() in ["Your Account"]:
15059 amit.gupta 136
                                    resp['result'] = 'DETAIL_NOT_CREATED_KNOWN'
137
                                else:
138
                                    raise
139
                            except:
140
                                if soup.find(id="ap_signin_pagelet_title").h1.text.strip()=="Sign In":
141
                                    resp['result'] = 'DETAIL_NOT_CREATED_KNOWN'
142
                                else:
143
                                    raise
13781 amit.gupta 144
            except:
14813 amit.gupta 145
                order = self.db.merchantOrder.find_one({"orderId":orderId})
146
                if order is not None:
147
                    self.db.merchantOrder.update({"orderId":orderId}, {"$set":{"status":"parse_failed"}})
148
                print "Error occurred"
15046 amit.gupta 149
                resp['result'] = 'DETAIL_NOT_CREATED_UNKNOWN'
14813 amit.gupta 150
                traceback.print_exc()
15046 amit.gupta 151
        return resp    
13774 amit.gupta 152
 
13868 amit.gupta 153
    #This should be exposed from api for specific sources
154
    def scrapeStoreOrders(self):
14624 amit.gupta 155
        orders = self.db.merchantOrder.find({"storeId":1, "closed":False, "subOrders.closed":False, "subOrders.trackingUrl":{"$exists":True}})
156
        for merchantOrder in orders:
14981 amit.gupta 157
            executeBulk = False
14624 amit.gupta 158
            try:
159
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
160
                closed = True
161
                map1 = {}
162
                for subOrder in merchantOrder.get("subOrders"):
163
                    if subOrder.get("closed"):
164
                        continue
165
                    elif subOrder.get("trackingUrl") is None:
166
                        closed = False
167
                        continue
168
                    findMap = {"orderId":merchantOrder.get("orderId"), "subOrders.merchantSubOrderId":subOrder.get("merchantSubOrderId")} 
169
                    trackingUrl = subOrder.get("trackingUrl")
170
                    if not map1.has_key(trackingUrl):
16468 amit.gupta 171
                        map1[trackingUrl] = self.parseTrackingUrl(trackingUrl, merchantOrder.get("orderId"))
14624 amit.gupta 172
                    newOrder = map1.get(trackingUrl)
16474 amit.gupta 173
                    if newOrder:
174
                        executeBulk = True
175
                        updateMap = self.getUpdateMap(newOrder, subOrder.get('cashBackStatus'))
176
                        print findMap, "\n", updateMap
177
                        bulk.find(findMap).update({'$set' : updateMap})
178
                        closed = closed and newOrder['closed']
14981 amit.gupta 179
                if executeBulk:
14697 amit.gupta 180
                    bulk.find({"orderId":merchantOrder.get("orderId")}).update({"$set":{"closed":closed, "parseError":False}})
14981 amit.gupta 181
                    bulk.execute()
14624 amit.gupta 182
            except:
14847 amit.gupta 183
                tprint("Could not update " + str(merchantOrder['orderId']) + " For store " + self.getName())
14692 amit.gupta 184
                self.db.merchantOrder.update({"orderId":merchantOrder['orderId']}, {"$set":{"parseError":True}})
14624 amit.gupta 185
                traceback.print_exc()
186
 
14608 amit.gupta 187
 
188
 
14771 amit.gupta 189
    def parserest(self, soup):
190
        print "Hi"
191
        if soup.find('h1'):
192
            print "OK"
14608 amit.gupta 193
 
14464 amit.gupta 194
    def parseOldStlye(self, merchantOrder, soup):
195
        merchantOrder.orderTrackingUrl = merchantOrder.orderSuccessUrl
196
        table = soup.body.findAll("table", recursive=False)[1]
197
        #print table
198
        tables = table.tr.td.findAll("table", recursive=False)
199
        for tr in tables[2].findAll("tr"):
200
            boldElement = tr.td.b
201
            if "Order Placed" in str(boldElement):
202
                merchantOrder.placedOn = boldElement.next_sibling.strip()
203
            if "order number" in str(boldElement):
204
                merchantOrder.merchantOrderId = boldElement.next_sibling.strip()
205
            if "Order Total" in str(boldElement):
206
                merchantOrder.paidAmount = int(float(boldElement.find('span').contents[-1].replace(',','')))
207
        anchors = table.tr.td.findAll("a", recursive=False)
208
        paymentAnchor = anchors.pop(-1)
209
 
210
        count = 0
211
        subOrders = []
212
        merchantOrder.subOrders = subOrders
213
        counter = 0 
214
        for anchor in anchors:
215
            count += 1
216
            tab = anchor.next_sibling
217
            status = MStore.ORDER_PLACED
218
            subStr = "Delivery #" + str(count) + ":"
219
            if subStr in  tab.find("b").text:
220
                detailedStatus = tab.find("b").text.replace(subStr, '').strip()
221
 
222
            tab = tab.next_sibling.next_sibling
223
            trs = tab.find("table").find('tbody').findAll("tr", recursive = False)
224
 
225
            estimatedDelivery = trs[0].td.find("b").next_sibling.strip()
226
 
227
            orderItemTrs = trs[1].findAll("td", recursive=False)[1].table.tbody.findAll("tr", recursive = False)
228
            i = -1
229
            for orderItemTr in orderItemTrs:
230
                i += 1
231
                if i%2 == 0:
232
                    continue
233
                counter += 1
234
                quantity =  int(re.findall(r'\d+', orderItemTr.td.contents[0])[0])
235
 
236
                productUrl = orderItemTr.td.contents[1].a["href"]
237
                productTitle = orderItemTr.td.contents[1].a.text
238
 
239
                unitPrice = int(float(orderItemTr.findAll('td')[1].span.text.replace('Rs. ','').replace(',','')))
240
 
241
 
242
                subOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, unitPrice*quantity, status, quantity)
243
                subOrder.merchantSubOrderId = str(counter) + " of " + merchantOrder.merchantOrderId
244
                subOrder.estimatedDeliveryDate = estimatedDelivery
14722 amit.gupta 245
                estDlvyTime = datetime.strptime(estimatedDelivery.split('-')[0].strip(), "%A %d %B %Y")
246
                createdOn = datetime.fromtimestamp(merchantOrder.createdOnInt)
247
                subOrder.trackAfter = int(time.mktime(max(estDlvyTime-timedelta(days=4),createdOn + timedelta(days=3)).timetuple()))
14464 amit.gupta 248
                subOrder.productCode = productUrl.split('/')[5]
249
                subOrder.detailedStatus = detailedStatus
250
                (cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, unitPrice*quantity)
15346 amit.gupta 251
                dealRank = getDealRank(subOrder.productCode, self.store_id, merchantOrder.userId)
252
                subOrder.dealRank = dealRank.get('rank')
253
                subOrder.rankDesc = dealRank.get('description')
16283 amit.gupta 254
                subOrder.maxNlc = dealRank.get('maxNlc')
255
                subOrder.minNlc = dealRank.get('minNlc')
256
                subOrder.db = dealRank.get('dp')
257
                subOrder.itemStatus = dealRank.get('status')
14464 amit.gupta 258
                cashbackStatus = Store.CB_PENDING
259
                if cashbackAmount <= 0:
260
                    cashbackStatus = Store.CB_NA
261
                subOrder.cashBackStatus = cashbackStatus
262
                subOrder.cashBackAmount = cashbackAmount
263
                if percentage > 0:
264
                    subOrder.cashBackPercentage = percentage
265
                subOrders.append(subOrder)
266
        priceList = paymentAnchor.next_sibling.next_sibling.next_sibling.table.table.tbody.tbody.tbody.findAll('tr', recursive=False)
267
        totalAmount = 0
268
        grandAmount = 0
269
        for price in priceList:
270
            labelTd = price.td
271
            if 'Subtotal:' in labelTd.text:
272
                totalAmount += int(float(labelTd.next_sibling.next_sibling.find('span').contents[-1].replace(',','')))
273
            elif 'Grand Total:' in labelTd.text:
274
                grandAmount += int(float(labelTd.next_sibling.next_sibling.find('span').contents[-1].replace(',','')))
275
        if grandAmount < totalAmount:
276
            diff = totalAmount - grandAmount
277
            for subOrder in merchantOrder.subOrders:
278
                subOrder.amountPaid -= int(diff*(1-subOrder.amountPaid/totalAmount))
14698 amit.gupta 279
        merchantOrder.status='success'
14464 amit.gupta 280
        self._updateToOrder(todict(merchantOrder))
281
 
282
    def parseNewStlye(self, merchantOrder, soup):
283
        merchantOrder.orderTrackingUrl = merchantOrder.orderSuccessUrl
284
        orderDetailsContainer = soup.body.find(id="orderDetails")
14566 amit.gupta 285
        divAfterH1 = orderDetailsContainer.h1.next_sibling.next_sibling
286
        orderLeftDiv = divAfterH1.div
14464 amit.gupta 287
        placedOnSpan = orderLeftDiv.find("span", {'class':'order-date-invoice-item'})
288
        merchantOrder.placedOn =placedOnSpan.text.split('Ordered on')[1].strip()
289
        merchantOrder.merchantOrderId = placedOnSpan.next_sibling.next_sibling.text.split('Order#')[1].strip()
15555 amit.gupta 290
        try:
291
            priceBox = divAfterH1.next_sibling.next_sibling.next_sibling.next_sibling.find("div", {"class":"a-box-inner"}).div.div.findAll('div', recursive=False)[-1]
292
        except:
293
            priceBox = divAfterH1.next_sibling.next_sibling.next_sibling.next_sibling.find("div", {"class":"a-box a-last"}).div.div.findAll('div', recursive=False)[-1]
14464 amit.gupta 294
        priceRows = priceBox.findAll('div', {'class':'a-row'})
295
        subTotal = 0
14566 amit.gupta 296
        shippingPrice = 0   
14464 amit.gupta 297
        promoApplied = 0
298
        for priceRow in priceRows:
299
            if "Item(s) Subtotal:" in str(priceRow):
300
                subTotal = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
301
            elif "Shipping:" in str(priceRow):
302
                shippingPrice  = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
303
            elif "Grand Total:" in str(priceRow):
304
                grandPrice  = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
305
                merchantOrder.paidAmount = grandPrice
306
            elif "Total:" in str(priceRow):
307
                totalPrice  = int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
308
            elif "Promotion Applied:" in str(priceRow):
309
                promoApplied  += int(float(priceRow.div.next_sibling.next_sibling.span.span.text.replace('Rs.','').replace(',', '')))
310
        totalPaid = subTotal        
311
        if promoApplied > 0:
312
            totalPaid -= promoApplied
313
            if shippingPrice <= promoApplied:
314
                totalPaid  += shippingPrice
15473 amit.gupta 315
 
15474 amit.gupta 316
        shipmentDivs = orderDetailsContainer.find('div', class_='shipment').findAll('div', recursive = False)
14464 amit.gupta 317
        subOrders = []
318
        merchantOrder.subOrders = subOrders
319
        i=1
15473 amit.gupta 320
        closedStatus = True
14464 amit.gupta 321
        for shipmentDiv in shipmentDivs:
322
            innerBoxes = shipmentDiv.findAll('div', recursive = False)
323
            statusDiv = innerBoxes[0]
324
            subOrderStatus = statusDiv.div.span.text.strip()
14566 amit.gupta 325
            deliverySpan = statusDiv.div.div.find_next_sibling('div').span
14464 amit.gupta 326
            productDivs = innerBoxes[-1].div.div.div.findAll('div', recursive=False)
327
            subOrders = []
328
            merchantOrder.subOrders = subOrders
329
            for i, productDiv in enumerate(productDivs):
330
                i +=1 
331
                imgDiv  = productDiv.div.div
332
                detailDiv = imgDiv.find_next_sibling('div')
333
                detailDivs = detailDiv.findAll('div', recursive=False)
334
                arr = detailDivs[0].a.text.strip().split(" of ", 1)
14465 amit.gupta 335
                (productTitle, quantity) = (arr[-1], (1 if len(arr)==1 else int(arr[0])) )
14820 amit.gupta 336
                try:
337
                    unitPrice = int(float(detailDivs[2].span.text.replace('Rs. ','').replace(',','')))
338
                except:
339
                    unitPrice = int(float(detailDivs[3].span.text.replace('Rs. ','').replace(',','')))
14464 amit.gupta 340
                amountPaid = int((unitPrice*quantity*totalPaid)/subTotal)
341
                productUrl = "http://www.amazon.in" + detailDivs[0].a.get('href')
342
                subOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid, MStore.ORDER_PLACED, quantity)
343
                subOrder.productCode = productUrl.split('/')[5]
344
                subOrder.unitPrice = unitPrice
14566 amit.gupta 345
                subOrder.merchantSubOrderId = str(i) + " of " + merchantOrder.merchantOrderId
14722 amit.gupta 346
                estDlvyTime = datetime.now()
14566 amit.gupta 347
                if deliverySpan is not None:
14756 amit.gupta 348
                    try:
349
                        subOrder.estimatedDeliveryDate = deliverySpan.span.text.strip()
350
                        estDate = subOrder.estimatedDeliveryDate.split("-")[0].strip()
351
                        subOrder.estimatedDeliveryInt = int(time.mktime((datetime.strptime(estDate, "%A %d %B %Y")).timetuple()))
352
                        estDlvyTime = datetime.strptime(estDate, "%A %d %B %Y")
353
                    except:
15473 amit.gupta 354
                        if "Delivered on" in deliverySpan.text:
355
                            subOrder.deliveredOn = deliverySpan.text.split(":")[1].strip() 
14756 amit.gupta 356
                        subOrder.estimatedDeliveryDate = "Not available"
15473 amit.gupta 357
 
14722 amit.gupta 358
                createdOn = datetime.fromtimestamp(merchantOrder.createdOnInt)
14756 amit.gupta 359
                subOrder.trackAfter = int(time.mktime(max(estDlvyTime-timedelta(days=4),createdOn + timedelta(days=3)).timetuple()))
14464 amit.gupta 360
                subOrder.detailedStatus = subOrderStatus
361
                subOrder.deliveryCharges = shippingPrice
14466 amit.gupta 362
                subOrder.imgUrl = imgDiv.img["src"]
14464 amit.gupta 363
                (cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, amountPaid)
15346 amit.gupta 364
                dealRank = getDealRank(subOrder.productCode, self.store_id, merchantOrder.userId)
365
                subOrder.dealRank = dealRank.get('rank')
366
                subOrder.rankDesc = dealRank.get('description')
14464 amit.gupta 367
                cashbackStatus = Store.CB_PENDING
368
                if cashbackAmount <= 0:
369
                    cashbackStatus = Store.CB_NA
370
                subOrder.cashBackStatus = cashbackStatus
371
                subOrder.cashBackAmount = cashbackAmount
372
                if percentage > 0:
373
                    subOrder.cashBackPercentage = percentage
15473 amit.gupta 374
                if hasattr(subOrder, 'deliveredOn'):                               
375
                    subOrder.status = Store.ORDER_DELIVERED
376
                    subOrder.closed = True
377
                    if subOrder.cashBackStatus == Store.CB_PENDING:
378
                        subOrder.cashBackStatus = Store.CB_APPROVED
379
                elif closedStatus:
380
                    closedStatus= False
14464 amit.gupta 381
                subOrders.append(subOrder)
14698 amit.gupta 382
        merchantOrder.status='success'
15473 amit.gupta 383
        merchantOrder.closed = closedStatus
14464 amit.gupta 384
        self._updateToOrder(todict(merchantOrder))
14545 amit.gupta 385
 
386
    def parseCancelled(self, merchantOrder,soup):
14722 amit.gupta 387
        try:
388
            fonts = soup.body.findAll("table", recursive=False)[1].findAll("font")
389
            if fonts[0].text == "Important Message":
390
                if fonts[1].text=="This order has been cancelled.":
391
                    merchantOrder.closed = True
392
                    merchantOrder.status = "cancelled"
393
                    merchantOrder.requireDetail = False
394
                    self._updateToOrder(todict(merchantOrder))
395
                    return
396
                else:
397
                    raise ParseException("parseCancelled", "Found detailed status" + fonts[1].text)
14545 amit.gupta 398
            else:
399
                raise ParseException("parseCancelled", "Found detailed status" + fonts[1].text)
14722 amit.gupta 400
        except:
14549 amit.gupta 401
            orderDetails = soup.body.find(id="orderDetails")
402
            if orderDetails is not None and orderDetails.h4.text == "This order has been cancelled.":
403
                merchantOrder.closed = True
14698 amit.gupta 404
                merchantOrder.status = "cancelled"
14549 amit.gupta 405
                merchantOrder.requireDetail = False
406
                self._updateToOrder(todict(merchantOrder))
407
            else:
408
                raise ParseException("parseCancelled", "Found detailed status" + fonts[1].text)
14464 amit.gupta 409
 
13868 amit.gupta 410
    def getTrackingUrls(self, userId):
14074 amit.gupta 411
 
412
        missingOrderUrls = []
413
        missingOrders = self._getMissingOrders({'userId':userId})
414
        for missingOrder in missingOrders:
415
            missingOrderUrls.append(ORDER_REDIRECT_URL%(missingOrder['merchantOrderId']))
14683 amit.gupta 416
        orders = self._getActiveOrders({'userId':userId, "subOrders.trackingUrl":{"$exists":False} })
13882 amit.gupta 417
        count = len(orders)
13879 amit.gupta 418
        print "count", count
14948 amit.gupta 419
        print "Missing Urls"
420
        print "*************"
421
        print missingOrderUrls
13868 amit.gupta 422
        if count > 0:
14684 amit.gupta 423
            return missingOrderUrls + ['https://www.amazon.in/gp/css/order-history', 'https://www.amazon.in/gp/css/order-history/?orderFilter=cancelled', 'https://www.amazon.in/gp/css/order-history/?orderFilter=cancelled&startIndex=10']
13959 amit.gupta 424
        else: 
14074 amit.gupta 425
            return missingOrderUrls
13927 amit.gupta 426
 
427
    def trackOrdersForUser(self, userId, url, rawHtml):
14985 amit.gupta 428
        directory = "/AmazonTrack/User" + str(userId)
14285 amit.gupta 429
        if not os.path.exists(directory):
430
            os.makedirs(directory)
14173 amit.gupta 431
 
14945 amit.gupta 432
 
13995 amit.gupta 433
        try:
434
            searchMap = {'userId':userId}
435
            collectionMap = {'merchantOrderId':1}
436
            activeOrders = self._getActiveOrders(searchMap, collectionMap)
14033 amit.gupta 437
            datetimeNow = datetime.now()
438
            timestamp = int(time.mktime(datetimeNow.timetuple()))
14009 amit.gupta 439
            print "url----------------", url
14008 amit.gupta 440
 
14320 amit.gupta 441
            if url == 'https://www.amazon.in/gp/css/order-history' or 'https://www.amazon.in/gp/css/order-history/?orderFilter=cancelled' in url:
14945 amit.gupta 442
                if url == 'https://www.amazon.in/gp/css/order-history':
443
                    filename = directory + "/orderSummary" + datetime.strftime(datetime.now(), '%d-%m:%H:%M:%S')
444
                else:   
445
                    filename = directory + "/cancelledSummary" + datetime.strftime(datetime.now(), '%d-%m:%H:%M:%S')   
446
                f = open(filename,'w')
447
                f.write(rawHtml) # python will convert \n to os.linesep
448
                f.close() # you can omit in most cases as the destructor will call if
13995 amit.gupta 449
                soup = BeautifulSoup(rawHtml)
450
                allOrders = soup.find(id="ordersContainer").findAll('div', {'class':'a-box-group a-spacing-base order'})
451
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
452
                for activeOrder in activeOrders:
453
                    for orderEle in allOrders:
17254 amit.gupta 454
                        deliveredOn = None
455
                        deliveryEstimate = None
17258 amit.gupta 456
                        shippingEstimate = None
13995 amit.gupta 457
                        orderdiv = orderEle.find('div', {'class':'a-box a-color-offset-background order-info'}).find('div', {'class':'a-fixed-right-grid-col actions a-col-right'})
458
                        merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
459
                        if merchantOrderId==activeOrder['merchantOrderId']:
460
                            closed = True
461
                            shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
462
                            shipments.pop(0)
463
                            for shipment in shipments:
464
                                shipdiv = shipment.find('div', {'class':'a-box-inner'})
14050 amit.gupta 465
                                sdivs = shipment.div.div.findAll('div', recursive=False)
17254 amit.gupta 466
                                try:
467
                                    orderStatus = sdivs[0].findAll('div')[1].div.text.strip()
468
                                except:
469
                                    orderStatus = sdivs[0].findAll('div')[1].text.strip()
470
                                print orderStatus
17256 amit.gupta 471
                                try:
17258 amit.gupta 472
                                    if "Dispatch estimate" in orderStatus:
473
                                        status = MStore.ORDER_PLACED
474
                                        shippingEstimate = orderStatus.split("Dispatch estimate").split("-")[0].strip()
475
                                    elif "Delivery estimate" in orderStatus:
476
                                        status = MStore.ORDER_SHIPPED
477
                                        deliveryEstimate = orderStatus.split("Delivery estimate").split("-")[0].strip()
17259 amit.gupta 478
                                    else:
479
                                        self._getStatusFromDetailedStatus(orderStatus)
17256 amit.gupta 480
                                except:
481
                                    closed=False
482
                                    status = None
17254 amit.gupta 483
                                if status == MStore.ORDER_DELIVERED:
484
                                    dateString = sdivs[0].span.text.strip().split("Delivered ")[1].strip()
485
                                    deliveredOn = datetime.strftime(getDateStringDelivered(dateString), '%d-%b-%y')
486
                                if status == MStore.ORDER_SHIPPED:
487
                                    dateString = sdivs[0].span.text.strip().split("Arriving ")[1].strip()
488
                                    deliveryEstimate = datetime.strftime(getDateStringArriving(dateString), '%d-%b-%y')
17258 amit.gupta 489
 
14335 amit.gupta 490
                                productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
13995 amit.gupta 491
                                trackingUrl = None
492
                                for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
493
                                    if buttonDiv.find('a').text.strip()=='Track package':
494
                                        trackingUrl = buttonDiv.find('a')['href'].strip()
495
                                        if not trackingUrl.startswith("http"):
14608 amit.gupta 496
                                            trackingUrl = "http://www.amazon.in" + trackingUrl
13995 amit.gupta 497
                                        break
498
                                for prodDiv in productDivs:
499
                                    prodDiv.find('div', {'class':'a-fixed-left-grid-inner'})
500
                                    productTitle = prodDiv.find('div', {'class':'a-fixed-left-grid-inner'}).find("div", {'class':'a-row'}).find('a').text.strip()
501
                                    imgUrl = prodDiv.find("img")["src"]
502
                                    for subOrder in activeOrder['subOrders']:
17230 amit.gupta 503
                                        if subOrder['productTitle'] in productTitle:
13995 amit.gupta 504
                                            findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId")}
505
                                            updateMap = {}
506
                                            closedStatus = False
507
                                            updateMap['subOrders.$.imgUrl'] = imgUrl
14033 amit.gupta 508
                                            updateMap['subOrders.$.lastTracked'] = timestamp
17258 amit.gupta 509
                                            if status:
510
                                                updateMap['subOrders.$.detailedStatus'] = status
511
                                                updateMap['subOrders.$.status'] = status 
512
                                                cashbackStatus = subOrder.get("cashBackStatus")
13995 amit.gupta 513
 
17251 amit.gupta 514
                                            if status==MStore.ORDER_DELIVERED:
17254 amit.gupta 515
                                                if not deliveredOn:                               
516
                                                    updateMap['subOrders.$.deliveredOn'] = deliveredOn
13995 amit.gupta 517
                                                closedStatus = True
518
                                                updateMap['subOrders.$.closed'] = True
519
                                                if cashbackStatus == Store.CB_PENDING:
14607 amit.gupta 520
                                                    updateMap['subOrders.$.cashBackStatus'] = Store.CB_APPROVED
13995 amit.gupta 521
                                            if status==MStore.ORDER_CANCELLED:     
522
                                                closedStatus = True
523
                                                updateMap['subOrders.$.closed'] = True
524
                                                if cashbackStatus == Store.CB_PENDING:
525
                                                    updateMap['subOrders.$.cashBackStatus'] = Store.CB_CANCELLED
17254 amit.gupta 526
                                            if status==MStore.ORDER_SHIPPED:
527
                                                if deliveryEstimate:   
528
                                                    updateMap['subOrders.$.estimatedDeliveryDate'] = deliveryEstimate
13995 amit.gupta 529
                                                if trackingUrl is not None:
530
                                                    updateMap['subOrders.$.trackingUrl'] = trackingUrl
17258 amit.gupta 531
                                            if shippingEstimate:   
532
                                                updateMap['subOrders.$.estimatedShippingDate'] = shippingEstimate
13995 amit.gupta 533
                                            if not closedStatus:
534
                                                closed = False
535
                                            bulk.find(findMap).update({'$set' : updateMap})
536
                                            break
537
                            bulk.find({'orderId': activeOrder['orderId']}).update({'$set':{'closed': closed}})            
14080 amit.gupta 538
                bulk.execute()
539
                return 'PARSED_SUCCESS'
540
            else:
15563 amit.gupta 541
                merchantOrderId = re.findall(r'https://www.amazon.in/gp/css/summary/edit.html\?orderID=(.*)?', url, re.IGNORECASE)[0]
542
                print  "merchantOrderId", merchantOrderId
14085 amit.gupta 543
                merchantOrder = self.db.merchantOrder.find_one({"merchantOrderId":merchantOrderId})
14945 amit.gupta 544
 
545
                filename = directory + "/" + merchantOrderId   
546
                f = open(filename,'w')
547
                f.write(rawHtml) # python will convert \n to os.linesep
548
                f.close() # you can omit in most cases as the destructor will call if
15555 amit.gupta 549
                result = self.parseOrderRawHtml(merchantOrder['orderId'], merchantOrder['subTagId'], merchantOrder['userId'], rawHtml, url, True)['result']
15562 amit.gupta 550
                print "result", result
15555 amit.gupta 551
                try:
15560 amit.gupta 552
                    order1 = session.query(OrdersRaw).filter_by(id=merchantOrder['orderId']).first()
553
                    order1.status = result
554
                    order1.rawhtml = rawHtml
15555 amit.gupta 555
                    session.commit()
15561 amit.gupta 556
                except:
557
                    traceback.print_exc()
15555 amit.gupta 558
                finally:
559
                    session.close()
14080 amit.gupta 560
                return 'PARSED_SUCCESS'
561
                pass
14008 amit.gupta 562
            return 'PARSED_SUCCESS_NO_ORDERS'
13995 amit.gupta 563
        except:
564
            traceback.print_exc()    
565
            return 'PARSED_FAILED'
566
 
567
    def _getStatusFromDetailedStatus(self, detailedStatus):
14061 amit.gupta 568
        if "ordered from" in detailedStatus.lower():
569
            return MStore.ORDER_PLACED 
570
 
13995 amit.gupta 571
        for key, value in self.orderStatusRegexMap.iteritems():
14032 amit.gupta 572
            if detailedStatus.lower() in value:
13995 amit.gupta 573
                return key
574
 
17253 amit.gupta 575
        print "Detailed Status need to be mapped", "Store:", self.store_id, detailedStatus
13995 amit.gupta 576
        raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
14624 amit.gupta 577
    def scrapeAffiliate(self, startDate=None, endDate=None):
14650 amit.gupta 578
        br = getBrowserObject()
579
        br.add_password('https://assoc-datafeeds-eu.amazon.com', 'Saholic', 'Fnubyvp')
580
        url = AMAZON_AFF_URL
581
        response = br.open(url)
582
        #get data for past 40 days and store it to mongo
583
        dt = datetime.now()
14701 amit.gupta 584
        dat = dt - timedelta(days=2)
14651 amit.gupta 585
        url = AMAZON_AFF_FILE_URL%(datetime.strftime(dat, "%Y%m%d"))
586
        response = br.open(url)
587
        page = gzip.GzipFile(fileobj=response, mode='rb').read()
588
        j=-1
589
        for row in page.split("\n"):
590
            j += 1
591
            if j== 0 or j==1:
592
                continue
593
            fields = row.split("\t")
594
            if len(fields)>1:
595
                print fields
596
                amazonAffiliate = AmazonAffiliateInfo(fields[0], fields[1], fields[2], fields[3], fields[4], fields[5], fields[6], fields[7], fields[8], fields[9])
597
                print amazonAffiliate
598
                self.db.amazonAffiliateInfo.insert(todict(amazonAffiliate))
599
            else:
600
                break
14650 amit.gupta 601
 
14608 amit.gupta 602
 
16468 amit.gupta 603
    def parseTrackingUrl(self, trackingUrl, orderId):
16474 amit.gupta 604
        print trackingUrl
14624 amit.gupta 605
        subOrder = {}
14749 amit.gupta 606
        page = fetchResponseUsingProxy(trackingUrl)
16468 amit.gupta 607
        status = MStore.ORDER_SHIPPED
608
        #print page
14624 amit.gupta 609
        soup = BeautifulSoup(page)
16468 amit.gupta 610
        header1 = soup.find("h1") 
611
        if header1:
612
            if header1.text=="Sign In":
613
                print "Login page is displayed for order id", orderId
14624 amit.gupta 614
                return subOrder
16468 amit.gupta 615
        try:
16474 amit.gupta 616
            print "Tracking page is displayed for order id", orderId
16468 amit.gupta 617
            detailedStatus = soup.find("div", {"class":"top"}).span.text.strip()
618
            try:
619
                displayStatus = soup.find("div",{"class":"a-column a-span12 shipment-status-content"}).span.text.strip()
620
            except:
621
                displayStatus = detailedStatus
622
            print displayStatus
623
            if detailedStatus.lower().find("delivered")>=0:
624
                print detailedStatus
625
                displayStatus = "Delivered"
626
                status = "Delivered"
627
                try:
628
                    subOrder["deliveredOn"] = detailedStatus.split("on")[1].strip()
629
                except:
630
                    pass
631
 
632
            elif detailedStatus.lower() == 'returned':
633
                status = 'Cancelled'
634
            subOrder['status'] = status
635
            subOrder['detailedStatus'] = displayStatus 
636
 
637
 
638
        except:
639
            print "failed to parse", orderId
640
            traceback.print_exc()
641
 
14624 amit.gupta 642
        return subOrder
643
 
644
 
645
 
16980 amit.gupta 646
    def parseInfo(self,):
647
        from pyquery import PyQuery as pq
16986 amit.gupta 648
        orders = list(session.query(Orders).filter_by(store_id=self.store_id).filter_by(status='DETAIL_CREATED').group_by(Orders.user_id).all())
16980 amit.gupta 649
        try:
650
            for order in orders:
651
                try:
652
                    doc = pq(order.rawhtml)
653
                    #a1= " ".join(["" if not div.text else div.text.replace("\t","").replace("\n","").replace(" ", "") for div in pq(doc('article')[-1])('div')])
654
                    lists = doc('ul.displayAddressUL li')
16986 amit.gupta 655
                    orderInfo = All_user_addresses()
16980 amit.gupta 656
                    orderInfo.address = lists[-3].text
657
                    orderInfo.user_id = order.user_id
16986 amit.gupta 658
                    orderInfo.source = 'order' 
659
                    #orderInfo.order_id = order.id
660
                    #orderInfo.email = None
661
                    #orderInfo.name = lists[0].text 
662
                    #orderInfo.mobile = None
16980 amit.gupta 663
                    adSplit = lists[-2].text.split(",")
664
                    match = re.match(r"([a-z ]+)([0-9]+)", adSplit[1], re.I)
665
                    if match:
666
                        items = match.groups()
16986 amit.gupta 667
                    orderInfo.city = adSplit[0].strip()
668
                    orderInfo.pincode = items[1].strip()
669
                    orderInfo.state = items[0].strip().title()
16980 amit.gupta 670
                    session.commit()
671
                except:
672
                    session.rollback()
673
                    continue
674
        finally:
675
            session.close()
14608 amit.gupta 676
 
13927 amit.gupta 677
 
678
 
13774 amit.gupta 679
def main():
17251 amit.gupta 680
    #getSummaryFile("/AmazonTrack/User8703/")
16874 amit.gupta 681
    #process_rejects("/home/amit/Downloads/RejectCashbackTemplate.xlsx")
16283 amit.gupta 682
    #str1 = readSSh("/AmazonTrack/User2466/orderSummary28-06:13:25:08")
16468 amit.gupta 683
    #str1 = readSSh("/AmazonTrack/User2466/orderSummary24-06:17:38:04")
684
    #str1 = readSSh("/AmazonTrack/User2466/orderSummary24-06:17:38:01")
685
    #str1 = readSSh("/AmazonTrack/User2466/orderSummary24-06:17:31:53")
16283 amit.gupta 686
    #str1 = readSSh("/AmazonTrack/User2466/orderSummary28-06:13:25:08")
687
    #str1 = readSSh("/AmazonTrack/User2466/orderSummary28-06:13:25:08")
15046 amit.gupta 688
    #readSSh("/tmp/User2/404-2225153-7073122")
16874 amit.gupta 689
   # all={2769:'http://www.amazon.in/gp/css/shiptrack/view.html/ref=oh_aui_direct_track_pkg_o00_s00?ie=UTF8&marketplaceOfOrigin=&orderID=402-3378626-7402755&orderingShipmentId=759313961106&packageId=1&ref=',2924:'http://www.amazon.in/gp/css/shiptrack/view.html/ref=oh_aui_direct_track_pkg_o04_s00?ie=UTF8&marketplaceOfOrigin=&orderID=404-1934145-4940333&orderingShipmentId=761351446106&packageId=1&ref=',3013:'http://www.amazon.in/gp/css/shiptrack/view.html/ref=oh_aui_direct_track_pkg_o03_s00?ie=UTF8&marketplaceOfOrigin=&orderID=404-2323646-9315538&orderingShipmentId=1157078607092&packageId=1&ref=',4804:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljokmpnqlonpq&orderId=171-6936083-5808328&packageIndex=0&shipmentId=Dc7LxLj8R',6447:'http://www.amazon.in/gp/css/shiptrack/view.html/ref=oh_aui_direct_track_pkg_o00_s00?ie=UTF8&marketplaceOfOrigin=&orderID=402-5267336-7658751&orderingShipmentId=796566362106&packageId=1&ref=',6764:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljnplqntnqmnq&orderId=403-1762134-8866741&packageIndex=0&shipmentId=D1Q77kmKR',6807:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkqjsvipqoptq&orderId=403-2423963-4963501&packageIndex=0&shipmentId=DVLdJkmgR',6823:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llljooomtkqvq&orderId=171-4857073-8237901&packageIndex=0&shipmentId=DVCh1YmQR',6887:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkqkkuprtlqvq&orderId=171-2588190-5695535&packageIndex=0&shipmentId=DVmbM1mJR',7054:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljrgnvllmrptq&orderId=171-1005907-4197952&packageIndex=0&shipmentId=DVG4nnmjR',7237:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llnoptjttjsnq&orderId=404-9151579-1801132&packageIndex=0&shipmentId=Dn8Ht6mFR',7457:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljnllolormovq&orderId=404-7441140-2089951&packageIndex=0&shipmentId=DRTdg5xBN',7740:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lmjkmopqkmsvq&orderId=403-3268269-3497105&packageIndex=0&shipmentId=DXMRKmmrR',8237:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lmjkrqnosrmvq&orderId=402-9929953-1629148&packageIndex=0&shipmentId=D09sZsxsN',8238:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llllooltlktpq&orderId=402-5577202-4121143&packageIndex=0&shipmentId=DgcwgQmrR',8595:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkkmrvhqqkqvq&orderId=403-6686659-8341932&packageIndex=0&shipmentId=DVxlhWmSR',8948:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljrnmwpplknpq&orderId=404-4274603-2058711&packageIndex=0&shipmentId=DN0JbVkpR',8979:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lknktuorqoqrq&orderId=403-7785786-1441940&packageIndex=0&shipmentId=DgprHkkwR',9184:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkjkswoprrlpq&orderId=404-1980439-1674729&packageIndex=0&shipmentId=DwpFBGkzR',9207:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkrnrwqnmllpq&orderId=402-2502378-3282757&packageIndex=0&shipmentId=D6GzwWkdR',9285:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljrnqwnqtmsrq&orderId=402-6126669-4675512&packageIndex=0&shipmentId=D12qBGk4R',9317:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkllqwqumnonq&orderId=404-6368449-3713921&packageIndex=0&shipmentId=DnQQynkYR',9324:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkknpsmntintq&orderId=171-1046230-1213920&packageIndex=0&shipmentId=DVQ7ymkXR',9431:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkknrpmtplkvq&orderId=404-2574261-0426710&packageIndex=0&shipmentId=DwXFY7kdR',9478:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkrolsqqnrmnq&orderId=403-4677805-1690750&packageIndex=0&shipmentId=DXdmD1kbR',9638:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkjlrtklqrsvq&orderId=171-1377835-5105921&packageIndex=0&shipmentId=DGcWzZkkR',9682:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqmnxhsrmtpq&orderId=171-8612308-2068349&packageIndex=0&shipmentId=D68pzLkQR',9687:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmjruqnpisvq&orderId=171-7128133-7135565&packageIndex=0&shipmentId=DVFsz7ktR',10997:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lllopvkrspsrq&orderId=404-2248175-7727520&packageIndex=0&shipmentId=DCScLlkVR',11163:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmkrtklkklpq&orderId=404-5372353-5006730&packageIndex=0&shipmentId=DJg71dkyR',11186:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqnntlsrokvq&orderId=403-6324939-6097130&packageIndex=0&shipmentId=DbvXwRJnN',11204:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljsnnroqposrq&orderId=404-3954569-0847544&packageIndex=0&shipmentId=Dc2PMzkgR',11238:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkngkqknsnovq&orderId=404-1477032-5612314&packageIndex=0&shipmentId=D61zJTklR',11343:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lknmlqmtljovq&orderId=403-5524974-9827564&packageIndex=0&shipmentId=DJkXxdk0R',11453:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkkoovkmrqkvq&orderId=403-5642828-3766719&packageIndex=0&shipmentId=DCntPFkjR',11591:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkolmumlpqqrq&orderId=171-3814201-4799568&packageIndex=0&shipmentId=DCG2tpkpR',11635:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lknmqoosoittq&orderId=404-9470010-7402734&packageIndex=0&shipmentId=DlQ3DtJPN',11640:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqooropkjlpq&orderId=404-3232667-5995557&packageIndex=0&shipmentId=DPVnD3JDN',11744:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llmglsmrtpttq&orderId=402-4019238-8089904&packageIndex=0&shipmentId=DJNjd7k0R',11860:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkkotvntmomnq&orderId=402-7210209-6944332&packageIndex=0&shipmentId=DnJ0SlkpR',11868:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkklrsolmmrpq&orderId=402-2531669-1663506&packageIndex=0&shipmentId=DVzlS6kRR',12007:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmlouqltkkvq&orderId=404-4771533-2973951&packageIndex=0&shipmentId=DntClfklR',12252:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmhlqmtmoorq&orderId=404-9456048-1325927&packageIndex=0&shipmentId=DwxCpVkLR',12287:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lmjprxoqlmknq&orderId=402-8827174-6026750&packageIndex=0&shipmentId=D1RtCxk2R',12537:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmhnulqprovq&orderId=404-4769504-7022766&packageIndex=0&shipmentId=DNv7XsktR',12585:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkkpsqqpojmnq&orderId=403-7086035-8821110&packageIndex=0&shipmentId=Dnxk8lknR',12633:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lmnosrklnqmnq&orderId=403-1160367-3817142&packageIndex=0&shipmentId=DgtZ89kZR',12636:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkompsjlrnonq&orderId=404-3266783-3721114&packageIndex=0&shipmentId=Dw1P8VkgR',12695:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrjlqjonrkvq&orderId=171-7770062-0732332&packageIndex=0&shipmentId=DNfzgMkYR',12698:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llmplskprqtpq&orderId=403-9002502-2997950&packageIndex=0&shipmentId=Dncfg3kZR',12707:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkojoppqrrnpq&orderId=403-4036602-9350752&packageIndex=0&shipmentId=D19yglk0R',12709:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkplmujmslmrq&orderId=403-0058301-2031560&packageIndex=0&shipmentId=DnWPg7kHR',12757:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkplmwnnoisrq&orderId=404-1058705-4321945&packageIndex=0&shipmentId=DnZWqWkdR',12845:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llmpmvjnmrovq&orderId=171-6343010-3411517&packageIndex=0&shipmentId=DGT3qYk8R',12881:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkqppxoumkrpq&orderId=171-9174388-6523515&packageIndex=0&shipmentId=DwdvZTkZR',12892:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrjmxmqtrqvq&orderId=404-4120934-8469951&packageIndex=0&shipmentId=D6lpZqkTR',12906:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkjpovnlmpqnq&orderId=171-4125889-1889940&packageIndex=0&shipmentId=DXw8ZJk7R',12915:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqprqiupptpq&orderId=403-3197160-3069940&packageIndex=0&shipmentId=DJzhZYk3R',12916:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmmmxpummqrq&orderId=403-6420484-5933945&packageIndex=0&shipmentId=DCzsZ6kCR',12917:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkqpqojtnpmnq&orderId=402-4411340-4496326&packageIndex=0&shipmentId=D6kcZPkZR',12922:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llmpnoqlnprpq&orderId=403-1132143-3111517&packageIndex=0&shipmentId=DJ6bZzksR',12925:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqprqkmlikrq&orderId=403-8668894-6525135&packageIndex=0&shipmentId=DVQlZJkRR',12972:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lklgkvkusmkvq&orderId=404-0137476-1498700&packageIndex=0&shipmentId=DJltjQk9R',12980:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkojqonsplmvq&orderId=404-3833239-9846705&packageIndex=0&shipmentId=D6lgj0k9R',12983:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkomruounrqrq&orderId=404-3320980-8441119&packageIndex=0&shipmentId=DMH6v4JYN',13007:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkplouinnpovq&orderId=402-0535763-2745962&packageIndex=0&shipmentId=DGBWHV3sR',13021:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqpruhlrjkvq&orderId=402-8874256-6725968&packageIndex=0&shipmentId=D6ZljckdR',13026:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkplouknqlmnq&orderId=403-9754892-7644334&packageIndex=0&shipmentId=DG9CjqkTR',13033:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkomrwoomlrtq&orderId=402-1262452-1058755&packageIndex=0&shipmentId=D1bdjfkLR',13071:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmhqvhopnqvq&orderId=403-7740399-1427531&packageIndex=0&shipmentId=Dcn8fWkXR',13104:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkplprkrsnltq&orderId=403-5474992-4257913&packageIndex=0&shipmentId=DC6tfVk1R',13121:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqpsslmqnntq&orderId=402-9481155-4197915&packageIndex=0&shipmentId=Dng9fXkbR',13122:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkmhrphpkjorq&orderId=402-7287272-2137155&packageIndex=0&shipmentId=DNgpHj3VR',13131:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkshrxntppnpq&orderId=402-3547176-4158757&packageIndex=0&shipmentId=D31Rh7k8R',13161:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrjornsnmtpq&orderId=404-0451908-9529119&packageIndex=0&shipmentId=DP7WvnJ8N',13223:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkqpruhpqiqrq&orderId=403-8450087-2700305&packageIndex=0&shipmentId=DNxth6knR',13224:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkonlxjrtmonq&orderId=403-4869051-2325127&packageIndex=0&shipmentId=D1xhhXkSR',13250:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkomtslttpsrq&orderId=404-2537009-6415557&packageIndex=0&shipmentId=D31WhrkjR',13380:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llqptqmtmpkrq&orderId=404-3722195-9238730&packageIndex=0&shipmentId=DNksRV33R',13470:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrgkplmkqnpq&orderId=171-0897884-0532300&packageIndex=0&shipmentId=D1wxRC32R',13575:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lknprrinmkltq&orderId=402-9225456-2338705&packageIndex=0&shipmentId=DS6FcbJdN',13667:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkonormlrkmvq&orderId=403-4129374-6176330&packageIndex=0&shipmentId=DV7zFl35R',13795:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lknnppqmomkvq&orderId=404-0117880-4748356&packageIndex=0&shipmentId=DJypk73wR',13914:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrjtxhttilpq&orderId=171-0960593-7418702&packageIndex=0&shipmentId=DChSHc39R',13921:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llngkpktsmptq&orderId=403-2864741-1405962&packageIndex=0&shipmentId=DcbvHv3lR',13938:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lknnrqkoolntq&orderId=402-7351523-5146761&packageIndex=0&shipmentId=DGkVHD38R',14142:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrgqumlpqsrq&orderId=402-5647686-2086731&packageIndex=0&shipmentId=DXqLBW3DR',14162:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrknpmlqjrpq&orderId=404-8441935-9383513&packageIndex=0&shipmentId=DVMpBg3ZR',14315:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=llrknxoosnonq&orderId=403-0899217-3921942&packageIndex=0&shipmentId=D16qwd3FR',14500:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lmkolvosslkrq&orderId=403-4437734-8835562&packageIndex=0&shipmentId=D6vqYD32R',14513:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkpmsthnkjnpq&orderId=402-0499221-8384341&packageIndex=0&shipmentId=DPbFLJJ3N',14599:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkngrqnmmmovq&orderId=404-8192799-8830754&packageIndex=0&shipmentId=DnxvF63HR',14999:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkqmkqmmrqqvq&orderId=403-4817762-5489935&packageIndex=0&shipmentId=DGZ5VT3gR'}
690
   # all ={11642:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=lkoimxjprionq&orderId=404-8168821-8300356&packageIndex=0&shipmentId=D0tJDZJhN', 7794:'http://www.amazon.in/gp/your-account/ship-track/ref=oh_aui_st_v2_btn?ie=UTF8&itemId=ljqmlqkmroonq&orderId=402-4679832-9733904&packageIndex=0&shipmentId=DyxpqQxBN'}
691
    #for orderId, trackingUrl in all.iteritems():
692
    store = getStore(1)
693
     #   print store.parseTrackingUrl(trackingUrl, orderId)
14756 amit.gupta 694
    #store.scrapeStoreOrders()
14650 amit.gupta 695
#    br = mechanize.Browser()
696
#    br.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
697
#                     ('Accept', 'text/html,application/xhtml+xml,application/json,application/xml;q=0.9,*/*;q=0.8'),
698
#                     ('Accept-Encoding', 'gzip,deflate,sdch'),                  
699
#                     ('Accept-Language', 'en-US,en;q=0.8'),                     
700
#                     ('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
701
#    store.scrapeStoreOrders()
17230 amit.gupta 702
    #store.parseInfo()
16980 amit.gupta 703
    #store.parseOrderRawHtml(9274, "13232", 14, readSSh("/home/amit/Downloads/9274.html"), "https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html/ref=ox_spc_place_order?ie=UTF8&fromAnywhere=1&hasWorkingJav")
15555 amit.gupta 704
    #store.trackOrdersForUser(4355, "https://www.amazon.in/gp/css/summary/edit.html?orderID=171-4824011-7090713", readSSh("~/4355"))
14813 amit.gupta 705
    #readSSh("/tmp/User211/2015-04-12 10:32:41.905765")
14703 amit.gupta 706
    #store.scrapeAffiliate()
15565 amit.gupta 707
    #parseDetailNotCreated()
16283 amit.gupta 708
    #parseOrderNotCreated()
17251 amit.gupta 709
    for userId in store.db.merchantOrder.find({"storeId":1, "subOrders.closed":False}).distinct("userId"):
710
        userId = int(userId)
17231 amit.gupta 711
        directory = "/AmazonTrack/User" + str(userId) + "/"
17255 amit.gupta 712
        summaryFile=getSummaryFile(directory)
17231 amit.gupta 713
        if summaryFile is None:
714
            print "No summary for", userId
715
        else:
716
            print userId, directory+summaryFile
17251 amit.gupta 717
            store.trackOrdersForUser(userId, 'https://www.amazon.in/gp/css/order-history', readSSh(directory + summaryFile))
17231 amit.gupta 718
 
719
    #store.trackOrdersForUser(8703, 'https://www.amazon.in/gp/css/order-history', readSSh('/home/amit/Downloads/orderSummary06-10_12_15_54'))
720
 
721
def getSummaryFile(directory):
722
    date1 = datetime(2015,1,1)
723
    finalFile = None
724
    try:
725
        for file in os.listdir(directory):
726
            if file.startswith("orderSummary"):
727
                date2 = datetime.strptime("2015-" + file.split("orderSummary")[1].split(":")[0], "%Y-%d-%m")
728
                if date2 > date1:
729
                    date1 = date2
730
                    finalFile=file
731
    except:
732
        print "Missing directory"
17251 amit.gupta 733
    return finalFile 
17231 amit.gupta 734
 
15555 amit.gupta 735
 
736
def parseDetailNotCreated():
737
    try:
738
        store=getStore(1)
739
        orders = session.query(OrdersRaw).filter_by(status='DETAIL_NOT_CREATED_UNKNOWN').all()
15558 amit.gupta 740
        session.close()
15555 amit.gupta 741
        for order in orders:
742
            store.trackOrdersForUser(order.id, order.order_url, order.rawhtml)
743
 
744
    finally:
745
        session.close()
17251 amit.gupta 746
 
747
def getDateStringDelivered(dateString='Monday'):
17254 amit.gupta 748
    print dateString
17251 amit.gupta 749
    if dateString.lower()=='today':
750
        return date.today()
751
    if dateString.lower()=='yesterday':
752
        return date.today() - timedelta(days=1)
753
    try:
754
        return datetime.strptime(dateString, '%d-%b-%y')
755
    except:
756
        try:
757
            #get Closest Date from today
758
            curDate = date.today()
759
            curTime = datetime(curDate.year, curDate.month, curDate.day)
760
            curYear = curDate.year
761
            prevYear = curYear - 1
17254 amit.gupta 762
            dateMax = datetime.strptime(dateString + " " + str(curYear), "%A, %d %b %Y")
763
            dateMin = datetime.strptime(dateString + " " + str(prevYear), "%A, %d %b %Y")
17251 amit.gupta 764
            if dateMax <= curTime:
765
                return dateMax
766
            else:
767
                return dateMin 
768
        except:
17254 amit.gupta 769
            try:
770
                days_of_week = ['sunday','monday','tuesday','wednesday',
771
                            'thursday','friday','saturday']
772
                deltaDays = curDate.isoweekday() - days_of_week.index(dateString.lower())
773
                if deltaDays <= 0:
774
                    deltaDays= deltaDays + 7
775
                curDate = curDate - timedelta(days=deltaDays)
776
                print datetime.strftime(curDate, '%d-%b-%y')
777
                return curDate
778
            except:
779
                print "could not parse"
780
                return None
15565 amit.gupta 781
 
17254 amit.gupta 782
def getDateStringArriving(dateString='Thursday'):
783
    print dateString
784
    if dateString.lower()=='today':
785
        return date.today()
786
    if dateString.lower()=='tomorrow':
787
        return date.today() + timedelta(days=1)
788
    try:
789
        return datetime.strptime(dateString, '%d-%b-%y')
790
    except:
791
        try:
792
            #get Closest Date from today
793
            curDate = date.today()
794
            curTime = datetime(curDate.year, curDate.month, curDate.day)
795
            curYear = curDate.year
796
            nextYear = curYear + 1
797
            dateMin = datetime.strptime(dateString + " " + str(curYear), "%A, %d %b %Y")
798
            dateMax = datetime.strptime(dateString + " " + str(nextYear), "%A, %d %b %Y")
799
            if dateMin >= curTime:
800
                return dateMin
801
            else:
802
                return dateMax 
803
        except:
804
            try:
805
                days_of_week = ['sunday','monday','tuesday','wednesday',
806
                            'thursday','friday','saturday']
807
                deltaDays = days_of_week.index(dateString.lower()) - curDate.isoweekday()
808
                if deltaDays < 0:
809
                    deltaDays= deltaDays + 7
810
                curDate = curDate + timedelta(days=deltaDays)
811
                return curDate
812
            except:
813
                print "Could not parse"
814
                return None 
815
 
15565 amit.gupta 816
def parseOrderNotCreated():
817
    try:
818
        store=getStore(1)
819
        orders = session.query(OrdersRaw).filter_by(status='ORDER_NOT_CREATED_UNKNOWN').all()
820
        session.close()
821
        for order in orders:
15567 amit.gupta 822
            result = store.parseOrderRawHtml(order.id, order.sub_tag, order.user_id, order.rawhtml, order.order_url)['result']
823
            order1 = session.query(OrdersRaw).filter_by(id=order.id).first()
824
            order1.status = result
825
            session.commit()
15565 amit.gupta 826
 
827
    finally:
828
        session.close()
15555 amit.gupta 829
 
13774 amit.gupta 830
if __name__ == '__main__':
17258 amit.gupta 831
        readSSh("/AmazonTrack/User7091/orderSummary14-10:13:29:40")
832
        #main()
17254 amit.gupta 833
        #getDateStringArriving()