| Line 3... |
Line 3... |
| 3 |
from datetime import datetime, timedelta
|
3 |
from datetime import datetime, timedelta
|
| 4 |
from dtr import main
|
4 |
from dtr import main
|
| 5 |
from dtr.config import PythonPropertyReader
|
5 |
from dtr.config import PythonPropertyReader
|
| 6 |
from dtr.storage import Mongo
|
6 |
from dtr.storage import Mongo
|
| 7 |
from dtr.storage.DataService import Retailers, Users, CallHistory, RetryConfig, \
|
7 |
from dtr.storage.DataService import Retailers, Users, CallHistory, RetryConfig, \
|
| 8 |
RetailerLinks, Activation_Codes, Agents,Agent_Roles,AgentLoginTimings,\
|
8 |
RetailerLinks, Activation_Codes, Agents, Agent_Roles, AgentLoginTimings, \
|
| 9 |
FetchDataHistory
|
9 |
FetchDataHistory, RetailerContacts
|
| 10 |
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
|
10 |
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
|
| 11 |
UserSpecificDeals
|
11 |
UserSpecificDeals
|
| 12 |
from dtr.utils.utils import getLogger
|
12 |
from dtr.utils.utils import getLogger
|
| 13 |
from elixir import *
|
13 |
from elixir import *
|
| - |
|
14 |
from operator import and_
|
| 14 |
from sqlalchemy.sql.expression import or_
|
15 |
from sqlalchemy.sql.expression import or_
|
| 15 |
from urllib import urlencode
|
16 |
from urllib import urlencode
|
| 16 |
import contextlib
|
17 |
import contextlib
|
| 17 |
import falcon
|
18 |
import falcon
|
| 18 |
import json
|
19 |
import json
|
| - |
|
20 |
import string
|
| 19 |
import traceback
|
21 |
import traceback
|
| 20 |
import urllib
|
22 |
import urllib
|
| 21 |
import urllib2
|
23 |
import urllib2
|
| 22 |
import uuid
|
24 |
import uuid
|
| 23 |
from operator import and_
|
- |
|
| 24 |
import string
|
- |
|
| 25 |
|
25 |
|
| 26 |
alphalist = list(string.uppercase)
|
26 |
alphalist = list(string.uppercase)
|
| 27 |
alphalist.remove('O')
|
27 |
alphalist.remove('O')
|
| 28 |
numList = ['1','2','3','4','5','6','7','8','9']
|
28 |
numList = ['1','2','3','4','5','6','7','8','9']
|
| 29 |
codesys = [alphalist, alphalist, numList, numList, numList]
|
29 |
codesys = [alphalist, alphalist, numList, numList, numList]
|
| Line 562... |
Line 562... |
| 562 |
query = query.filter_by(is_or=False, is_std=False).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None)).order_by(Retailers.is_elavated.desc(), -Retailers.agent_id)
|
562 |
query = query.filter_by(is_or=False, is_std=False).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None)).order_by(Retailers.is_elavated.desc(), -Retailers.agent_id)
|
| 563 |
else:
|
563 |
else:
|
| 564 |
query = query.filter(Retailers.next_call_time<=datetime.now())
|
564 |
query = query.filter(Retailers.next_call_time<=datetime.now())
|
| 565 |
retailer = query.with_lockmode("update").first()
|
565 |
retailer = query.with_lockmode("update").first()
|
| 566 |
if retailer is not None:
|
566 |
if retailer is not None:
|
| - |
|
567 |
if isActivated(retailer.id):
|
| - |
|
568 |
print retailer
|
| - |
|
569 |
continue
|
| 567 |
lgr.info( "retailer " +str(retailer.id))
|
570 |
lgr.info( "retailer " +str(retailer.id))
|
| 568 |
if status=="fresh":
|
571 |
if status=="fresh":
|
| 569 |
userquery = session.query(Users)
|
572 |
userquery = session.query(Users)
|
| 570 |
if retailer.contact2 is not None:
|
573 |
if retailer.contact2 is not None:
|
| 571 |
userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
|
574 |
userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
|
| Line 668... |
Line 671... |
| 668 |
callLater = self.callLater
|
671 |
callLater = self.callLater
|
| 669 |
alreadyUser = self.alReadyUser
|
672 |
alreadyUser = self.alReadyUser
|
| 670 |
verifiedLinkSent = self.verifiedLinkSent
|
673 |
verifiedLinkSent = self.verifiedLinkSent
|
| 671 |
|
674 |
|
| 672 |
self.retailerId = int(jsonReq.get('retailerid'))
|
675 |
self.retailerId = int(jsonReq.get('retailerid'))
|
| - |
|
676 |
self.smsNumber = jsonReq.get('smsnumber')
|
| 673 |
try:
|
677 |
try:
|
| 674 |
self.retailer = session.query(Retailers).filter_by(id=self.retailerId).first()
|
678 |
self.retailer = session.query(Retailers).filter_by(id=self.retailerId).first()
|
| 675 |
self.callDisposition = jsonReq.get('calldispositiontype')
|
679 |
self.callDisposition = jsonReq.get('calldispositiontype')
|
| 676 |
self.callHistory = CallHistory()
|
680 |
self.callHistory = CallHistory()
|
| 677 |
self.callHistory.agent_id=self.agentId
|
681 |
self.callHistory.agent_id=self.agentId
|
| Line 751... |
Line 755... |
| 751 |
if lastLink is not None:
|
755 |
if lastLink is not None:
|
| 752 |
if len(lastLink.code)==len(codesys):
|
756 |
if len(lastLink.code)==len(codesys):
|
| 753 |
newCode=lastLink.code
|
757 |
newCode=lastLink.code
|
| 754 |
return getNextCode(codesys, newCode)
|
758 |
return getNextCode(codesys, newCode)
|
| 755 |
|
759 |
|
| - |
|
760 |
|
| 756 |
def callLater(self,):
|
761 |
def callLater(self,):
|
| 757 |
self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
|
762 |
self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
|
| 758 |
self.retailer.call_priority = None
|
763 |
self.retailer.call_priority = None
|
| 759 |
if self.callDisposition == 'call_later':
|
764 |
if self.callDisposition == 'call_later':
|
| 760 |
if self.callHistory.disposition_description is not None:
|
765 |
if self.callHistory.disposition_description is not None:
|
| Line 804... |
Line 809... |
| 804 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
|
809 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
|
| 805 |
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')
|
810 |
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')
|
| 806 |
else:
|
811 |
else:
|
| 807 |
self.retailer.status = 'followup'
|
812 |
self.retailer.status = 'followup'
|
| 808 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=7)
|
813 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=7)
|
| 809 |
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')
|
814 |
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')
|
| - |
|
815 |
addContactToRetailer(self.agentId, self.retailerId, self.smsNumber, self.callLater(), 'sms')
|
| 810 |
session.commit()
|
816 |
session.commit()
|
| 811 |
return True
|
817 |
return True
|
| - |
|
818 |
def isActivated(retailerId):
|
| - |
|
819 |
try:
|
| - |
|
820 |
retailerLink = session.query(RetailerLinks).filter_by(retailer_id=retailerId).first()
|
| - |
|
821 |
user = session.query(Users).filter_by(referrer=retailerLink.code).first()
|
| - |
|
822 |
if user is None:
|
| - |
|
823 |
mobileNumbers = list(session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailerId).all())
|
| - |
|
824 |
user = session.query(Users).filter(Users.mobile_number.in_(mobileNumbers)).first()
|
| - |
|
825 |
if user is None:
|
| - |
|
826 |
return False
|
| - |
|
827 |
else:
|
| - |
|
828 |
retailerLink.mapped_contact = user.mobile_number
|
| - |
|
829 |
retailerLink.is_activated = True
|
| - |
|
830 |
retailerLink.user_id = user.id
|
| - |
|
831 |
return True
|
| - |
|
832 |
finally:
|
| - |
|
833 |
session.close()
|
| 812 |
|
834 |
|
| - |
|
835 |
class AddContactToRetailer():
|
| - |
|
836 |
def on_post(self,req,resp, agentId):
|
| - |
|
837 |
agentId = int(agentId)
|
| - |
|
838 |
try:
|
| - |
|
839 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
| - |
|
840 |
retailerId = int(jsonReq.get("retailerid"))
|
| - |
|
841 |
mobile = jsonReq.get("mobile")
|
| - |
|
842 |
callType = jsonReq.get("calltype")
|
| - |
|
843 |
contactType = jsonReq.get("contacttype")
|
| - |
|
844 |
addContactToRetailer(agentId, retailerId, mobile, callType, contactType)
|
| - |
|
845 |
session.commit()
|
| - |
|
846 |
finally:
|
| - |
|
847 |
session.close()
|
| - |
|
848 |
|
| - |
|
849 |
def addContactToRetailer(agentId, retailerId, mobile, callType, contactType):
|
| - |
|
850 |
retailerContacts = session.query(RetailerContacts).filter_by(retailer_id=retailerId).filter_by(mobile_number=mobile).first()
|
| - |
|
851 |
if retailerContacts is None:
|
| - |
|
852 |
retailerContact = RetailerContacts()
|
| - |
|
853 |
retailerContact.agent_id = agentId
|
| - |
|
854 |
retailerContact.call_type = callType
|
| - |
|
855 |
retailerContact.contact_type = contactType
|
| - |
|
856 |
retailerContact.mobile_number = mobile
|
| - |
|
857 |
|
| 813 |
class Login():
|
858 |
class Login():
|
| 814 |
|
859 |
|
| 815 |
def on_get(self, req, resp, agentId, role):
|
860 |
def on_get(self, req, resp, agentId, role):
|
| 816 |
try:
|
861 |
try:
|
| 817 |
self.agentId = int(agentId)
|
862 |
self.agentId = int(agentId)
|