Subversion Repositories SmartDukaan

Rev

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

Rev 15111 Rev 15112
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():