Subversion Repositories SmartDukaan

Rev

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

Rev 18256 Rev 18266
Line 1... Line -...
1
from bson import json_util
-
 
2
from bson.json_util import dumps
1
from bson.json_util import dumps
3
from datetime import datetime, timedelta
2
from datetime import datetime, timedelta
4
from pyshorteners.shorteners  import Shortener
3
from pyshorteners.shorteners  import Shortener
5
from dtr import main
4
from dtr import main
6
from dtr.config import PythonPropertyReader
5
from dtr.config import PythonPropertyReader
7
from dtr.storage import Mongo
6
from dtr.storage import Mongo
8
from dtr.storage.DataService import Retailers, Users, CallHistory, RetryConfig, \
7
from dtr.storage.DataService import Retailers, Users, CallHistory, RetryConfig, \
9
    RetailerLinks, Activation_Codes, Agents, Agent_Roles, AgentLoginTimings, \
8
    RetailerLinks, Activation_Codes, Agents, Agent_Roles, AgentLoginTimings, \
10
    FetchDataHistory, RetailerContacts, Orders, OnboardedRetailerChecklists,\
9
    FetchDataHistory, RetailerContacts, Orders, OnboardedRetailerChecklists,\
11
    RetailerAddresses, Pincodeavailability, app_offers, appmasters, user_app_cashbacks, user_app_installs,\
10
    RetailerAddresses, Pincodeavailability, app_offers, appmasters, user_app_cashbacks, user_app_installs,\
12
    Postoffices, UserMasterData
11
    Postoffices, UserCrmCallingData
13
from dtr.storage.Mongo import get_mongo_connection
12
from dtr.storage.Mongo import get_mongo_connection
14
from dtr.storage.Mysql import fetchResult
13
from dtr.storage.Mysql import fetchResult
15
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
14
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
16
    UserSpecificDeals
15
    UserSpecificDeals
17
from dtr.utils.utils import getLogger,encryptMessage,decryptMessage,\
16
from dtr.utils.utils import getLogger,encryptMessage,decryptMessage,\
Line 30... Line 29...
30
import urllib2
29
import urllib2
31
import uuid
30
import uuid
32
import gdshortener
31
import gdshortener
33
from dtr.dao import AppOfferObj, UserAppBatchDrillDown, UserAppBatchDateDrillDown
32
from dtr.dao import AppOfferObj, UserAppBatchDrillDown, UserAppBatchDateDrillDown
34
import base64
33
import base64
-
 
34
import MySQLdb
35
 
35
 
36
alphalist = list(string.uppercase)
36
alphalist = list(string.uppercase)
37
alphalist.remove('O')
37
alphalist.remove('O')
38
numList = ['1','2','3','4','5','6','7','8','9']
38
numList = ['1','2','3','4','5','6','7','8','9']
39
codesys = [alphalist, alphalist, numList, numList, numList]
39
codesys = [alphalist, alphalist, numList, numList, numList]
Line 1622... Line 1622...
1622
class GetUserCrmApplication:
1622
class GetUserCrmApplication:
1623
    
1623
    
1624
    def on_get(self,req,resp):
1624
    def on_get(self,req,resp):
1625
        project_name = req.get_param("project_name")
1625
        project_name = req.get_param("project_name")
1626
        if project_name == 'accessories':
1626
        if project_name == 'accessories':
-
 
1627
            project_id=1
1627
            user = session.query(UserMasterData).filter_by(project_id=1).filter(or_(UserMasterData.next_call_time<=datetime.now(),UserMasterData.status=='new')).filter(UserMasterData.pincode_servicable==True).order_by(UserMasterData.next_call_time).order_by(UserMasterData.id).with_lockmode("update").first()
1628
            user = session.query(UserCrmCallingData).filter_by(project_id=1).filter(or_(UserCrmCallingData.next_call_time<=datetime.now(),UserCrmCallingData.status=='new')).filter(UserCrmCallingData.pincode_servicable==True).filter(UserCrmCallingData.user_available==0).filter(UserCrmCallingData.contact1!=None).order_by(UserCrmCallingData.next_call_time).order_by(UserCrmCallingData.id).with_lockmode("update").first()
1628
            #.filter(UserMasterData.modified<=(datetime.now()-timedelta(days=3)))
1629
            #.filter(UserMasterData.modified<=(datetime.now()-timedelta(days=3)))
1629
            if user is None:
1630
            if user is None:
-
 
1631
                insertUserCrmData(project_id)
1630
                fetchUserMasterData()
1632
                user = session.query(UserCrmCallingData).filter_by(project_id=1).filter(or_(UserCrmCallingData.next_call_time<=datetime.now(),UserCrmCallingData.status=='new')).filter(UserCrmCallingData.pincode_servicable==True).filter(UserCrmCallingData.user_available==0).filter(UserCrmCallingData.contact1!=None).order_by(UserCrmCallingData.next_call_time).order_by(UserCrmCallingData.id).with_lockmode("update").first()
-
 
1633
            user.status =  'assigned'
-
 
1634
            user.agent_id = req.get_param("agent_id")
-
 
1635
            user.user_available= 1
-
 
1636
            user.counter=1
-
 
1637
            session.commit()
1631
            else:
1638
            session.close()
1632
                resp.body = json.dumps(todict(getUserObject(user)), encoding='utf-8')
1639
            resp.body = json.dumps(todict(getUserObject(user)), encoding='utf-8')
1633
 
1640
    
1634
def fetchUserMasterData():
1641
def insertUserCrmData(project_id):
1635
    #First check from the table whether data is present or not UserMasterData
-
 
1636
    #If Data is empty then fetch the details using getCartDetailsUser  
1642
    if project_id==1:  
1637
    getCartDetailsUser()
1643
        getCartDetailsUser()
1638
      
1644
      
1639
def getCartDetailsUser():
1645
def getCartDetailsUser():
1640
    userList=[]
1646
    userList=[]
1641
    orderUserList=[]
1647
    orderUserList=[]
1642
    userMasterMap={}
1648
    userMasterMap={}
Line 1676... Line 1682...
1676
                userMasterMap[i.get('user_id')]=i.get('created')
1682
                userMasterMap[i.get('user_id')]=i.get('created')
1677
        else:
1683
        else:
1678
            userMasterMap[i.get('user_id')]=i.get('created')
1684
            userMasterMap[i.get('user_id')]=i.get('created')
1679
 
1685
 
1680
    d_sorted = sorted(zip(userMasterMap.values(), userMasterMap.keys()))
1686
    d_sorted = sorted(zip(userMasterMap.values(), userMasterMap.keys()))
1681
    
1687
    counter=0
1682
    for i in range(0,20):
1688
    for i in d_sorted:
1683
        userId=d_sorted[i][1]
1689
        print counter
1684
        userMasterData = UserMasterData()
-
 
1685
        userMasterData.user_id = userId 
-
 
1686
        userMasterData.project_id = 1
-
 
1687
        userMasterData.contact1 = getUserContactDetails(userId)
-
 
1688
        userMasterData.counter = 0
1690
        if counter==20:
1689
        userMasterData.created = datetime.now()
-
 
1690
        userMasterData.modified = datetime.now()
-
 
1691
        userMasterData.status = 'new'
-
 
1692
        userMasterData.pincode_servicable = checkPincodeServicable(userId)
-
 
1693
        session.commit()
1691
            break
1694
    session.close()    
-
 
1695
 
-
 
1696
def getUserContactDetails(userId):
-
 
1697
    r = session.query(Users.mobile_number).filter_by(id=userId).first()
1692
        userCheck = session.query(UserCrmCallingData).filter_by(user_id=i[1]).filter(UserCrmCallingData.user_available==1).first()
1698
    if r is None:
1693
        print userCheck
1699
        return None
1694
        if userCheck is None:
1700
    else:
-
 
1701
        return r[0]
1695
            counter=counter+1
1702
 
-
 
1703
def checkPincodeServicable(userId):
1696
            print i[0],i[1],counter
1704
    checkAddressUser = "select distinct pincode from all_user_addresses where user_id= (%s)"
-
 
1705
    result = fetchResult(checkAddressUser,userId)
-
 
1706
    if len(result)==0:
-
 
1707
        return True
1697
            userId=i[1]
1708
    else:
-
 
1709
        myquery = "select count(*) from (select distinct pincode from all_user_addresses where user_id= (%s))a join pincodeavailability p on a.pincode=p.code"
-
 
1710
        result = fetchResult(myquery,userId)
1698
            userMasterData = UserCrmCallingData()
1711
        if result[0][0]==0:
1699
            userMasterData.user_id = userId 
1712
            return False
1700
            userMasterData.name =getUsername(userId) 
1713
        else:
-
 
1714
            return True
1701
            userMasterData.project_id = 1
1715
 
-
 
1716
def getUserObject(user):
-
 
1717
    obj = Mock()
-
 
1718
    obj.user_id = user.user_id
1702
            userMasterData.user_available=0
1719
    result = fetchResult("select * from useractive where user_id=%d"%(user.user_id))
1703
            userMasterData.contact1 = getUserContactDetails(userId)
1720
    if result == ():
-
 
1721
        obj.last_active = None
1704
            userMasterData.counter = 0
1722
    else:
-
 
1723
        obj.last_active =datetime.strftime(result[0][1], '%d/%m/%Y %H:%M:%S')
1705
            userMasterData.created = datetime.now()
1724
        
-
 
1725
    obj.contact = user.contact1
1706
            userMasterData.modified = datetime.now()
1726
    obj.timeStamp=None
1707
            userMasterData.status = 'new'
1727
    
-
 
1728
    details = get_mongo_connection().Dtr.merchantOrder.find({"userId":user.user_id}).sort([("createdOn",-1)]).limit(1)
1708
            userMasterData.pincode_servicable = checkPincodeServicable(userId)
1729
    for detail in details:
1709
            session.commit()
1730
        obj.timeStamp= detail.get('createdOn')
1710
        session.close()    
1731
    
-
 
1732
    obj.totalOrders = get_mongo_connection().Dtr.merchantOrder.find({"userId":user.user_id}).count()
-
 
1733
    
-
 
1734
    return obj
-
 
1735
 
1711
 
1736
def getCartTabsUser():
1712
def getCartTabsUser():
1737
    userList=[]
1713
    userList=[]
1738
    orderUserList=[]
1714
    orderUserList=[]
1739
    userMasterMap={}
1715
    userMasterMap={}
Line 1775... Line 1751...
1775
                userMasterMap[i.get('user_id')]=i.get('created')
1751
                userMasterMap[i.get('user_id')]=i.get('created')
1776
        else:
1752
        else:
1777
            userMasterMap[i.get('user_id')]=i.get('created')
1753
            userMasterMap[i.get('user_id')]=i.get('created')
1778
 
1754
 
1779
    d_sorted = sorted(zip(userMasterMap.values(), userMasterMap.keys()))
1755
    d_sorted = sorted(zip(userMasterMap.values(), userMasterMap.keys()))
-
 
1756
 
-
 
1757
def getUserContactDetails(userId):
-
 
1758
    r = session.query(Users.mobile_number).filter_by(id=userId).first()
-
 
1759
    if r is None:
-
 
1760
        return None
-
 
1761
    else:
-
 
1762
        return r[0]
-
 
1763
 
-
 
1764
def getUsername(userId):
-
 
1765
    r = session.query(Users.first_name).filter_by(id=userId).first()
-
 
1766
    if r is None:
-
 
1767
        return None
-
 
1768
    else:
-
 
1769
        return r[0]
-
 
1770
 
-
 
1771
def checkPincodeServicable(userId):
-
 
1772
    checkAddressUser = "select distinct pincode from all_user_addresses where user_id= (%s)"
-
 
1773
    result = fetchResult(checkAddressUser,userId)
-
 
1774
    if len(result)==0:
-
 
1775
        return True
-
 
1776
    else:
-
 
1777
        myquery = "select count(*) from (select distinct pincode from all_user_addresses where user_id= (%s))a join pincodeavailability p on a.pincode=p.code"
-
 
1778
        result = fetchResult(myquery,userId)
-
 
1779
        if result[0][0]==0:
-
 
1780
            return False
-
 
1781
        else:
-
 
1782
            return True
-
 
1783
 
-
 
1784
def getUserObject(user):
-
 
1785
    obj = Mock()
-
 
1786
    obj.user_id = user.user_id
-
 
1787
    result = fetchResult("select * from useractive where user_id=%d"%(user.user_id))
-
 
1788
    if result == ():
-
 
1789
        obj.last_active = None
-
 
1790
    else:
-
 
1791
        obj.last_active =datetime.strftime(result[0][1], '%d/%m/%Y %H:%M:%S')
-
 
1792
        
-
 
1793
    obj.contact = user.contact1
-
 
1794
    obj.timeStamp=None
1780
    
1795
    
-
 
1796
#     details = get_mongo_connection().Dtr.merchantOrder.find({"userId":user.user_id}).sort([("createdOn",-1)]).limit(1)
-
 
1797
#     for detail in details:
-
 
1798
#         obj.timeStamp= detail.get('createdOn')
-
 
1799
    
-
 
1800
    details = session.query(Orders).filter_by(user_id = user.user_id).filter(~Orders.status.in_(['ORDER_NOT_CREATED_KNOWN', 'ORDER_ALREADY_CREATED_IGNORED'])).order_by(desc(Orders.created)).first()
-
 
1801
    if details is None:
-
 
1802
        obj.timeStamp =None
-
 
1803
    else:
-
 
1804
        print details.created
-
 
1805
    obj.totalOrders = session.query(Orders).filter_by(user_id = user.user_id).filter(~Orders.status.in_(['ORDER_NOT_CREATED_KNOWN', 'ORDER_ALREADY_CREATED_IGNORED'])).count()
-
 
1806
 
-
 
1807
    cartResult = fetchResult("select * from user_accounts where account_type ='cartId' and user_id=%d"%(user.user_id))
-
 
1808
    if cartResult == ():
-
 
1809
        obj.obj.lastActiveCartTime = None
-
 
1810
    else:
-
 
1811
        conn = MySQLdb.connect("192.168.190.114", "root","shop2020", "user")
-
 
1812
        cursor = conn.cursor()
-
 
1813
        cursor.execute("select updated_on from cart where id=%s",(cartResult[0][1]))
-
 
1814
        result = cursor.fetchall()
-
 
1815
        if result ==():
-
 
1816
            obj.obj.lastActiveCartTime = None
-
 
1817
        else:
-
 
1818
            print result
-
 
1819
            obj.lastActiveCartTime =datetime.strftime(result[0][1], '%d/%m/%Y %H:%M:%S')
-
 
1820
        conn.close()            
-
 
1821
    return obj
-
 
1822
 
1781
def main():
1823
def main():
1782
    #tagActivatedReatilers()
1824
    #tagActivatedReatilers()
1783
    #a = RetailerDetail()
1825
    #a = RetailerDetail()
1784
    #retailer = a.getNotActiveRetailer()
1826
    #retailer = a.getNotActiveRetailer()
1785
    #otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
1827
    #otherContacts = [r for r, in session.query(RetailerContacts.mobile_number).filter_by(retailer_id=retailer.id).order_by(RetailerContacts.contact_type).all()]
1786
    #print json.dumps(todict(getRetailerObj(retailer, otherContacts, 'fresh')), encoding='utf-8')
1828
    #print json.dumps(todict(getRetailerObj(retailer, otherContacts, 'fresh')), encoding='utf-8')
1787
    #print make_tiny("AA")
1829
    #print make_tiny("AA")
1788
    a = GetUserCrmApplication()
1830
    a = GetUserCrmApplication()
1789
    a.getUser('accessories')
1831
    a.getUser('accessories',2)
1790
    
1832
    
1791
if __name__ == '__main__':
1833
if __name__ == '__main__':
1792
    main()
1834
    main()
1793
        
1835
        
1794
1836