Subversion Repositories SmartDukaan

Rev

Rev 17253 | Rev 17255 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 17253 Rev 17254
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