Subversion Repositories SmartDukaan

Rev

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

Rev 13781 Rev 13868
Line 2... Line 2...
2
Created on Jan 15, 2015
2
Created on Jan 15, 2015
3
 
3
 
4
@author: amit
4
@author: amit
5
'''
5
'''
6
from datetime import datetime
6
from datetime import datetime
-
 
7
from mx.DateTime.DateTime import mktime
-
 
8
from pprint import pprint
7
from pymongo.mongo_client import MongoClient
9
from pymongo.mongo_client import MongoClient
8
import importlib
10
import importlib
9
import json
11
import json
10
import math
12
import math
11
import mechanize
13
import mechanize
Line 19... Line 21...
19
            'Accept-Language' : 'en-US,en;q=0.8',                     
21
            'Accept-Language' : 'en-US,en;q=0.8',                     
20
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
22
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
21
        }
23
        }
22
CASHBACK_URL = 'http://api.profittill.com/cashbacks/index/%s/%s'
24
CASHBACK_URL = 'http://api.profittill.com/cashbacks/index/%s/%s'
23
USER_LOOKUP_URL = 'http://api.profittill.com/user_account/saholic/%s'
25
USER_LOOKUP_URL = 'http://api.profittill.com/user_account/saholic/%s'
24
WALLET_CREDIT_URL = 'http://www.shop2020.in:8080/mobileapi/wallet?userId=%s&isLoggedIn=true'
26
WALLET_CREDIT_URL = 'http://www.shop2020.in:8080/mobileapi/wallet!batchUpdate'
25
 
27
 
26
def getStore(source_id):
28
def getStore(source_id):
27
    #module = sourceMap[source_id]
29
    #module = sourceMap[source_id]
28
    store = Store(source_id)
30
    store = Store(source_id)
29
    try:
31
    try:
Line 158... Line 160...
158
        for subOrder in subOrders:
160
        for subOrder in subOrders:
159
            if merchantSubOrderId == subOrder.get("merchantSubOrderId"):
161
            if merchantSubOrderId == subOrder.get("merchantSubOrderId"):
160
                return subOrder
162
                return subOrder
161
        return None
163
        return None
162
 
164
 
-
 
165
def settlePayBack():
-
 
166
        result = client.Dtr.merchantOrder\
-
 
167
            .aggregate([
-
 
168
                        {'$match':{'subOrders.cashBackStatus':Store.CB_APPROVED}},
-
 
169
                        {'$unwind':"$subOrders"},
-
 
170
                        { 
-
 
171
                         '$group':{
-
 
172
                                   '_id':'$userId',
-
 
173
                                   'amount': { '$sum':'$subOrders.cashBackAmount'},
-
 
174
                                   }
-
 
175
                         }
-
 
176
                    ])['result']
-
 
177
                    
-
 
178
        userAmountMap = {}
-
 
179
        for res in result:
-
 
180
            userAmountMap[res['_id']] = res['amount'] 
-
 
181
        batchId = int(mktime(datetime.now().timetuple()))
-
 
182
        batchUpdateMap = {'batchId':batchId}
-
 
183
        batchUpdateMap['userAmount'] = result
163
        
184
        #for 
-
 
185
        #get batch id
-
 
186
        print batchId 
-
 
187
        if __refundToWallet(batchUpdateMap):
-
 
188
            client.Dtr.merchantOrder.update({'subOrders.cashBackStatus':Store.CB_APPROVED},{'subOrders.$.cashBackStatus':Store.CB_CREDITED}, multi=True)
-
 
189
        else:
-
 
190
            tprint("Error Occurred while running batch")
-
 
191
    
164
    
192
    
165
def main():
193
def main():
166
    #store = getStore(3)
194
    #store = getStore(3)
167
    #print store.getCashbackAmount('864683341', 100)
195
    #print store.getCashbackAmount('864683341', 100)
168
    data = urllib.urlencode({'orderId':6000, 'amount':200})
196
    #data = urllib.urlencode({'orderId':6000, 'amount':200})
169
    request = urllib2.Request(WALLET_CREDIT_URL % (483649), headers=headers)
197
    #request = urllib2.Request(WALLET_CREDIT_URL % (483649), headers=headers)
170
    response = urllib2.urlopen(request, data)
198
    #response = urllib2.urlopen(request, data)
171
    print response.read()
199
    #print response.read()
-
 
200
    settlePayBack()
172
        
201
        
173
if __name__ == '__main__':
202
if __name__ == '__main__':
174
    main()
203
    main()
175
 
204
 
176
 
205
 
177
def settlePayBack():
206
###
178
        orders = client.Dtr.merchantOrder.find({'subOrders.cashBackStatus':Store.CB_APPROVED}, {'userId':1, 'orderId': 1, 'subOrders.cashBackAmount':1, 'subOrders.merchantSubOrderId':1})
207
#Settlement process is suposed to be a batch and run weekly
179
        for order in orders:
208
#It is should be running on first hour of mondays. As cron should
180
            print order
209
# Maintain a batch id.
-
 
210
 
181
            for subOrder in order.get('subOrders'):
211
def __refundToWallet(self, batchUpdateMap):
182
                if subOrder.get('cashBackAmount') is not None:
212
    result = False
183
                    if __refundToWallet(order['userId'], order['orderId'], subOrder.get('cashBackAmount')):
-
 
184
                        client.Dtr.merchantOrder.update({'orderId':order['orderId'], 'subOrders.merchantSubOrderId':subOrder['merchantSubOrderId']},{'subOrders.$.cashBackStatus':Store.CB_CREDITED})
-
 
185
                        print "Settled order-", order['orderId'], "Sub Order-", subOrder['merchantSubOrderId'], "for amount", subOrder['cashBackAmount']
-
 
186
        
213
    try :
-
 
214
        userAmountMap = batchUpdateMap['userAmount']
-
 
215
        saholicUserAmountMap = {}
187
def __refundToWallet(self, userId, orderId, amount):
216
        for key, value in userAmountMap:
188
    userLookupRequest = urllib2.Request(USER_LOOKUP_URL %(userId), headers=headers)
217
            userLookupRequest = urllib2.Request(USER_LOOKUP_URL %(key), headers=headers)
189
    response = urllib2.urlopen(userLookupRequest).read()
218
            response = urllib2.urlopen(userLookupRequest).read()
190
    saholicUserId = json.loads(response)['account_id']
219
            saholicUserId = json.loads(response)['account_id']
191
    
-
 
-
 
220
            saholicUserAmountMap[saholicUserId] = value
-
 
221
        batchUpdateMap['userAmount'] = saholicUserAmountMap
192
    request = urllib2.Request(WALLET_CREDIT_URL % (saholicUserId), headers=headers)
222
        request = urllib2.Request(WALLET_CREDIT_URL, headers=headers)
193
    data = urllib.urlencode({'orderId':orderId, 'amount':amount})
223
        data = urllib.urlencode(batchUpdateMap)
194
    response = urllib2.urlopen(request, data)
224
        response = urllib2.urlopen(request, data)
-
 
225
    except:
-
 
226
        traceback.print_exc()
-
 
227
        return False
195
    
228
    
196
    return json.loads(response.read())['credited']
229
    return json.loads(response.read())['credited']
197
 
230
 
198
def getBrowserObject():
231
def getBrowserObject():
199
    import cookielib
232
    import cookielib