Subversion Repositories SmartDukaan

Rev

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

Rev 15162 Rev 15168
Line 6... Line 6...
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
8
    RetailerLinks, Activation_Codes
9
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
9
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
10
    UserSpecificDeals
10
    UserSpecificDeals
-
 
11
from dtr.utils.utils import getLogger
11
from elixir import *
12
from elixir import *
12
from sqlalchemy.sql.expression import or_
13
from sqlalchemy.sql.expression import or_
13
from urllib import urlencode
14
from urllib import urlencode
14
import contextlib
15
import contextlib
15
import falcon
16
import falcon
Line 19... Line 20...
19
import urllib2
20
import urllib2
20
import uuid
21
import uuid
21
global RETAILER_DETAIL_CALL_COUNTER
22
global RETAILER_DETAIL_CALL_COUNTER
22
RETAILER_DETAIL_CALL_COUNTER = 0
23
RETAILER_DETAIL_CALL_COUNTER = 0
23
 
24
 
-
 
25
lgr = getLogger('/var/log/retailer-acquisition-api.log')
24
DEALER_RETRY_FACTOR = int(PythonPropertyReader.getConfig('DEALER_RETRY_FACTOR'))
26
DEALER_RETRY_FACTOR = int(PythonPropertyReader.getConfig('DEALER_RETRY_FACTOR'))
25
class CategoryDiscountInfo(object):
27
class CategoryDiscountInfo(object):
26
    
28
    
27
    def on_get(self, req, resp):
29
    def on_get(self, req, resp):
28
        
30
        
Line 500... Line 502...
500
        retailer = None
502
        retailer = None
501
        status = 'fretry' if self.callType == 'followup' else 'retry'
503
        status = 'fretry' if self.callType == 'followup' else 'retry'
502
        try:
504
        try:
503
            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()
505
            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()
504
            if retailer is not None:
506
            if retailer is not None:
505
                print "getRetryRetailer", retailer.id
507
                lgr.info( "getRetryRetailer " + str(retailer.id))
506
            else:
508
            else:
507
                if failback:
509
                if failback:
508
                    retailer = self.getNewRetailer(False)
510
                    retailer = self.getNewRetailer(False)
509
                    return retailer
511
                    return retailer
510
            if status=='retry':
512
            if status=='retry':
511
                retailer.status = 'assigned'
513
                retailer.status = 'assigned'
512
            else:
514
            else:
513
                retailer.status = 'fassigned'
515
                retailer.status = 'fassigned'
514
            session.commit()
516
            session.commit()
515
            print "getRetryRetailer", retailer.id
517
            lgr.info( "getRetryRetailer ", str(retailer.id))
516
        finally:
518
        finally:
517
            session.close()
519
            session.close()
518
        return retailer
520
        return retailer
519
            
521
            
520
    def getNewRetailer(self,failback=True):
522
    def getNewRetailer(self,failback=True):
521
        retry = True
523
        retry = True
522
        retailer = None 
524
        retailer = None 
523
        try:
525
        try:
524
            while(retry):
526
            while(retry):
525
                print "Calltype", self.callType
527
                lgr.info( "Calltype " + self.callType)
526
                status=self.callType
528
                status=self.callType
527
                query = session.query(Retailers).filter(Retailers.status==status)
529
                query = session.query(Retailers).filter(Retailers.status==status)
528
                if status=='fresh':
530
                if status=='fresh':
529
                    query = query.filter_by(is_or=False, is_std=False).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None)).order_by(-Retailers.agent_id)
531
                    query = query.filter_by(is_or=False, is_std=False).filter(or_(Retailers.agent_id==self.agentId, Retailers.agent_id==None)).order_by(-Retailers.agent_id)
530
                else:
532
                else:
531
                    query = query.filter_by(Retailers.next_call_time<=datetime.now())
533
                    query = query.filter_by(Retailers.next_call_time<=datetime.now())
532
                retailer = query.with_lockmode("update").first()
534
                retailer = query.with_lockmode("update").first()
533
                if retailer is not None:
535
                if retailer is not None:
534
                    print "retailer", retailer.id
536
                    lgr.info( "retailer " +str(retailer.id))
535
                    if status=="fresh":
537
                    if status=="fresh":
536
                        userquery = session.query(Users)
538
                        userquery = session.query(Users)
537
                        if retailer.contact2 is not None:
539
                        if retailer.contact2 is not None:
538
                            userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
540
                            userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
539
                        else:
541
                        else:
540
                            userquery = userquery.filter_by(mobile_number=retailer.contact1)
542
                            userquery = userquery.filter_by(mobile_number=retailer.contact1)
541
                        user = userquery.first()
543
                        user = userquery.first()
542
                        if user is not None:
544
                        if user is not None:
543
                            retailer.status = 'alreadyuser'
545
                            retailer.status = 'alreadyuser'
544
                            print "retailer.status", retailer.status
546
                            lgr.info( "retailer.status " + retailer.status)
545
                            session.commit()
547
                            session.commit()
546
                            continue
548
                            continue
547
                        retailer.status = 'assigned'
549
                        retailer.status = 'assigned'
548
                    else:
550
                    else:
549
                        retailer.status = 'fassigned'
551
                        retailer.status = 'fassigned'
550
                    print "Found Retailer", retailer.id, "with status", status,"assigned to", self.agentId
-
 
551
                    retailer.retry_count = 0
552
                    retailer.retry_count = 0
552
                    retailer.invalid_retry_count = 0
553
                    retailer.invalid_retry_count = 0
553
                    session.commit()
554
                    session.commit()
554
                    print "-"*50
-
 
555
                    print "Found Retailer", retailer.id, "with status", status,"assigned to", self.agentId
555
                    lgr.info( "Found Retailer " +  str(retailer.id) + " with status " + status + " assigned to " + str(self.agentId))
556
                        
556
                        
557
                else:
557
                else:
558
                    print "No fresh/followup retailers found"
558
                    lgr.info( "No fresh/followup retailers found")
559
                    if failback:
559
                    if failback:
560
                        retailer = self.getRetryRetailer(False)
560
                        retailer = self.getRetryRetailer(False)
561
                        return retailer
561
                        return retailer
562
                retry=False
562
                retry=False
563
        except:
563
        except:
Line 567... Line 567...
567
        return retailer
567
        return retailer
568
    
568
    
569
    def on_get(self, req, resp, agentId, callType=None, retailerId=None):
569
    def on_get(self, req, resp, agentId, callType=None, retailerId=None):
570
        global RETAILER_DETAIL_CALL_COUNTER
570
        global RETAILER_DETAIL_CALL_COUNTER
571
        RETAILER_DETAIL_CALL_COUNTER += 1
571
        RETAILER_DETAIL_CALL_COUNTER += 1
572
        print "RETAILER_DETAIL_CALL_COUNTER", RETAILER_DETAIL_CALL_COUNTER
572
        lgr.info( "RETAILER_DETAIL_CALL_COUNTER " +  str(RETAILER_DETAIL_CALL_COUNTER))
573
        print "I am here"
-
 
574
        self.agentId = int(agentId)
573
        self.agentId = int(agentId)
575
        self.callType = callType
574
        self.callType = callType
576
        if retailerId is not None:
575
        if retailerId is not None:
577
            self.retailerId = int(retailerId)
576
            self.retailerId = int(retailerId)
578
            retailerLink = session.query(RetailerLinks).filter_by(id=self.retailerId).first()
577
            retailerLink = session.query(RetailerLinks).filter_by(id=self.retailerId).first()
Line 610... Line 609...
610
    def on_post(self, req, resp, agentId, callType):
609
    def on_post(self, req, resp, agentId, callType):
611
        returned = False
610
        returned = False
612
        self.agentId = int(agentId)
611
        self.agentId = int(agentId)
613
        self.callType = callType
612
        self.callType = callType
614
        jsonReq = json.loads(req.stream.read(), encoding='utf-8')
613
        jsonReq = json.loads(req.stream.read(), encoding='utf-8')
615
        print jsonReq
614
        lgr.info( "Request ----\n"  + jsonReq)
616
        self.jsonReq = jsonReq
615
        self.jsonReq = jsonReq
617
        invalidNumber = self.invalidNumber
616
        invalidNumber = self.invalidNumber
618
        callLater = self.callLater
617
        callLater = self.callLater
619
        alreadyUser = self.alReadyUser
618
        alreadyUser = self.alReadyUser
620
        verifiedLinkSent = self.verifiedLinkSent
619
        verifiedLinkSent = self.verifiedLinkSent