Subversion Repositories SmartDukaan

Rev

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

Rev 15001 Rev 15081
Line 1... Line 1...
1
import json
1
from bson import json_util
-
 
2
from bson.json_util import dumps
-
 
3
from datetime import datetime
2
from dtr import main
4
from dtr import main
-
 
5
from dtr.config import PythonPropertyReader
3
from dtr.storage import Mongo
6
from dtr.storage import Mongo
4
from bson import json_util
7
from dtr.storage.DataService import Retailers, Users
5
import falcon
-
 
6
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
8
from dtr.utils import FetchLivePrices, DealSheet as X_DealSheet, \
7
UserSpecificDeals
9
    UserSpecificDeals
8
from bson.json_util import dumps
10
from elixir import *
-
 
11
from sqlalchemy.sql.expression import or_
-
 
12
import falcon
9
 
13
import json
-
 
14
import traceback
-
 
15
global RETAILER_DETAIL_CALL_COUNTER
-
 
16
RETAILER_DETAIL_CALL_COUNTER = 0
10
 
17
 
-
 
18
DEALER_RETRY_FACTOR = int(PythonPropertyReader.getConfig('DEALER_RETRY_FACTOR'))
11
class CategoryDiscountInfo(object):
19
class CategoryDiscountInfo(object):
12
    
20
    
13
    def on_get(self, req, resp):
21
    def on_get(self, req, resp):
14
        
22
        
15
        result = Mongo.getAllCategoryDiscount()
23
        result = Mongo.getAllCategoryDiscount()
Line 466... Line 474...
466
        
474
        
467
        category_id = req.get_param_as_int("category_id")
475
        category_id = req.get_param_as_int("category_id")
468
        result = Mongo.getBrandsForFilter(category_id)
476
        result = Mongo.getBrandsForFilter(category_id)
469
        resp.body = dumps(result)
477
        resp.body = dumps(result)
470
    
478
    
-
 
479
 
-
 
480
class RetailerDetail():
-
 
481
    global RETAILER_DETAIL_CALL_COUNTER
-
 
482
    def getRetryRetailer(self,failback=False):
-
 
483
        retailer = None
-
 
484
        status = 'fretry' if self.callType == 'followup' else 'retry'
-
 
485
        try:
-
 
486
            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()
-
 
487
            if retailer is not None:
-
 
488
                print "getRetryRetailer", retailer.id
-
 
489
            else:
-
 
490
                if failback:
-
 
491
                    retailer = self.getNewRetailer(False)
-
 
492
            if status=='fresh':
-
 
493
                retailer.status = 'assigned'
-
 
494
            else:
-
 
495
                retailer.status = 'fassigned'
-
 
496
            retailer.retry_count += 1
-
 
497
            session.commit()
-
 
498
        finally:
-
 
499
            session.close()
-
 
500
        return retailer
-
 
501
            
-
 
502
    def getNewRetailer(self,failback=True):
-
 
503
        retry = True
-
 
504
        retailer = None 
-
 
505
        try:
-
 
506
            while(retry):
-
 
507
                print "Calltype", self.callType
-
 
508
                status=self.callType
-
 
509
                query = session.query(Retailers).filter(Retailers.status==status)
-
 
510
                if status=='fresh':
-
 
511
                    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)
-
 
512
                retailer = query.with_lockmode("update").first()
-
 
513
                if retailer is not None:
-
 
514
                    print "retailer", retailer.id
-
 
515
                    if status=="fresh":
-
 
516
                        userquery = session.query(Users)
-
 
517
                        if retailer.contact2 is not None:
-
 
518
                            userquery = userquery.filter(Users.mobile_number.in_([retailer.contact1,retailer.contact2]))
-
 
519
                        else:
-
 
520
                            userquery = userquery.filter_by(mobile_number=retailer.contact1)
-
 
521
                        user = userquery.first()
-
 
522
                        if user is not None:
-
 
523
                            retailer.status = 'alreadyuser'
-
 
524
                            print "retailer.status", retailer.status
-
 
525
                            session.commit()
-
 
526
                            continue
-
 
527
                        retailer.status = 'assigned'
-
 
528
                    else:
-
 
529
                        retailer.status = 'fassigned'
-
 
530
                    print "Found Retailer", retailer.id, "with status", status,"assigned to", self.agentId
-
 
531
                    retailer.retry_count = 0
-
 
532
                    session.commit()
-
 
533
                    print "-"*50
-
 
534
                    print "Found Retailer", retailer.id, "with status", status,"assigned to", self.agentId
-
 
535
                    retry=False
-
 
536
                        
-
 
537
                else:
-
 
538
                    print "No fresh/followup retailers found"
-
 
539
                    if failback:
-
 
540
                        retailer = self.getRetryRetailer(False)
-
 
541
                    retry=False
-
 
542
        except:
-
 
543
            print traceback.print_exc()
-
 
544
        finally:
-
 
545
            session.close()
-
 
546
        return retailer
-
 
547
    
-
 
548
    def on_get(self, req, resp, agentId, callType):
-
 
549
        global RETAILER_DETAIL_CALL_COUNTER
-
 
550
        RETAILER_DETAIL_CALL_COUNTER += 1
-
 
551
        print "RETAILER_DETAIL_CALL_COUNTER", RETAILER_DETAIL_CALL_COUNTER
-
 
552
        print "I am here"
-
 
553
        self.agentId = int(agentId)
-
 
554
        self.callType = callType
-
 
555
        retryFlag = False 
-
 
556
        agentId = int(agentId)
-
 
557
        if RETAILER_DETAIL_CALL_COUNTER % DEALER_RETRY_FACTOR ==0:
-
 
558
            retryFlag=True
-
 
559
        
-
 
560
        if retryFlag:
-
 
561
            retailer = self.getRetryRetailer()
-
 
562
        else:
-
 
563
            retailer = self.getNewRetailer()
-
 
564
        
-
 
565
        if retailer is None:
-
 
566
            resp.body = "{\"result\":\"{}\"}"
-
 
567
        else:
-
 
568
            resp.body = json.dumps(todict(getRetailerObj(retailer)), encoding='utf-8')
-
 
569
        
-
 
570
    def on_post(self, req, resp, agentId, callType):
-
 
571
        self.agentId = int(agentId)
-
 
572
        self.callType = callType
-
 
573
        jsonReq = json.loads(req.stream.read(), encoding='utf-8')
-
 
574
        resp.body = json.dumps(jsonReq, encoding='utf-8')
-
 
575
 
-
 
576
 
-
 
577
def todict(obj, classkey=None):
-
 
578
    if isinstance(obj, dict):
-
 
579
        data = {}
-
 
580
        for (k, v) in obj.items():
-
 
581
            data[k] = todict(v, classkey)
-
 
582
        return data
-
 
583
    elif hasattr(obj, "_ast"):
-
 
584
        return todict(obj._ast())
-
 
585
    elif hasattr(obj, "__iter__"):
-
 
586
        return [todict(v, classkey) for v in obj]
-
 
587
    elif hasattr(obj, "__dict__"):
-
 
588
        data = dict([(key, todict(value, classkey)) 
-
 
589
            for key, value in obj.__dict__.iteritems() 
-
 
590
            if not callable(value) and not key.startswith('_')])
-
 
591
        if classkey is not None and hasattr(obj, "__class__"):
-
 
592
            data[classkey] = obj.__class__.__name__
-
 
593
        return data
-
 
594
    else:
-
 
595
        return obj
-
 
596
    
-
 
597
def getRetailerObj(retailer):
-
 
598
    obj = Mock()
-
 
599
    obj.title = retailer.title
-
 
600
    obj.contact1 = retailer.contact1
-
 
601
    obj.contact2 = retailer.contact2
-
 
602
    obj.address = retailer.address
-
 
603
    obj.id = retailer.id
-
 
604
    obj.scheduled = (retailer.call_priority == 'user_initiated')
-
 
605
    return obj
-
 
606
    
-
 
607
class Mock(object):
-
 
608
    pass
-
 
609
    
-
 
610
def main():
-
 
611
    ret = RetailerDetail()
-
 
612
    resp = Mock()
-
 
613
    ret.on_get(None, resp, 1, 'fresh')
-
 
614
 
-
 
615
if __name__ == '__main__':
-
 
616
        main()
471
617