| 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,\
|
| 15710 |
amit.gupta |
11 |
RetailerAddresses, Pincodeavailability
|
| 15358 |
amit.gupta |
12 |
from dtr.storage.Mongo import get_mongo_connection
|
|
|
13 |
from dtr.storage.Mysql import fetchResult
|
| 15081 |
amit.gupta |
14 |
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
|
|
|
15 |
UserSpecificDeals
|
| 15168 |
amit.gupta |
16 |
from dtr.utils.utils import getLogger
|
| 15081 |
amit.gupta |
17 |
from elixir import *
|
| 15254 |
amit.gupta |
18 |
from operator import and_
|
| 15303 |
amit.gupta |
19 |
from sqlalchemy.sql.expression import func, func, or_
|
| 15132 |
amit.gupta |
20 |
from urllib import urlencode
|
|
|
21 |
import contextlib
|
| 13827 |
kshitij.so |
22 |
import falcon
|
| 15081 |
amit.gupta |
23 |
import json
|
| 15358 |
amit.gupta |
24 |
import re
|
| 15254 |
amit.gupta |
25 |
import string
|
| 15081 |
amit.gupta |
26 |
import traceback
|
| 15132 |
amit.gupta |
27 |
import urllib
|
|
|
28 |
import urllib2
|
|
|
29 |
import uuid
|
| 15465 |
amit.gupta |
30 |
import gdshortener
|
| 15207 |
amit.gupta |
31 |
alphalist = list(string.uppercase)
|
|
|
32 |
alphalist.remove('O')
|
|
|
33 |
numList = ['1','2','3','4','5','6','7','8','9']
|
|
|
34 |
codesys = [alphalist, alphalist, numList, numList, numList]
|
| 15312 |
amit.gupta |
35 |
CONTACT_PRIORITY = ['sms', 'called', 'ringing']
|
| 15368 |
amit.gupta |
36 |
RETRY_MAP = {'fresh':'retry', 'followup':'fretry', 'onboarding':'oretry'}
|
| 15358 |
amit.gupta |
37 |
ASSIGN_MAP = {'retry':'assigned', 'fretry':'fassigned', 'oretry':'oassigned'}
|
| 15207 |
amit.gupta |
38 |
|
|
|
39 |
def getNextCode(codesys, code=None):
|
|
|
40 |
if code is None:
|
|
|
41 |
code = []
|
|
|
42 |
for charcode in codesys:
|
|
|
43 |
code.append(charcode[0])
|
|
|
44 |
return string.join(code, '')
|
|
|
45 |
carry = True
|
|
|
46 |
code = list(code)
|
|
|
47 |
lastindex = len(codesys) - 1
|
|
|
48 |
while carry:
|
|
|
49 |
listChar = codesys[lastindex]
|
|
|
50 |
newIndex = (listChar.index(code[lastindex])+1)%len(listChar)
|
|
|
51 |
print newIndex
|
|
|
52 |
code[lastindex] = listChar[newIndex]
|
|
|
53 |
if newIndex != 0:
|
|
|
54 |
carry = False
|
|
|
55 |
lastindex -= 1
|
|
|
56 |
if lastindex ==-1:
|
|
|
57 |
raise BaseException("All codes are exhausted")
|
|
|
58 |
|
|
|
59 |
return string.join(code, '')
|
|
|
60 |
|
|
|
61 |
|
|
|
62 |
|
|
|
63 |
|
| 15081 |
amit.gupta |
64 |
global RETAILER_DETAIL_CALL_COUNTER
|
|
|
65 |
RETAILER_DETAIL_CALL_COUNTER = 0
|
| 13572 |
kshitij.so |
66 |
|
| 15168 |
amit.gupta |
67 |
lgr = getLogger('/var/log/retailer-acquisition-api.log')
|
| 15081 |
amit.gupta |
68 |
DEALER_RETRY_FACTOR = int(PythonPropertyReader.getConfig('DEALER_RETRY_FACTOR'))
|
| 13572 |
kshitij.so |
69 |
class CategoryDiscountInfo(object):
|
|
|
70 |
|
|
|
71 |
def on_get(self, req, resp):
|
|
|
72 |
|
| 13629 |
kshitij.so |
73 |
result = Mongo.getAllCategoryDiscount()
|
|
|
74 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
|
|
75 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13572 |
kshitij.so |
76 |
|
|
|
77 |
def on_post(self, req, resp):
|
|
|
78 |
try:
|
|
|
79 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
80 |
except ValueError:
|
|
|
81 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
82 |
'Malformed JSON',
|
|
|
83 |
'Could not decode the request body. The '
|
|
|
84 |
'JSON was incorrect.')
|
|
|
85 |
|
|
|
86 |
result = Mongo.addCategoryDiscount(result_json)
|
|
|
87 |
resp.body = json.dumps(result, encoding='utf-8')
|
| 13969 |
kshitij.so |
88 |
|
|
|
89 |
def on_put(self, req, resp, _id):
|
| 13970 |
kshitij.so |
90 |
try:
|
|
|
91 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
92 |
except ValueError:
|
|
|
93 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
94 |
'Malformed JSON',
|
|
|
95 |
'Could not decode the request body. The '
|
|
|
96 |
'JSON was incorrect.')
|
|
|
97 |
|
|
|
98 |
result = Mongo.updateCategoryDiscount(result_json, _id)
|
|
|
99 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
100 |
|
| 13966 |
kshitij.so |
101 |
|
| 13969 |
kshitij.so |
102 |
|
| 13572 |
kshitij.so |
103 |
class SkuSchemeDetails(object):
|
|
|
104 |
|
|
|
105 |
def on_get(self, req, resp):
|
| 13629 |
kshitij.so |
106 |
|
| 14070 |
kshitij.so |
107 |
offset = req.get_param_as_int("offset")
|
|
|
108 |
limit = req.get_param_as_int("limit")
|
|
|
109 |
|
|
|
110 |
result = Mongo.getAllSkuWiseSchemeDetails(offset, limit)
|
| 13629 |
kshitij.so |
111 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
|
|
112 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13572 |
kshitij.so |
113 |
|
|
|
114 |
|
|
|
115 |
def on_post(self, req, resp):
|
|
|
116 |
|
| 14552 |
kshitij.so |
117 |
multi = req.get_param_as_int("multi")
|
|
|
118 |
|
| 13572 |
kshitij.so |
119 |
try:
|
|
|
120 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
121 |
except ValueError:
|
|
|
122 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
123 |
'Malformed JSON',
|
|
|
124 |
'Could not decode the request body. The '
|
|
|
125 |
'JSON was incorrect.')
|
|
|
126 |
|
| 15852 |
kshitij.so |
127 |
result = Mongo.addSchemeDetailsForSku(result_json)
|
| 13572 |
kshitij.so |
128 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
129 |
|
|
|
130 |
class SkuDiscountInfo():
|
|
|
131 |
|
|
|
132 |
def on_get(self, req, resp):
|
| 13629 |
kshitij.so |
133 |
|
| 13970 |
kshitij.so |
134 |
offset = req.get_param_as_int("offset")
|
|
|
135 |
limit = req.get_param_as_int("limit")
|
|
|
136 |
result = Mongo.getallSkuDiscountInfo(offset,limit)
|
| 13629 |
kshitij.so |
137 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
|
|
138 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13572 |
kshitij.so |
139 |
|
|
|
140 |
|
|
|
141 |
def on_post(self, req, resp):
|
|
|
142 |
|
| 14552 |
kshitij.so |
143 |
multi = req.get_param_as_int("multi")
|
|
|
144 |
|
| 13572 |
kshitij.so |
145 |
try:
|
|
|
146 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
147 |
except ValueError:
|
|
|
148 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
149 |
'Malformed JSON',
|
|
|
150 |
'Could not decode the request body. The '
|
|
|
151 |
'JSON was incorrect.')
|
|
|
152 |
|
| 15852 |
kshitij.so |
153 |
result = Mongo.addSkuDiscountInfo(result_json)
|
| 13572 |
kshitij.so |
154 |
resp.body = json.dumps(result, encoding='utf-8')
|
| 13970 |
kshitij.so |
155 |
|
|
|
156 |
def on_put(self, req, resp, _id):
|
|
|
157 |
try:
|
|
|
158 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
159 |
except ValueError:
|
|
|
160 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
161 |
'Malformed JSON',
|
|
|
162 |
'Could not decode the request body. The '
|
|
|
163 |
'JSON was incorrect.')
|
|
|
164 |
|
|
|
165 |
result = Mongo.updateSkuDiscount(result_json, _id)
|
|
|
166 |
resp.body = json.dumps(result, encoding='utf-8')
|
| 13572 |
kshitij.so |
167 |
|
|
|
168 |
class ExceptionalNlc():
|
|
|
169 |
|
|
|
170 |
def on_get(self, req, resp):
|
| 13629 |
kshitij.so |
171 |
|
| 13970 |
kshitij.so |
172 |
offset = req.get_param_as_int("offset")
|
|
|
173 |
limit = req.get_param_as_int("limit")
|
|
|
174 |
|
|
|
175 |
result = Mongo.getAllExceptionlNlcItems(offset, limit)
|
| 13629 |
kshitij.so |
176 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
|
|
177 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13572 |
kshitij.so |
178 |
|
|
|
179 |
def on_post(self, req, resp):
|
|
|
180 |
|
| 14552 |
kshitij.so |
181 |
multi = req.get_param_as_int("multi")
|
|
|
182 |
|
| 13572 |
kshitij.so |
183 |
try:
|
|
|
184 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
185 |
except ValueError:
|
|
|
186 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
187 |
'Malformed JSON',
|
|
|
188 |
'Could not decode the request body. The '
|
|
|
189 |
'JSON was incorrect.')
|
|
|
190 |
|
| 15852 |
kshitij.so |
191 |
result = Mongo.addExceptionalNlc(result_json)
|
| 13572 |
kshitij.so |
192 |
resp.body = json.dumps(result, encoding='utf-8')
|
| 13970 |
kshitij.so |
193 |
|
|
|
194 |
def on_put(self, req, resp, _id):
|
|
|
195 |
try:
|
|
|
196 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
197 |
except ValueError:
|
|
|
198 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
199 |
'Malformed JSON',
|
|
|
200 |
'Could not decode the request body. The '
|
|
|
201 |
'JSON was incorrect.')
|
|
|
202 |
|
|
|
203 |
result = Mongo.updateExceptionalNlc(result_json, _id)
|
|
|
204 |
resp.body = json.dumps(result, encoding='utf-8')
|
| 13572 |
kshitij.so |
205 |
|
| 13772 |
kshitij.so |
206 |
class Deals():
|
| 13779 |
kshitij.so |
207 |
def on_get(self,req, resp, userId):
|
|
|
208 |
categoryId = req.get_param_as_int("categoryId")
|
|
|
209 |
offset = req.get_param_as_int("offset")
|
|
|
210 |
limit = req.get_param_as_int("limit")
|
| 13798 |
kshitij.so |
211 |
sort = req.get_param("sort")
|
| 13802 |
kshitij.so |
212 |
direction = req.get_param_as_int("direction")
|
| 14853 |
kshitij.so |
213 |
filterData = req.get_param('filterData')
|
|
|
214 |
result = Mongo.getNewDeals(int(userId), categoryId, offset, limit, sort, direction, filterData)
|
| 16078 |
kshitij.so |
215 |
resp.body = dumps(result)
|
| 13790 |
kshitij.so |
216 |
|
|
|
217 |
class MasterData():
|
|
|
218 |
def on_get(self,req, resp, skuId):
|
| 16223 |
kshitij.so |
219 |
showDp = req.get_param_as_int("showDp")
|
| 16221 |
kshitij.so |
220 |
result = Mongo.getItem(skuId, showDp)
|
| 13798 |
kshitij.so |
221 |
try:
|
|
|
222 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
| 13966 |
kshitij.so |
223 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13798 |
kshitij.so |
224 |
except:
|
|
|
225 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
| 13966 |
kshitij.so |
226 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13790 |
kshitij.so |
227 |
|
| 14586 |
kshitij.so |
228 |
def on_post(self,req, resp):
|
|
|
229 |
|
|
|
230 |
addNew = req.get_param_as_int("addNew")
|
|
|
231 |
update = req.get_param_as_int("update")
|
|
|
232 |
addToExisting = req.get_param_as_int("addToExisting")
|
|
|
233 |
multi = req.get_param_as_int("multi")
|
|
|
234 |
|
| 14589 |
kshitij.so |
235 |
try:
|
| 14592 |
kshitij.so |
236 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
237 |
except ValueError:
|
|
|
238 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
239 |
'Malformed JSON',
|
|
|
240 |
'Could not decode the request body. The '
|
|
|
241 |
'JSON was incorrect.')
|
|
|
242 |
|
|
|
243 |
if addNew == 1:
|
|
|
244 |
result = Mongo.addNewItem(result_json)
|
|
|
245 |
elif update == 1:
|
|
|
246 |
result = Mongo.updateMaster(result_json, multi)
|
|
|
247 |
elif addToExisting == 1:
|
|
|
248 |
result = Mongo.addItemToExistingBundle(result_json)
|
|
|
249 |
else:
|
|
|
250 |
raise
|
|
|
251 |
resp.body = dumps(result)
|
| 14586 |
kshitij.so |
252 |
|
| 13827 |
kshitij.so |
253 |
class LiveData():
|
|
|
254 |
def on_get(self,req, resp):
|
| 13865 |
kshitij.so |
255 |
if req.get_param_as_int("id") is not None:
|
|
|
256 |
print "****getting only for id"
|
|
|
257 |
id = req.get_param_as_int("id")
|
|
|
258 |
try:
|
|
|
259 |
result = FetchLivePrices.getLatestPriceById(id)
|
| 13867 |
kshitij.so |
260 |
json_docs = json.dumps(result, default=json_util.default)
|
| 13966 |
kshitij.so |
261 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13865 |
kshitij.so |
262 |
except:
|
|
|
263 |
json_docs = json.dumps({}, default=json_util.default)
|
| 13966 |
kshitij.so |
264 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13834 |
kshitij.so |
265 |
|
| 13865 |
kshitij.so |
266 |
else:
|
|
|
267 |
print "****getting only for skuId"
|
|
|
268 |
skuBundleId = req.get_param_as_int("skuBundleId")
|
|
|
269 |
source_id = req.get_param_as_int("source_id")
|
|
|
270 |
try:
|
|
|
271 |
result = FetchLivePrices.getLatestPrice(skuBundleId, source_id)
|
|
|
272 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
| 13966 |
kshitij.so |
273 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13865 |
kshitij.so |
274 |
except:
|
|
|
275 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in [{}]]
|
| 13966 |
kshitij.so |
276 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13865 |
kshitij.so |
277 |
|
| 13834 |
kshitij.so |
278 |
class CashBack():
|
|
|
279 |
def on_get(self,req, resp):
|
|
|
280 |
identifier = req.get_param("identifier")
|
|
|
281 |
source_id = req.get_param_as_int("source_id")
|
|
|
282 |
try:
|
| 13838 |
kshitij.so |
283 |
result = Mongo.getCashBackDetails(identifier, source_id)
|
| 13837 |
kshitij.so |
284 |
json_docs = json.dumps(result, default=json_util.default)
|
| 13964 |
kshitij.so |
285 |
resp.body = json_docs
|
| 13834 |
kshitij.so |
286 |
except:
|
| 13837 |
kshitij.so |
287 |
json_docs = json.dumps({}, default=json_util.default)
|
| 13963 |
kshitij.so |
288 |
resp.body = json_docs
|
| 13892 |
kshitij.so |
289 |
|
| 14398 |
amit.gupta |
290 |
class ImgSrc():
|
|
|
291 |
def on_get(self,req, resp):
|
|
|
292 |
identifier = req.get_param("identifier")
|
|
|
293 |
source_id = req.get_param_as_int("source_id")
|
|
|
294 |
try:
|
|
|
295 |
result = Mongo.getImgSrc(identifier, source_id)
|
|
|
296 |
json_docs = json.dumps(result, default=json_util.default)
|
|
|
297 |
resp.body = json_docs
|
|
|
298 |
except:
|
|
|
299 |
json_docs = json.dumps({}, default=json_util.default)
|
|
|
300 |
resp.body = json_docs
|
|
|
301 |
|
| 13892 |
kshitij.so |
302 |
class DealSheet():
|
|
|
303 |
def on_get(self,req, resp):
|
| 13895 |
kshitij.so |
304 |
X_DealSheet.sendMail()
|
| 13897 |
kshitij.so |
305 |
json_docs = json.dumps({'True':'Sheet generated, mail sent.'}, default=json_util.default)
|
| 13966 |
kshitij.so |
306 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 13892 |
kshitij.so |
307 |
|
| 13970 |
kshitij.so |
308 |
class DealerPrice():
|
|
|
309 |
|
|
|
310 |
def on_get(self, req, resp):
|
|
|
311 |
|
|
|
312 |
offset = req.get_param_as_int("offset")
|
|
|
313 |
limit = req.get_param_as_int("limit")
|
|
|
314 |
result = Mongo.getAllDealerPrices(offset,limit)
|
|
|
315 |
json_docs = [json.dumps(doc, default=json_util.default) for doc in result]
|
|
|
316 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
|
|
317 |
|
|
|
318 |
def on_post(self, req, resp):
|
|
|
319 |
|
| 14552 |
kshitij.so |
320 |
multi = req.get_param_as_int("multi")
|
|
|
321 |
|
| 13970 |
kshitij.so |
322 |
try:
|
|
|
323 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
324 |
except ValueError:
|
|
|
325 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
326 |
'Malformed JSON',
|
|
|
327 |
'Could not decode the request body. The '
|
|
|
328 |
'JSON was incorrect.')
|
|
|
329 |
|
| 15852 |
kshitij.so |
330 |
result = Mongo.addSkuDealerPrice(result_json)
|
| 13970 |
kshitij.so |
331 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
332 |
|
|
|
333 |
def on_put(self, req, resp, _id):
|
|
|
334 |
try:
|
|
|
335 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
336 |
except ValueError:
|
|
|
337 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
338 |
'Malformed JSON',
|
|
|
339 |
'Could not decode the request body. The '
|
|
|
340 |
'JSON was incorrect.')
|
|
|
341 |
|
|
|
342 |
result = Mongo.updateSkuDealerPrice(result_json, _id)
|
|
|
343 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
344 |
|
|
|
345 |
|
| 14041 |
kshitij.so |
346 |
class ResetCache():
|
|
|
347 |
|
|
|
348 |
def on_get(self,req, resp, userId):
|
| 14044 |
kshitij.so |
349 |
result = Mongo.resetCache(userId)
|
| 14046 |
kshitij.so |
350 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
351 |
|
|
|
352 |
class UserDeals():
|
|
|
353 |
def on_get(self,req,resp,userId):
|
|
|
354 |
UserSpecificDeals.generateSheet(userId)
|
|
|
355 |
json_docs = json.dumps({'True':'Sheet generated, mail sent.'}, default=json_util.default)
|
|
|
356 |
resp.body = json.dumps(json_docs, encoding='utf-8')
|
| 14075 |
kshitij.so |
357 |
|
|
|
358 |
class CommonUpdate():
|
|
|
359 |
|
|
|
360 |
def on_post(self,req,resp):
|
| 14575 |
kshitij.so |
361 |
|
|
|
362 |
multi = req.get_param_as_int("multi")
|
|
|
363 |
|
| 14075 |
kshitij.so |
364 |
try:
|
|
|
365 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
366 |
except ValueError:
|
|
|
367 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
368 |
'Malformed JSON',
|
|
|
369 |
'Could not decode the request body. The '
|
|
|
370 |
'JSON was incorrect.')
|
|
|
371 |
|
| 15852 |
kshitij.so |
372 |
result = Mongo.updateCollection(result_json)
|
| 14075 |
kshitij.so |
373 |
resp.body = json.dumps(result, encoding='utf-8')
|
| 14106 |
kshitij.so |
374 |
resp.content_type = "application/json; charset=utf-8"
|
| 14481 |
kshitij.so |
375 |
|
|
|
376 |
class NegativeDeals():
|
|
|
377 |
|
|
|
378 |
def on_get(self, req, resp):
|
|
|
379 |
|
|
|
380 |
offset = req.get_param_as_int("offset")
|
|
|
381 |
limit = req.get_param_as_int("limit")
|
|
|
382 |
|
|
|
383 |
result = Mongo.getAllNegativeDeals(offset, limit)
|
| 14483 |
kshitij.so |
384 |
resp.body = dumps(result)
|
| 14481 |
kshitij.so |
385 |
|
|
|
386 |
|
|
|
387 |
def on_post(self, req, resp):
|
|
|
388 |
|
| 14552 |
kshitij.so |
389 |
multi = req.get_param_as_int("multi")
|
|
|
390 |
|
| 14481 |
kshitij.so |
391 |
try:
|
|
|
392 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
393 |
except ValueError:
|
|
|
394 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
395 |
'Malformed JSON',
|
|
|
396 |
'Could not decode the request body. The '
|
|
|
397 |
'JSON was incorrect.')
|
|
|
398 |
|
| 14552 |
kshitij.so |
399 |
result = Mongo.addNegativeDeals(result_json, multi)
|
| 14481 |
kshitij.so |
400 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
401 |
|
|
|
402 |
class ManualDeals():
|
|
|
403 |
|
|
|
404 |
def on_get(self, req, resp):
|
|
|
405 |
|
|
|
406 |
offset = req.get_param_as_int("offset")
|
|
|
407 |
limit = req.get_param_as_int("limit")
|
|
|
408 |
|
|
|
409 |
result = Mongo.getAllManualDeals(offset, limit)
|
| 14483 |
kshitij.so |
410 |
resp.body = dumps(result)
|
| 14481 |
kshitij.so |
411 |
|
|
|
412 |
|
|
|
413 |
def on_post(self, req, resp):
|
|
|
414 |
|
| 14552 |
kshitij.so |
415 |
multi = req.get_param_as_int("multi")
|
|
|
416 |
|
| 14481 |
kshitij.so |
417 |
try:
|
|
|
418 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
419 |
except ValueError:
|
|
|
420 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
421 |
'Malformed JSON',
|
|
|
422 |
'Could not decode the request body. The '
|
|
|
423 |
'JSON was incorrect.')
|
|
|
424 |
|
| 14552 |
kshitij.so |
425 |
result = Mongo.addManualDeal(result_json, multi)
|
| 14481 |
kshitij.so |
426 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
427 |
|
|
|
428 |
class CommonDelete():
|
| 14482 |
kshitij.so |
429 |
|
| 14481 |
kshitij.so |
430 |
def on_post(self,req,resp):
|
|
|
431 |
try:
|
|
|
432 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
433 |
except ValueError:
|
|
|
434 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
435 |
'Malformed JSON',
|
|
|
436 |
'Could not decode the request body. The '
|
|
|
437 |
'JSON was incorrect.')
|
|
|
438 |
|
|
|
439 |
result = Mongo.deleteDocument(result_json)
|
|
|
440 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
441 |
resp.content_type = "application/json; charset=utf-8"
|
| 14482 |
kshitij.so |
442 |
|
|
|
443 |
class SearchProduct():
|
|
|
444 |
|
|
|
445 |
def on_get(self,req,resp):
|
|
|
446 |
offset = req.get_param_as_int("offset")
|
|
|
447 |
limit = req.get_param_as_int("limit")
|
|
|
448 |
search_term = req.get_param("search")
|
|
|
449 |
|
|
|
450 |
result = Mongo.searchMaster(offset, limit, search_term)
|
| 14483 |
kshitij.so |
451 |
resp.body = dumps(result)
|
| 14482 |
kshitij.so |
452 |
|
|
|
453 |
|
| 14495 |
kshitij.so |
454 |
class FeaturedDeals():
|
| 14482 |
kshitij.so |
455 |
|
| 14495 |
kshitij.so |
456 |
def on_get(self, req, resp):
|
|
|
457 |
|
|
|
458 |
offset = req.get_param_as_int("offset")
|
|
|
459 |
limit = req.get_param_as_int("limit")
|
|
|
460 |
|
|
|
461 |
result = Mongo.getAllFeaturedDeals(offset, limit)
|
|
|
462 |
resp.body = dumps(result)
|
|
|
463 |
|
|
|
464 |
|
|
|
465 |
def on_post(self, req, resp):
|
|
|
466 |
|
| 14552 |
kshitij.so |
467 |
multi = req.get_param_as_int("multi")
|
|
|
468 |
|
| 14495 |
kshitij.so |
469 |
try:
|
|
|
470 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
471 |
except ValueError:
|
|
|
472 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
473 |
'Malformed JSON',
|
|
|
474 |
'Could not decode the request body. The '
|
|
|
475 |
'JSON was incorrect.')
|
|
|
476 |
|
| 14552 |
kshitij.so |
477 |
result = Mongo.addFeaturedDeal(result_json, multi)
|
| 14495 |
kshitij.so |
478 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
479 |
|
| 14497 |
kshitij.so |
480 |
|
|
|
481 |
class CommonSearch():
|
| 14495 |
kshitij.so |
482 |
|
| 14497 |
kshitij.so |
483 |
def on_get(self,req,resp):
|
|
|
484 |
class_name = req.get_param("class")
|
|
|
485 |
sku = req.get_param_as_int("sku")
|
|
|
486 |
skuBundleId = req.get_param_as_int("skuBundleId")
|
| 14499 |
kshitij.so |
487 |
|
|
|
488 |
result = Mongo.searchCollection(class_name, sku, skuBundleId)
|
| 14497 |
kshitij.so |
489 |
resp.body = dumps(result)
|
| 14619 |
kshitij.so |
490 |
|
|
|
491 |
class CricScore():
|
|
|
492 |
|
|
|
493 |
def on_get(self,req,resp):
|
|
|
494 |
|
|
|
495 |
result = Mongo.getLiveCricScore()
|
| 14853 |
kshitij.so |
496 |
resp.body = dumps(result)
|
|
|
497 |
|
|
|
498 |
class Notification():
|
|
|
499 |
|
|
|
500 |
def on_post(self, req, resp):
|
|
|
501 |
|
|
|
502 |
try:
|
|
|
503 |
result_json = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
504 |
except ValueError:
|
|
|
505 |
raise falcon.HTTPError(falcon.HTTP_400,
|
|
|
506 |
'Malformed JSON',
|
|
|
507 |
'Could not decode the request body. The '
|
|
|
508 |
'JSON was incorrect.')
|
|
|
509 |
|
|
|
510 |
result = Mongo.addBundleToNotification(result_json)
|
|
|
511 |
resp.body = json.dumps(result, encoding='utf-8')
|
|
|
512 |
|
|
|
513 |
def on_get(self, req, resp):
|
|
|
514 |
|
|
|
515 |
offset = req.get_param_as_int("offset")
|
|
|
516 |
limit = req.get_param_as_int("limit")
|
|
|
517 |
|
|
|
518 |
result = Mongo.getAllNotifications(offset, limit)
|
|
|
519 |
resp.body = dumps(result)
|
|
|
520 |
|
| 14998 |
kshitij.so |
521 |
class DealBrands():
|
| 14853 |
kshitij.so |
522 |
|
| 14998 |
kshitij.so |
523 |
def on_get(self, req, resp):
|
|
|
524 |
|
|
|
525 |
category_id = req.get_param_as_int("category_id")
|
|
|
526 |
result = Mongo.getBrandsForFilter(category_id)
|
| 14999 |
kshitij.so |
527 |
resp.body = dumps(result)
|
| 15161 |
kshitij.so |
528 |
|
|
|
529 |
class DealRank():
|
| 14998 |
kshitij.so |
530 |
|
| 15161 |
kshitij.so |
531 |
def on_get(self, req, resp):
|
|
|
532 |
identifier = req.get_param("identifier")
|
|
|
533 |
source_id = req.get_param_as_int("source_id")
|
|
|
534 |
user_id = req.get_param_as_int("user_id")
|
|
|
535 |
result = Mongo.getDealRank(identifier, source_id, user_id)
|
|
|
536 |
json_docs = json.dumps(result, default=json_util.default)
|
|
|
537 |
resp.body = json_docs
|
|
|
538 |
|
|
|
539 |
|
| 15081 |
amit.gupta |
540 |
|
|
|
541 |
class RetailerDetail():
|
|
|
542 |
global RETAILER_DETAIL_CALL_COUNTER
|
| 15105 |
amit.gupta |
543 |
def getRetryRetailer(self,failback=True):
|
| 15358 |
amit.gupta |
544 |
status = RETRY_MAP.get(self.callType)
|
| 15239 |
amit.gupta |
545 |
retailer = session.query(Retailers).filter_by(status=status).filter(Retailers.next_call_time<=datetime.now()).order_by(Retailers.call_priority).order_by(Retailers.next_call_time).with_lockmode("update").first()
|
|
|
546 |
if retailer is not None:
|
|
|
547 |
lgr.info( "getRetryRetailer " + str(retailer.id))
|
|
|
548 |
else:
|
|
|
549 |
if failback:
|
|
|
550 |
retailer = self.getNewRetailer(False)
|
|
|
551 |
return retailer
|
| 15358 |
amit.gupta |
552 |
retailer.status = ASSIGN_MAP.get(status)
|
| 15239 |
amit.gupta |
553 |
lgr.info( "getRetryRetailer " + str(retailer.id))
|
| 15081 |
amit.gupta |
554 |
return retailer
|
|
|
555 |
|
| 15662 |
amit.gupta |
556 |
def getNotActiveRetailer(self):
|
|
|
557 |
try:
|
| 15716 |
amit.gupta |
558 |
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 |
559 |
if user is None:
|
|
|
560 |
return None
|
|
|
561 |
else:
|
|
|
562 |
retailerContact = session.query(RetailerContacts).filter_by(mobile_number=user.mobile_number).first()
|
|
|
563 |
if retailerContact is not None:
|
|
|
564 |
retailer = session.query(Retailers).filter_by(id=retailerContact.retailer_id).first()
|
|
|
565 |
else:
|
|
|
566 |
retailer = session.query(Retailers).filter_by(contact1=user.mobile_number).first()
|
|
|
567 |
if retailer is None:
|
|
|
568 |
retailer = session.query(Retailers).filter_by(contact2=user.mobile_number).first()
|
|
|
569 |
if retailer is None:
|
|
|
570 |
retailer = Retailers()
|
|
|
571 |
retailer.contact1 = user.mobile_number
|
|
|
572 |
retailer.status = 'assigned'
|
| 15672 |
amit.gupta |
573 |
retailer.retry_count = 0
|
| 15673 |
amit.gupta |
574 |
retailer.invalid_retry_count = 0
|
| 15699 |
amit.gupta |
575 |
retailer.is_elavated=1
|
| 15662 |
amit.gupta |
576 |
user.status = 2
|
|
|
577 |
session.commit()
|
|
|
578 |
print "retailer id", retailer.id
|
|
|
579 |
retailer.contact = user.mobile_number
|
|
|
580 |
return retailer
|
|
|
581 |
finally:
|
|
|
582 |
session.close()
|
|
|
583 |
|
| 15081 |
amit.gupta |
584 |
def getNewRetailer(self,failback=True):
|
| 15663 |
amit.gupta |
585 |
if self.callType == 'fresh':
|
|
|
586 |
retailer = self.getNotActiveRetailer()
|
|
|
587 |
if retailer is not None:
|
|
|
588 |
return retailer
|
| 15081 |
amit.gupta |
589 |
retry = True
|
|
|
590 |
retailer = None
|
|
|
591 |
try:
|
|
|
592 |
while(retry):
|
| 15168 |
amit.gupta |
593 |
lgr.info( "Calltype " + self.callType)
|
| 15081 |
amit.gupta |
594 |
status=self.callType
|
| 15545 |
amit.gupta |
595 |
query = session.query(Retailers).filter(Retailers.status==status).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None))
|
| 15081 |
amit.gupta |
596 |
if status=='fresh':
|
| 15710 |
amit.gupta |
597 |
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 |
598 |
elif status=='followup':
|
| 15546 |
amit.gupta |
599 |
query = query.filter(Retailers.next_call_time<=datetime.now()).order_by(Retailers.agent_id.desc(),Retailers.next_call_time)
|
| 15162 |
amit.gupta |
600 |
else:
|
| 15546 |
amit.gupta |
601 |
query = query.filter(Retailers.modified<=datetime.now()).order_by(Retailers.agent_id.desc(), Retailers.modified)
|
| 15358 |
amit.gupta |
602 |
|
| 15081 |
amit.gupta |
603 |
retailer = query.with_lockmode("update").first()
|
|
|
604 |
if retailer is not None:
|
| 15168 |
amit.gupta |
605 |
lgr.info( "retailer " +str(retailer.id))
|
| 15081 |
amit.gupta |
606 |
if status=="fresh":
|
|
|
607 |
userquery = session.query(Users)
|
|
|
608 |
if retailer.contact2 is not None:
|
|
|
609 |
userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
|
|
|
610 |
else:
|
|
|
611 |
userquery = userquery.filter_by(mobile_number=retailer.contact1)
|
|
|
612 |
user = userquery.first()
|
|
|
613 |
if user is not None:
|
|
|
614 |
retailer.status = 'alreadyuser'
|
| 15168 |
amit.gupta |
615 |
lgr.info( "retailer.status " + retailer.status)
|
| 15081 |
amit.gupta |
616 |
session.commit()
|
|
|
617 |
continue
|
|
|
618 |
retailer.status = 'assigned'
|
| 15358 |
amit.gupta |
619 |
elif status=='followup':
|
| 15276 |
amit.gupta |
620 |
if isActivated(retailer.id):
|
|
|
621 |
print "Retailer Already %d activated and marked onboarded"%(retailer.id)
|
|
|
622 |
continue
|
| 15081 |
amit.gupta |
623 |
retailer.status = 'fassigned'
|
| 15358 |
amit.gupta |
624 |
else:
|
|
|
625 |
retailer.status = 'oassigned'
|
| 15081 |
amit.gupta |
626 |
retailer.retry_count = 0
|
| 15123 |
amit.gupta |
627 |
retailer.invalid_retry_count = 0
|
| 15168 |
amit.gupta |
628 |
lgr.info( "Found Retailer " + str(retailer.id) + " with status " + status + " assigned to " + str(self.agentId))
|
| 15081 |
amit.gupta |
629 |
|
|
|
630 |
else:
|
| 15168 |
amit.gupta |
631 |
lgr.info( "No fresh/followup retailers found")
|
| 15081 |
amit.gupta |
632 |
if failback:
|
|
|
633 |
retailer = self.getRetryRetailer(False)
|
| 15104 |
amit.gupta |
634 |
return retailer
|
| 15148 |
amit.gupta |
635 |
retry=False
|
| 15081 |
amit.gupta |
636 |
except:
|
|
|
637 |
print traceback.print_exc()
|
|
|
638 |
return retailer
|
|
|
639 |
|
| 15132 |
amit.gupta |
640 |
def on_get(self, req, resp, agentId, callType=None, retailerId=None):
|
| 15081 |
amit.gupta |
641 |
global RETAILER_DETAIL_CALL_COUNTER
|
|
|
642 |
RETAILER_DETAIL_CALL_COUNTER += 1
|
| 15168 |
amit.gupta |
643 |
lgr.info( "RETAILER_DETAIL_CALL_COUNTER " + str(RETAILER_DETAIL_CALL_COUNTER))
|
| 15081 |
amit.gupta |
644 |
self.agentId = int(agentId)
|
|
|
645 |
self.callType = callType
|
| 15139 |
amit.gupta |
646 |
if retailerId is not None:
|
|
|
647 |
self.retailerId = int(retailerId)
|
| 15208 |
amit.gupta |
648 |
retailerLink = session.query(RetailerLinks).filter_by(retailer_id=self.retailerId).first()
|
| 15132 |
amit.gupta |
649 |
if retailerLink is not None:
|
|
|
650 |
code = retailerLink.code
|
|
|
651 |
else:
|
|
|
652 |
code = self.getCode()
|
|
|
653 |
retailerLink = RetailerLinks()
|
|
|
654 |
retailerLink.code = code
|
| 15139 |
amit.gupta |
655 |
retailerLink.agent_id = self.agentId
|
|
|
656 |
retailerLink.retailer_id = self.retailerId
|
| 15135 |
amit.gupta |
657 |
|
|
|
658 |
activationCode=Activation_Codes()
|
|
|
659 |
activationCode.code = code
|
| 15132 |
amit.gupta |
660 |
session.commit()
|
|
|
661 |
session.close()
|
| 15142 |
amit.gupta |
662 |
resp.body = json.dumps({"result":{"code":code,"link":make_tiny(code)}}, encoding='utf-8')
|
| 15132 |
amit.gupta |
663 |
return
|
| 15081 |
amit.gupta |
664 |
retryFlag = False
|
|
|
665 |
if RETAILER_DETAIL_CALL_COUNTER % DEALER_RETRY_FACTOR ==0:
|
|
|
666 |
retryFlag=True
|
| 15239 |
amit.gupta |
667 |
try:
|
|
|
668 |
if retryFlag:
|
|
|
669 |
retailer = self.getRetryRetailer()
|
|
|
670 |
else:
|
|
|
671 |
retailer = self.getNewRetailer()
|
| 15343 |
amit.gupta |
672 |
if retailer is None:
|
|
|
673 |
resp.body = "{}"
|
|
|
674 |
return
|
| 15239 |
amit.gupta |
675 |
fetchInfo = FetchDataHistory()
|
|
|
676 |
fetchInfo.agent_id = self.agentId
|
|
|
677 |
fetchInfo.call_type = self.callType
|
| 15240 |
amit.gupta |
678 |
agent = session.query(Agents).filter_by(id=self.agentId).first()
|
| 15239 |
amit.gupta |
679 |
last_disposition = session.query(CallHistory).filter_by(agent_id=self.agentId).order_by(CallHistory.id.desc()).first()
|
|
|
680 |
if last_disposition is None or last_disposition.created < agent.last_login:
|
|
|
681 |
fetchInfo.last_action = 'login'
|
|
|
682 |
fetchInfo.last_action_time = agent.last_login
|
|
|
683 |
else:
|
|
|
684 |
fetchInfo.last_action = 'disposition'
|
|
|
685 |
fetchInfo.last_action_time = last_disposition.created
|
|
|
686 |
fetchInfo.retailer_id = retailer.id
|
|
|
687 |
session.commit()
|
| 15241 |
amit.gupta |
688 |
|
| 15358 |
amit.gupta |
689 |
otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
|
|
|
690 |
resp.body = json.dumps(todict(getRetailerObj(retailer, otherContacts, self.callType)), encoding='utf-8')
|
| 15241 |
amit.gupta |
691 |
|
|
|
692 |
return
|
|
|
693 |
|
| 15239 |
amit.gupta |
694 |
finally:
|
|
|
695 |
session.close()
|
| 15241 |
amit.gupta |
696 |
|
| 15081 |
amit.gupta |
697 |
if retailer is None:
|
| 15157 |
amit.gupta |
698 |
resp.body = "{}"
|
| 15081 |
amit.gupta |
699 |
else:
|
| 15358 |
amit.gupta |
700 |
print "It should never come here"
|
| 15081 |
amit.gupta |
701 |
resp.body = json.dumps(todict(getRetailerObj(retailer)), encoding='utf-8')
|
|
|
702 |
|
| 15241 |
amit.gupta |
703 |
|
| 15081 |
amit.gupta |
704 |
def on_post(self, req, resp, agentId, callType):
|
| 15112 |
amit.gupta |
705 |
returned = False
|
| 15081 |
amit.gupta |
706 |
self.agentId = int(agentId)
|
|
|
707 |
self.callType = callType
|
|
|
708 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
| 15169 |
amit.gupta |
709 |
lgr.info( "Request ----\n" + str(jsonReq))
|
| 15091 |
amit.gupta |
710 |
self.jsonReq = jsonReq
|
|
|
711 |
invalidNumber = self.invalidNumber
|
|
|
712 |
callLater = self.callLater
|
| 15096 |
amit.gupta |
713 |
alreadyUser = self.alReadyUser
|
| 15091 |
amit.gupta |
714 |
verifiedLinkSent = self.verifiedLinkSent
|
| 15368 |
amit.gupta |
715 |
onboarded = self.onboarded
|
| 15278 |
amit.gupta |
716 |
self.address = jsonReq.get('address')
|
| 15096 |
amit.gupta |
717 |
self.retailerId = int(jsonReq.get('retailerid'))
|
| 15671 |
amit.gupta |
718 |
self.smsNumber = jsonReq.get('smsnumber')
|
|
|
719 |
if self.smsNumber is not None:
|
|
|
720 |
self.smsNumber = self.smsNumber.strip().lstrip("0")
|
| 15112 |
amit.gupta |
721 |
try:
|
|
|
722 |
self.retailer = session.query(Retailers).filter_by(id=self.retailerId).first()
|
| 15281 |
amit.gupta |
723 |
if self.address:
|
| 15278 |
amit.gupta |
724 |
self.retailer.address_new = self.address
|
| 15112 |
amit.gupta |
725 |
self.callDisposition = jsonReq.get('calldispositiontype')
|
|
|
726 |
self.callHistory = CallHistory()
|
|
|
727 |
self.callHistory.agent_id=self.agentId
|
|
|
728 |
self.callHistory.call_disposition = self.callDisposition
|
|
|
729 |
self.callHistory.retailer_id=self.retailerId
|
| 15115 |
amit.gupta |
730 |
self.callHistory.call_type=self.callType
|
| 15112 |
amit.gupta |
731 |
self.callHistory.duration_sec = int(jsonReq.get("callduration"))
|
|
|
732 |
self.callHistory.disposition_description = jsonReq.get('calldispositiondescritption')
|
| 15200 |
manas |
733 |
self.callHistory.disposition_comments = jsonReq.get('calldispositioncomments')
|
|
|
734 |
lgr.info(self.callHistory.disposition_comments)
|
| 15112 |
amit.gupta |
735 |
self.callHistory.call_time = datetime.strptime(jsonReq.get("calltime"), '%d/%m/%Y %H:%M:%S')
|
|
|
736 |
self.callHistory.mobile_number = jsonReq.get('number')
|
| 15145 |
amit.gupta |
737 |
self.callHistory.sms_verified = int(jsonReq.get("verified"))
|
| 15234 |
amit.gupta |
738 |
lastFetchData = session.query(FetchDataHistory).filter_by(agent_id=self.agentId).order_by(FetchDataHistory.id.desc()).first()
|
| 15368 |
amit.gupta |
739 |
if self.callDisposition == 'onboarded':
|
|
|
740 |
self.checkList = jsonReq.get('checklist')
|
|
|
741 |
|
| 15234 |
amit.gupta |
742 |
if lastFetchData is None:
|
|
|
743 |
raise
|
|
|
744 |
self.callHistory.last_fetch_time= lastFetchData.created
|
| 15112 |
amit.gupta |
745 |
|
|
|
746 |
dispositionMap = { 'call_later':callLater,
|
|
|
747 |
'ringing_no_answer':callLater,
|
|
|
748 |
'not_reachable':callLater,
|
|
|
749 |
'switch_off':callLater,
|
| 15202 |
manas |
750 |
'not_retailer':invalidNumber,
|
| 15112 |
amit.gupta |
751 |
'invalid_no':invalidNumber,
|
|
|
752 |
'wrong_no':invalidNumber,
|
|
|
753 |
'hang_up':invalidNumber,
|
|
|
754 |
'retailer_not_interested':invalidNumber,
|
| 15200 |
manas |
755 |
'recharge_retailer':invalidNumber,
|
|
|
756 |
'accessory_retailer':invalidNumber,
|
|
|
757 |
'service_center_retailer':invalidNumber,
|
| 15112 |
amit.gupta |
758 |
'alreadyuser':alreadyUser,
|
| 15368 |
amit.gupta |
759 |
'verified_link_sent':verifiedLinkSent,
|
|
|
760 |
'onboarded':onboarded
|
| 15112 |
amit.gupta |
761 |
}
|
|
|
762 |
returned = dispositionMap[jsonReq.get('calldispositiontype')]()
|
|
|
763 |
finally:
|
|
|
764 |
session.close()
|
| 15096 |
amit.gupta |
765 |
|
| 15112 |
amit.gupta |
766 |
if returned:
|
|
|
767 |
resp.body = "{\"result\":\"success\"}"
|
|
|
768 |
else:
|
|
|
769 |
resp.body = "{\"result\":\"failed\"}"
|
| 15081 |
amit.gupta |
770 |
|
| 15091 |
amit.gupta |
771 |
def invalidNumber(self,):
|
| 15108 |
manas |
772 |
#self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
|
|
|
773 |
if self.callDisposition == 'invalid_no':
|
|
|
774 |
self.retailer.status='failed'
|
|
|
775 |
self.callHistory.disposition_description = 'Invalid Number'
|
|
|
776 |
elif self.callDisposition == 'wrong_no':
|
| 15111 |
manas |
777 |
self.retailer.status='failed'
|
|
|
778 |
self.callHistory.disposition_description = 'Wrong Number'
|
|
|
779 |
elif self.callDisposition == 'hang_up':
|
|
|
780 |
self.retailer.status='failed'
|
|
|
781 |
self.callHistory.disposition_description = 'Hang Up'
|
|
|
782 |
elif self.callDisposition == 'retailer_not_interested':
|
|
|
783 |
self.retailer.status='failed'
|
|
|
784 |
if self.callHistory.disposition_description is None:
|
|
|
785 |
self.callHistory.disposition_description = 'NA'
|
| 15200 |
manas |
786 |
self.callHistory.disposition_description = 'Reason Retailer Not Interested ' + self.callHistory.disposition_description
|
|
|
787 |
elif self.callDisposition == 'recharge_retailer':
|
|
|
788 |
self.retailer.status='failed'
|
|
|
789 |
self.callHistory.disposition_description = 'Recharge related. Not a retailer '
|
|
|
790 |
elif self.callDisposition == 'accessory_retailer':
|
|
|
791 |
self.retailer.status='failed'
|
|
|
792 |
self.callHistory.disposition_description = 'Accessory related. Not a retailer'
|
|
|
793 |
elif self.callDisposition == 'service_center_retailer':
|
|
|
794 |
self.retailer.status='failed'
|
|
|
795 |
self.callHistory.disposition_description = 'Service Center related. Not a retailer'
|
| 15202 |
manas |
796 |
elif self.callDisposition == 'not_retailer':
|
|
|
797 |
self.retailer.status='failed'
|
|
|
798 |
self.callHistory.disposition_description = 'Not a retailer'
|
| 15108 |
manas |
799 |
session.commit()
|
|
|
800 |
return True
|
|
|
801 |
|
| 15132 |
amit.gupta |
802 |
def getCode(self,):
|
| 15207 |
amit.gupta |
803 |
newCode = None
|
|
|
804 |
lastLink = session.query(RetailerLinks).order_by(RetailerLinks.id.desc()).with_lockmode("update").first()
|
|
|
805 |
if lastLink is not None:
|
|
|
806 |
if len(lastLink.code)==len(codesys):
|
|
|
807 |
newCode=lastLink.code
|
|
|
808 |
return getNextCode(codesys, newCode)
|
| 15108 |
manas |
809 |
|
| 15254 |
amit.gupta |
810 |
|
| 15091 |
amit.gupta |
811 |
def callLater(self,):
|
| 15368 |
amit.gupta |
812 |
self.retailer.status = RETRY_MAP.get(self.callType)
|
| 15100 |
amit.gupta |
813 |
self.retailer.call_priority = None
|
| 15096 |
amit.gupta |
814 |
if self.callDisposition == 'call_later':
|
| 15100 |
amit.gupta |
815 |
if self.callHistory.disposition_description is not None:
|
| 15102 |
amit.gupta |
816 |
self.retailer.call_priority = 'user_initiated'
|
| 15096 |
amit.gupta |
817 |
self.retailer.next_call_time = datetime.strptime(self.callHistory.disposition_description, '%d/%m/%Y %H:%M:%S')
|
|
|
818 |
self.callHistory.disposition_description = 'User requested to call on ' + self.callHistory.disposition_description
|
|
|
819 |
else:
|
| 15102 |
amit.gupta |
820 |
self.retailer.call_priority = 'system_initiated'
|
| 15096 |
amit.gupta |
821 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
|
| 15112 |
amit.gupta |
822 |
self.callHistory.disposition_description = 'Call scheduled on ' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S')
|
|
|
823 |
else:
|
|
|
824 |
if self.callDisposition == 'ringing_no_answer':
|
|
|
825 |
if self.retailer.disposition == 'ringing_no_answer':
|
|
|
826 |
self.retailer.retry_count += 1
|
|
|
827 |
else:
|
|
|
828 |
self.retailer.disposition = 'ringing_no_answer'
|
|
|
829 |
self.retailer.retry_count = 1
|
|
|
830 |
else:
|
|
|
831 |
if self.retailer.disposition == 'ringing_no_answer':
|
| 15122 |
amit.gupta |
832 |
pass
|
| 15112 |
amit.gupta |
833 |
else:
|
| 15119 |
amit.gupta |
834 |
self.retailer.disposition = 'not_reachable'
|
| 15122 |
amit.gupta |
835 |
self.retailer.retry_count += 1
|
|
|
836 |
self.retailer.invalid_retry_count += 1
|
| 15119 |
amit.gupta |
837 |
|
| 15122 |
amit.gupta |
838 |
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 |
839 |
if retryConfig is not None:
|
|
|
840 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(minutes = retryConfig.minutes_ahead)
|
| 15119 |
amit.gupta |
841 |
self.callHistory.disposition_description = 'Call scheduled on ' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S')
|
| 15112 |
amit.gupta |
842 |
else:
|
|
|
843 |
self.retailer.status = 'failed'
|
|
|
844 |
self.callHistory.disposition_description = 'Call failed as all attempts exhausted'
|
| 15119 |
amit.gupta |
845 |
|
| 15101 |
amit.gupta |
846 |
session.commit()
|
|
|
847 |
return True
|
| 15096 |
amit.gupta |
848 |
|
| 15100 |
amit.gupta |
849 |
|
| 15091 |
amit.gupta |
850 |
def alReadyUser(self,):
|
| 15112 |
amit.gupta |
851 |
self.retailer.status = self.callDisposition
|
| 15117 |
amit.gupta |
852 |
if self.callHistory.disposition_description is None:
|
|
|
853 |
self.callHistory.disposition_description = 'Retailer already user'
|
| 15112 |
amit.gupta |
854 |
session.commit()
|
|
|
855 |
return True
|
| 15091 |
amit.gupta |
856 |
def verifiedLinkSent(self,):
|
| 15147 |
amit.gupta |
857 |
if self.callType == 'fresh':
|
|
|
858 |
self.retailer.status = 'followup'
|
| 15548 |
amit.gupta |
859 |
self.retailer.agent_id = None
|
| 15147 |
amit.gupta |
860 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
|
|
|
861 |
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')
|
|
|
862 |
else:
|
| 15224 |
amit.gupta |
863 |
self.retailer.status = 'followup'
|
| 15548 |
amit.gupta |
864 |
self.retailer.agent_id = None
|
| 15147 |
amit.gupta |
865 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=7)
|
| 15254 |
amit.gupta |
866 |
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 |
867 |
addContactToRetailer(self.agentId, self.retailerId, self.smsNumber, self.callType, 'sms')
|
| 15146 |
amit.gupta |
868 |
session.commit()
|
|
|
869 |
return True
|
| 15368 |
amit.gupta |
870 |
def onboarded(self,):
|
|
|
871 |
self.retailer.status = self.callDisposition
|
|
|
872 |
checkList = OnboardedRetailerChecklists()
|
|
|
873 |
checkList.contact_us = self.checkList.get('contactus')
|
| 15390 |
amit.gupta |
874 |
checkList.doa_return_policy = self.checkList.get('doareturnpolicy')
|
| 15368 |
amit.gupta |
875 |
checkList.number_verification = self.checkList.get('numberverification')
|
|
|
876 |
checkList.payment_option = self.checkList.get('paymentoption')
|
|
|
877 |
checkList.preferences = self.checkList.get('preferences')
|
|
|
878 |
checkList.product_info = self.checkList.get('productinfo')
|
| 15372 |
amit.gupta |
879 |
checkList.redeem = self.checkList.get('redeem')
|
| 15368 |
amit.gupta |
880 |
checkList.retailer_id = self.retailerId
|
|
|
881 |
session.commit()
|
|
|
882 |
return True
|
|
|
883 |
|
|
|
884 |
|
| 15254 |
amit.gupta |
885 |
def isActivated(retailerId):
|
| 15276 |
amit.gupta |
886 |
retailerLink = session.query(RetailerLinks).filter_by(retailer_id=retailerId).first()
|
| 15448 |
amit.gupta |
887 |
user = session.query(Users).filter(or_(func.lower(Users.referrer)==retailerLink.code.lower(), Users.utm_campaign==retailerLink.code)).first()
|
| 15276 |
amit.gupta |
888 |
if user is None:
|
|
|
889 |
mobileNumbers = list(session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailerId).all())
|
|
|
890 |
user = session.query(Users).filter(Users.mobile_number.in_(mobileNumbers)).first()
|
| 15254 |
amit.gupta |
891 |
if user is None:
|
| 15332 |
amit.gupta |
892 |
if retailerLink.created < datetime(2015,5,26):
|
| 15333 |
amit.gupta |
893 |
historyNumbers = [number for number, in session.query(CallHistory.mobile_number).filter_by(retailer_id = retailerId).all()]
|
| 15476 |
amit.gupta |
894 |
user = session.query(Users).filter(Users.mobile_number.in_(historyNumbers)).first()
|
| 15332 |
amit.gupta |
895 |
if user is None:
|
|
|
896 |
return False
|
| 15334 |
amit.gupta |
897 |
else:
|
|
|
898 |
mapped_with = 'contact'
|
| 15332 |
amit.gupta |
899 |
else:
|
|
|
900 |
return False
|
| 15276 |
amit.gupta |
901 |
else:
|
|
|
902 |
mapped_with = 'contact'
|
|
|
903 |
else:
|
|
|
904 |
mapped_with = 'code'
|
|
|
905 |
retailerLink.mapped_with = mapped_with
|
| 15388 |
amit.gupta |
906 |
if user.activation_time is not None:
|
| 15448 |
amit.gupta |
907 |
retailerLink.activated = user.activation_time
|
|
|
908 |
retailerLink.activated = user.created
|
| 15276 |
amit.gupta |
909 |
retailerLink.user_id = user.id
|
| 15291 |
amit.gupta |
910 |
retailer = session.query(Retailers).filter_by(id=retailerId).first()
|
| 15574 |
amit.gupta |
911 |
if retailer.status == 'followup' or retailer.status == 'fretry':
|
| 15389 |
amit.gupta |
912 |
retailer.status = 'onboarding'
|
| 15548 |
amit.gupta |
913 |
retailer.agent_id = None
|
| 15391 |
amit.gupta |
914 |
retailer.call_priority = None
|
|
|
915 |
retailer.next_call_time = None
|
|
|
916 |
retailer.retry_count = 0
|
|
|
917 |
retailer.invalid_retry_count = 0
|
| 15276 |
amit.gupta |
918 |
session.commit()
|
| 15287 |
amit.gupta |
919 |
print "retailerLink.retailer_id", retailerLink.retailer_id
|
| 15700 |
amit.gupta |
920 |
print "retailer", retailer.id
|
| 15276 |
amit.gupta |
921 |
session.close()
|
|
|
922 |
return True
|
| 15254 |
amit.gupta |
923 |
|
|
|
924 |
class AddContactToRetailer():
|
|
|
925 |
def on_post(self,req,resp, agentId):
|
|
|
926 |
agentId = int(agentId)
|
|
|
927 |
try:
|
|
|
928 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
929 |
retailerId = int(jsonReq.get("retailerid"))
|
|
|
930 |
mobile = jsonReq.get("mobile")
|
|
|
931 |
callType = jsonReq.get("calltype")
|
|
|
932 |
contactType = jsonReq.get("contacttype")
|
|
|
933 |
addContactToRetailer(agentId, retailerId, mobile, callType, contactType)
|
|
|
934 |
session.commit()
|
|
|
935 |
finally:
|
|
|
936 |
session.close()
|
| 15676 |
amit.gupta |
937 |
|
| 15677 |
amit.gupta |
938 |
class AddAddressToRetailer():
|
| 15676 |
amit.gupta |
939 |
def on_post(self,req,resp, agentId):
|
|
|
940 |
agentId = int(agentId)
|
| 15678 |
amit.gupta |
941 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
942 |
retailerId = int(jsonReq.get("retailerid"))
|
| 15684 |
amit.gupta |
943 |
address = str(jsonReq.get("address"))
|
|
|
944 |
storeName = str(jsonReq.get("storename"))
|
|
|
945 |
pin = str(jsonReq.get("pin"))
|
|
|
946 |
city = str(jsonReq.get("city"))
|
|
|
947 |
state = str(jsonReq.get("state"))
|
|
|
948 |
updateType = str(jsonReq.get("updatetype"))
|
| 15678 |
amit.gupta |
949 |
addAddressToRetailer(agentId, retailerId, address, storeName, pin, city,state, updateType)
|
| 15254 |
amit.gupta |
950 |
|
|
|
951 |
def addContactToRetailer(agentId, retailerId, mobile, callType, contactType):
|
| 15312 |
amit.gupta |
952 |
retailerContact = session.query(RetailerContacts).filter_by(retailer_id=retailerId).filter_by(mobile_number=mobile).first()
|
|
|
953 |
if retailerContact is None:
|
| 15254 |
amit.gupta |
954 |
retailerContact = RetailerContacts()
|
| 15256 |
amit.gupta |
955 |
retailerContact.retailer_id = retailerId
|
| 15254 |
amit.gupta |
956 |
retailerContact.agent_id = agentId
|
|
|
957 |
retailerContact.call_type = callType
|
|
|
958 |
retailerContact.contact_type = contactType
|
|
|
959 |
retailerContact.mobile_number = mobile
|
| 15312 |
amit.gupta |
960 |
else:
|
| 15327 |
amit.gupta |
961 |
if CONTACT_PRIORITY.index(retailerContact.contact_type) > CONTACT_PRIORITY.index(contactType):
|
| 15358 |
amit.gupta |
962 |
retailerContact.contact_type = contactType
|
| 15676 |
amit.gupta |
963 |
|
|
|
964 |
def addAddressToRetailer(agentId, retailerId, address, storeName, pin, city,state, updateType):
|
| 15679 |
amit.gupta |
965 |
print "I am in addAddress"
|
| 15682 |
amit.gupta |
966 |
print agentId, retailerId, address, storeName, pin, city, state, updateType
|
| 15679 |
amit.gupta |
967 |
try:
|
|
|
968 |
if updateType=='new':
|
| 15685 |
amit.gupta |
969 |
retailer = session.query(Retailers).filter_by(id=retailerId).first()
|
| 15679 |
amit.gupta |
970 |
retailer.address = address
|
|
|
971 |
retailer.title = storeName
|
|
|
972 |
retailer.city = city
|
|
|
973 |
retailer.state = state
|
|
|
974 |
retailer.pin = pin
|
|
|
975 |
raddress = RetailerAddresses()
|
|
|
976 |
raddress.address = address
|
| 15682 |
amit.gupta |
977 |
raddress.title = storeName
|
| 15679 |
amit.gupta |
978 |
raddress.agent_id = agentId
|
|
|
979 |
raddress.city = city
|
|
|
980 |
raddress.pin = pin
|
|
|
981 |
raddress.retailer_id = retailerId
|
|
|
982 |
raddress.state = state
|
|
|
983 |
session.commit()
|
|
|
984 |
finally:
|
|
|
985 |
session.close()
|
| 15254 |
amit.gupta |
986 |
|
| 15312 |
amit.gupta |
987 |
|
| 15189 |
manas |
988 |
class Login():
|
|
|
989 |
|
|
|
990 |
def on_get(self, req, resp, agentId, role):
|
|
|
991 |
try:
|
| 15198 |
manas |
992 |
self.agentId = int(agentId)
|
|
|
993 |
self.role = role
|
|
|
994 |
print str(self.agentId) + self.role;
|
| 15199 |
manas |
995 |
agents=AgentLoginTimings()
|
|
|
996 |
lastLoginTime = session.query(Agents).filter(Agents.id==self.agentId).first()
|
|
|
997 |
print 'lastLogintime' + str(lastLoginTime)
|
|
|
998 |
agents.loginTime=lastLoginTime.last_login
|
|
|
999 |
agents.logoutTime=datetime.now()
|
|
|
1000 |
agents.role =self.role
|
| 15282 |
amit.gupta |
1001 |
agents.agent_id = self.agentId
|
| 15199 |
manas |
1002 |
session.add(agents)
|
|
|
1003 |
session.commit()
|
|
|
1004 |
resp.body = json.dumps({"result":{"success":"true","message":"Success"}}, encoding='utf-8')
|
| 15189 |
manas |
1005 |
finally:
|
|
|
1006 |
session.close()
|
| 15112 |
amit.gupta |
1007 |
|
| 15189 |
manas |
1008 |
def on_post(self,req,resp):
|
|
|
1009 |
try:
|
|
|
1010 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
1011 |
lgr.info( "Request ----\n" + str(jsonReq))
|
|
|
1012 |
email=jsonReq.get('email')
|
|
|
1013 |
password = jsonReq.get('password')
|
|
|
1014 |
role=jsonReq.get('role')
|
| 15531 |
amit.gupta |
1015 |
agent = session.query(Agents).filter(and_(Agents.email==email,Agents.password==password)).first()
|
|
|
1016 |
if agent is None:
|
| 15189 |
manas |
1017 |
resp.body = json.dumps({"result":{"success":"false","message":"Invalid User"}}, encoding='utf-8')
|
|
|
1018 |
else:
|
| 15531 |
amit.gupta |
1019 |
print agent.id
|
|
|
1020 |
checkRole = session.query(Agent_Roles.id).filter(and_(Agent_Roles.agent_id==agent.id,Agent_Roles.role==role)).first()
|
| 15189 |
manas |
1021 |
if checkRole is None:
|
|
|
1022 |
resp.body = json.dumps({"result":{"success":"false","message":"Invalid Role"}}, encoding='utf-8')
|
|
|
1023 |
else:
|
| 15531 |
amit.gupta |
1024 |
agent.last_login = datetime.now()
|
|
|
1025 |
agent.login_type = role
|
|
|
1026 |
resp.body = json.dumps({"result":{"success":"true","message":"Valid User","id":agent.id}}, encoding='utf-8')
|
|
|
1027 |
session.commit()
|
| 15195 |
manas |
1028 |
#session.query(Agents).filter_by(id = checkUser[0]).
|
| 15189 |
manas |
1029 |
finally:
|
|
|
1030 |
session.close()
|
|
|
1031 |
|
| 15195 |
manas |
1032 |
def test(self,email,password,role):
|
| 15189 |
manas |
1033 |
checkUser = session.query(Agents.id).filter(and_(Agents.email==email,Agents.password==password)).first()
|
|
|
1034 |
if checkUser is None:
|
|
|
1035 |
print checkUser
|
| 15195 |
manas |
1036 |
|
| 15189 |
manas |
1037 |
else:
|
|
|
1038 |
print checkUser[0]
|
|
|
1039 |
checkRole = session.query(Agent_Roles.id).filter(and_(Agent_Roles.agent_id==checkUser[0],Agent_Roles.role==role)).first()
|
|
|
1040 |
if checkRole is None:
|
| 15195 |
manas |
1041 |
pass
|
| 15189 |
manas |
1042 |
else:
|
| 15195 |
manas |
1043 |
agents=AgentLoginTimings()
|
|
|
1044 |
agents.loginTime=datetime.now()
|
|
|
1045 |
agents.logoutTime=datetime.now()
|
|
|
1046 |
agents.role =role
|
|
|
1047 |
agents.agent_id = 2
|
|
|
1048 |
#session.query(AgentLoginTimings).filter_by(id = checkUser[0]).update({"last_login":datetime.now()}, synchronize_session=False)
|
|
|
1049 |
session.add(agents)
|
|
|
1050 |
session.commit()
|
|
|
1051 |
session.close()
|
|
|
1052 |
|
|
|
1053 |
#session.query(Agents).filter(Agents.id==checkUser[0]).update({"last_login":Agents.last_login})
|
| 15275 |
amit.gupta |
1054 |
|
|
|
1055 |
class RetailerActivation():
|
|
|
1056 |
def on_get(self, req, resp, userId):
|
| 15351 |
amit.gupta |
1057 |
res = markDealerActivation(int(userId))
|
|
|
1058 |
if res:
|
|
|
1059 |
resp.body = "{\"activated\":true}"
|
|
|
1060 |
else:
|
|
|
1061 |
resp.body = "{\"activated\":false}"
|
|
|
1062 |
|
| 15275 |
amit.gupta |
1063 |
|
|
|
1064 |
def markDealerActivation(userId):
|
|
|
1065 |
try:
|
| 15343 |
amit.gupta |
1066 |
user = session.query(Users).filter_by(id=userId).first()
|
| 15275 |
amit.gupta |
1067 |
result = False
|
|
|
1068 |
mappedWith = 'contact'
|
| 15534 |
amit.gupta |
1069 |
retailer = None
|
| 15275 |
amit.gupta |
1070 |
if user is not None:
|
| 15454 |
amit.gupta |
1071 |
referrer = None if user.referrer is None else user.referrer.upper()
|
|
|
1072 |
retailerLink = session.query(RetailerLinks).filter(or_(RetailerLinks.code==referrer, RetailerLinks.code==user.utm_campaign)).first()
|
| 15275 |
amit.gupta |
1073 |
if retailerLink is None:
|
| 15501 |
amit.gupta |
1074 |
if user.mobile_number is not None:
|
|
|
1075 |
retailerContact = session.query(RetailerContacts).filter_by(mobile_number=user.mobile_number).first()
|
|
|
1076 |
if retailerContact is None:
|
| 15613 |
amit.gupta |
1077 |
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 |
1078 |
else:
|
|
|
1079 |
retailer = session.query(Retailers).filter_by(id = retailerContact.retailer_id).first()
|
| 15275 |
amit.gupta |
1080 |
else:
|
|
|
1081 |
retailer = session.query(Retailers).filter_by(id = retailerLink.retailer_id).first()
|
|
|
1082 |
mappedWith='code'
|
|
|
1083 |
if retailer is not None:
|
|
|
1084 |
retailerLink = session.query(RetailerLinks).filter_by(retailer_id=retailer.id).first()
|
|
|
1085 |
if retailerLink is not None:
|
|
|
1086 |
retailerLink.user_id = user.id
|
|
|
1087 |
retailerLink.mapped_with=mappedWith
|
| 15358 |
amit.gupta |
1088 |
retailer.status = 'onboarding'
|
| 15275 |
amit.gupta |
1089 |
result = True
|
|
|
1090 |
session.commit()
|
| 15574 |
amit.gupta |
1091 |
return result
|
| 15275 |
amit.gupta |
1092 |
finally:
|
|
|
1093 |
session.close()
|
|
|
1094 |
|
| 15189 |
manas |
1095 |
|
| 15081 |
amit.gupta |
1096 |
def todict(obj, classkey=None):
|
|
|
1097 |
if isinstance(obj, dict):
|
|
|
1098 |
data = {}
|
|
|
1099 |
for (k, v) in obj.items():
|
|
|
1100 |
data[k] = todict(v, classkey)
|
|
|
1101 |
return data
|
|
|
1102 |
elif hasattr(obj, "_ast"):
|
|
|
1103 |
return todict(obj._ast())
|
|
|
1104 |
elif hasattr(obj, "__iter__"):
|
|
|
1105 |
return [todict(v, classkey) for v in obj]
|
|
|
1106 |
elif hasattr(obj, "__dict__"):
|
|
|
1107 |
data = dict([(key, todict(value, classkey))
|
|
|
1108 |
for key, value in obj.__dict__.iteritems()
|
|
|
1109 |
if not callable(value) and not key.startswith('_')])
|
|
|
1110 |
if classkey is not None and hasattr(obj, "__class__"):
|
|
|
1111 |
data[classkey] = obj.__class__.__name__
|
|
|
1112 |
return data
|
|
|
1113 |
else:
|
|
|
1114 |
return obj
|
|
|
1115 |
|
| 15358 |
amit.gupta |
1116 |
def getRetailerObj(retailer, otherContacts1=None, callType=None):
|
| 15324 |
amit.gupta |
1117 |
print "before otherContacts1",otherContacts1
|
|
|
1118 |
otherContacts = [] if otherContacts1 is None else otherContacts1
|
| 15662 |
amit.gupta |
1119 |
print "after otherContacts1",otherContacts
|
| 15081 |
amit.gupta |
1120 |
obj = Mock()
|
| 15280 |
amit.gupta |
1121 |
obj.id = retailer.id
|
| 15686 |
amit.gupta |
1122 |
|
|
|
1123 |
|
| 15314 |
amit.gupta |
1124 |
if retailer.contact1 is not None and retailer.contact1 not in otherContacts:
|
| 15315 |
amit.gupta |
1125 |
otherContacts.append(retailer.contact1)
|
| 15314 |
amit.gupta |
1126 |
if retailer.contact2 is not None and retailer.contact2 not in otherContacts:
|
| 15315 |
amit.gupta |
1127 |
otherContacts.append(retailer.contact2)
|
| 15323 |
amit.gupta |
1128 |
obj.contact1 = None if len(otherContacts)==0 else otherContacts[0]
|
| 15325 |
amit.gupta |
1129 |
if obj.contact1 is not None:
|
|
|
1130 |
obj.contact2 = None if len(otherContacts)==1 else otherContacts[1]
|
| 15096 |
amit.gupta |
1131 |
obj.scheduled = (retailer.call_priority is not None)
|
| 15686 |
amit.gupta |
1132 |
address = None
|
|
|
1133 |
try:
|
|
|
1134 |
address = session.query(RetailerAddresses).filter_by(retailer_id=retailer.id).order_by(RetailerAddresses.created.desc()).first()
|
|
|
1135 |
finally:
|
|
|
1136 |
session.close()
|
|
|
1137 |
if address is not None:
|
|
|
1138 |
obj.address = address.address
|
|
|
1139 |
obj.title = address.title
|
|
|
1140 |
obj.city = address.city
|
|
|
1141 |
obj.state = address.state
|
|
|
1142 |
obj.pin = address.pin
|
|
|
1143 |
else:
|
|
|
1144 |
obj.address = retailer.address_new if retailer.address_new is not None else retailer.address
|
|
|
1145 |
obj.title = retailer.title
|
|
|
1146 |
obj.city = retailer.city
|
|
|
1147 |
obj.state = retailer.state
|
|
|
1148 |
obj.pin = retailer.pin
|
| 15699 |
amit.gupta |
1149 |
obj.status = retailer.status
|
| 15686 |
amit.gupta |
1150 |
|
| 15662 |
amit.gupta |
1151 |
if hasattr(retailer, 'contact'):
|
|
|
1152 |
obj.contact = retailer.contact
|
| 15358 |
amit.gupta |
1153 |
if callType == 'onboarding':
|
|
|
1154 |
try:
|
| 15364 |
amit.gupta |
1155 |
userId, activatedTime = session.query(RetailerLinks.user_id, RetailerLinks.activated).filter(RetailerLinks.retailer_id==retailer.id).first()
|
| 15366 |
amit.gupta |
1156 |
activated, = session.query(Users.activation_time).filter(Users.id==userId).first()
|
| 15364 |
amit.gupta |
1157 |
if activated is not None:
|
| 15366 |
amit.gupta |
1158 |
activatedTime = activated
|
| 15362 |
amit.gupta |
1159 |
obj.user_id = userId
|
| 15364 |
amit.gupta |
1160 |
obj.created = datetime.strftime(activatedTime, '%d/%m/%Y %H:%M:%S')
|
| 15358 |
amit.gupta |
1161 |
result = fetchResult("select * from useractive where user_id=%d"%(userId))
|
|
|
1162 |
if result == ():
|
|
|
1163 |
obj.last_active = None
|
|
|
1164 |
else:
|
| 15360 |
amit.gupta |
1165 |
obj.last_active =datetime.strftime(result[0][1], '%d/%m/%Y %H:%M:%S')
|
| 15361 |
amit.gupta |
1166 |
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 |
1167 |
obj.orders = ordersCount
|
|
|
1168 |
finally:
|
|
|
1169 |
session.close()
|
| 15081 |
amit.gupta |
1170 |
return obj
|
| 15091 |
amit.gupta |
1171 |
|
| 15132 |
amit.gupta |
1172 |
def make_tiny(code):
|
|
|
1173 |
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
|
| 15465 |
amit.gupta |
1174 |
#request_url = ('http://tinyurl.com/api-create.php?' + urlencode({'url':url}))
|
|
|
1175 |
#filehandle = urllib2.Request(request_url)
|
|
|
1176 |
#x= urllib2.urlopen(filehandle)
|
| 15546 |
amit.gupta |
1177 |
try:
|
|
|
1178 |
shortener = Shortener('TinyurlShortener')
|
|
|
1179 |
returnUrl = shortener.short(url)
|
|
|
1180 |
except:
|
|
|
1181 |
shortener = Shortener('SentalaShortener')
|
|
|
1182 |
returnlUrl = shortener.short(url)
|
|
|
1183 |
return returnUrl
|
| 15171 |
amit.gupta |
1184 |
|
| 15285 |
manas |
1185 |
class SearchUser():
|
|
|
1186 |
|
|
|
1187 |
def on_post(self, req, resp, agentId, searchType):
|
| 15314 |
amit.gupta |
1188 |
retailersJsonArray = []
|
| 15285 |
manas |
1189 |
try:
|
|
|
1190 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
|
|
1191 |
lgr.info( "Request in Search----\n" + str(jsonReq))
|
| 15302 |
amit.gupta |
1192 |
contact=jsonReq.get('searchTerm')
|
| 15285 |
manas |
1193 |
if(searchType=="number"):
|
| 15312 |
amit.gupta |
1194 |
retailer_ids = session.query(RetailerContacts.retailer_id).filter_by(mobile_number=contact).all()
|
|
|
1195 |
retailer_ids = [r for r, in retailer_ids]
|
|
|
1196 |
anotherCondition = or_(Retailers.contact1==contact,Retailers.contact2==contact, Retailers.id.in_(retailer_ids))
|
|
|
1197 |
else:
|
|
|
1198 |
m = re.match("(.*?)(\d{6})(.*?)", contact)
|
|
|
1199 |
if m is not None:
|
|
|
1200 |
pin = m.group(2)
|
|
|
1201 |
contact = m.group(1) if m.group(1) != '' else m.group(3)
|
| 15313 |
amit.gupta |
1202 |
anotherCondition = and_(Retailers.title.ilike('%%%s%%'%(contact)), Retailers.pin==pin)
|
| 15312 |
amit.gupta |
1203 |
else:
|
|
|
1204 |
anotherCondition = Retailers.title.ilike('%%%s%%'%(contact))
|
| 15297 |
amit.gupta |
1205 |
|
| 15326 |
amit.gupta |
1206 |
retailers = session.query(Retailers).filter(anotherCondition).limit(20).all()
|
| 15312 |
amit.gupta |
1207 |
if retailers is None:
|
| 15285 |
manas |
1208 |
resp.body = json.dumps("{}")
|
| 15312 |
amit.gupta |
1209 |
else:
|
|
|
1210 |
for retailer in retailers:
|
| 15326 |
amit.gupta |
1211 |
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 |
1212 |
retailersJsonArray.append(todict(getRetailerObj(retailer, otherContacts)))
|
|
|
1213 |
resp.body = json.dumps({"Retailers":retailersJsonArray}, encoding='utf-8')
|
| 15312 |
amit.gupta |
1214 |
return
|
| 15285 |
manas |
1215 |
finally:
|
|
|
1216 |
session.close()
|
| 15171 |
amit.gupta |
1217 |
|
| 15081 |
amit.gupta |
1218 |
|
|
|
1219 |
class Mock(object):
|
|
|
1220 |
pass
|
| 15189 |
manas |
1221 |
|
| 15312 |
amit.gupta |
1222 |
def tagActivatedReatilers():
|
| 15613 |
amit.gupta |
1223 |
retailerIds = [r for r, in session.query(RetailerLinks.retailer_id).filter_by(user_id = None).all()]
|
| 15312 |
amit.gupta |
1224 |
session.close()
|
| 15288 |
amit.gupta |
1225 |
for retailerId in retailerIds:
|
|
|
1226 |
isActivated(retailerId)
|
| 15312 |
amit.gupta |
1227 |
session.close()
|
| 15374 |
kshitij.so |
1228 |
|
|
|
1229 |
class StaticDeals():
|
|
|
1230 |
|
|
|
1231 |
def on_get(self, req, resp):
|
|
|
1232 |
|
|
|
1233 |
offset = req.get_param_as_int("offset")
|
|
|
1234 |
limit = req.get_param_as_int("limit")
|
|
|
1235 |
categoryId = req.get_param_as_int("categoryId")
|
| 15458 |
kshitij.so |
1236 |
direction = req.get_param_as_int("direction")
|
| 15374 |
kshitij.so |
1237 |
|
| 15458 |
kshitij.so |
1238 |
result = Mongo.getStaticDeals(offset, limit, categoryId, direction)
|
| 15374 |
kshitij.so |
1239 |
resp.body = dumps(result)
|
|
|
1240 |
|
| 16366 |
kshitij.so |
1241 |
class DealNotification():
|
|
|
1242 |
|
|
|
1243 |
def on_get(self,req,resp,skuBundleIds):
|
|
|
1244 |
result = Mongo.getDealsForNotification(skuBundleIds)
|
|
|
1245 |
resp.body = dumps(result)
|
|
|
1246 |
|
| 15374 |
kshitij.so |
1247 |
|
|
|
1248 |
|
| 16366 |
kshitij.so |
1249 |
|
| 15312 |
amit.gupta |
1250 |
def main():
|
| 15662 |
amit.gupta |
1251 |
#tagActivatedReatilers()
|
|
|
1252 |
a = RetailerDetail()
|
|
|
1253 |
retailer = a.getNotActiveRetailer()
|
|
|
1254 |
otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
|
|
|
1255 |
print json.dumps(todict(getRetailerObj(retailer, otherContacts, 'fresh')), encoding='utf-8')
|
| 15465 |
amit.gupta |
1256 |
#print make_tiny("AA")
|
| 15195 |
manas |
1257 |
|
| 15081 |
amit.gupta |
1258 |
if __name__ == '__main__':
|
| 15207 |
amit.gupta |
1259 |
main()
|
| 15091 |
amit.gupta |
1260 |
|