| Line 449... |
Line 449... |
| 449 |
soup = BeautifulSoup(rawHtml)
|
449 |
soup = BeautifulSoup(rawHtml)
|
| 450 |
allOrders = soup.find(id="ordersContainer").findAll('div', {'class':'a-box-group a-spacing-base order'})
|
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()
|
451 |
bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
|
| 452 |
for activeOrder in activeOrders:
|
452 |
for activeOrder in activeOrders:
|
| 453 |
for orderEle in allOrders:
|
453 |
for orderEle in allOrders:
|
| - |
|
454 |
deliveredOn = None
|
| - |
|
455 |
deliveryEstimate = None
|
| 454 |
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'})
|
456 |
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'})
|
| 455 |
merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
|
457 |
merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
|
| 456 |
if merchantOrderId==activeOrder['merchantOrderId']:
|
458 |
if merchantOrderId==activeOrder['merchantOrderId']:
|
| 457 |
closed = True
|
459 |
closed = True
|
| 458 |
shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
|
460 |
shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
|
| 459 |
shipments.pop(0)
|
461 |
shipments.pop(0)
|
| 460 |
for shipment in shipments:
|
462 |
for shipment in shipments:
|
| 461 |
shipdiv = shipment.find('div', {'class':'a-box-inner'})
|
463 |
shipdiv = shipment.find('div', {'class':'a-box-inner'})
|
| 462 |
sdivs = shipment.div.div.findAll('div', recursive=False)
|
464 |
sdivs = shipment.div.div.findAll('div', recursive=False)
|
| - |
|
465 |
try:
|
| - |
|
466 |
orderStatus = sdivs[0].findAll('div')[1].div.text.strip()
|
| - |
|
467 |
except:
|
| 463 |
orderStatus = sdivs[0].findAll('div')[1].text.strip()
|
468 |
orderStatus = sdivs[0].findAll('div')[1].text.strip()
|
| - |
|
469 |
print orderStatus
|
| 464 |
status = self._getStatusFromDetailedStatus(orderStatus)
|
470 |
status = self._getStatusFromDetailedStatus(orderStatus)
|
| 465 |
# if status == MStore.ORDER_DELIVERED:
|
471 |
if status == MStore.ORDER_DELIVERED:
|
| 466 |
# try:
|
- |
|
| 467 |
# #getDateString(sdivs[0].span.text.strip().split("Delivered ")[1].strip())
|
472 |
dateString = sdivs[0].span.text.strip().split("Delivered ")[1].strip()
|
| 468 |
# deliveredOn = sdivs[0].findAll('span')[-1].text.strip()
|
473 |
deliveredOn = datetime.strftime(getDateStringDelivered(dateString), '%d-%b-%y')
|
| 469 |
# try:
|
474 |
if status == MStore.ORDER_SHIPPED:
|
| 470 |
# deliveredOn = deliveredOn.split(":")[1].strip()
|
475 |
dateString = sdivs[0].span.text.strip().split("Arriving ")[1].strip()
|
| 471 |
# except:
|
- |
|
| 472 |
# deliveredOn = ""
|
476 |
deliveryEstimate = datetime.strftime(getDateStringArriving(dateString), '%d-%b-%y')
|
| 473 |
# except:
|
- |
|
| 474 |
# pass
|
- |
|
| 475 |
deliveryestimatespan = sdivs[0].find('span', {'class':'a-color-success'})
|
477 |
# deliveryestimatespan = sdivs[0].find('span', {'class':'a-color-success'})
|
| 476 |
deliveryEstimate = None
|
478 |
# deliveryEstimate = None
|
| 477 |
if deliveryestimatespan is not None:
|
479 |
# if deliveryestimatespan is not None:
|
| 478 |
deliveryEstimate = deliveryestimatespan.find('span', {'class':'a-text-bold'}).text.strip()
|
480 |
# deliveryEstimate = deliveryestimatespan.find('span', {'class':'a-text-bold'}).text.strip()
|
| 479 |
productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
|
481 |
productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
|
| 480 |
trackingUrl = None
|
482 |
trackingUrl = None
|
| 481 |
for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
|
483 |
for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
|
| 482 |
if buttonDiv.find('a').text.strip()=='Track package':
|
484 |
if buttonDiv.find('a').text.strip()=='Track package':
|
| 483 |
trackingUrl = buttonDiv.find('a')['href'].strip()
|
485 |
trackingUrl = buttonDiv.find('a')['href'].strip()
|
| Line 498... |
Line 500... |
| 498 |
updateMap['subOrders.$.detailedStatus'] = status
|
500 |
updateMap['subOrders.$.detailedStatus'] = status
|
| 499 |
cashbackStatus = subOrder.get("cashBackStatus")
|
501 |
cashbackStatus = subOrder.get("cashBackStatus")
|
| 500 |
updateMap['subOrders.$.status'] = status
|
502 |
updateMap['subOrders.$.status'] = status
|
| 501 |
|
503 |
|
| 502 |
if status==MStore.ORDER_DELIVERED:
|
504 |
if status==MStore.ORDER_DELIVERED:
|
| 503 |
# if not deliveredOn:
|
505 |
if not deliveredOn:
|
| 504 |
# updateMap['subOrders.$.deliveredOn'] = deliveredOn
|
506 |
updateMap['subOrders.$.deliveredOn'] = deliveredOn
|
| 505 |
closedStatus = True
|
507 |
closedStatus = True
|
| 506 |
updateMap['subOrders.$.closed'] = True
|
508 |
updateMap['subOrders.$.closed'] = True
|
| 507 |
if cashbackStatus == Store.CB_PENDING:
|
509 |
if cashbackStatus == Store.CB_PENDING:
|
| 508 |
updateMap['subOrders.$.cashBackStatus'] = Store.CB_APPROVED
|
510 |
updateMap['subOrders.$.cashBackStatus'] = Store.CB_APPROVED
|
| 509 |
if status==MStore.ORDER_CANCELLED:
|
511 |
if status==MStore.ORDER_CANCELLED:
|
| 510 |
closedStatus = True
|
512 |
closedStatus = True
|
| 511 |
updateMap['subOrders.$.closed'] = True
|
513 |
updateMap['subOrders.$.closed'] = True
|
| 512 |
if cashbackStatus == Store.CB_PENDING:
|
514 |
if cashbackStatus == Store.CB_PENDING:
|
| 513 |
updateMap['subOrders.$.cashBackStatus'] = Store.CB_CANCELLED
|
515 |
updateMap['subOrders.$.cashBackStatus'] = Store.CB_CANCELLED
|
| 514 |
if status==MStore.ORDER_SHIPPED:
|
516 |
if status==MStore.ORDER_SHIPPED:
|
| - |
|
517 |
if deliveryEstimate:
|
| 515 |
updateMap['subOrders.$.estimatedDeliveryDate'] = deliveryEstimate
|
518 |
updateMap['subOrders.$.estimatedDeliveryDate'] = deliveryEstimate
|
| 516 |
if trackingUrl is not None:
|
519 |
if trackingUrl is not None:
|
| 517 |
updateMap['subOrders.$.trackingUrl'] = trackingUrl
|
520 |
updateMap['subOrders.$.trackingUrl'] = trackingUrl
|
| 518 |
if not closedStatus:
|
521 |
if not closedStatus:
|
| 519 |
closed = False
|
522 |
closed = False
|
| 520 |
bulk.find(findMap).update({'$set' : updateMap})
|
523 |
bulk.find(findMap).update({'$set' : updateMap})
|
| Line 692... |
Line 695... |
| 692 |
#parseDetailNotCreated()
|
695 |
#parseDetailNotCreated()
|
| 693 |
#parseOrderNotCreated()
|
696 |
#parseOrderNotCreated()
|
| 694 |
for userId in store.db.merchantOrder.find({"storeId":1, "subOrders.closed":False}).distinct("userId"):
|
697 |
for userId in store.db.merchantOrder.find({"storeId":1, "subOrders.closed":False}).distinct("userId"):
|
| 695 |
userId = int(userId)
|
698 |
userId = int(userId)
|
| 696 |
directory = "/AmazonTrack/User" + str(userId) + "/"
|
699 |
directory = "/AmazonTrack/User" + str(userId) + "/"
|
| 697 |
summaryFile=getSummaryFile(directory)
|
700 |
summaryFile="orderSummary13-10:14:41:55"
|
| 698 |
if summaryFile is None:
|
701 |
if summaryFile is None:
|
| 699 |
print "No summary for", userId
|
702 |
print "No summary for", userId
|
| 700 |
else:
|
703 |
else:
|
| 701 |
print userId, directory+summaryFile
|
704 |
print userId, directory+summaryFile
|
| 702 |
store.trackOrdersForUser(userId, 'https://www.amazon.in/gp/css/order-history', readSSh(directory + summaryFile))
|
705 |
store.trackOrdersForUser(userId, 'https://www.amazon.in/gp/css/order-history', readSSh(directory + summaryFile))
|
| Line 728... |
Line 731... |
| 728 |
|
731 |
|
| 729 |
finally:
|
732 |
finally:
|
| 730 |
session.close()
|
733 |
session.close()
|
| 731 |
|
734 |
|
| 732 |
def getDateStringDelivered(dateString='Monday'):
|
735 |
def getDateStringDelivered(dateString='Monday'):
|
| 733 |
#print datetime.strftime(dateMin,"%d-%b-%y")
|
736 |
print dateString
|
| 734 |
if dateString.lower()=='today':
|
737 |
if dateString.lower()=='today':
|
| 735 |
return date.today()
|
738 |
return date.today()
|
| 736 |
if dateString.lower()=='yesterday':
|
739 |
if dateString.lower()=='yesterday':
|
| 737 |
return date.today() - timedelta(days=1)
|
740 |
return date.today() - timedelta(days=1)
|
| 738 |
try:
|
741 |
try:
|
| Line 742... |
Line 745... |
| 742 |
#get Closest Date from today
|
745 |
#get Closest Date from today
|
| 743 |
curDate = date.today()
|
746 |
curDate = date.today()
|
| 744 |
curTime = datetime(curDate.year, curDate.month, curDate.day)
|
747 |
curTime = datetime(curDate.year, curDate.month, curDate.day)
|
| 745 |
curYear = curDate.year
|
748 |
curYear = curDate.year
|
| 746 |
prevYear = curYear - 1
|
749 |
prevYear = curYear - 1
|
| 747 |
dateMax = datetime.strptime(dateString + " " + str(curYear), "%A,%d %b %Y")
|
750 |
dateMax = datetime.strptime(dateString + " " + str(curYear), "%A, %d %b %Y")
|
| 748 |
dateMin = datetime.strptime(dateString + " " + str(prevYear), "%A,%d %b %Y")
|
751 |
dateMin = datetime.strptime(dateString + " " + str(prevYear), "%A, %d %b %Y")
|
| 749 |
if dateMax <= curTime:
|
752 |
if dateMax <= curTime:
|
| 750 |
return dateMax
|
753 |
return dateMax
|
| 751 |
else:
|
754 |
else:
|
| 752 |
return dateMin
|
755 |
return dateMin
|
| 753 |
except:
|
756 |
except:
|
| - |
|
757 |
try:
|
| 754 |
days_of_week = ['sunday','monday','tuesday','wednesday',
|
758 |
days_of_week = ['sunday','monday','tuesday','wednesday',
|
| 755 |
'thursday','friday','saturday']
|
759 |
'thursday','friday','saturday']
|
| 756 |
deltaDays = curDate.isoweekday() - days_of_week.index(dateString.lower())
|
760 |
deltaDays = curDate.isoweekday() - days_of_week.index(dateString.lower())
|
| 757 |
if deltaDays <= 0:
|
761 |
if deltaDays <= 0:
|
| 758 |
deltaDays= deltaDays + 7
|
762 |
deltaDays= deltaDays + 7
|
| 759 |
curDate = curDate - timedelta(days=deltaDays)
|
763 |
curDate = curDate - timedelta(days=deltaDays)
|
| 760 |
print datetime.strftime(curDate, '%d-%b-%y')
|
764 |
print datetime.strftime(curDate, '%d-%b-%y')
|
| - |
|
765 |
return curDate
|
| - |
|
766 |
except:
|
| - |
|
767 |
print "could not parse"
|
| - |
|
768 |
return None
|
| - |
|
769 |
|
| - |
|
770 |
def getDateStringArriving(dateString='Thursday'):
|
| - |
|
771 |
print dateString
|
| - |
|
772 |
if dateString.lower()=='today':
|
| - |
|
773 |
return date.today()
|
| - |
|
774 |
if dateString.lower()=='tomorrow':
|
| - |
|
775 |
return date.today() + timedelta(days=1)
|
| - |
|
776 |
try:
|
| - |
|
777 |
return datetime.strptime(dateString, '%d-%b-%y')
|
| - |
|
778 |
except:
|
| - |
|
779 |
try:
|
| - |
|
780 |
#get Closest Date from today
|
| - |
|
781 |
curDate = date.today()
|
| - |
|
782 |
curTime = datetime(curDate.year, curDate.month, curDate.day)
|
| - |
|
783 |
curYear = curDate.year
|
| - |
|
784 |
nextYear = curYear + 1
|
| - |
|
785 |
dateMin = datetime.strptime(dateString + " " + str(curYear), "%A, %d %b %Y")
|
| - |
|
786 |
dateMax = datetime.strptime(dateString + " " + str(nextYear), "%A, %d %b %Y")
|
| - |
|
787 |
if dateMin >= curTime:
|
| - |
|
788 |
return dateMin
|
| - |
|
789 |
else:
|
| - |
|
790 |
return dateMax
|
| - |
|
791 |
except:
|
| - |
|
792 |
try:
|
| - |
|
793 |
days_of_week = ['sunday','monday','tuesday','wednesday',
|
| - |
|
794 |
'thursday','friday','saturday']
|
| - |
|
795 |
deltaDays = days_of_week.index(dateString.lower()) - curDate.isoweekday()
|
| - |
|
796 |
if deltaDays < 0:
|
| - |
|
797 |
deltaDays= deltaDays + 7
|
| - |
|
798 |
curDate = curDate + timedelta(days=deltaDays)
|
| 761 |
return curDate
|
799 |
return curDate
|
| - |
|
800 |
except:
|
| - |
|
801 |
print "Could not parse"
|
| - |
|
802 |
return None
|
| 762 |
|
803 |
|
| 763 |
def parseOrderNotCreated():
|
804 |
def parseOrderNotCreated():
|
| 764 |
try:
|
805 |
try:
|
| 765 |
store=getStore(1)
|
806 |
store=getStore(1)
|
| 766 |
orders = session.query(OrdersRaw).filter_by(status='ORDER_NOT_CREATED_UNKNOWN').all()
|
807 |
orders = session.query(OrdersRaw).filter_by(status='ORDER_NOT_CREATED_UNKNOWN').all()
|
| Line 773... |
Line 814... |
| 773 |
|
814 |
|
| 774 |
finally:
|
815 |
finally:
|
| 775 |
session.close()
|
816 |
session.close()
|
| 776 |
|
817 |
|
| 777 |
if __name__ == '__main__':
|
818 |
if __name__ == '__main__':
|
| 778 |
main()
|
- |
|
| 779 |
|
819 |
main()
|
| - |
|
820 |
#getDateStringArriving()
|
| - |
|
821 |
|
| 780 |
|
822 |
|