| Line 2... |
Line 2... |
| 2 |
from bson.json_util import dumps
|
2 |
from bson.json_util import dumps
|
| 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
|
7 |
from dtr.storage.DataService import Retailers, Users, CallHistory, RetryConfig
|
| 8 |
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
|
8 |
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
|
| 9 |
UserSpecificDeals
|
9 |
UserSpecificDeals
|
| 10 |
from elixir import *
|
10 |
from elixir import *
|
| 11 |
from sqlalchemy.sql.expression import or_
|
11 |
from sqlalchemy.sql.expression import or_
|
| 12 |
import falcon
|
12 |
import falcon
|
| Line 568... |
Line 568... |
| 568 |
resp.body = "{\"result\":\"{}\"}"
|
568 |
resp.body = "{\"result\":\"{}\"}"
|
| 569 |
else:
|
569 |
else:
|
| 570 |
resp.body = json.dumps(todict(getRetailerObj(retailer)), encoding='utf-8')
|
570 |
resp.body = json.dumps(todict(getRetailerObj(retailer)), encoding='utf-8')
|
| 571 |
|
571 |
|
| 572 |
def on_post(self, req, resp, agentId, callType):
|
572 |
def on_post(self, req, resp, agentId, callType):
|
| - |
|
573 |
returned = False
|
| 573 |
self.agentId = int(agentId)
|
574 |
self.agentId = int(agentId)
|
| 574 |
self.callType = callType
|
575 |
self.callType = callType
|
| 575 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
576 |
jsonReq = json.loads(req.stream.read(), encoding='utf-8')
|
| 576 |
print jsonReq
|
577 |
print jsonReq
|
| 577 |
self.jsonReq = jsonReq
|
578 |
self.jsonReq = jsonReq
|
| Line 579... |
Line 580... |
| 579 |
callLater = self.callLater
|
580 |
callLater = self.callLater
|
| 580 |
alreadyUser = self.alReadyUser
|
581 |
alreadyUser = self.alReadyUser
|
| 581 |
verifiedLinkSent = self.verifiedLinkSent
|
582 |
verifiedLinkSent = self.verifiedLinkSent
|
| 582 |
|
583 |
|
| 583 |
self.retailerId = int(jsonReq.get('retailerid'))
|
584 |
self.retailerId = int(jsonReq.get('retailerid'))
|
| - |
|
585 |
try:
|
| 584 |
self.retailer = session.query(Retailers).filter_by(id=self.retailerId).first()
|
586 |
self.retailer = session.query(Retailers).filter_by(id=self.retailerId).first()
|
| 585 |
self.callDisposition = jsonReq.get('calldispositiontype')
|
587 |
self.callDisposition = jsonReq.get('calldispositiontype')
|
| 586 |
self.callHistory = CallHistory()
|
588 |
self.callHistory = CallHistory()
|
| 587 |
self.callHistory.agent_id=self.agentId
|
589 |
self.callHistory.agent_id=self.agentId
|
| 588 |
self.callHistory.call_disposition = self.callDisposition
|
590 |
self.callHistory.call_disposition = self.callDisposition
|
| 589 |
self.callHistory.retailer_id=self.retailerId
|
591 |
self.callHistory.retailer_id=self.retailerId
|
| 590 |
self.callHistory.duration_sec = int(jsonReq.get("callduration"))
|
592 |
self.callHistory.duration_sec = int(jsonReq.get("callduration"))
|
| 591 |
self.callHistory.disposition_description = jsonReq.get('calldispositiondescritption')
|
593 |
self.callHistory.disposition_description = jsonReq.get('calldispositiondescritption')
|
| 592 |
self.callHistory.call_time = datetime.strptime(jsonReq.get("calltime"), '%d/%m/%Y %H:%M:%S')
|
594 |
self.callHistory.call_time = datetime.strptime(jsonReq.get("calltime"), '%d/%m/%Y %H:%M:%S')
|
| 593 |
self.callHistory.mobile_number = jsonReq.get('number')
|
595 |
self.callHistory.mobile_number = jsonReq.get('number')
|
| 594 |
self.callHistory.sms_verified = 0
|
596 |
self.callHistory.sms_verified = 0
|
| 595 |
|
597 |
|
| 596 |
dispositionMap = { 'call_later':callLater,
|
598 |
dispositionMap = { 'call_later':callLater,
|
| 597 |
'ringing_no_answer':callLater,
|
599 |
'ringing_no_answer':callLater,
|
| 598 |
'not_reachable':callLater,
|
600 |
'not_reachable':callLater,
|
| 599 |
'switch_off':callLater,
|
601 |
'switch_off':callLater,
|
| 600 |
'invalid_no':invalidNumber,
|
602 |
'invalid_no':invalidNumber,
|
| 601 |
'wrong_no':invalidNumber,
|
603 |
'wrong_no':invalidNumber,
|
| 602 |
'hang_up':invalidNumber,
|
604 |
'hang_up':invalidNumber,
|
| 603 |
'retailer_not_interested':invalidNumber,
|
605 |
'retailer_not_interested':invalidNumber,
|
| 604 |
'alreadyuser':alreadyUser,
|
606 |
'alreadyuser':alreadyUser,
|
| 605 |
'verified_link_sent':verifiedLinkSent
|
607 |
'verified_link_sent':verifiedLinkSent
|
| 606 |
}
|
608 |
}
|
| 607 |
dispositionMap[jsonReq.get('calldispositiontype')]()
|
609 |
returned = dispositionMap[jsonReq.get('calldispositiontype')]()
|
| 608 |
|
610 |
finally:
|
| - |
|
611 |
session.close()
|
| 609 |
|
612 |
|
| - |
|
613 |
if returned:
|
| 610 |
resp.body = json.dumps(jsonReq, encoding='utf-8')
|
614 |
resp.body = "{\"result\":\"success\"}"
|
| - |
|
615 |
else:
|
| - |
|
616 |
resp.body = "{\"result\":\"failed\"}"
|
| 611 |
|
617 |
|
| 612 |
def invalidNumber(self,):
|
618 |
def invalidNumber(self,):
|
| 613 |
#self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
|
619 |
#self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
|
| 614 |
if self.callDisposition == 'invalid_no':
|
620 |
if self.callDisposition == 'invalid_no':
|
| 615 |
self.retailer.status='failed'
|
621 |
self.retailer.status='failed'
|
| Line 639... |
Line 645... |
| 639 |
self.retailer.next_call_time = datetime.strptime(self.callHistory.disposition_description, '%d/%m/%Y %H:%M:%S')
|
645 |
self.retailer.next_call_time = datetime.strptime(self.callHistory.disposition_description, '%d/%m/%Y %H:%M:%S')
|
| 640 |
self.callHistory.disposition_description = 'User requested to call on ' + self.callHistory.disposition_description
|
646 |
self.callHistory.disposition_description = 'User requested to call on ' + self.callHistory.disposition_description
|
| 641 |
else:
|
647 |
else:
|
| 642 |
self.retailer.call_priority = 'system_initiated'
|
648 |
self.retailer.call_priority = 'system_initiated'
|
| 643 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
|
649 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(days=1)
|
| - |
|
650 |
self.callHistory.disposition_description = 'Call scheduled on ' + datetime.strftime(self.retailer.next_call_time, '%d/%m/%Y %H:%M:%S')
|
| - |
|
651 |
else:
|
| 644 |
elif self.callDisposition == 'ringing_no_answer':
|
652 |
if self.callDisposition == 'ringing_no_answer':
|
| - |
|
653 |
if self.retailer.disposition == 'ringing_no_answer':
|
| - |
|
654 |
self.retailer.retry_count += 1
|
| - |
|
655 |
else:
|
| 645 |
self.callHistory.disposition_description = 'Ringing no answer'
|
656 |
self.retailer.disposition = 'ringing_no_answer'
|
| 646 |
self.retailer.next_call_time = ''
|
657 |
self.retailer.retry_count = 1
|
| - |
|
658 |
else:
|
| - |
|
659 |
if self.retailer.disposition == 'ringing_no_answer':
|
| - |
|
660 |
self.retailer.invalid_retry_count += 1
|
| - |
|
661 |
else:
|
| - |
|
662 |
self.retailer.invalid_retry_count += 1
|
| - |
|
663 |
self.retailer.retry_count += 1
|
| - |
|
664 |
self.retailer.disposition = self.callDisposition
|
| - |
|
665 |
retryConfig = session.query(RetryConfig).filter_by(call_type=self.callType, disposition_type=self.retailer.disposition, retry_count=self.retailer.retry_count).first()
|
| - |
|
666 |
if retryConfig is not None:
|
| - |
|
667 |
self.retailer.next_call_time = self.callHistory.call_time + timedelta(minutes = retryConfig.minutes_ahead)
|
| - |
|
668 |
self.callHistory.disposition_description = 'Call scheduled on ' + self.callHistory.disposition_description
|
| 647 |
pass
|
669 |
else:
|
| - |
|
670 |
self.retailer.status = 'failed'
|
| - |
|
671 |
self.callHistory.disposition_description = 'Call failed as all attempts exhausted'
|
| 648 |
session.commit()
|
672 |
session.commit()
|
| 649 |
return True
|
673 |
return True
|
| 650 |
|
674 |
|
| 651 |
|
675 |
|
| 652 |
def alReadyUser(self,):
|
676 |
def alReadyUser(self,):
|
| 653 |
print self.jsonReq
|
- |
|
| 654 |
callDisposition = self.jsonReq.get('calldispositiontype')
|
677 |
self.retailer.status = self.callDisposition
|
| 655 |
dispositionDesc = self.jsonReq.get('calldispositiondescritption')
|
- |
|
| 656 |
retailerId = self.jsonReq.get('retailerid')
|
678 |
self.callHistory.disposition_description = 'Retailer already user'
|
| 657 |
mobile = self.jsonReq.get('number')
|
679 |
session.commit()
|
| 658 |
callTime = self.jsonReq.get("calltime")
|
680 |
return True
|
| 659 |
callDuration = self.jsonReq.get("callduration")
|
- |
|
| 660 |
def verifiedLinkSent(self,):
|
681 |
def verifiedLinkSent(self,):
|
| 661 |
print self.jsonReq
|
- |
|
| 662 |
callDisposition = self.jsonReq.get('calldispositiontype')
|
- |
|
| 663 |
dispositionDesc = self.jsonReq.get('calldispositiondescritption')
|
- |
|
| 664 |
retailerId = self.jsonReq.get('retailerid')
|
682 |
self.retailer.status = 'retry' if self.callType == 'fresh' else 'fretry'
|
| 665 |
mobile = self.jsonReq.get('number')
|
683 |
|
| 666 |
callTime = self.jsonReq.get("calltime")
|
- |
|
| 667 |
callDuration = self.jsonReq.get("callduration")
|
- |
|
| 668 |
|
684 |
|
| 669 |
def todict(obj, classkey=None):
|
685 |
def todict(obj, classkey=None):
|
| 670 |
if isinstance(obj, dict):
|
686 |
if isinstance(obj, dict):
|
| 671 |
data = {}
|
687 |
data = {}
|
| 672 |
for (k, v) in obj.items():
|
688 |
for (k, v) in obj.items():
|