Subversion Repositories SmartDukaan

Rev

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

Rev 17272 Rev 17307
Line 10... Line 10...
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
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
17
from dtr.storage.Mongo import getDealRank
17
from dtr.storage.Mongo import getDealRank
-
 
18
from dtr.utils import utils
18
from dtr.utils.utils import fetchResponseUsingProxy, readSSh
19
from dtr.utils.utils import fetchResponseUsingProxy, readSSh
19
from elixir import *
20
from elixir import *
20
import base64
21
import base64
21
import dtr
22
import dtr
22
import gzip
23
import gzip
Line 448... Line 449...
448
                f.close() # you can omit in most cases as the destructor will call if
449
                f.close() # you can omit in most cases as the destructor will call if
449
                soup = BeautifulSoup(rawHtml)
450
                soup = BeautifulSoup(rawHtml)
450
                allOrders = soup.find(id="ordersContainer").findAll('div', {'class':'a-box-group a-spacing-base order'})
451
                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
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
452
                for activeOrder in activeOrders:
453
                for activeOrder in activeOrders:
-
 
454
                    matched=False
453
                    for orderEle in allOrders:
455
                    for orderEle in allOrders:
454
                        deliveredOn = None
456
                        deliveredOn = None
455
                        deliveryEstimate = None
457
                        deliveryEstimate = None
456
                        shippingEstimate = None
458
                        shippingEstimate = None
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'})
459
                        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()
460
                        merchantOrderId = orderdiv.find('span', {'class':'a-color-secondary value'}).text.strip()
459
                        if merchantOrderId==activeOrder['merchantOrderId']:
461
                        if merchantOrderId==activeOrder['merchantOrderId']:
-
 
462
                            matched=True
460
                            closed = True
463
                            closed = True
461
                            orderStatusDesc = None
-
 
462
                            shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
464
                            shipments = orderEle.findAll('div',{'class':re.compile('.*?a-box.*?')}, recursive=False)
463
                            shipments.pop(0)
465
                            shipments.pop(0)
464
                            for shipment in shipments:
466
                            for shipment in shipments:
-
 
467
                                orderStatusDesc = None
465
                                shipdiv = shipment.find('div', {'class':'a-box-inner'})
468
                                shipdiv = shipment.find('div', {'class':'a-box-inner'})
466
                                sdivs = shipment.div.div.findAll('div', recursive=False)
469
                                sdivs = shipment.div.div.findAll('div', recursive=False)
467
                                try:
470
                                try:
468
                                    orderStatus = sdivs[0].span.text.strip()
471
                                    orderStatus = sdivs[0].span.text.strip()
469
                                    status = self._getStatusFromDetailedStatus(orderStatus)
472
                                    status = self._getStatusFromDetailedStatus(orderStatus)
Line 484... Line 487...
484
                                    orderStatusDesc = sdivs[0].findAll('div')[1].div.text.strip()
487
                                    orderStatusDesc = sdivs[0].findAll('div')[1].div.text.strip()
485
                                except:
488
                                except:
486
                                    try:
489
                                    try:
487
                                        orderStatusDesc = sdivs[0].findAll('div')[1].text.strip()
490
                                        orderStatusDesc = sdivs[0].findAll('div')[1].text.strip()
488
                                    except:
491
                                    except:
489
                                        pass
492
                                        print "Order Status Description None or empty for", merchantOrderId, "and User", userId
490
 
493
 
491
                                if orderStatusDesc: 
494
                                if orderStatusDesc: 
492
                                    try:
495
                                    try:
493
                                        if "Dispatch estimate" in orderStatusDesc:
496
                                        if "Dispatch estimate" in orderStatusDesc:
494
                                            shippingEstimate = orderStatus.split("Dispatch estimate").split("-")[0].strip()
497
                                            shippingEstimate = orderStatus.split("Dispatch estimate").split("-")[0].strip()
Line 498... Line 501...
498
                                            deliveryEstimate = datetime.strftime(getDateStringArriving(orderStatus.split("Arriving")[1].strip().split("by")[0].strip()), '%d-%b-%y')
501
                                            deliveryEstimate = datetime.strftime(getDateStringArriving(orderStatus.split("Arriving")[1].strip().split("by")[0].strip()), '%d-%b-%y')
499
                                    except:
502
                                    except:
500
                                        print "Could not find anything relevent for merchantOrder", merchantOrderId, "and User", userId 
503
                                        print "Could not find anything relevent for merchantOrder", merchantOrderId, "and User", userId 
501
                                        closed=False
504
                                        closed=False
502
                                        status = None
505
                                        status = None
503
                                else:
-
 
504
                                    print "Order Status Description None or empty for", merchantOrderId, "and User", userId
-
 
505
 
506
 
506
                                productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
507
                                productDivs = shipdiv.find('div', {'class':re.compile('.*?a-spacing-top-medium.*?')}).find('div', {'class':'a-row'}).findAll('div', recursive=False)
507
                                trackingUrl = None
508
                                trackingUrl = None
508
                                for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
509
                                for buttonDiv in shipdiv.findAll('span', {'class':'a-button-inner'}):
509
                                    if buttonDiv.find('a').text.strip()=='Track package':
510
                                    if buttonDiv.find('a').text.strip()=='Track package':
Line 514... Line 515...
514
                                for prodDiv in productDivs:
515
                                for prodDiv in productDivs:
515
                                    prodDiv.find('div', {'class':'a-fixed-left-grid-inner'})
516
                                    prodDiv.find('div', {'class':'a-fixed-left-grid-inner'})
516
                                    productTitle = prodDiv.find('div', {'class':'a-fixed-left-grid-inner'}).find("div", {'class':'a-row'}).find('a').text.strip()
517
                                    productTitle = prodDiv.find('div', {'class':'a-fixed-left-grid-inner'}).find("div", {'class':'a-row'}).find('a').text.strip()
517
                                    imgUrl = prodDiv.find("img")["src"]
518
                                    imgUrl = prodDiv.find("img")["src"]
518
                                    for subOrder in activeOrder['subOrders']:
519
                                    for subOrder in activeOrder['subOrders']:
-
 
520
                                        if subOrder['closed']==True:
-
 
521
                                            continue
519
                                        if subOrder['productTitle'] in productTitle:
522
                                        if subOrder['productTitle'] in productTitle:
520
                                            findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId")}
523
                                            findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId")}
521
                                            updateMap = {}
524
                                            updateMap = {}
522
                                            closedStatus = False
525
                                            closedStatus = False
523
                                            updateMap['subOrders.$.imgUrl'] = imgUrl
526
                                            updateMap['subOrders.$.imgUrl'] = imgUrl
Line 546... Line 549...
546
                                                    updateMap['subOrders.$.trackingUrl'] = trackingUrl
549
                                                    updateMap['subOrders.$.trackingUrl'] = trackingUrl
547
                                            if shippingEstimate:   
550
                                            if shippingEstimate:   
548
                                                updateMap['subOrders.$.estimatedShippingDate'] = shippingEstimate
551
                                                updateMap['subOrders.$.estimatedShippingDate'] = shippingEstimate
549
                                            if not closedStatus:
552
                                            if not closedStatus:
550
                                                closed = False
553
                                                closed = False
-
 
554
                                            #{"subOrders.closed":False,"subOrders.trackingUrl":{"$exists":False},"subOrders.trackAfter":{"$lt":utils.getCurrTimeStamp()}
551
                                            bulk.find(findMap).update({'$set' : updateMap})
555
                                            bulk.find(findMap).update({'$set' : updateMap})
552
                                            break
556
                                            break
553
                            bulk.find({'orderId': activeOrder['orderId']}).update({'$set':{'closed': closed}})            
557
                            bulk.find({'orderId': activeOrder['orderId']}).update({'closed':closed})
-
 
558
                            break
-
 
559
                    if not matched:
-
 
560
                        updateMap = {'subOrders.$.trackMissing': False}
-
 
561
                        for subOrder in activeOrder['subOrders']:
-
 
562
                            if subOrder['closed']==True:
-
 
563
                                continue
-
 
564
                            findMap = {"orderId": activeOrder['orderId'], "subOrders.merchantSubOrderId": subOrder.get("merchantSubOrderId"), 
-
 
565
                                       "subOrders.trackAfter":{"$lt":utils.getCurrTimeStamp()}}
-
 
566
                            bulk.find({'orderId': activeOrder['orderId']})
-
 
567
                            bulk.find(findMap).update({'$set':updateMap})
554
                bulk.execute()
568
                bulk.execute()
555
                return 'PARSED_SUCCESS'
569
                return 'PARSED_SUCCESS'
556
            else:
570
            else:
557
                merchantOrderId = re.findall(r'https://www.amazon.in/gp/css/summary/edit.html\?orderID=(.*)?', url, re.IGNORECASE)[0]
571
                merchantOrderId = re.findall(r'https://www.amazon.in/gp/css/summary/edit.html\?orderID=(.*)?', url, re.IGNORECASE)[0]
558
                print  "merchantOrderId", merchantOrderId
572
                print  "merchantOrderId", merchantOrderId
Line 625... Line 639...
625
        soup = BeautifulSoup(page)
639
        soup = BeautifulSoup(page)
626
        header1 = soup.find("h1") 
640
        header1 = soup.find("h1") 
627
        if header1:
641
        if header1:
628
            if header1.text=="Sign In":
642
            if header1.text=="Sign In":
629
                print "Login page is displayed for order id", orderId
643
                print "Login page is displayed for order id", orderId
630
                self.merchantOrder.update({"orderId":orderId}, {"$set":{"trackError":True}})
644
                self.db.merchantOrder.update({"orderId":orderId}, {"$set":{"trackError":True}})
631
                return subOrder
645
                return subOrder
632
        try:
646
        try:
633
            print "Tracking page is displayed for order id", orderId
647
            print "Tracking page is displayed for order id", orderId
634
            detailedStatus = soup.find("div", {"class":"top"}).span.text.strip()
648
            detailedStatus = soup.find("div", {"class":"top"}).span.text.strip()
635
            try:
649
            try:
Line 830... Line 844...
830
        
844
        
831
    finally:
845
    finally:
832
        session.close()
846
        session.close()
833
    
847
    
834
if __name__ == '__main__':
848
if __name__ == '__main__':
835
        #readSSh("/AmazonTrack/User8110/orderSummary15-10:14:43:25")
849
        readSSh("/AmazonTrack/User8925/orderSummary14-10:18:29:25")
836
        main()
850
        #main()
837
        #getDateStringArriving()
851
        #getDateStringArriving()
838
852