Subversion Repositories SmartDukaan

Rev

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

Rev 15241 Rev 15254
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)