| Line 6... |
Line 6... |
| 6 |
'''
|
6 |
'''
|
| 7 |
from base64 import encode
|
7 |
from base64 import encode
|
| 8 |
from bs4 import BeautifulSoup
|
8 |
from bs4 import BeautifulSoup
|
| 9 |
from datetime import datetime, timedelta, date
|
9 |
from datetime import datetime, timedelta, date
|
| 10 |
from dtr.api.Order import process_rejects
|
10 |
from dtr.api.Order import process_rejects
|
| 11 |
from dtr.dao import Order, SubOrder, AmazonAffiliateInfo
|
11 |
from dtr.dao import Order, SubOrder, AmazonAffiliateInfo, obj
|
| 12 |
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
|
12 |
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
|
| 13 |
ungzipResponse, tprint
|
13 |
ungzipResponse, tprint
|
| 14 |
from dtr.sources.flipkart import todict, AFF_REPORT_URL
|
14 |
from dtr.sources.flipkart import todict, AFF_REPORT_URL
|
| 15 |
from dtr.storage.DataService import OrdersRaw, Orders, Order_Parse_Info, \
|
15 |
from dtr.storage.DataService import OrdersRaw, Orders, Order_Parse_Info, \
|
| 16 |
All_user_addresses
|
16 |
All_user_addresses
|
| Line 21... |
Line 21... |
| 21 |
import base64
|
21 |
import base64
|
| 22 |
import dtr
|
22 |
import dtr
|
| 23 |
import gzip
|
23 |
import gzip
|
| 24 |
import mechanize
|
24 |
import mechanize
|
| 25 |
import os.path
|
25 |
import os.path
|
| - |
|
26 |
import pyquery
|
| 26 |
import re
|
27 |
import re
|
| 27 |
import time
|
28 |
import time
|
| 28 |
import traceback
|
29 |
import traceback
|
| 29 |
import urllib2
|
30 |
import urllib2
|
| 30 |
import pyquery
|
- |
|
| 31 |
|
31 |
|
| 32 |
ORDER_REDIRECT_URL = 'https://www.amazon.in/gp/css/summary/edit.html?orderID=%s'
|
32 |
ORDER_REDIRECT_URL = 'https://www.amazon.in/gp/css/summary/edit.html?orderID=%s'
|
| 33 |
ORDER_SUCCESS_URL = 'https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html'
|
33 |
ORDER_SUCCESS_URL = 'https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html'
|
| 34 |
THANKYOU_URL = 'https://www.amazon.in/gp/buy/thankyou/handlers/display.html'
|
34 |
THANKYOU_URL = 'https://www.amazon.in/gp/buy/thankyou/handlers/display.html'
|
| 35 |
AMAZON_AFF_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/listReports'
|
35 |
AMAZON_AFF_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/listReports'
|
| Line 253... |
Line 253... |
| 253 |
estDlvyTime = datetime.strptime(estimatedDelivery.split('-')[0].strip(), "%A %d %B %Y")
|
253 |
estDlvyTime = datetime.strptime(estimatedDelivery.split('-')[0].strip(), "%A %d %B %Y")
|
| 254 |
createdOn = datetime.fromtimestamp(merchantOrder.createdOnInt)
|
254 |
createdOn = datetime.fromtimestamp(merchantOrder.createdOnInt)
|
| 255 |
subOrder.trackAfter = int(time.mktime(max(estDlvyTime-timedelta(days=4),createdOn + timedelta(days=3)).timetuple()))
|
255 |
subOrder.trackAfter = int(time.mktime(max(estDlvyTime-timedelta(days=4),createdOn + timedelta(days=3)).timetuple()))
|
| 256 |
subOrder.productCode = productUrl.split('/')[5]
|
256 |
subOrder.productCode = productUrl.split('/')[5]
|
| 257 |
subOrder.detailedStatus = detailedStatus
|
257 |
subOrder.detailedStatus = detailedStatus
|
| 258 |
(cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, unitPrice*quantity)
|
258 |
(cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, unitPrice)
|
| 259 |
dealRank = getDealRank(subOrder.productCode, self.store_id, merchantOrder.userId)
|
259 |
dealRank = getDealRank(subOrder.productCode, self.store_id, merchantOrder.userId)
|
| 260 |
subOrder.dealRank = dealRank.get('rank')
|
260 |
subOrder.dealRank = dealRank.get('rank')
|
| 261 |
subOrder.rankDesc = dealRank.get('description')
|
261 |
subOrder.rankDesc = dealRank.get('description')
|
| 262 |
subOrder.maxNlc = dealRank.get('maxNlc')
|
262 |
subOrder.maxNlc = dealRank.get('maxNlc')
|
| 263 |
subOrder.minNlc = dealRank.get('minNlc')
|
263 |
subOrder.minNlc = dealRank.get('minNlc')
|
| Line 265... |
Line 265... |
| 265 |
subOrder.itemStatus = dealRank.get('status')
|
265 |
subOrder.itemStatus = dealRank.get('status')
|
| 266 |
cashbackStatus = Store.CB_PENDING
|
266 |
cashbackStatus = Store.CB_PENDING
|
| 267 |
if cashbackAmount <= 0:
|
267 |
if cashbackAmount <= 0:
|
| 268 |
cashbackStatus = Store.CB_NA
|
268 |
cashbackStatus = Store.CB_NA
|
| 269 |
subOrder.cashBackStatus = cashbackStatus
|
269 |
subOrder.cashBackStatus = cashbackStatus
|
| 270 |
subOrder.cashBackAmount = cashbackAmount
|
270 |
subOrder.cashBackAmount = cashbackAmount*quantity
|
| 271 |
if percentage > 0:
|
271 |
if percentage > 0:
|
| 272 |
subOrder.cashBackPercentage = percentage
|
272 |
subOrder.cashBackPercentage = percentage
|
| 273 |
subOrders.append(subOrder)
|
273 |
subOrders.append(subOrder)
|
| 274 |
priceList = paymentAnchor.next_sibling.next_sibling.next_sibling.table.table.tbody.tbody.tbody.findAll('tr', recursive=False)
|
274 |
priceList = paymentAnchor.next_sibling.next_sibling.next_sibling.table.table.tbody.tbody.tbody.findAll('tr', recursive=False)
|
| 275 |
totalAmount = 0
|
275 |
totalAmount = 0
|
| Line 339... |
Line 339... |
| 339 |
subOrderStatus = statusDiv.div.span.text.strip()
|
339 |
subOrderStatus = statusDiv.div.span.text.strip()
|
| 340 |
try:
|
340 |
try:
|
| 341 |
deliverySpanTop = statusDiv.div.div.find_next_sibling('div').span
|
341 |
deliverySpanTop = statusDiv.div.div.find_next_sibling('div').span
|
| 342 |
except:
|
342 |
except:
|
| 343 |
pass
|
343 |
pass
|
| - |
|
344 |
if not deliverySpanTop:
|
| 344 |
productDivs = innerBoxes[-1].div.div.div.findAll('div', recursive=False)
|
345 |
productDivs = innerBoxes[-1].div.div.findAll('div', recursive=False)
|
| 345 |
merchantOrder.subOrders = subOrders
|
346 |
merchantOrder.subOrders = subOrders
|
| - |
|
347 |
j=0
|
| 346 |
for i, productDiv in enumerate(productDivs):
|
348 |
for i, productDiv in enumerate(productDivs):
|
| 347 |
deliverySpan = deliverySpanTop
|
349 |
deliverySpan = deliverySpanTop
|
| 348 |
j=i+1
|
- |
|
| 349 |
if not deliverySpanTop:
|
350 |
if not deliverySpanTop:
|
| 350 |
if i%2==1:
|
351 |
if i%2==1:
|
| 351 |
continue
|
352 |
continue
|
| 352 |
j=i/2 + 1
|
- |
|
| 353 |
deliverySpan = statusDiv.div.div.span
|
353 |
deliverySpan = productDiv.div.div.span
|
| 354 |
imgDiv = productDiv.div.div
|
354 |
productDiv = productDivs[i+1]
|
| 355 |
detailDiv = imgDiv.find_next_sibling('div')
|
- |
|
| 356 |
detailDivs = detailDiv.findAll('div', recursive=False)
|
355 |
for prodRow in productDiv.findAll('div', recursive=False):
|
| 357 |
arr = detailDivs[0].a.text.strip().split(" of ", 1)
|
- |
|
| 358 |
(productTitle, quantity) = (arr[-1], (1 if len(arr)==1 else int(arr[0])) )
|
- |
|
| 359 |
try:
|
356 |
j += 1
|
| 360 |
unitPrice = int(float(detailDivs[2].span.text.replace('Rs. ','').replace(',','')))
|
- |
|
| 361 |
except:
|
357 |
imgDiv = prodRow.div.div
|
| 362 |
unitPrice = int(float(detailDivs[3].span.text.replace('Rs. ','').replace(',','')))
|
358 |
detailDiv = imgDiv.find_next_sibling('div')
|
| 363 |
amountPaid = int((unitPrice*quantity*totalPaid)/subTotal)
|
359 |
detailDivs = detailDiv.findAll('div', recursive=False)
|
| 364 |
productUrl = "http://www.amazon.in" + detailDivs[0].a.get('href')
|
360 |
arr = re.split("^(\d+) of", detailDivs[0].a.text.strip())
|
| 365 |
subOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid, MStore.ORDER_PLACED, quantity)
|
- |
|
| 366 |
subOrder.productCode = productUrl.split('/')[5]
|
- |
|
| 367 |
subOrder.unitPrice = unitPrice
|
- |
|
| 368 |
subOrder.merchantSubOrderId = str(j) + " of " + merchantOrder.merchantOrderId
|
361 |
(productTitle, quantity) = (arr[-1], (1 if len(arr)<2 else int(arr[1])) )
|
| 369 |
estDlvyTime = datetime.now()
|
- |
|
| 370 |
if deliverySpan is not None:
|
- |
|
| 371 |
try:
|
362 |
try:
|
| 372 |
subOrder.estimatedDeliveryDate = deliverySpan.span.text.strip()
|
363 |
unitPrice = int(float(detailDivs[2].span.text.replace('Rs. ','').replace(',','')))
|
| 373 |
estDate = subOrder.estimatedDeliveryDate.split("-")[0].strip()
|
- |
|
| 374 |
subOrder.estimatedDeliveryInt = int(time.mktime((datetime.strptime(estDate, "%A %d %B %Y")).timetuple()))
|
- |
|
| 375 |
estDlvyTime = datetime.strptime(estDate, "%A %d %B %Y")
|
- |
|
| 376 |
except:
|
364 |
except:
|
| - |
|
365 |
unitPrice = int(float(detailDivs[3].span.text.replace('Rs. ','').replace(',','')))
|
| - |
|
366 |
amountPaid = int((unitPrice*quantity*totalPaid)/subTotal)
|
| - |
|
367 |
productUrl = "http://www.amazon.in" + detailDivs[0].a.get('href')
|
| - |
|
368 |
subOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid, MStore.ORDER_PLACED, quantity)
|
| - |
|
369 |
subOrder.productCode = productUrl.split('/')[5]
|
| - |
|
370 |
subOrder.unitPrice = unitPrice
|
| - |
|
371 |
subOrder.merchantSubOrderId = str(j) + " of " + merchantOrder.merchantOrderId
|
| - |
|
372 |
estDlvyTime = datetime.now()
|
| - |
|
373 |
if deliverySpan is not None:
|
| - |
|
374 |
try:
|
| - |
|
375 |
subOrder.estimatedDeliveryDate = deliverySpan.span.text.strip()
|
| - |
|
376 |
estDate = subOrder.estimatedDeliveryDate.split("-")[0].strip()
|
| - |
|
377 |
subOrder.estimatedDeliveryInt = int(time.mktime((datetime.strptime(estDate, "%A %d %B %Y")).timetuple()))
|
| - |
|
378 |
estDlvyTime = datetime.strptime(estDate, "%A %d %B %Y")
|
| - |
|
379 |
except:
|
| 377 |
if "Delivered on" in deliverySpan.text:
|
380 |
if "Delivered on" in deliverySpan.text:
|
| 378 |
subOrder.deliveredOn = deliverySpan.text.split(":")[1].strip()
|
381 |
subOrder.deliveredOn = deliverySpan.text.split(":")[1].strip()
|
| 379 |
subOrder.estimatedDeliveryDate = "Not available"
|
382 |
subOrder.estimatedDeliveryDate = "Not available"
|
| 380 |
|
383 |
|
| 381 |
createdOn = datetime.fromtimestamp(merchantOrder.createdOnInt)
|
384 |
createdOn = datetime.fromtimestamp(merchantOrder.createdOnInt)
|
| 382 |
subOrder.trackAfter = int(time.mktime(max(estDlvyTime-timedelta(days=4),createdOn + timedelta(days=3)).timetuple()))
|
385 |
subOrder.trackAfter = int(time.mktime(max(estDlvyTime-timedelta(days=4),createdOn + timedelta(days=3)).timetuple()))
|
| 383 |
subOrder.detailedStatus = subOrderStatus
|
386 |
subOrder.detailedStatus = subOrderStatus
|
| 384 |
status=MStore.ORDER_PLACED
|
387 |
status=MStore.ORDER_PLACED
|
| 385 |
try:
|
- |
|
| 386 |
status = self._getStatusFromDetailedStatus(subOrderStatus)
|
- |
|
| 387 |
except:
|
- |
|
| 388 |
try:
|
388 |
try:
|
| 389 |
dateString = subOrderStatus.split("Delivered ")[1].strip()
|
- |
|
| 390 |
subOrder.status = MStore.ORDER_DELIVERED
|
- |
|
| 391 |
subOrder.detailedStatus = 'Delivered'
|
- |
|
| 392 |
dateString = getDateStringDelivered(dateString)
|
389 |
status = self._getStatusFromDetailedStatus(subOrderStatus)
|
| 393 |
if dateString is not None:
|
- |
|
| 394 |
subOrder.deliveredOn = datetime.strftime(dateString, '%d-%b-%y')
|
- |
|
| 395 |
except:
|
390 |
except:
|
| 396 |
try:
|
391 |
try:
|
| 397 |
dateString = subOrderStatus.split("Arriving ")[1].split("by")[0].strip()
|
392 |
dateString = subOrderStatus.split("Delivered ")[1].strip()
|
| 398 |
subOrder.status = MStore.ORDER_SHIPPED
|
393 |
subOrder.status = MStore.ORDER_DELIVERED
|
| - |
|
394 |
subOrder.detailedStatus = 'Delivered'
|
| 399 |
dateString = getDateStringArriving(dateString)
|
395 |
dateString = getDateStringDelivered(dateString)
|
| 400 |
if dateString is not None:
|
396 |
if dateString is not None:
|
| 401 |
subOrder.deliveryEstimate = datetime.strftime(dateString, '%d-%b-%y')
|
397 |
subOrder.deliveredOn = datetime.strftime(dateString, '%d-%b-%y')
|
| 402 |
else:
|
- |
|
| 403 |
subOrder.deliveryEstimate = subOrderStatus.split("Arriving ")[1].split("by")[0].strip()
|
- |
|
| 404 |
except:
|
398 |
except:
|
| - |
|
399 |
try:
|
| - |
|
400 |
dateString = subOrderStatus.split("Arriving ")[1].split("by")[0].strip()
|
| - |
|
401 |
subOrder.status = MStore.ORDER_SHIPPED
|
| - |
|
402 |
dateString = getDateStringArriving(dateString)
|
| - |
|
403 |
if dateString is not None:
|
| - |
|
404 |
subOrder.deliveryEstimate = datetime.strftime(dateString, '%d-%b-%y')
|
| - |
|
405 |
else:
|
| - |
|
406 |
subOrder.deliveryEstimate = subOrderStatus.split("Arriving ")[1].split("by")[0].strip()
|
| - |
|
407 |
except:
|
| 405 |
print "Unknown status Alert -", status
|
408 |
print "Unknown status Alert -", status
|
| 406 |
|
409 |
|
| 407 |
subOrder.deliveryCharges = shippingPrice
|
410 |
subOrder.deliveryCharges = shippingPrice
|
| 408 |
if trackingUrl:
|
411 |
if trackingUrl:
|
| 409 |
subOrder.tracingkUrl = trackingUrl
|
412 |
subOrder.tracingkUrl = trackingUrl
|
| 410 |
subOrder.imgUrl = imgDiv.img["src"]
|
413 |
subOrder.imgUrl = imgDiv.img["src"]
|
| 411 |
(cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, amountPaid/unitPrice)
|
414 |
(cashbackAmount, percentage) = self.getCashbackAmount(subOrder.productCode, amountPaid/quantity)
|
| 412 |
dealRank = getDealRank(subOrder.productCode, self.store_id, merchantOrder.userId)
|
415 |
dealRank = getDealRank(subOrder.productCode, self.store_id, merchantOrder.userId)
|
| 413 |
subOrder.dealRank = dealRank.get('rank')
|
416 |
subOrder.dealRank = dealRank.get('rank')
|
| 414 |
subOrder.rankDesc = dealRank.get('description')
|
417 |
subOrder.rankDesc = dealRank.get('description')
|
| 415 |
cashbackStatus = Store.CB_PENDING
|
418 |
cashbackStatus = Store.CB_PENDING
|
| 416 |
if cashbackAmount <= 0:
|
419 |
if cashbackAmount <= 0:
|
| 417 |
cashbackStatus = Store.CB_NA
|
420 |
cashbackStatus = Store.CB_NA
|
| 418 |
subOrder.cashBackStatus = cashbackStatus
|
421 |
subOrder.cashBackStatus = cashbackStatus
|
| 419 |
subOrder.cashBackAmount = cashbackAmount*quantity
|
422 |
subOrder.cashBackAmount = cashbackAmount*quantity
|
| 420 |
if percentage > 0:
|
423 |
if percentage > 0:
|
| 421 |
subOrder.cashBackPercentage = percentage
|
424 |
subOrder.cashBackPercentage = percentage
|
| 422 |
if hasattr(subOrder, 'deliveredOn') or subOrder.status==Store.ORDER_DELIVERED:
|
425 |
if hasattr(subOrder, 'deliveredOn') or subOrder.status==Store.ORDER_DELIVERED:
|
| 423 |
subOrder.status = Store.ORDER_DELIVERED
|
426 |
subOrder.status = Store.ORDER_DELIVERED
|
| 424 |
subOrder.closed = True
|
427 |
subOrder.closed = True
|
| 425 |
if subOrder.cashBackStatus == Store.CB_PENDING:
|
428 |
if subOrder.cashBackStatus == Store.CB_PENDING:
|
| 426 |
subOrder.cashBackStatus = Store.CB_APPROVED
|
429 |
subOrder.cashBackStatus = Store.CB_APPROVED
|
| 427 |
elif closedStatus:
|
430 |
elif closedStatus:
|
| 428 |
closedStatus= False
|
431 |
closedStatus= False
|
| 429 |
subOrders.append(subOrder)
|
432 |
subOrders.append(subOrder)
|
| 430 |
merchantOrder.status='success'
|
433 |
merchantOrder.status='success'
|
| 431 |
merchantOrder.closed = closedStatus
|
434 |
merchantOrder.closed = closedStatus
|
| 432 |
self._updateToOrder(todict(merchantOrder))
|
435 |
self._updateToOrder(todict(merchantOrder))
|
| 433 |
|
436 |
|
| 434 |
def parseCancelled(self, merchantOrder,soup):
|
437 |
def parseCancelled(self, merchantOrder,soup):
|
| Line 769... |
Line 772... |
| 769 |
|
772 |
|
| 770 |
|
773 |
|
| 771 |
def main():
|
774 |
def main():
|
| 772 |
store = getStore(1)
|
775 |
store = getStore(1)
|
| 773 |
#[59433, 59472, 59487, 59503, 59545, 59549, 59573, 59591]
|
776 |
#[59433, 59472, 59487, 59503, 59545, 59549, 59573, 59591]
|
| 774 |
orders = list(session.query(OrdersRaw).filter_by(status = 'DETAIL_NOT_CREATED_UNKNOWN').filter(OrdersRaw.id > 61071).all())
|
777 |
# orders = list(session.query(OrdersRaw).filter_by(status = 'DETAIL_NOT_CREATED_UNKNOWN').filter(OrdersRaw.id > 61071).all())
|
| 775 |
session.close()
|
778 |
# session.close()
|
| 776 |
for o in orders:
|
779 |
# for o in orders:
|
| 777 |
try:
|
780 |
# try:
|
| 778 |
store.trackOrdersForUser(o.id, o.order_url, o.rawhtml)
|
781 |
# store.trackOrdersForUser(o.id, o.order_url, o.rawhtml)
|
| 779 |
finally:
|
782 |
# finally:
|
| 780 |
session.close()
|
783 |
# session.close()
|
| 781 |
#store.trackOrdersForUser(10466, 'https://www.amazon.in/gp/css/summary/edit.html?orderID=403-7498756-0837158', readSSh('/AmazonTrack/User10466/403-7498756-0837158'))
|
784 |
#store.trackOrdersForUser(10466, 'https://www.amazon.in/gp/css/summary/edit.html?orderID=403-7498756-0837158', readSSh('/AmazonTrack/User10466/403-7498756-0837158'))
|
| 782 |
#store.trackOrdersForUser(9031, 'https://www.amazon.in/gp/css/summary/edit.html?orderID=403-0812780-9465164', readSSh('/home/amit/sample.html'))
|
785 |
store.trackOrdersForUser(46195, 'https://www.amazon.in/gp/css/summary/edit.html?orderID=171-4242740-7265932', readSSh('/home/amit/46195.html'))
|
| 783 |
|
786 |
|
| 784 |
def getSummaryFile(directory):
|
787 |
def getSummaryFile(directory):
|
| 785 |
date1 = datetime(2015,1,1)
|
788 |
date1 = datetime(2015,1,1)
|
| 786 |
finalFile = None
|
789 |
finalFile = None
|
| 787 |
try:
|
790 |
try:
|
| Line 874... |
Line 877... |
| 874 |
return curDate
|
877 |
return curDate
|
| 875 |
except:
|
878 |
except:
|
| 876 |
print "Could not parse"
|
879 |
print "Could not parse"
|
| 877 |
return None
|
880 |
return None
|
| 878 |
|
881 |
|
| - |
|
882 |
def main1():
|
| - |
|
883 |
store = getStore(1)
|
| - |
|
884 |
for merchantOrder in store.db.merchantOrder.find({"subOrders":{"$elemMatch":{"cashBackStatus":"Not Applicable", "cashBackPercentage":{"$gt":0}}}}):
|
| - |
|
885 |
mo = obj(merchantOrder)
|
| - |
|
886 |
for subOrder in mo.subOrders:
|
| - |
|
887 |
subOrder.closed=False
|
| - |
|
888 |
print "orderId", mo.orderId
|
| - |
|
889 |
store.populateDerivedFields(mo, False)
|
| - |
|
890 |
store.db.merchantOrder.update({"orderId":mo.orderId}, {"$set":todict(mo)})
|
| - |
|
891 |
break
|
| - |
|
892 |
|
| - |
|
893 |
|
| 879 |
def parseOrderNotCreated():
|
894 |
def parseOrderNotCreated():
|
| 880 |
try:
|
895 |
try:
|
| 881 |
store=getStore(1)
|
896 |
store=getStore(1)
|
| 882 |
orders = session.query(OrdersRaw).filter_by(status='ORDER_NOT_CREATED_UNKNOWN').all()
|
897 |
orders = session.query(OrdersRaw).filter_by(status='ORDER_NOT_CREATED_UNKNOWN').all()
|
| 883 |
session.close()
|
898 |
session.close()
|
| Line 891... |
Line 906... |
| 891 |
|
906 |
|
| 892 |
if __name__ == '__main__':
|
907 |
if __name__ == '__main__':
|
| 893 |
# readSSh("/AmazonTrack/User2942/402-2467356-7564367")
|
908 |
# readSSh("/AmazonTrack/User2942/402-2467356-7564367")
|
| 894 |
# readSSh("/AmazonTrack/User10466/orderSummary18-11:21:32:36")
|
909 |
# readSSh("/AmazonTrack/User10466/orderSummary18-11:21:32:36")
|
| 895 |
#readSSh("/AmazonTrack/User2482/orderSummary20-11:09:17:47")
|
910 |
#readSSh("/AmazonTrack/User2482/orderSummary20-11:09:17:47")
|
| 896 |
main()
|
- |
|
| 897 |
|
911 |
main()
|
| - |
|
912 |
|