Subversion Repositories SmartDukaan

Rev

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

Rev 14356 Rev 14398
Line 6... Line 6...
6
from BeautifulSoup import BeautifulSoup
6
from BeautifulSoup import BeautifulSoup
7
from datetime import datetime, date, timedelta
7
from datetime import datetime, date, timedelta
8
from dtr import main
8
from dtr import main
9
from dtr.dao import AffiliateInfo, Order, SubOrder
9
from dtr.dao import AffiliateInfo, Order, SubOrder
10
from dtr.main import getBrowserObject, getStore, ParseException, ungzipResponse, \
10
from dtr.main import getBrowserObject, getStore, ParseException, ungzipResponse, \
11
    Store as MStore, sourceMap
11
    Store as MStore, sourceMap, tprint
12
from pprint import pprint
12
from pprint import pprint
13
from pymongo.mongo_client import MongoClient
13
from pymongo.mongo_client import MongoClient
14
import hashlib
14
import hashlib
15
import importlib
15
import importlib
16
import json
16
import json
Line 47... Line 47...
47
    def getName(self):
47
    def getName(self):
48
        return "flipkart"
48
        return "flipkart"
49
    
49
    
50
    def scrapeStoreOrders(self,):
50
    def scrapeStoreOrders(self,):
51
        orders = self._getActiveOrders()
51
        orders = self._getActiveOrders()
52
        print "Found orders", orders
-
 
53
        br = getBrowserObject()
52
        br = getBrowserObject()
54
        for order in orders:
53
        for order in orders:
-
 
54
            print order
-
 
55
            try:
-
 
56
                closed = True
-
 
57
                url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', order['orderSuccessUrl'],re.IGNORECASE)[0]
-
 
58
                response = br.open(url)
-
 
59
                page = ungzipResponse(response)
55
            
60
            
-
 
61
                soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
56
            closed = True
62
                
57
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', order['orderSuccessUrl'],re.IGNORECASE)[0]
63
                sections = soup.findAll("div", {"class":"ui-app-card-body"})
58
            response = br.open(url)
64
                sections.pop(1)
59
            page = ungzipResponse(response)
-
 
60
        
65
        
61
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
-
 
62
            
-
 
63
            sections = soup.findAll("div", {"class":"ui-app-card-body"})
-
 
64
            sections.pop(1)
-
 
65
    
-
 
66
            mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
66
                mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
67
            fkSubOrders = mainOrder.findAll("li")
67
                fkSubOrders = mainOrder.findAll("li")
68
            
68
                
69
            #remove unwanted list
69
                #remove unwanted list
70
            fkSubOrders.pop(-1)
70
                fkSubOrders.pop(-1)
71
            
71
                
72
            
72
                
73
            bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
73
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
74
            #fetching suborders details
74
                #fetching suborders details
75
            for subOrder in fkSubOrders:
75
                for subOrder in fkSubOrders:
76
                updateMap = {}
76
                    updateMap = {}
77
                y = subOrder.find("header").findAll("span")
77
                    y = subOrder.find("header").findAll("span")
78
                for suborderId in y:
78
                    for suborderId in y:
79
                    if "value emp" in str(suborderId):
79
                        if "value emp" in str(suborderId):
80
                        merchantSubOrderId = suborderId.text
80
                            merchantSubOrderId = suborderId.text
81
                        break
81
                            break
82
                orderItems = subOrder.find("ul").findAll("div", recursive=False)
82
                    orderItems = subOrder.find("ul").findAll("div", recursive=False)
83
                i=0
83
                    i=0
84
                for orderItem in orderItems:
84
                    for orderItem in orderItems:
85
                    closedStatus = False
85
                        closedStatus = False
86
                    merchantSubOrderId = merchantSubOrderId + str(i)
86
                        merchantSubOrderId = merchantSubOrderId + str(i)
87
                    subOrder =  self._isSubOrderActive(order, merchantSubOrderId)
87
                        subOrder =  self._isSubOrderActive(order, merchantSubOrderId)
88
                    if subOrder is None:
88
                        if subOrder is None:
89
                        break
89
                            break
90
                    findMap = {"orderId": order['orderId'], "subOrders.merchantSubOrderId": merchantSubOrderId}
90
                        findMap = {"orderId": order['orderId'], "subOrders.merchantSubOrderId": merchantSubOrderId}
91
                    divs = orderItem.findAll('div', recursive=False)
91
                        divs = orderItem.findAll('div', recursive=False)
92
                    orderTracking = divs[2]
92
                        orderTracking = divs[2]
93
                    orderTrackingDetDiv = divs[3].find('div',{'class':'c-tabs-content m-top active'})
93
                        orderTrackingDetDiv = divs[3].find('div',{'class':'c-tabs-content m-top active'})
94
                    orderTrackingDet = orderTrackingDetDiv.find('div',{'class':re.compile('tracking-remark')}).text
94
                        orderTrackingDet = orderTrackingDetDiv.find('div',{'class':re.compile('tracking-remark')}).text
95
                    updateMap["subOrders.$.detailedStatus"] = orderTrackingDet
95
                        updateMap["subOrders.$.detailedStatus"] = orderTrackingDet
96
                    tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
96
                        tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
97
                    
97
                        
98
                    cashbackStatus = subOrder.get("cashBackStatus") 
98
                        cashbackStatus = subOrder.get("cashBackStatus") 
99
                    if "approveDetails-complete" in str(tr):
99
                        if "approveDetails-complete" in str(tr):
100
                        if "processingDetails-complete" in str(tr):
100
                            if "processingDetails-complete" in str(tr):
101
                            if "shippingDetails-complete" in str(tr):
101
                                if "shippingDetails-complete" in str(tr):
102
                                if "delivery-complete" in str(tr):
102
                                    if "delivery-complete" in str(tr):
103
                                    status = MStore.ORDER_DELIVERED
103
                                        status = MStore.ORDER_DELIVERED
104
                                    if cashbackStatus == Store.CB_PENDING:
104
                                        if cashbackStatus == Store.CB_PENDING:
105
                                        cashbackStatus = Store.CB_APPROVED
105
                                            cashbackStatus = Store.CB_APPROVED
106
                                    closedStatus = True
106
                                        closedStatus = True
107
                                else:     
107
                                    else:     
108
                                    status = MStore.ORDER_SHIPPED
108
                                        status = MStore.ORDER_SHIPPED
109
                                    courierTrackAnchor = orderTrackingDetDiv.find('a')
109
                                        courierTrackAnchor = orderTrackingDetDiv.find('a')
110
                                    trackingUrl = courierTrackAnchor("href")
110
                                        trackingUrl = courierTrackAnchor("href")
111
                                    trackingText = courierTrackAnchor.text
111
                                        trackingText = courierTrackAnchor.text
112
                                    courierArr = trackingText.split(' : ')
112
                                        courierArr = trackingText.split(' : ')
113
                                    updateMap["subOrders.$.trackingUrl"] = trackingUrl
113
                                        updateMap["subOrders.$.trackingUrl"] = trackingUrl
114
                                    updateMap["subOrders.$.trackingNumber"] = courierArr[1]
114
                                        updateMap["subOrders.$.trackingNumber"] = courierArr[1]
115
                                    updateMap["subOrders.$.courierName"] = courierArr[0]
115
                                        updateMap["subOrders.$.courierName"] = courierArr[0]
-
 
116
                                else:
-
 
117
                                    status = MStore.ORDER_PLACED
116
                            else:
118
                            else: 
117
                                status = MStore.ORDER_PLACED
119
                                status = MStore.ORDER_PLACED
118
                        else: 
-
 
119
                            status = MStore.ORDER_PLACED
-
 
120
                    elif str(tr) in ["approveDetails-ongoing"]:
120
                        elif str(tr) in ["approveDetails-ongoing"]:
121
                        status=MStore.ORDER_PLACED             
121
                            status=MStore.ORDER_PLACED             
122
                    if "dead" in str(tr):
122
                        if "dead" in str(tr):
123
                        status = MStore.ORDER_CANCELLED
123
                            status = MStore.ORDER_CANCELLED
124
                        closedStatus = True
124
                            closedStatus = True
125
                        if cashbackStatus == Store.CB_PENDING:
125
                            if cashbackStatus == Store.CB_PENDING:
126
                            cashbackStatus = Store.CB_CANCELLED
126
                                cashbackStatus = Store.CB_CANCELLED
127
                    
127
                        
128
                    updateMap["subOrders.$.cashBackStatus"] = cashbackStatus
128
                        updateMap["subOrders.$.cashBackStatus"] = cashbackStatus
129
                    updateMap["subOrders.$.status"] = status
129
                        updateMap["subOrders.$.status"] = status
130
                    updateMap["subOrders.$.closed"] = closedStatus
130
                        updateMap["subOrders.$.closed"] = closedStatus
131
                    if closed:
131
                        if closed:
132
                        closed = closedStatus
132
                            closed = closedStatus
133
                    bulk.find(findMap).update({'$set' : updateMap})
133
                        bulk.find(findMap).update({'$set' : updateMap})
134
            bulk.find({'orderId': order['orderId']}).update({'$set':{'closed': closed}})
134
                bulk.find({'orderId': order['orderId']}).update({'$set':{'closed': closed}})
135
            bulk.execute()            
135
                bulk.execute()            
136
    
136
            except:
-
 
137
                tprint("Could not update " + str(order['orderId']))
-
 
138
                traceback.print_exc()
137
    def scrapeAffiliate(self, startDate=None, endDate=None):
139
    def scrapeAffiliate(self, startDate=None, endDate=None):
138
        #get all yesterday's affiliate in pending or cancelled state and update to system
140
        #get all yesterday's affiliate in pending or cancelled state and update to system
139
        if datetime.now().hour == 1:
141
        if datetime.now().hour == 1:
140
            yesterdate = date.today() - timedelta(1)
142
            yesterdate = date.today() - timedelta(1)
141
            syesterdate = yesterdate.strftime('%Y-%m-%d') 
143
            syesterdate = yesterdate.strftime('%Y-%m-%d')