Subversion Repositories SmartDukaan

Rev

Rev 18097 | Rev 18099 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
15081 amit.gupta 1
from bson import json_util
2
from bson.json_util import dumps
15096 amit.gupta 3
from datetime import datetime, timedelta
15534 amit.gupta 4
from pyshorteners.shorteners  import Shortener
13582 amit.gupta 5
from dtr import main
15081 amit.gupta 6
from dtr.config import PythonPropertyReader
13629 kshitij.so 7
from dtr.storage import Mongo
15132 amit.gupta 8
from dtr.storage.DataService import Retailers, Users, CallHistory, RetryConfig, \
15254 amit.gupta 9
    RetailerLinks, Activation_Codes, Agents, Agent_Roles, AgentLoginTimings, \
15676 amit.gupta 10
    FetchDataHistory, RetailerContacts, Orders, OnboardedRetailerChecklists,\
17467 manas 11
    RetailerAddresses, Pincodeavailability, app_offers, appmasters, user_app_cashbacks, user_app_installs,\
12
    Postoffices
15358 amit.gupta 13
from dtr.storage.Mongo import get_mongo_connection
14
from dtr.storage.Mysql import fetchResult
15081 amit.gupta 15
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
16
    UserSpecificDeals
18090 manas 17
from dtr.utils.utils import getLogger,encryptMessage,decryptMessage
15081 amit.gupta 18
from elixir import *
15254 amit.gupta 19
from operator import and_
16714 manish.sha 20
from sqlalchemy.sql.expression import func, func, or_, desc, asc, case
15132 amit.gupta 21
from urllib import urlencode
22
import contextlib
13827 kshitij.so 23
import falcon
15081 amit.gupta 24
import json
15358 amit.gupta 25
import re
15254 amit.gupta 26
import string
15081 amit.gupta 27
import traceback
15132 amit.gupta 28
import urllib
29
import urllib2
30
import uuid
15465 amit.gupta 31
import gdshortener
16727 manish.sha 32
from dtr.dao import AppOfferObj, UserAppBatchDrillDown, UserAppBatchDateDrillDown
18097 manas 33
import base64
16631 manish.sha 34
 
15207 amit.gupta 35
alphalist = list(string.uppercase)
36
alphalist.remove('O')
37
numList = ['1','2','3','4','5','6','7','8','9']
38
codesys = [alphalist, alphalist, numList, numList, numList]
15312 amit.gupta 39
CONTACT_PRIORITY = ['sms', 'called', 'ringing']
15368 amit.gupta 40
RETRY_MAP = {'fresh':'retry', 'followup':'fretry', 'onboarding':'oretry'}
15358 amit.gupta 41
ASSIGN_MAP = {'retry':'assigned', 'fretry':'fassigned', 'oretry':'oassigned'}
15207 amit.gupta 42
 
16882 amit.gupta 43
sticky_agents = [17]
44
 
15207 amit.gupta 45
def getNextCode(codesys, code=None):
46
    if code is None:
47
        code = []
48
        for charcode in codesys:
49
            code.append(charcode[0])
50
        return string.join(code, '')
51
    carry = True
52
    code = list(code)
53
    lastindex = len(codesys) - 1
54
    while carry:
55
        listChar = codesys[lastindex]
56
        newIndex = (listChar.index(code[lastindex])+1)%len(listChar)
57
        print newIndex
58
        code[lastindex] = listChar[newIndex]
59
        if newIndex != 0:
60
            carry = False
61
        lastindex -= 1
62
        if lastindex ==-1:
63
            raise BaseException("All codes are exhausted")
64
 
65
    return string.join(code, '')
66
 
67
 
68
 
69
 
15081 amit.gupta 70
global RETAILER_DETAIL_CALL_COUNTER
71
RETAILER_DETAIL_CALL_COUNTER = 0
13572 kshitij.so 72
 
15168 amit.gupta 73
lgr = getLogger('/var/log/retailer-acquisition-api.log')
15081 amit.gupta 74
DEALER_RETRY_FACTOR = int(PythonPropertyReader.getConfig('DEALER_RETRY_FACTOR'))
16886 amit.gupta 75
DEALER_FRESH_FACTOR = int(PythonPropertyReader.getConfig('DEALER_FRESH_FACTOR'))
76
TOTAL = DEALER_RETRY_FACTOR + DEALER_FRESH_FACTOR  
13572 kshitij.so 77
class CategoryDiscountInfo(object):
78
 
79
    def on_get(self, req, resp):
80
 
13629 kshitij.so 81
        result = Mongo.getAllCategoryDiscount()
82
        json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
83
        resp.body = json.dumps(json_docs, encoding='utf-8')
13572 kshitij.so 84
 
85
    def on_post(self, req, resp):
86
        try:
87
            result_json = json.loads(req.stream.read(), encoding='utf-8')
88
        except ValueError:
89
            raise falcon.HTTPError(falcon.HTTP_400,
90
                'Malformed JSON',
91
                'Could not decode the request body. The '
92
                'JSON was incorrect.')
93
 
94
        result = Mongo.addCategoryDiscount(result_json)
95
        resp.body = json.dumps(result, encoding='utf-8')
13969 kshitij.so 96
 
97
    def on_put(self, req, resp, _id):
13970 kshitij.so 98
        try:
99
            result_json = json.loads(req.stream.read(), encoding='utf-8')
100
        except ValueError:
101
            raise falcon.HTTPError(falcon.HTTP_400,
102
                'Malformed JSON',
103
                'Could not decode the request body. The '
104
                'JSON was incorrect.')
105
 
106
        result = Mongo.updateCategoryDiscount(result_json, _id)
107
        resp.body = json.dumps(result, encoding='utf-8')
108
 
13966 kshitij.so 109
 
13969 kshitij.so 110
 
13572 kshitij.so 111
class SkuSchemeDetails(object):
112
 
113
    def on_get(self, req, resp):
13629 kshitij.so 114
 
14070 kshitij.so 115
        offset = req.get_param_as_int("offset")
116
        limit = req.get_param_as_int("limit")
117
 
118
        result = Mongo.getAllSkuWiseSchemeDetails(offset, limit)
13629 kshitij.so 119
        json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
120
        resp.body = json.dumps(json_docs, encoding='utf-8')
13572 kshitij.so 121
 
122
 
123
    def on_post(self, req, resp):
124
 
14552 kshitij.so 125
        multi = req.get_param_as_int("multi")
126
 
13572 kshitij.so 127
        try:
128
            result_json = json.loads(req.stream.read(), encoding='utf-8')
129
        except ValueError:
130
            raise falcon.HTTPError(falcon.HTTP_400,
131
                'Malformed JSON',
132
                'Could not decode the request body. The '
133
                'JSON was incorrect.')
134
 
15852 kshitij.so 135
        result = Mongo.addSchemeDetailsForSku(result_json)
13572 kshitij.so 136
        resp.body = json.dumps(result, encoding='utf-8')
137
 
138
class SkuDiscountInfo():
139
 
140
    def on_get(self, req, resp):
13629 kshitij.so 141
 
13970 kshitij.so 142
        offset = req.get_param_as_int("offset")
143
        limit = req.get_param_as_int("limit")
144
        result = Mongo.getallSkuDiscountInfo(offset,limit)
13629 kshitij.so 145
        json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
146
        resp.body = json.dumps(json_docs, encoding='utf-8')
13572 kshitij.so 147
 
148
 
149
    def on_post(self, req, resp):
150
 
14552 kshitij.so 151
        multi = req.get_param_as_int("multi")
152
 
13572 kshitij.so 153
        try:
154
            result_json = json.loads(req.stream.read(), encoding='utf-8')
155
        except ValueError:
156
            raise falcon.HTTPError(falcon.HTTP_400,
157
                'Malformed JSON',
158
                'Could not decode the request body. The '
159
                'JSON was incorrect.')
160
 
15852 kshitij.so 161
        result = Mongo.addSkuDiscountInfo(result_json)
13572 kshitij.so 162
        resp.body = json.dumps(result, encoding='utf-8')
13970 kshitij.so 163
 
164
    def on_put(self, req, resp, _id):
165
        try:
166
            result_json = json.loads(req.stream.read(), encoding='utf-8')
167
        except ValueError:
168
            raise falcon.HTTPError(falcon.HTTP_400,
169
                'Malformed JSON',
170
                'Could not decode the request body. The '
171
                'JSON was incorrect.')
172
 
173
        result = Mongo.updateSkuDiscount(result_json, _id)
174
        resp.body = json.dumps(result, encoding='utf-8')
13572 kshitij.so 175
 
176
class ExceptionalNlc():
177
 
178
    def on_get(self, req, resp):
13629 kshitij.so 179
 
13970 kshitij.so 180
        offset = req.get_param_as_int("offset")
181
        limit = req.get_param_as_int("limit")
182
 
183
        result = Mongo.getAllExceptionlNlcItems(offset, limit)
13629 kshitij.so 184
        json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
185
        resp.body = json.dumps(json_docs, encoding='utf-8')
13572 kshitij.so 186
 
187
    def on_post(self, req, resp):
188
 
14552 kshitij.so 189
        multi = req.get_param_as_int("multi")
190
 
13572 kshitij.so 191
        try:
192
            result_json = json.loads(req.stream.read(), encoding='utf-8')
193
        except ValueError:
194
            raise falcon.HTTPError(falcon.HTTP_400,
195
                'Malformed JSON',
196
                'Could not decode the request body. The '
197
                'JSON was incorrect.')
198
 
15852 kshitij.so 199
        result = Mongo.addExceptionalNlc(result_json)
13572 kshitij.so 200
        resp.body = json.dumps(result, encoding='utf-8')
13970 kshitij.so 201
 
202
    def on_put(self, req, resp, _id):
203
        try:
204
            result_json = json.loads(req.stream.read(), encoding='utf-8')
205
        except ValueError:
206
            raise falcon.HTTPError(falcon.HTTP_400,
207
                'Malformed JSON',
208
                'Could not decode the request body. The '
209
                'JSON was incorrect.')
210
 
211
        result = Mongo.updateExceptionalNlc(result_json, _id)
212
        resp.body = json.dumps(result, encoding='utf-8')
13572 kshitij.so 213
 
13772 kshitij.so 214
class Deals():
13779 kshitij.so 215
    def on_get(self,req, resp, userId):
216
        categoryId = req.get_param_as_int("categoryId")
217
        offset = req.get_param_as_int("offset")
218
        limit = req.get_param_as_int("limit")
13798 kshitij.so 219
        sort = req.get_param("sort")
13802 kshitij.so 220
        direction = req.get_param_as_int("direction")
14853 kshitij.so 221
        filterData = req.get_param('filterData')
222
        result = Mongo.getNewDeals(int(userId), categoryId, offset, limit, sort, direction, filterData)
16078 kshitij.so 223
        resp.body = dumps(result) 
13790 kshitij.so 224
 
225
class MasterData():
226
    def on_get(self,req, resp, skuId):
16223 kshitij.so 227
        showDp = req.get_param_as_int("showDp")
16221 kshitij.so 228
        result = Mongo.getItem(skuId, showDp)
13798 kshitij.so 229
        try:
230
            json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
13966 kshitij.so 231
            resp.body = json.dumps(json_docs, encoding='utf-8')
13798 kshitij.so 232
        except:
233
            json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
13966 kshitij.so 234
            resp.body = json.dumps(json_docs, encoding='utf-8')
13790 kshitij.so 235
 
14586 kshitij.so 236
    def on_post(self,req, resp):
237
 
238
        addNew = req.get_param_as_int("addNew")
239
        update = req.get_param_as_int("update")
240
        addToExisting = req.get_param_as_int("addToExisting")
241
        multi = req.get_param_as_int("multi")
242
 
14589 kshitij.so 243
        try:
14592 kshitij.so 244
            result_json = json.loads(req.stream.read(), encoding='utf-8')
245
        except ValueError:
246
            raise falcon.HTTPError(falcon.HTTP_400,
247
                'Malformed JSON',
248
                'Could not decode the request body. The '
249
                'JSON was incorrect.')
250
 
251
        if addNew == 1:
252
            result = Mongo.addNewItem(result_json)
253
        elif update == 1:
254
            result = Mongo.updateMaster(result_json, multi)
255
        elif addToExisting == 1:
256
            result = Mongo.addItemToExistingBundle(result_json)
257
        else:
258
            raise
259
        resp.body = dumps(result)
14586 kshitij.so 260
 
13827 kshitij.so 261
class LiveData():
262
    def on_get(self,req, resp):
13865 kshitij.so 263
        if req.get_param_as_int("id") is not None:
264
            print "****getting only for id"
265
            id = req.get_param_as_int("id")
266
            try:
267
                result = FetchLivePrices.getLatestPriceById(id)
13867 kshitij.so 268
                json_docs = json.dumps(result, default=json_util.default)
13966 kshitij.so 269
                resp.body = json.dumps(json_docs, encoding='utf-8')
13865 kshitij.so 270
            except:
271
                json_docs = json.dumps({}, default=json_util.default)
13966 kshitij.so 272
                resp.body = json.dumps(json_docs, encoding='utf-8')
13834 kshitij.so 273
 
13865 kshitij.so 274
        else:
275
            print "****getting only for skuId"
276
            skuBundleId = req.get_param_as_int("skuBundleId")
277
            source_id = req.get_param_as_int("source_id")
278
            try:
279
                result = FetchLivePrices.getLatestPrice(skuBundleId, source_id)
280
                json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
13966 kshitij.so 281
                resp.body = json.dumps(json_docs, encoding='utf-8')
13865 kshitij.so 282
            except:
283
                json_docs = [json.dumps(doc, default=json_util.default) for doc in [{}]]
13966 kshitij.so 284
                resp.body = json.dumps(json_docs, encoding='utf-8')
13865 kshitij.so 285
 
13834 kshitij.so 286
class CashBack():
287
    def on_get(self,req, resp):
288
        identifier = req.get_param("identifier")
289
        source_id = req.get_param_as_int("source_id")
290
        try:
13838 kshitij.so 291
            result = Mongo.getCashBackDetails(identifier, source_id)
13837 kshitij.so 292
            json_docs = json.dumps(result, default=json_util.default)
13964 kshitij.so 293
            resp.body = json_docs
13834 kshitij.so 294
        except:
13837 kshitij.so 295
            json_docs = json.dumps({}, default=json_util.default)
13963 kshitij.so 296
            resp.body = json_docs
13892 kshitij.so 297
 
14398 amit.gupta 298
class ImgSrc():
299
    def on_get(self,req, resp):
300
        identifier = req.get_param("identifier")
301
        source_id = req.get_param_as_int("source_id")
302
        try:
303
            result = Mongo.getImgSrc(identifier, source_id)
304
            json_docs = json.dumps(result, default=json_util.default)
305
            resp.body = json_docs
306
        except:
307
            json_docs = json.dumps({}, default=json_util.default)
308
            resp.body = json_docs
309
 
13892 kshitij.so 310
class DealSheet():
311
    def on_get(self,req, resp):
13895 kshitij.so 312
        X_DealSheet.sendMail()
13897 kshitij.so 313
        json_docs = json.dumps({'True':'Sheet generated, mail sent.'}, default=json_util.default)
13966 kshitij.so 314
        resp.body = json.dumps(json_docs, encoding='utf-8')
13892 kshitij.so 315
 
13970 kshitij.so 316
class DealerPrice():
317
 
318
    def on_get(self, req, resp):
319
 
320
        offset = req.get_param_as_int("offset")
321
        limit = req.get_param_as_int("limit")
322
        result = Mongo.getAllDealerPrices(offset,limit)
323
        json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
324
        resp.body = json.dumps(json_docs, encoding='utf-8')
325
 
326
    def on_post(self, req, resp):
327
 
14552 kshitij.so 328
        multi = req.get_param_as_int("multi")
329
 
13970 kshitij.so 330
        try:
331
            result_json = json.loads(req.stream.read(), encoding='utf-8')
332
        except ValueError:
333
            raise falcon.HTTPError(falcon.HTTP_400,
334
                'Malformed JSON',
335
                'Could not decode the request body. The '
336
                'JSON was incorrect.')
337
 
15852 kshitij.so 338
        result = Mongo.addSkuDealerPrice(result_json)
13970 kshitij.so 339
        resp.body = json.dumps(result, encoding='utf-8')
340
 
341
    def on_put(self, req, resp, _id):
342
        try:
343
            result_json = json.loads(req.stream.read(), encoding='utf-8')
344
        except ValueError:
345
            raise falcon.HTTPError(falcon.HTTP_400,
346
                'Malformed JSON',
347
                'Could not decode the request body. The '
348
                'JSON was incorrect.')
349
 
350
        result = Mongo.updateSkuDealerPrice(result_json, _id)
351
        resp.body = json.dumps(result, encoding='utf-8')
352
 
353
 
14041 kshitij.so 354
class ResetCache():
355
 
356
    def on_get(self,req, resp, userId):
14044 kshitij.so 357
        result = Mongo.resetCache(userId)
14046 kshitij.so 358
        resp.body = json.dumps(result, encoding='utf-8')
359
 
360
class UserDeals():
361
    def on_get(self,req,resp,userId):
362
        UserSpecificDeals.generateSheet(userId)
363
        json_docs = json.dumps({'True':'Sheet generated, mail sent.'}, default=json_util.default)
364
        resp.body = json.dumps(json_docs, encoding='utf-8')
14075 kshitij.so 365
 
366
class CommonUpdate():
367
 
368
    def on_post(self,req,resp):
14575 kshitij.so 369
 
370
        multi = req.get_param_as_int("multi")
371
 
14075 kshitij.so 372
        try:
373
            result_json = json.loads(req.stream.read(), encoding='utf-8')
374
        except ValueError:
375
            raise falcon.HTTPError(falcon.HTTP_400,
376
                'Malformed JSON',
377
                'Could not decode the request body. The '
378
                'JSON was incorrect.')
379
 
15852 kshitij.so 380
        result = Mongo.updateCollection(result_json)
14075 kshitij.so 381
        resp.body = json.dumps(result, encoding='utf-8')
14106 kshitij.so 382
        resp.content_type = "application/json; charset=utf-8"
14481 kshitij.so 383
 
384
class NegativeDeals():
385
 
386
    def on_get(self, req, resp):
387
 
388
        offset = req.get_param_as_int("offset")
389
        limit = req.get_param_as_int("limit")
390
 
391
        result = Mongo.getAllNegativeDeals(offset, limit)
14483 kshitij.so 392
        resp.body = dumps(result) 
14481 kshitij.so 393
 
394
 
395
    def on_post(self, req, resp):
396
 
14552 kshitij.so 397
        multi = req.get_param_as_int("multi")
398
 
14481 kshitij.so 399
        try:
400
            result_json = json.loads(req.stream.read(), encoding='utf-8')
401
        except ValueError:
402
            raise falcon.HTTPError(falcon.HTTP_400,
403
                'Malformed JSON',
404
                'Could not decode the request body. The '
405
                'JSON was incorrect.')
406
 
14552 kshitij.so 407
        result = Mongo.addNegativeDeals(result_json, multi)
14481 kshitij.so 408
        resp.body = json.dumps(result, encoding='utf-8')
409
 
410
class ManualDeals():
411
 
412
    def on_get(self, req, resp):
413
 
414
        offset = req.get_param_as_int("offset")
415
        limit = req.get_param_as_int("limit")
416
 
417
        result = Mongo.getAllManualDeals(offset, limit)
14483 kshitij.so 418
        resp.body = dumps(result)
14481 kshitij.so 419
 
420
 
421
    def on_post(self, req, resp):
422
 
14552 kshitij.so 423
        multi = req.get_param_as_int("multi")
424
 
14481 kshitij.so 425
        try:
426
            result_json = json.loads(req.stream.read(), encoding='utf-8')
427
        except ValueError:
428
            raise falcon.HTTPError(falcon.HTTP_400,
429
                'Malformed JSON',
430
                'Could not decode the request body. The '
431
                'JSON was incorrect.')
432
 
14552 kshitij.so 433
        result = Mongo.addManualDeal(result_json, multi)
14481 kshitij.so 434
        resp.body = json.dumps(result, encoding='utf-8')
435
 
436
class CommonDelete():
14482 kshitij.so 437
 
14481 kshitij.so 438
    def on_post(self,req,resp):
439
        try:
440
            result_json = json.loads(req.stream.read(), encoding='utf-8')
441
        except ValueError:
442
            raise falcon.HTTPError(falcon.HTTP_400,
443
                'Malformed JSON',
444
                'Could not decode the request body. The '
445
                'JSON was incorrect.')
446
 
447
        result = Mongo.deleteDocument(result_json)
448
        resp.body = json.dumps(result, encoding='utf-8')
449
        resp.content_type = "application/json; charset=utf-8"
14482 kshitij.so 450
 
451
class SearchProduct():
452
 
453
    def on_get(self,req,resp):
454
        offset = req.get_param_as_int("offset")
455
        limit = req.get_param_as_int("limit")
456
        search_term = req.get_param("search")
457
 
458
        result = Mongo.searchMaster(offset, limit, search_term)
14483 kshitij.so 459
        resp.body = dumps(result) 
14482 kshitij.so 460
 
461
 
14495 kshitij.so 462
class FeaturedDeals():
14482 kshitij.so 463
 
14495 kshitij.so 464
    def on_get(self, req, resp):
465
 
466
        offset = req.get_param_as_int("offset")
467
        limit = req.get_param_as_int("limit")
468
 
469
        result = Mongo.getAllFeaturedDeals(offset, limit)
470
        resp.body = dumps(result)
471
 
472
 
473
    def on_post(self, req, resp):
474
 
14552 kshitij.so 475
        multi = req.get_param_as_int("multi")
476
 
14495 kshitij.so 477
        try:
478
            result_json = json.loads(req.stream.read(), encoding='utf-8')
479
        except ValueError:
480
            raise falcon.HTTPError(falcon.HTTP_400,
481
                'Malformed JSON',
482
                'Could not decode the request body. The '
483
                'JSON was incorrect.')
484
 
14552 kshitij.so 485
        result = Mongo.addFeaturedDeal(result_json, multi)
14495 kshitij.so 486
        resp.body = json.dumps(result, encoding='utf-8')
487
 
14497 kshitij.so 488
 
489
class CommonSearch():
14495 kshitij.so 490
 
14497 kshitij.so 491
    def on_get(self,req,resp):
492
        class_name = req.get_param("class")
493
        sku = req.get_param_as_int("sku")
494
        skuBundleId = req.get_param_as_int("skuBundleId")
14499 kshitij.so 495
 
496
        result = Mongo.searchCollection(class_name, sku, skuBundleId)
14497 kshitij.so 497
        resp.body = dumps(result)
14619 kshitij.so 498
 
499
class CricScore():
500
 
501
    def on_get(self,req,resp):
502
 
503
        result = Mongo.getLiveCricScore()
14853 kshitij.so 504
        resp.body = dumps(result)
505
 
506
class Notification():
507
 
508
    def on_post(self, req, resp):
509
 
510
        try:
511
            result_json = json.loads(req.stream.read(), encoding='utf-8')
512
        except ValueError:
513
            raise falcon.HTTPError(falcon.HTTP_400,
514
                'Malformed JSON',
515
                'Could not decode the request body. The '
516
                'JSON was incorrect.')
517
 
518
        result = Mongo.addBundleToNotification(result_json)
519
        resp.body = json.dumps(result, encoding='utf-8')
520
 
521
    def on_get(self, req, resp):
522
 
523
        offset = req.get_param_as_int("offset")
524
        limit = req.get_param_as_int("limit")
525
 
526
        result = Mongo.getAllNotifications(offset, limit)
527
        resp.body = dumps(result)
528
 
14998 kshitij.so 529
class DealBrands():
14853 kshitij.so 530
 
14998 kshitij.so 531
    def on_get(self, req, resp):
532
 
533
        category_id = req.get_param_as_int("category_id")
534
        result = Mongo.getBrandsForFilter(category_id)
14999 kshitij.so 535
        resp.body = dumps(result)
15161 kshitij.so 536
 
537
class DealRank():
14998 kshitij.so 538
 
15161 kshitij.so 539
    def on_get(self, req, resp):
540
        identifier = req.get_param("identifier")
541
        source_id = req.get_param_as_int("source_id")
542
        user_id = req.get_param_as_int("user_id")
543
        result = Mongo.getDealRank(identifier, source_id, user_id)
544
        json_docs = json.dumps(result, default=json_util.default)
545
        resp.body = json_docs
546
 
547
 
16560 amit.gupta 548
class OrderedOffers():
549
    def on_get(self, req, resp, storeId, storeSku):
550
        storeId = int(storeId)
16563 amit.gupta 551
        result = Mongo.getBundleBySourceSku(storeId, storeSku)
552
        json_docs = json.dumps(result, default=json_util.default)
553
        resp.body = json_docs
554
 
15081 amit.gupta 555
class RetailerDetail():
556
    global RETAILER_DETAIL_CALL_COUNTER
15105 amit.gupta 557
    def getRetryRetailer(self,failback=True):
15358 amit.gupta 558
        status = RETRY_MAP.get(self.callType)
17089 amit.gupta 559
        retailer = session.query(Retailers).filter_by(status=status).filter(Retailers.next_call_time<=datetime.now()).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None)).order_by(Retailers.agent_id.desc(),Retailers.call_priority).order_by(Retailers.next_call_time).with_lockmode("update").first()
17029 amit.gupta 560
 
15239 amit.gupta 561
        if retailer is not None:
562
            lgr.info( "getRetryRetailer " + str(retailer.id))
563
        else:
564
            if failback:
565
                retailer = self.getNewRetailer(False)
566
                return retailer
16371 amit.gupta 567
            else:
568
                #No further calls for now
569
                return None
15358 amit.gupta 570
        retailer.status = ASSIGN_MAP.get(status)
16371 amit.gupta 571
        retailer.next_call_time = None
15239 amit.gupta 572
        lgr.info( "getRetryRetailer " + str(retailer.id))
15081 amit.gupta 573
        return retailer
574
 
15662 amit.gupta 575
    def getNotActiveRetailer(self):
576
        try:
15716 amit.gupta 577
            user = session.query(Users).filter_by(activated=0).filter_by(status=1).filter(Users.mobile_number != None).filter(~Users.mobile_number.like("0%")).filter(Users.created>datetime(2015,06,29)).order_by(Users.created.desc()).with_lockmode("update").first()
15662 amit.gupta 578
            if user is None: 
579
                return None
580
            else:
581
                retailerContact = session.query(RetailerContacts).filter_by(mobile_number=user.mobile_number).first()
582
                if retailerContact is not None:
583
                    retailer = session.query(Retailers).filter_by(id=retailerContact.retailer_id).first()
584
                else:
585
                    retailer = session.query(Retailers).filter_by(contact1=user.mobile_number).first()
586
                    if retailer is None:
587
                        retailer = session.query(Retailers).filter_by(contact2=user.mobile_number).first()
588
                        if retailer is None:
589
                            retailer = Retailers()
590
                            retailer.contact1 = user.mobile_number
591
                            retailer.status = 'assigned'
15672 amit.gupta 592
                            retailer.retry_count = 0
15673 amit.gupta 593
                            retailer.invalid_retry_count = 0
15699 amit.gupta 594
                            retailer.is_elavated=1
15662 amit.gupta 595
                user.status = 2
596
                session.commit()
597
                print "retailer id", retailer.id
598
                retailer.contact = user.mobile_number
599
                return retailer
600
        finally:
601
            session.close()
602
 
15081 amit.gupta 603
    def getNewRetailer(self,failback=True):
15663 amit.gupta 604
        if self.callType == 'fresh':
605
            retailer = self.getNotActiveRetailer()
606
            if retailer is not None:
607
                return retailer
15081 amit.gupta 608
        retry = True
609
        retailer = None 
610
        try:
611
            while(retry):
15168 amit.gupta 612
                lgr.info( "Calltype " + self.callType)
15081 amit.gupta 613
                status=self.callType
15545 amit.gupta 614
                query = session.query(Retailers).filter(Retailers.status==status).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None))
15081 amit.gupta 615
                if status=='fresh':
17030 amit.gupta 616
                    query = query.filter_by(is_or=False, is_std=False).filter(Retailers.pin==Pincodeavailability.code).filter(Pincodeavailability.amount > 19999).order_by(Retailers.is_elavated.desc(), Retailers.agent_id.desc())
15358 amit.gupta 617
                elif status=='followup':
15546 amit.gupta 618
                    query = query.filter(Retailers.next_call_time<=datetime.now()).order_by(Retailers.agent_id.desc(),Retailers.next_call_time)
15162 amit.gupta 619
                else:
15546 amit.gupta 620
                    query = query.filter(Retailers.modified<=datetime.now()).order_by(Retailers.agent_id.desc(), Retailers.modified)
15358 amit.gupta 621
 
15081 amit.gupta 622
                retailer = query.with_lockmode("update").first()
623
                if retailer is not None:
15168 amit.gupta 624
                    lgr.info( "retailer " +str(retailer.id))
15081 amit.gupta 625
                    if status=="fresh":
626
                        userquery = session.query(Users)
627
                        if retailer.contact2 is not None:
628
                            userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
629
                        else:
630
                            userquery = userquery.filter_by(mobile_number=retailer.contact1)
631
                        user = userquery.first()
632
                        if user is not None:
633
                            retailer.status = 'alreadyuser'
15168 amit.gupta 634
                            lgr.info( "retailer.status " + retailer.status)
15081 amit.gupta 635
                            session.commit()
636
                            continue
637
                        retailer.status = 'assigned'
15358 amit.gupta 638
                    elif status=='followup':
15276 amit.gupta 639
                        if isActivated(retailer.id):
640
                            print "Retailer Already %d activated and marked onboarded"%(retailer.id)
641
                            continue
15081 amit.gupta 642
                        retailer.status = 'fassigned'
15358 amit.gupta 643
                    else:
644
                        retailer.status = 'oassigned'
15081 amit.gupta 645
                    retailer.retry_count = 0
15123 amit.gupta 646
                    retailer.invalid_retry_count = 0
15168 amit.gupta 647
                    lgr.info( "Found Retailer " +  str(retailer.id) + " with status " + status + " assigned to " + str(self.agentId))
15081 amit.gupta 648
 
649
                else:
15168 amit.gupta 650
                    lgr.info( "No fresh/followup retailers found")
15081 amit.gupta 651
                    if failback:
652
                        retailer = self.getRetryRetailer(False)
15104 amit.gupta 653
                        return retailer
15148 amit.gupta 654
                retry=False
15081 amit.gupta 655
        except:
656
            print traceback.print_exc()
657
        return retailer
658
 
15132 amit.gupta 659
    def on_get(self, req, resp, agentId, callType=None, retailerId=None):
16927 amit.gupta 660
        try:
661
            global RETAILER_DETAIL_CALL_COUNTER
662
            RETAILER_DETAIL_CALL_COUNTER += 1
663
            lgr.info( "RETAILER_DETAIL_CALL_COUNTER " +  str(RETAILER_DETAIL_CALL_COUNTER))
664
            self.agentId = int(agentId)
665
            self.callType = callType
666
            if retailerId is not None:
667
                self.retailerId = int(retailerId)
668
                retailerLink = session.query(RetailerLinks).filter_by(retailer_id=self.retailerId).first()
669
                if retailerLink is not None:
670
                    code = retailerLink.code
671
                else: 
672
                    code = self.getCode()
673
                    retailerLink = RetailerLinks()
674
                    retailerLink.code = code
675
                    retailerLink.agent_id = self.agentId
676
                    retailerLink.retailer_id = self.retailerId
677
 
678
                    activationCode=Activation_Codes()
679
                    activationCode.code = code
680
                    session.commit()
681
                session.close()
682
                resp.body =  json.dumps({"result":{"code":code,"link":make_tiny(code)}}, encoding='utf-8')
683
                return 
684
            retryFlag = False 
685
            if RETAILER_DETAIL_CALL_COUNTER % TOTAL >= DEALER_FRESH_FACTOR:
686
                retryFlag=True
687
            try:
688
                if retryFlag:
689
                    retailer = self.getRetryRetailer()
690
                else:
691
                    retailer = self.getNewRetailer()
692
                if retailer is None:
693
                    resp.body = "{}"
694
                    return
695
                fetchInfo = FetchDataHistory()
696
                fetchInfo.agent_id = self.agentId
697
                fetchInfo.call_type = self.callType
698
                agent = session.query(Agents).filter_by(id=self.agentId).first()
699
                last_disposition = session.query(CallHistory).filter_by(agent_id=self.agentId).order_by(CallHistory.id.desc()).first()
700
                if last_disposition is None or last_disposition.created < agent.last_login:
701
                    fetchInfo.last_action = 'login'
702
                    fetchInfo.last_action_time = agent.last_login 
703
                else:
704
                    fetchInfo.last_action = 'disposition'
705
                    fetchInfo.last_action_time = last_disposition.created
706
                fetchInfo.retailer_id = retailer.id
707
                session.commit()
15135 amit.gupta 708
 
16927 amit.gupta 709
                otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
710
                resp.body = json.dumps(todict(getRetailerObj(retailer, otherContacts, self.callType)), encoding='utf-8')
711
 
712
                return
713
 
714
            finally:
715
                session.close()
716
 
15343 amit.gupta 717
            if retailer is None:
718
                resp.body = "{}"
15239 amit.gupta 719
            else:
16927 amit.gupta 720
                print "It should never come here"
721
                resp.body = json.dumps(todict(getRetailerObj(retailer)), encoding='utf-8')
15239 amit.gupta 722
        finally:
723
            session.close()
15081 amit.gupta 724
 
725
    def on_post(self, req, resp, agentId, callType):
15112 amit.gupta 726
        returned = False
15081 amit.gupta 727
        self.agentId = int(agentId)
728
        self.callType = callType
729
        jsonReq = json.loads(req.stream.read(), encoding='utf-8')
15169 amit.gupta 730
        lgr.info( "Request ----\n"  + str(jsonReq))
15091 amit.gupta 731
        self.jsonReq = jsonReq
732
        invalidNumber = self.invalidNumber
733
        callLater = self.callLater
15096 amit.gupta 734
        alreadyUser = self.alReadyUser
15091 amit.gupta 735
        verifiedLinkSent = self.verifiedLinkSent
15368 amit.gupta 736
        onboarded = self.onboarded
15278 amit.gupta 737
        self.address = jsonReq.get('address')
15096 amit.gupta 738
        self.retailerId = int(jsonReq.get('retailerid'))
15671 amit.gupta 739
        self.smsNumber = jsonReq.get('smsnumber')
740
        if self.smsNumber is not None:
741
            self.smsNumber = self.smsNumber.strip().lstrip("0") 
15112 amit.gupta 742
        try:
743
            self.retailer = session.query(Retailers).filter_by(id=self.retailerId).first()
15281 amit.gupta 744
            if self.address:
15278 amit.gupta 745
                self.retailer.address_new = self.address
15112 amit.gupta 746
            self.callDisposition = jsonReq.get('calldispositiontype')
747
            self.callHistory = CallHistory()
748
            self.callHistory.agent_id=self.agentId
749
            self.callHistory.call_disposition = self.callDisposition
750
            self.callHistory.retailer_id=self.retailerId
15115 amit.gupta 751
            self.callHistory.call_type=self.callType
15112 amit.gupta 752
            self.callHistory.duration_sec = int(jsonReq.get("callduration"))
753
            self.callHistory.disposition_description = jsonReq.get('calldispositiondescritption')
15200 manas 754
            self.callHistory.disposition_comments = jsonReq.get('calldispositioncomments')
755
            lgr.info(self.callHistory.disposition_comments)
15112 amit.gupta 756
            self.callHistory.call_time = datetime.strptime(jsonReq.get("calltime"), '%d/%m/%Y %H:%M:%S')
757
            self.callHistory.mobile_number = jsonReq.get('number')
15145 amit.gupta 758
            self.callHistory.sms_verified = int(jsonReq.get("verified"))
15234 amit.gupta 759
            lastFetchData = session.query(FetchDataHistory).filter_by(agent_id=self.agentId).order_by(FetchDataHistory.id.desc()).first()
15368 amit.gupta 760
            if self.callDisposition == 'onboarded':
761
                self.checkList = jsonReq.get('checklist')
762
 
15234 amit.gupta 763
            if lastFetchData is None:
764
                raise
765
            self.callHistory.last_fetch_time= lastFetchData.created  
15112 amit.gupta 766
 
767
            dispositionMap = {  'call_later':callLater,
768
                        'ringing_no_answer':callLater,
769
                        'not_reachable':callLater,
770
                        'switch_off':callLater,
15202 manas 771
                        'not_retailer':invalidNumber,
15112 amit.gupta 772
                        'invalid_no':invalidNumber,
773
                        'wrong_no':invalidNumber,
774
                        'hang_up':invalidNumber,
775
                        'retailer_not_interested':invalidNumber,
15200 manas 776
                        'recharge_retailer':invalidNumber,
777
                        'accessory_retailer':invalidNumber,
778
                        'service_center_retailer':invalidNumber,
15112 amit.gupta 779
                        'alreadyuser':alreadyUser,
15368 amit.gupta 780
                        'verified_link_sent':verifiedLinkSent,
781
                        'onboarded':onboarded
15112 amit.gupta 782
                      }
783
            returned = dispositionMap[jsonReq.get('calldispositiontype')]()
784
        finally:
785
            session.close()
15096 amit.gupta 786
 
15112 amit.gupta 787
        if returned:
788
            resp.body = "{\"result\":\"success\"}"
789
        else:
790
            resp.body = "{\"result\":\"failed\"}"
15081 amit.gupta 791
 
15091 amit.gupta 792
    def invalidNumber(self,):
15108 manas 793
        #self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
794
        if self.callDisposition == 'invalid_no':
795
            self.retailer.status='failed'
796
            self.callHistory.disposition_description = 'Invalid Number'
797
        elif self.callDisposition == 'wrong_no':
15111 manas 798
            self.retailer.status='failed'
799
            self.callHistory.disposition_description = 'Wrong Number'
800
        elif self.callDisposition == 'hang_up':
801
            self.retailer.status='failed'
802
            self.callHistory.disposition_description = 'Hang Up'
803
        elif self.callDisposition == 'retailer_not_interested':
804
            self.retailer.status='failed'
805
            if self.callHistory.disposition_description is None:
806
                self.callHistory.disposition_description = 'NA'
15200 manas 807
            self.callHistory.disposition_description = 'Reason Retailer Not Interested ' + self.callHistory.disposition_description
808
        elif self.callDisposition == 'recharge_retailer':
809
            self.retailer.status='failed'
810
            self.callHistory.disposition_description = 'Recharge related. Not a retailer '
811
        elif self.callDisposition == 'accessory_retailer':
812
            self.retailer.status='failed'
813
            self.callHistory.disposition_description = 'Accessory related. Not a retailer'
814
        elif self.callDisposition == 'service_center_retailer':
815
            self.retailer.status='failed'
816
            self.callHistory.disposition_description = 'Service Center related. Not a retailer'
15202 manas 817
        elif self.callDisposition == 'not_retailer':
818
            self.retailer.status='failed'
819
            self.callHistory.disposition_description = 'Not a retailer'    
15108 manas 820
        session.commit()
821
        return True   
822
 
15132 amit.gupta 823
    def getCode(self,):
15207 amit.gupta 824
        newCode = None
825
        lastLink = session.query(RetailerLinks).order_by(RetailerLinks.id.desc()).with_lockmode("update").first()
826
        if lastLink is not None:
827
            if len(lastLink.code)==len(codesys):
828
                newCode=lastLink.code
829
        return getNextCode(codesys, newCode)
15108 manas 830
 
15254 amit.gupta 831
 
15091 amit.gupta 832
    def callLater(self,):
15368 amit.gupta 833
        self.retailer.status = RETRY_MAP.get(self.callType)
15100 amit.gupta 834
        self.retailer.call_priority = None
15096 amit.gupta 835
        if self.callDisposition == 'call_later':
15100 amit.gupta 836
            if self.callHistory.disposition_description is not None:
15102 amit.gupta 837
                self.retailer.call_priority = 'user_initiated'
15096 amit.gupta 838
                self.retailer.next_call_time = datetime.strptime(self.callHistory.disposition_description, '%d/%m/%Y %H:%M:%S')
839
                self.callHistory.disposition_description = 'User requested to call on ' + self.callHistory.disposition_description
840
            else:
15102 amit.gupta 841
                self.retailer.call_priority = 'system_initiated'
15096 amit.gupta 842
                self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
15112 amit.gupta 843
                self.callHistory.disposition_description = 'Call scheduled on ' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S')
844
        else: 
845
            if self.callDisposition == 'ringing_no_answer':
846
                if self.retailer.disposition == 'ringing_no_answer':
847
                    self.retailer.retry_count += 1
848
                else:
849
                    self.retailer.disposition = 'ringing_no_answer'
850
                    self.retailer.retry_count = 1
851
            else:
852
                if self.retailer.disposition == 'ringing_no_answer':
15122 amit.gupta 853
                    pass
15112 amit.gupta 854
                else:
15119 amit.gupta 855
                    self.retailer.disposition = 'not_reachable'
15122 amit.gupta 856
                self.retailer.retry_count += 1
857
                self.retailer.invalid_retry_count += 1
15119 amit.gupta 858
 
15122 amit.gupta 859
            retryConfig = session.query(RetryConfig).filter_by(call_type=self.callType, disposition_type=self.retailer.disposition, retry_count=self.retailer.retry_count).first()
15112 amit.gupta 860
            if retryConfig is not None:
861
                self.retailer.next_call_time = self.callHistory.call_time + timedelta(minutes = retryConfig.minutes_ahead)
15119 amit.gupta 862
                self.callHistory.disposition_description = 'Call scheduled on ' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S')
15112 amit.gupta 863
            else:
864
                self.retailer.status = 'failed'
865
                self.callHistory.disposition_description = 'Call failed as all attempts exhausted'
15119 amit.gupta 866
 
15101 amit.gupta 867
        session.commit()
868
        return True
15096 amit.gupta 869
 
15100 amit.gupta 870
 
15091 amit.gupta 871
    def alReadyUser(self,):
15112 amit.gupta 872
        self.retailer.status = self.callDisposition
15117 amit.gupta 873
        if self.callHistory.disposition_description is None:
874
            self.callHistory.disposition_description = 'Retailer already user' 
15112 amit.gupta 875
        session.commit()
876
        return True
15091 amit.gupta 877
    def verifiedLinkSent(self,):
15147 amit.gupta 878
        if self.callType == 'fresh':
879
            self.retailer.status = 'followup'
16882 amit.gupta 880
            if self.retailer.agent_id not in sticky_agents:
881
                self.retailer.agent_id = None
15147 amit.gupta 882
            self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
883
            self.callHistory.disposition_description = 'App link sent via ' + self.callHistory.disposition_description+ '. followup on' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S') 
884
        else:
15224 amit.gupta 885
            self.retailer.status = 'followup'
16882 amit.gupta 886
            if self.retailer.agent_id not in sticky_agents:
887
                self.retailer.agent_id = None
15147 amit.gupta 888
            self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=7)
15254 amit.gupta 889
            self.callHistory.disposition_description = 'App link sent via' + self.callHistory.disposition_description + '. Followup again on ' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S')
15328 amit.gupta 890
        addContactToRetailer(self.agentId, self.retailerId, self.smsNumber, self.callType, 'sms')     
15146 amit.gupta 891
        session.commit()
892
        return True
15368 amit.gupta 893
    def onboarded(self,):
894
        self.retailer.status = self.callDisposition
895
        checkList = OnboardedRetailerChecklists()
896
        checkList.contact_us = self.checkList.get('contactus')
15390 amit.gupta 897
        checkList.doa_return_policy = self.checkList.get('doareturnpolicy')
15368 amit.gupta 898
        checkList.number_verification = self.checkList.get('numberverification')
899
        checkList.payment_option = self.checkList.get('paymentoption')
900
        checkList.preferences = self.checkList.get('preferences')
901
        checkList.product_info = self.checkList.get('productinfo')
15372 amit.gupta 902
        checkList.redeem = self.checkList.get('redeem')
15368 amit.gupta 903
        checkList.retailer_id = self.retailerId
904
        session.commit()
905
        return True
906
 
907
 
15254 amit.gupta 908
def isActivated(retailerId):
15276 amit.gupta 909
    retailerLink = session.query(RetailerLinks).filter_by(retailer_id=retailerId).first()
15448 amit.gupta 910
    user = session.query(Users).filter(or_(func.lower(Users.referrer)==retailerLink.code.lower(), Users.utm_campaign==retailerLink.code)).first()
15276 amit.gupta 911
    if user is None:
912
        mobileNumbers = list(session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailerId).all())
913
        user = session.query(Users).filter(Users.mobile_number.in_(mobileNumbers)).first()
15254 amit.gupta 914
        if user is None:
15332 amit.gupta 915
            if retailerLink.created < datetime(2015,5,26):
15333 amit.gupta 916
                historyNumbers = [number for number, in session.query(CallHistory.mobile_number).filter_by(retailer_id = retailerId).all()]
15476 amit.gupta 917
                user = session.query(Users).filter(Users.mobile_number.in_(historyNumbers)).first()
15332 amit.gupta 918
                if user is None:
919
                    return False
15334 amit.gupta 920
                else:
921
                    mapped_with = 'contact'
15332 amit.gupta 922
            else:
923
                return False
15276 amit.gupta 924
        else:
925
            mapped_with = 'contact'
926
    else:
927
        mapped_with = 'code'
928
    retailerLink.mapped_with = mapped_with
15388 amit.gupta 929
    if user.activation_time is not None:
15448 amit.gupta 930
        retailerLink.activated = user.activation_time
931
    retailerLink.activated = user.created
15276 amit.gupta 932
    retailerLink.user_id = user.id
15291 amit.gupta 933
    retailer = session.query(Retailers).filter_by(id=retailerId).first()
15574 amit.gupta 934
    if retailer.status == 'followup' or retailer.status == 'fretry':
15389 amit.gupta 935
        retailer.status = 'onboarding'
16882 amit.gupta 936
        if retailer.agent_id not in sticky_agents:
937
                retailer.agent_id = None
15391 amit.gupta 938
        retailer.call_priority = None
939
        retailer.next_call_time = None
940
        retailer.retry_count = 0
941
        retailer.invalid_retry_count = 0
15276 amit.gupta 942
    session.commit()
15287 amit.gupta 943
    print "retailerLink.retailer_id", retailerLink.retailer_id
15700 amit.gupta 944
    print "retailer", retailer.id
15276 amit.gupta 945
    session.close()
946
    return True
15254 amit.gupta 947
 
948
class AddContactToRetailer():
949
    def on_post(self,req,resp, agentId):
950
        agentId = int(agentId)
951
        try:
952
            jsonReq = json.loads(req.stream.read(), encoding='utf-8')
953
            retailerId = int(jsonReq.get("retailerid"))
954
            mobile = jsonReq.get("mobile")
955
            callType = jsonReq.get("calltype")
956
            contactType = jsonReq.get("contacttype")
957
            addContactToRetailer(agentId, retailerId, mobile, callType, contactType)
958
            session.commit()
959
        finally:
960
            session.close()
15676 amit.gupta 961
 
15677 amit.gupta 962
class AddAddressToRetailer():
15676 amit.gupta 963
    def on_post(self,req,resp, agentId):
964
        agentId = int(agentId)
15678 amit.gupta 965
        jsonReq = json.loads(req.stream.read(), encoding='utf-8')
966
        retailerId = int(jsonReq.get("retailerid"))
15684 amit.gupta 967
        address = str(jsonReq.get("address"))
968
        storeName = str(jsonReq.get("storename"))
969
        pin = str(jsonReq.get("pin"))
970
        city = str(jsonReq.get("city"))
971
        state = str(jsonReq.get("state"))
972
        updateType = str(jsonReq.get("updatetype"))
15678 amit.gupta 973
        addAddressToRetailer(agentId, retailerId, address, storeName, pin, city,state, updateType)
15254 amit.gupta 974
 
975
def addContactToRetailer(agentId, retailerId, mobile, callType, contactType):
15312 amit.gupta 976
    retailerContact = session.query(RetailerContacts).filter_by(retailer_id=retailerId).filter_by(mobile_number=mobile).first()
977
    if retailerContact is None:
15254 amit.gupta 978
        retailerContact = RetailerContacts()
15256 amit.gupta 979
        retailerContact.retailer_id = retailerId
15254 amit.gupta 980
        retailerContact.agent_id = agentId
981
        retailerContact.call_type = callType
982
        retailerContact.contact_type = contactType
983
        retailerContact.mobile_number = mobile
15312 amit.gupta 984
    else:
15327 amit.gupta 985
        if CONTACT_PRIORITY.index(retailerContact.contact_type) > CONTACT_PRIORITY.index(contactType):
15358 amit.gupta 986
            retailerContact.contact_type = contactType
15676 amit.gupta 987
 
988
def addAddressToRetailer(agentId, retailerId, address, storeName, pin, city,state, updateType):
15679 amit.gupta 989
    print "I am in addAddress"
15682 amit.gupta 990
    print agentId, retailerId, address, storeName, pin, city, state, updateType
15679 amit.gupta 991
    try:
992
        if updateType=='new':
15685 amit.gupta 993
            retailer = session.query(Retailers).filter_by(id=retailerId).first()
15679 amit.gupta 994
            retailer.address = address
995
            retailer.title = storeName
996
            retailer.city = city
997
            retailer.state = state
998
            retailer.pin = pin
999
        raddress = RetailerAddresses()
1000
        raddress.address = address
15682 amit.gupta 1001
        raddress.title = storeName
15679 amit.gupta 1002
        raddress.agent_id = agentId
1003
        raddress.city = city
1004
        raddress.pin = pin
1005
        raddress.retailer_id = retailerId
1006
        raddress.state = state
1007
        session.commit()
1008
    finally:
1009
        session.close() 
15254 amit.gupta 1010
 
15312 amit.gupta 1011
 
15189 manas 1012
class Login():
1013
 
1014
    def on_get(self, req, resp, agentId, role):
1015
        try:
15198 manas 1016
            self.agentId = int(agentId)
1017
            self.role = role
1018
            print str(self.agentId) + self.role;
15199 manas 1019
            agents=AgentLoginTimings()
1020
            lastLoginTime = session.query(Agents).filter(Agents.id==self.agentId).first()
1021
            print 'lastLogintime' + str(lastLoginTime)
1022
            agents.loginTime=lastLoginTime.last_login
1023
            agents.logoutTime=datetime.now()
1024
            agents.role =self.role
15282 amit.gupta 1025
            agents.agent_id = self.agentId
15199 manas 1026
            session.add(agents)    
1027
            session.commit()
1028
            resp.body =  json.dumps({"result":{"success":"true","message":"Success"}}, encoding='utf-8')
15189 manas 1029
        finally:
1030
            session.close()        
15112 amit.gupta 1031
 
15189 manas 1032
    def on_post(self,req,resp):
1033
        try:
1034
            jsonReq = json.loads(req.stream.read(), encoding='utf-8')
1035
            lgr.info( "Request ----\n"  + str(jsonReq))
1036
            email=jsonReq.get('email')
1037
            password = jsonReq.get('password')
1038
            role=jsonReq.get('role')    
15531 amit.gupta 1039
            agent = session.query(Agents).filter(and_(Agents.email==email,Agents.password==password)).first()
1040
            if agent is None:
15189 manas 1041
                resp.body =  json.dumps({"result":{"success":"false","message":"Invalid User"}}, encoding='utf-8')
1042
            else:
15531 amit.gupta 1043
                print agent.id
1044
                checkRole = session.query(Agent_Roles.id).filter(and_(Agent_Roles.agent_id==agent.id,Agent_Roles.role==role)).first()
15189 manas 1045
                if checkRole is None:
1046
                    resp.body =  json.dumps({"result":{"success":"false","message":"Invalid Role"}}, encoding='utf-8')
1047
                else:
15531 amit.gupta 1048
                    agent.last_login = datetime.now()
1049
                    agent.login_type = role
1050
                    resp.body =  json.dumps({"result":{"success":"true","message":"Valid User","id":agent.id}}, encoding='utf-8')
1051
                    session.commit()
15195 manas 1052
                    #session.query(Agents).filter_by(id = checkUser[0]).    
15189 manas 1053
        finally:
1054
            session.close()    
1055
 
15195 manas 1056
    def test(self,email,password,role):
15189 manas 1057
        checkUser = session.query(Agents.id).filter(and_(Agents.email==email,Agents.password==password)).first()
1058
        if checkUser is None:
1059
            print checkUser
15195 manas 1060
 
15189 manas 1061
        else:
1062
            print checkUser[0]
1063
            checkRole = session.query(Agent_Roles.id).filter(and_(Agent_Roles.agent_id==checkUser[0],Agent_Roles.role==role)).first()
1064
            if checkRole is None:
15195 manas 1065
                pass
15189 manas 1066
            else:
15195 manas 1067
                agents=AgentLoginTimings()
1068
                agents.loginTime=datetime.now()
1069
                agents.logoutTime=datetime.now()
1070
                agents.role =role
1071
                agents.agent_id = 2
1072
                #session.query(AgentLoginTimings).filter_by(id = checkUser[0]).update({"last_login":datetime.now()}, synchronize_session=False)
1073
                session.add(agents)    
1074
                session.commit()
1075
                session.close()
1076
 
1077
                #session.query(Agents).filter(Agents.id==checkUser[0]).update({"last_login":Agents.last_login})
15275 amit.gupta 1078
 
1079
class RetailerActivation():
1080
    def on_get(self, req, resp, userId):
15351 amit.gupta 1081
        res =  markDealerActivation(int(userId))
1082
        if res:
1083
            resp.body = "{\"activated\":true}"
1084
        else:
1085
            resp.body = "{\"activated\":false}"
1086
 
15275 amit.gupta 1087
 
1088
def markDealerActivation(userId):
1089
    try:
15343 amit.gupta 1090
        user = session.query(Users).filter_by(id=userId).first()
15275 amit.gupta 1091
        result = False                
1092
        mappedWith = 'contact'
15534 amit.gupta 1093
        retailer = None
15275 amit.gupta 1094
        if user is not None:
15454 amit.gupta 1095
            referrer = None if user.referrer is None else user.referrer.upper()
1096
            retailerLink = session.query(RetailerLinks).filter(or_(RetailerLinks.code==referrer, RetailerLinks.code==user.utm_campaign)).first()
15275 amit.gupta 1097
            if retailerLink is None:
15501 amit.gupta 1098
                if user.mobile_number is not None:
1099
                    retailerContact = session.query(RetailerContacts).filter_by(mobile_number=user.mobile_number).first()
1100
                    if retailerContact is None:
15613 amit.gupta 1101
                        retailer = session.query(Retailers).filter(Retailers.status.in_(['followup', 'fretry', 'fdone'])).filter(or_(Retailers.contact1==user.mobile_number,Retailers.contact2==user.mobile_number)).first()
15501 amit.gupta 1102
                    else:
1103
                        retailer = session.query(Retailers).filter_by(id = retailerContact.retailer_id).first()
15275 amit.gupta 1104
            else:
1105
                retailer = session.query(Retailers).filter_by(id = retailerLink.retailer_id).first()
1106
                mappedWith='code'
1107
            if retailer is not None:
1108
                retailerLink = session.query(RetailerLinks).filter_by(retailer_id=retailer.id).first()
1109
                if retailerLink is not None:
1110
                    retailerLink.user_id = user.id
1111
                    retailerLink.mapped_with=mappedWith
15358 amit.gupta 1112
                    retailer.status = 'onboarding'
15275 amit.gupta 1113
                    result = True
1114
                    session.commit()
15574 amit.gupta 1115
        return result
15275 amit.gupta 1116
    finally:
1117
        session.close()
1118
 
15189 manas 1119
 
15081 amit.gupta 1120
def todict(obj, classkey=None):
1121
    if isinstance(obj, dict):
1122
        data = {}
1123
        for (k, v) in obj.items():
1124
            data[k] = todict(v, classkey)
1125
        return data
1126
    elif hasattr(obj, "_ast"):
1127
        return todict(obj._ast())
1128
    elif hasattr(obj, "__iter__"):
1129
        return [todict(v, classkey) for v in obj]
1130
    elif hasattr(obj, "__dict__"):
1131
        data = dict([(key, todict(value, classkey)) 
1132
            for key, value in obj.__dict__.iteritems() 
1133
            if not callable(value) and not key.startswith('_')])
1134
        if classkey is not None and hasattr(obj, "__class__"):
1135
            data[classkey] = obj.__class__.__name__
1136
        return data
1137
    else:
1138
        return obj
1139
 
15358 amit.gupta 1140
def getRetailerObj(retailer, otherContacts1=None, callType=None):
15324 amit.gupta 1141
    print "before otherContacts1",otherContacts1
1142
    otherContacts = [] if otherContacts1 is None else otherContacts1
15662 amit.gupta 1143
    print "after otherContacts1",otherContacts
15081 amit.gupta 1144
    obj = Mock()
15280 amit.gupta 1145
    obj.id = retailer.id
15686 amit.gupta 1146
 
1147
 
15314 amit.gupta 1148
    if retailer.contact1 is not None and retailer.contact1 not in otherContacts:
15315 amit.gupta 1149
        otherContacts.append(retailer.contact1)
15314 amit.gupta 1150
    if retailer.contact2 is not None and retailer.contact2 not in otherContacts:
15315 amit.gupta 1151
        otherContacts.append(retailer.contact2)
15323 amit.gupta 1152
    obj.contact1 = None if len(otherContacts)==0 else otherContacts[0]
15325 amit.gupta 1153
    if obj.contact1 is not None:
1154
        obj.contact2 = None if len(otherContacts)==1 else otherContacts[1]
15096 amit.gupta 1155
    obj.scheduled = (retailer.call_priority is not None)
15686 amit.gupta 1156
    address = None
1157
    try:
1158
        address = session.query(RetailerAddresses).filter_by(retailer_id=retailer.id).order_by(RetailerAddresses.created.desc()).first()
1159
    finally:
1160
        session.close()
1161
    if address is not None:
1162
        obj.address = address.address
1163
        obj.title = address.title
1164
        obj.city = address.city
1165
        obj.state = address.state
1166
        obj.pin = address.pin 
1167
    else:
1168
        obj.address = retailer.address_new if retailer.address_new is not None else retailer.address
1169
        obj.title = retailer.title
1170
        obj.city = retailer.city
1171
        obj.state = retailer.state
1172
        obj.pin = retailer.pin 
15699 amit.gupta 1173
    obj.status = retailer.status
15686 amit.gupta 1174
 
15662 amit.gupta 1175
    if hasattr(retailer, 'contact'):
1176
        obj.contact = retailer.contact
15358 amit.gupta 1177
    if callType == 'onboarding':
1178
        try:
15364 amit.gupta 1179
            userId, activatedTime = session.query(RetailerLinks.user_id, RetailerLinks.activated).filter(RetailerLinks.retailer_id==retailer.id).first()
15366 amit.gupta 1180
            activated, = session.query(Users.activation_time).filter(Users.id==userId).first()
15364 amit.gupta 1181
            if activated is not None:
15366 amit.gupta 1182
                activatedTime = activated
15362 amit.gupta 1183
            obj.user_id = userId
15364 amit.gupta 1184
            obj.created = datetime.strftime(activatedTime, '%d/%m/%Y %H:%M:%S')
15358 amit.gupta 1185
            result = fetchResult("select * from useractive where user_id=%d"%(userId))
1186
            if result == ():
1187
                obj.last_active = None
1188
            else:
15360 amit.gupta 1189
                obj.last_active =datetime.strftime(result[0][1], '%d/%m/%Y %H:%M:%S')
15361 amit.gupta 1190
            ordersCount = session.query(Orders).filter_by(user_id = userId).filter(~Orders.status.in_(['ORDER_NOT_CREATED_KNOWN', 'ORDER_ALREADY_CREATED_IGNORED'])).count()
15358 amit.gupta 1191
            obj.orders = ordersCount
1192
        finally:
1193
            session.close()
15081 amit.gupta 1194
    return obj
15091 amit.gupta 1195
 
15132 amit.gupta 1196
def make_tiny(code):
16939 manish.sha 1197
    url = 'https://play.google.com/store/apps/details?id=com.saholic.profittill&referrer=utm_source%3D0%26utm_medium%3DCRM%26utm_term%3D001%26utm_campaign%3D' + code
16881 manas 1198
    #url='https://play.google.com/store/apps/details?id=com.saholic.profittill&referrer=utm_source=0&utm_medium=CRM&utm_term=001&utm_campaign='+code
16939 manish.sha 1199
    #marketUrl='market://details?id=com.saholic.profittill&referrer=utm_source=0&utm_medium=CRM&utm_term=001&utm_campaign='+code
1200
    #url = urllib.quote(marketUrl)
15465 amit.gupta 1201
    #request_url = ('http://tinyurl.com/api-create.php?' + urlencode({'url':url}))
1202
    #filehandle = urllib2.Request(request_url)
1203
    #x= urllib2.urlopen(filehandle)
15546 amit.gupta 1204
    try:
1205
        shortener = Shortener('TinyurlShortener')
1206
        returnUrl =  shortener.short(url)
1207
    except:
1208
        shortener = Shortener('SentalaShortener')
1209
        returnlUrl =  shortener.short(url)
1210
    return returnUrl
15171 amit.gupta 1211
 
15285 manas 1212
class SearchUser():
1213
 
1214
    def on_post(self, req, resp, agentId, searchType):
15314 amit.gupta 1215
        retailersJsonArray = []
15285 manas 1216
        try:
1217
            jsonReq = json.loads(req.stream.read(), encoding='utf-8')
1218
            lgr.info( "Request in Search----\n"  + str(jsonReq))
15302 amit.gupta 1219
            contact=jsonReq.get('searchTerm')
15285 manas 1220
            if(searchType=="number"):
15312 amit.gupta 1221
                retailer_ids = session.query(RetailerContacts.retailer_id).filter_by(mobile_number=contact).all()
1222
                retailer_ids = [r for r, in retailer_ids]    
1223
                anotherCondition = or_(Retailers.contact1==contact,Retailers.contact2==contact, Retailers.id.in_(retailer_ids))
1224
            else:
1225
                m = re.match("(.*?)(\d{6})(.*?)", contact)
1226
                if m is not None:
1227
                    pin = m.group(2)
1228
                    contact = m.group(1) if m.group(1) != '' else m.group(3)
15313 amit.gupta 1229
                    anotherCondition = and_(Retailers.title.ilike('%%%s%%'%(contact)), Retailers.pin==pin)
15312 amit.gupta 1230
                else:
1231
                    anotherCondition = Retailers.title.ilike('%%%s%%'%(contact))
15297 amit.gupta 1232
 
15326 amit.gupta 1233
            retailers = session.query(Retailers).filter(anotherCondition).limit(20).all()
15312 amit.gupta 1234
            if retailers is None:
15285 manas 1235
                resp.body = json.dumps("{}")
15312 amit.gupta 1236
            else:
1237
                for retailer in retailers:
15326 amit.gupta 1238
                    otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
15314 amit.gupta 1239
                    retailersJsonArray.append(todict(getRetailerObj(retailer, otherContacts)))    
1240
            resp.body = json.dumps({"Retailers":retailersJsonArray}, encoding='utf-8')
15312 amit.gupta 1241
            return
15285 manas 1242
        finally:
1243
            session.close()
15171 amit.gupta 1244
 
15081 amit.gupta 1245
 
1246
class Mock(object):
1247
    pass
15189 manas 1248
 
15312 amit.gupta 1249
def tagActivatedReatilers():
15613 amit.gupta 1250
    retailerIds = [r for  r, in session.query(RetailerLinks.retailer_id).filter_by(user_id = None).all()]
15312 amit.gupta 1251
    session.close()
15288 amit.gupta 1252
    for retailerId in retailerIds:
1253
        isActivated(retailerId)
15312 amit.gupta 1254
    session.close()
15374 kshitij.so 1255
 
1256
class StaticDeals():
1257
 
1258
    def on_get(self, req, resp):
1259
 
1260
        offset = req.get_param_as_int("offset")
1261
        limit = req.get_param_as_int("limit")
1262
        categoryId = req.get_param_as_int("categoryId")
15458 kshitij.so 1263
        direction = req.get_param_as_int("direction")
15374 kshitij.so 1264
 
15458 kshitij.so 1265
        result = Mongo.getStaticDeals(offset, limit, categoryId, direction)
15374 kshitij.so 1266
        resp.body = dumps(result)
1267
 
16366 kshitij.so 1268
class DealNotification():
1269
 
1270
    def on_get(self,req,resp,skuBundleIds):
1271
        result = Mongo.getDealsForNotification(skuBundleIds)
1272
        resp.body = dumps(result)
16487 kshitij.so 1273
 
1274
class DealPoints():
1275
 
1276
    def on_get(self, req, resp):
16366 kshitij.so 1277
 
16487 kshitij.so 1278
        offset = req.get_param_as_int("offset")
1279
        limit = req.get_param_as_int("limit")
1280
 
1281
        result = Mongo.getAllBundlesWithDealPoints(offset, limit)
1282
        resp.body = dumps(result)
15374 kshitij.so 1283
 
16487 kshitij.so 1284
 
1285
    def on_post(self, req, resp):
1286
 
1287
 
1288
        try:
1289
            result_json = json.loads(req.stream.read(), encoding='utf-8')
1290
        except ValueError:
1291
            raise falcon.HTTPError(falcon.HTTP_400,
1292
                'Malformed JSON',
1293
                'Could not decode the request body. The '
1294
                'JSON was incorrect.')
1295
 
1296
        result = Mongo.addDealPoints(result_json)
1297
        resp.body = json.dumps(result, encoding='utf-8')
15374 kshitij.so 1298
 
16545 kshitij.so 1299
class AppAffiliates():
1300
 
1301
    def on_get(self, req, resp, retailerId, appId):
1302
        retailerId = int(retailerId)
1303
        appId = int(appId)
16554 kshitij.so 1304
        call_back = req.get_param("callback")
16545 kshitij.so 1305
        result = Mongo.generateRedirectUrl(retailerId, appId)
16555 kshitij.so 1306
        resp.body = call_back+'('+str(result)+')'
16557 kshitij.so 1307
 
1308
class AffiliatePayout():
1309
    def on_get(self, req, resp):
1310
        payout = req.get_param("payout")
1311
        transaction_id = req.get_param("transaction_id")
1312
        result = Mongo.addPayout(payout, transaction_id)
1313
        resp.body = str(result)
1314
 
16581 manish.sha 1315
class AppOffers():
1316
    def on_get(self, req, resp, retailerId):
16895 manish.sha 1317
        try:            
1318
            result = Mongo.getAppOffers(retailerId)
1319
            offerids = result.values()
1320
            if offerids is None or len(offerids)==0:
16887 kshitij.so 1321
                resp.body = json.dumps("{}")
1322
            else:
16941 manish.sha 1323
                appOffers = session.query(app_offers.id,app_offers.appmaster_id, app_offers.app_name, app_offers.affiliate_offer_id, app_offers.image_url, app_offers.downloads, app_offers.link, app_offers.offer_price, app_offers.offerCategory, app_offers.package_name, app_offers.promoImage, app_offers.ratings, case([(app_offers.override_payout == True, app_offers.overriden_payout)], else_=app_offers.user_payout).label('user_payout'), case([(appmasters.shortDescription != None, appmasters.shortDescription)], else_=None).label('shortDescription'), case([(appmasters.longDescription != None, appmasters.longDescription)], else_=None).label('longDescription'), appmasters.customerOneLiner, appmasters.retailerOneLiner,appmasters.rank, app_offers.offerCondition, app_offers.location).join((appmasters,appmasters.id==app_offers.appmaster_id)).filter(app_offers.id.in_(tuple(offerids))).all()
16895 manish.sha 1324
                appOffersMap = {}
1325
                jsonOffersArray=[]
1326
                for offer in appOffers:
1327
                    appOffersMap[long(offer[0])]= AppOfferObj(offer[0], offer[1], offer[2], offer[3], offer[4], offer[5], offer[6], offer[7], offer[8], offer[9], offer[10], offer[11], offer[12], offer[13], offer[14], offer[15], offer[16], offer[17], offer[18], offer[19]).__dict__
1328
                for rank in sorted(result):
1329
                    print 'Rank', rank, 'Data', appOffersMap[result[rank]]
1330
                    jsonOffersArray.append(appOffersMap[result[rank]])
1331
 
1332
            resp.body = json.dumps({"AppOffers":jsonOffersArray}, encoding='latin1')
16887 kshitij.so 1333
        finally:
1334
            session.close()
1335
 
16727 manish.sha 1336
 
1337
class AppUserBatchRefund():
1338
    def on_get(self, req, resp, batchId, userId):
16887 kshitij.so 1339
        try:
1340
            batchId = long(batchId)
1341
            userId = long(userId)
1342
            userBatchCashback = user_app_cashbacks.get_by(user_id=userId, batchCreditId=batchId)
1343
            if userBatchCashback is None:
1344
                resp.body = json.dumps("{}")
1345
            else:
16905 manish.sha 1346
                if userBatchCashback.creditedDate is not None:
1347
                    userBatchCashback.creditedDate = str(userBatchCashback.creditedDate)
16887 kshitij.so 1348
                resp.body = json.dumps(todict(userBatchCashback), encoding='utf-8')
1349
        finally:
1350
            session.close()
16727 manish.sha 1351
 
1352
class AppUserBatchDrillDown():
16777 manish.sha 1353
    def on_get(self, req, resp, fortNightOfYear, userId, yearVal):
16887 kshitij.so 1354
        try:
1355
            fortNightOfYear = long(fortNightOfYear)
1356
            userId = long(userId)
1357
            yearVal = long(yearVal)
1358
            appUserBatchDrillDown = session.query(user_app_installs.transaction_date, func.sum(user_app_installs.installCount).label('downloads'), func.sum(user_app_installs.payoutAmount).label('amount')).join((user_app_cashbacks,user_app_cashbacks.user_id==user_app_installs.user_id)).filter(user_app_cashbacks.fortnightOfYear==user_app_installs.fortnightOfYear).filter(user_app_cashbacks.user_id==userId).filter(user_app_cashbacks.yearVal==yearVal).filter(user_app_cashbacks.fortnightOfYear==fortNightOfYear).group_by(user_app_installs.transaction_date).all()
1359
            cashbackArray = []
1360
            if appUserBatchDrillDown is None or len(appUserBatchDrillDown)==0:
1361
                resp.body = json.dumps("{}")
1362
            else:
1363
                for appcashBack in appUserBatchDrillDown:
1364
                    userAppBatchDrillDown = UserAppBatchDrillDown(str(appcashBack[0]),long(appcashBack[1]), long(appcashBack[2]))
1365
                    cashbackArray.append(todict(userAppBatchDrillDown))
1366
                resp.body = json.dumps({"UserAppCashBackInBatch":cashbackArray}, encoding='utf-8')
1367
        finally:
1368
            session.close()
16727 manish.sha 1369
 
1370
class AppUserBatchDateDrillDown():
1371
    def on_get(self, req, resp, userId, date):
16887 kshitij.so 1372
        try:
1373
            userId = long(userId)
1374
            date = str(date)
1375
            date = datetime.strptime(date, '%Y-%m-%d')
1376
            appUserBatchDateDrillDown = session.query(user_app_installs.app_name, func.sum(user_app_installs.installCount).label('downloads'), func.sum(user_app_installs.payoutAmount).label('amount')).filter(user_app_installs.user_id==userId).filter(user_app_installs.transaction_date==date).group_by(user_app_installs.app_name).all()
1377
            cashbackArray = []
1378
            if appUserBatchDateDrillDown is None or len(appUserBatchDateDrillDown)==0:
1379
                resp.body = json.dumps("{}")
1380
            else:
1381
                for appcashBack in appUserBatchDateDrillDown:
1382
                    userAppBatchDateDrillDown = UserAppBatchDateDrillDown(str(appcashBack[0]),long(appcashBack[1]),long(appcashBack[2]))
1383
                    cashbackArray.append(todict(userAppBatchDateDrillDown))
1384
                resp.body = json.dumps({"UserAppCashBackDateWise":cashbackArray}, encoding='utf-8')
1385
        finally:
1386
            session.close()
16739 manish.sha 1387
 
16748 manish.sha 1388
class AppUserCashBack():
1389
    def on_get(self, req, resp, userId, status):
16887 kshitij.so 1390
        try:
1391
            userId = long(userId)
1392
            status = str(status)
1393
            appUserApprovedCashBacks = user_app_cashbacks.query.filter(user_app_cashbacks.user_id==userId).filter(user_app_cashbacks.status==status).all()
1394
            cashbackArray = []
1395
            if appUserApprovedCashBacks is None or len(appUserApprovedCashBacks)==0:
1396
                resp.body = json.dumps("{}")
1397
            else:
1398
                totalAmount = 0                
1399
                for appUserApprovedCashBack in appUserApprovedCashBacks:
1400
                    totalAmount = totalAmount + appUserApprovedCashBack.amount
16895 manish.sha 1401
                    if appUserApprovedCashBack.creditedDate is not None:
1402
                        appUserApprovedCashBack.creditedDate = str(appUserApprovedCashBack.creditedDate)  
16905 manish.sha 1403
                    cashbackArray.append(todict(appUserApprovedCashBack)) 
1404
 
16887 kshitij.so 1405
                resp.body = json.dumps({"UserAppCashBack":cashbackArray,"TotalAmount":totalAmount}, encoding='utf-8')
1406
        finally:
1407
            session.close()
17278 naman 1408
 
1409
class GetSaleDetail():
1410
    def on_get(self,req,res,date_val):
1411
        try:
1412
                db = get_mongo_connection()
1413
                sum=0
1414
                count=0
1415
                #print date_val, type(date_val)
1416
                #cursor = db.Dtr.merchantOrder.find({'createdOnInt':{'$lt':long(date_val)},'subOrders':{'$exists':True}})
17315 naman 1417
                cursor = db.Dtr.merchantOrder.find({"$and": [ { "createdOnInt":{"$gt":long(date_val)} }, {"createdOnInt":{"$lt":long(date_val)+86401} } ],"subOrders":{"$exists":True}})
17278 naman 1418
 
1419
                for document in cursor:
1420
                    for doc in document['subOrders']:
1421
                        sum = sum + float(doc['amountPaid'])
1422
                        count = count + int(doc['quantity'])
1423
 
1424
                data = {"amount":sum , "quantity":count}
1425
 
1426
                res.body= json.dumps(data,encoding='utf-8')
1427
        finally:
1428
                session.close()
1429
 
17301 kshitij.so 1430
class DummyDeals():
17304 kshitij.so 1431
    def on_get(self,req, resp):
17301 kshitij.so 1432
        categoryId = req.get_param_as_int("categoryId")
1433
        offset = req.get_param_as_int("offset")
1434
        limit = req.get_param_as_int("limit")
1435
        result = Mongo.getDummyDeals(categoryId, offset, limit)
17556 kshitij.so 1436
        resp.body = dumps(result)
17301 kshitij.so 1437
 
17467 manas 1438
class PincodeValidation():
17498 amit.gupta 1439
    def on_get(self,req,resp,pincode):
17467 manas 1440
        json_data={}
1441
        cities=[]
1442
        print pincode
1443
        if len(str(pincode)) ==6:
17499 amit.gupta 1444
            listCities = list(session.query(Postoffices.taluk,Postoffices.state).distinct().filter(Postoffices.pincode==pincode).filter(Postoffices.taluk!='NA').all())
17467 manas 1445
            if len(listCities)>0:
1446
                for j in listCities:
1447
                    cities.append(j.taluk)
1448
                json_data['cities'] = cities
1449
                json_data['state'] = listCities[0][1]
1450
                resp.body =  json.dumps(json_data)
1451
            else:
1452
                resp.body = json.dumps("{}")       
1453
        else:
1454
            resp.body = json.dumps("{}")
1455
        session.close()
17301 kshitij.so 1456
 
17556 kshitij.so 1457
class SearchDummyDeals():
1458
    def on_get(self,req,resp):
1459
        offset = req.get_param_as_int("offset")
1460
        limit = req.get_param_as_int("limit")
1461
        searchTerm = req.get_param("searchTerm")
1462
        result = Mongo.searchDummyDeals(searchTerm, limit, offset)
1463
        resp.body = dumps(result)
1464
 
1465
class DummyPricing:
17560 kshitij.so 1466
    def on_get(self, req, resp):
17556 kshitij.so 1467
        skuBundleId = req.get_param_as_int("skuBundleId")
1468
        result = Mongo.getDummyPricing(skuBundleId)
1469
        resp.body = dumps(result)
1470
 
1471
class DealObject:
17560 kshitij.so 1472
    def on_post(self, req, resp):
17569 kshitij.so 1473
        update = req.get_param_as_int("update")
17556 kshitij.so 1474
        try:
1475
            result_json = json.loads(req.stream.read(), encoding='utf-8')
1476
        except ValueError:
1477
            raise falcon.HTTPError(falcon.HTTP_400,
1478
                'Malformed JSON',
1479
                'Could not decode the request body. The '
1480
                'JSON was incorrect.')
17569 kshitij.so 1481
        if update is None:    
1482
            result = Mongo.addDealObject(result_json)
1483
        else:
1484
            result = Mongo.updateDealObject(result_json)
1485
 
17556 kshitij.so 1486
        resp.body = dumps(result)
17569 kshitij.so 1487
 
17556 kshitij.so 1488
 
17560 kshitij.so 1489
    def on_get(self, req, resp):
17567 kshitij.so 1490
        edit = req.get_param_as_int("edit")
1491
        if edit is None:
1492
            offset = req.get_param_as_int("offset")
1493
            limit = req.get_param_as_int("limit")
17560 kshitij.so 1494
 
17567 kshitij.so 1495
            result = Mongo.getAllDealObjects(offset, limit)
1496
            resp.body = dumps(result)
1497
        else:
1498
            id = req.get_param_as_int("id")
1499
            result = Mongo.getDealObjectById(id)
1500
            resp.body = dumps(result)
17560 kshitij.so 1501
 
17563 kshitij.so 1502
class DeleteDealObject:
1503
    def on_get(self, req, resp, id):
1504
        result = Mongo.deleteDealObject(int(id))
1505
        resp.body = dumps(result)
1506
 
17611 kshitij.so 1507
class FeaturedDealObject:
1508
    def on_get(self, req, resp):
1509
 
1510
        offset = req.get_param_as_int("offset")
1511
        limit = req.get_param_as_int("limit")
1512
 
1513
        result = Mongo.getAllFeaturedDealsForDealObject(offset, limit)
1514
        resp.body = dumps(result)
1515
 
17556 kshitij.so 1516
 
17611 kshitij.so 1517
    def on_post(self, req, resp):
1518
 
1519
 
1520
        try:
1521
            result_json = json.loads(req.stream.read(), encoding='utf-8')
1522
        except ValueError:
1523
            raise falcon.HTTPError(falcon.HTTP_400,
1524
                'Malformed JSON',
1525
                'Could not decode the request body. The '
1526
                'JSON was incorrect.')
1527
 
17613 kshitij.so 1528
        result = Mongo.addFeaturedDealForDealObject(result_json)
17611 kshitij.so 1529
        resp.body = json.dumps(result, encoding='utf-8')
1530
 
17615 kshitij.so 1531
class DeleteFeaturedDealObject:
1532
    def on_get(self, req, resp, id):
1533
        result = Mongo.deleteFeaturedDealObject(int(id))
1534
        resp.body = dumps(result)
17611 kshitij.so 1535
 
17653 kshitij.so 1536
class SubCategoryFilter:
1537
    def on_get(self, req, resp):
1538
        category_id = req.get_param_as_int("category_id")
1539
        result = Mongo.getSubCategoryForFilter(category_id)
1540
        resp.body = dumps(result)
1541
 
17726 kshitij.so 1542
class DummyLogin:
1543
    def on_post(self,req,resp):
1544
        try:
1545
            result_json = json.loads(req.stream.read(), encoding='utf-8')
1546
        except ValueError:
1547
            raise falcon.HTTPError(falcon.HTTP_400,
1548
                'Malformed JSON',
1549
                'Could not decode the request body. The '
1550
                'JSON was incorrect.')
1551
 
1552
        result = Mongo.dummyLogin(result_json)
1553
        resp.body = json.dumps(result, encoding='utf-8')
17653 kshitij.so 1554
 
17726 kshitij.so 1555
class DummyRegister:
1556
    def on_post(self,req,resp):
1557
        try:
1558
            result_json = json.loads(req.stream.read(), encoding='utf-8')
1559
        except ValueError:
1560
            raise falcon.HTTPError(falcon.HTTP_400,
1561
                'Malformed JSON',
1562
                'Could not decode the request body. The '
1563
                'JSON was incorrect.')
1564
 
1565
        result = Mongo.dummyRegister(result_json)
1566
        resp.body = json.dumps(result, encoding='utf-8')
1567
 
17730 kshitij.so 1568
class UpdateUser:
1569
    def on_post(self,req,resp):
1570
        try:
1571
            result_json = json.loads(req.stream.read(), encoding='utf-8')
1572
        except ValueError:
1573
            raise falcon.HTTPError(falcon.HTTP_400,
1574
                'Malformed JSON',
1575
                'Could not decode the request body. The '
1576
                'JSON was incorrect.')
1577
 
1578
        result = Mongo.updateDummyUser(result_json)
1579
        resp.body = json.dumps(result, encoding='utf-8')
1580
 
1581
class FetchUser:
1582
    def on_get(self,req,resp):
1583
        user_id = req.get_param_as_int("user_id")
1584
        result = Mongo.getDummyUser(user_id)
1585
        resp.body = json.dumps(result, encoding='utf-8')
17928 kshitij.so 1586
 
1587
class SearchSubCategory:
1588
    def on_get(self,req, resp):
18088 kshitij.so 1589
        subCategoryIds = req.get_param("subCategoryId")
17928 kshitij.so 1590
        searchTerm = req.get_param("searchTerm")
1591
        offset = req.get_param_as_int("offset")
1592
        limit = req.get_param_as_int("limit")
17730 kshitij.so 1593
 
18088 kshitij.so 1594
        result = Mongo.getDealsForSearchText(subCategoryIds, searchTerm,offset, limit)
17928 kshitij.so 1595
        resp.body = json.dumps(result, encoding='utf-8')
1596
 
1597
class SearchSubCategoryCount:
1598
    def on_get(self,req, resp):
18088 kshitij.so 1599
        subCategoryIds = req.get_param("subCategoryId")
17928 kshitij.so 1600
        searchTerm = req.get_param("searchTerm")
18088 kshitij.so 1601
        result = Mongo.getCountForSearchText(subCategoryIds, searchTerm)
17928 kshitij.so 1602
        resp.body = json.dumps(result, encoding='utf-8')
18090 manas 1603
 
1604
class MessageEncryption:
1605
 
1606
    def on_get(self,req,resp):
1607
        message_type = req.get_param("type")
18096 manas 1608
        print 'type', message_type
18093 manas 1609
        if message_type == 'encrypt':
18090 manas 1610
            encryption_data = req.get_param("data")
18098 manas 1611
            print 'encryption data ', base64.decodestring(encryption_data)
1612
            encrypted_data = encryptMessage(base64.decodestring(encryption_data))
18096 manas 1613
            print 'encrypted data ', encrypted_data
18090 manas 1614
            resp.body =  json.dumps({"result":{"value":encrypted_data}}, encoding='utf-8')
1615
 
18093 manas 1616
        elif message_type == 'decrypt':
18090 manas 1617
            decryption_data = req.get_param("data")
1618
            decrypted_data = decryptMessage(decryption_data)
1619
            print 'In on get of message encryption decrypted', decrypted_data
1620
            resp.body =  json.dumps({"result":{"value":decrypted_data}}, encoding='utf-8')
1621
 
1622
        else:
1623
            resp.body = json.dumps({}, encoding='utf-8')
17556 kshitij.so 1624
 
15312 amit.gupta 1625
def main():
15662 amit.gupta 1626
    #tagActivatedReatilers()
1627
    a = RetailerDetail()
1628
    retailer = a.getNotActiveRetailer()
1629
    otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
1630
    print json.dumps(todict(getRetailerObj(retailer, otherContacts, 'fresh')), encoding='utf-8')
15465 amit.gupta 1631
    #print make_tiny("AA")
15195 manas 1632
 
15081 amit.gupta 1633
if __name__ == '__main__':
15207 amit.gupta 1634
    main()
15091 amit.gupta 1635