Esempio n. 1
0
 def _handle_megamillions(self, date, record):
     winnings = json.loads(record.winnings)
     
     _base = winnings[:-1]
     _mega = winnings[-1:]
     
     base = dumps(_base)
     mega = dumps(_mega)
     
     # Check Existing
     existing = LotteryDraw.objects.filter(component=self._megamillions, 
         date=date)
     if existing:
         existing = existing[0]
         if existing.result and existing.result != base:
             raise RuntimeError("Data Mismatch -%s- -%s-" % (existing.result, base))
     
     # Check Existing (Megaplier)
     existing = LotteryDraw.objects.filter(component=self._megaplier, 
         date=date)
     if existing:
         existing = existing[0]
         if existing.result and existing.result != mega:
             raise RuntimeError("Data Mismatch -%s- -%s-" % (existing.result, mega))
         
     # Check Data
     handler = GameManager.get(self._megamillions.parent.code)
     handler.validate_numbers(_base)
     result_base = handler.decode(base)
     result_mega = handler.decode(mega, "Megaplier")
     
     
     # Create
     try:
         draw = LotteryDraw.objects.get(component=self._megamillions, date=date)
     except LotteryDraw.DoesNotExist:
         draw, created = LotteryDraw.objects.get_or_create(
             component=self._megamillions, date=date)
     finally:
         draw.result = result_base
         draw.official = True
         draw.save()
     
     # Create Megaplier
     try:
         draw = LotteryDraw.objects.get(component=self._megaplier, date=date)
     except LotteryDraw.DoesNotExist:
         draw, created = LotteryDraw.objects.get_or_create(
             component=self._megaplier, date=date)
     finally:
         draw.result = result_mega
         draw.official = True
         draw.save()
Esempio n. 2
0
 def _handle_powerball(self, date, record):
     existing = LotteryDraw.objects.filter(component=self._powerball, 
         date=date)
     
     result = dumps(json.loads(record.winnings))
     
     # Check Data Conflicts
     if existing:
         existing = existing[0]
         if existing.result and existing.result != result:
             raise RuntimeError("Data Mismatch -%s- -%s-" % (existing.result, result))
     
     # Check Data
     handler = GameManager.get(self._powerball.parent.name)
     _result = handler.decode(record.winnings)
     handler.validate_numbers(json.loads(record.winnings))
     
     # Create
     try:
         draw = LotteryDraw.objects.get(component=self._powerball, date=date)
     except LotteryDraw.DoesNotExist:
         draw, created = LotteryDraw.objects.get_or_create(
             component=self._powerball, date=date)
     finally:
         draw.result = _result
         draw.official = True
         draw.save()
Esempio n. 3
0
 def decode(cls, raw, format=None):
     pattern = re.compile(r"\d+")
     result = map(int, re.findall(pattern, raw))
     
     if len(result) != 12:
         raise ValueError("Unexpected Decode Value: %s" % result)
     
     return dumps(result)
Esempio n. 4
0
 def decode(cls, raw, format="Powerball"):
     pattern = re.compile(r"\d+")
     result = map(int, re.findall(pattern, raw))
     #power_play = result.pop()
     if len(result) != 7:
         raise ValueError("Unexpected Decode Value: %s" % result)
     
     return dumps(result)
Esempio n. 5
0
 def decode(cls, raw, format="MegaMillionsCA"):
     pattern = re.compile(r"\d+")
     result = map(int, re.findall(pattern, raw))
     
     if format == "MegaMillionsCA":
         if len(result) != 6:
             raise ValueError("Unexpected Decode Value: %s for %s" % (result, format))
     else:
         raise NotImplementedError()
     
     return dumps(result)
Esempio n. 6
0
 def decode(cls, raw, format=None):
     pattern = re.compile(r"\d+")
     #result = map(int, re.findall(pattern, raw))
     
     result_from_xml = map(int, re.findall(pattern, raw))
     temp_race_time = result_from_xml[-3:]
     racetime = ':'.join(str(x) for x in temp_race_time)
     result = result_from_xml[0:-3][1::2]
     
     if len(result) != 3:
         raise ValueError("Unexpected Decode Value: %s" % result)
     
     return dumps(result)
Esempio n. 7
0
    def decode(cls, raw, format="FantasyPowerball"):

        pattern = re.compile(r"\d+")
        result = map(int, re.findall(pattern, raw))
        result_without_powerplay = result[0:6]

        if format == "Powerball":
            if len(result_without_powerplay) != 6:
                raise ValueError("Unexpected Decode Value: %s for %s" % (result, format))
        else:
            raise NotImplementedError()

        return dumps(result)
Esempio n. 8
0
 def decode_race_time(cls, raw, format=None):
     
     pattern = re.compile(r"\d+")
     #result = map(int, re.findall(pattern, raw))
     
     result_from_xml = map(int, re.findall(pattern, raw))
     temp_race_time = result_from_xml[-3:]
     for idx,num in enumerate(temp_race_time):
         if idx==2 and num < 10:
             temp_race_time[idx]='0'+str(num)
     racetime = ':'.join(str(x) for x in temp_race_time)
     result = result_from_xml[0:-3][1::2]
     racetime = racetime.replace(':','.').replace('.',':',1)
     if len(temp_race_time) != 3:
         raise ValueError("Unexpected Race Value: %s" % result)
     
     return dumps(racetime)
Esempio n. 9
0
 def run(self):        
     raise RuntimeError("Deprecated")
     
     for ticket in LegacyTicket.objects.filter(uid=self._source.pk):
         if ticket.type == "megamillions":
             game = LotteryGame.objects.get(code="MegaMillions")
         elif ticket.type == "powerball":
             game = LotteryGame.objects.get(code="Powerball")
         else:
             continue
         
         # Get Plays
         try:
             plays = json.loads(ticket.rows)
         except:
             continue
         
         # Get Component/ Handler
         handler = game.handler
         component = game.components.all()[0]
         date = datetime.datetime.fromtimestamp(ticket.dtime).date()
         
         submission = uuid.uuid4().hex[:16]
                     
         # Convert Tickets
         validated = []
         for play in plays:
             if game.code == "Powerball":
                 _play = {
                     u'numbers': play["numbers"] + [play["power"]], 
                     u'multiplier': play["pp"]
                 }
             else:
                 _play = {
                     u'numbers': play["numbers"] + [play["mega"]], 
                     u'multiplier': play["mp"]
                 }
             
             try:
                 handler.validate_play(_play)
             except Exception as e:
                 continue
             
             validated.append(_play)
             
         if not validated:
             continue
                         
         # Retrieve Draw 
         draw, created = LotteryDraw.objects.get_or_create(component=component, date=date)
                     
         # Retrieve Ticket
         ticket, created = LotteryTicket.objects.get_or_create(user=self._target, draw=draw)
         
         for _play in validated:
             serialized = dumps(_play)
             
             # Retrieve Play
             play, created = LotteryTicketPlay.objects.get_or_create(ticket=ticket, 
                 play=serialized)
             
             if not created:
                 continue
             
             # Calculate Winnings (if applicable)
             play.submission = submission
             play.update_winnings(save=True)
             
         # Mark Checked
         ticket.checked = True
         ticket.update(full=True)
Esempio n. 10
0
    def post(self,request):
      
	from yoolotto.util import currency
        import itertools

        # - parse json
        data = json.loads(request.body)
	end_component = 1
        valid = data['valid']
        state_codes={
             "TX":0,
             "CA":2,
             "AZ":3,
             "AR":4,
             "CO":5,
             "CT":6,
             "DE":7,
             "DC":8,
             "FL":9,
             "GA":10,
             "ID":11,
             "IL":12,
             "IN":13,
             "IA":14,
             "KS":15,
             "KY":16,
             "LA":17,
             "ME":18,
             "MD":19,
             "MA":20,
             "MI":21,
             "MN":22,
             "MO":23,
             "MT":24,
             "NE":25,
             "NH":26,
             "NJ":27,
             "NM":28,
             "NY":29,
             "NC":30,
             "ND":31,
             "OH":32,
             "OK":33,
             "OR":34,
             "PA":35,
             "RI":36,
             "SC":37,
             "SD":38,
             "TN":39,
             "VT":40,
             "VA":41,
             "WA":42,
             "WI":43,
             "WV":44,
         "WY":45
             }
        ticket_id = data['ticket']
        ticket_info = LotteryTicket.objects.get(id=ticket_id)

        play_id = data['playid']
        availability = LotteryTicketAvailable.objects.filter(play=play_id)[0]
        # - if valid
        if valid:

            
            # - get ticket info
            
            
            all_dates = data['drawdate'].split(",")
            defected = data["imagequality"]
            defected_ticket = False
            if defected == "No":
                defected_ticket = True
            draw_date = all_dates[0]
            data['drawdate'] = all_dates[0]
            division = data['state']
	    common_state = 1
            if division == 'CA':
                common_state = 2
            game_type_id = data['gametypeid']
            draw_time = data['drawTime']
            lines = []
            for item in data['lines']:
                lines.append(json.loads(json.dumps(item)))
            
            submission_record = None
            submission = uuid.uuid4().hex[:16]

            
            

            # - parse game type id
            if division == 'CA':
                game_types = {1:11,2:13}
                components = {1:"Powerballca",2:"MegaMillionsCA"}
            else:
                game_types = {1:1,4:6,8:7,7:5,6:4,3:2,5:3,2:0}
                components = {1:"Powerball",4:"TwoStep",7:"CashFive",3:"LottoTexas",2:"MegaMillions"}

            # - get game type
            game_type = game_types[game_type_id]

            # - get handler
            games = {}
            record = {}
            allocated = {}
            tickets = {}
            games[game_type] = EnumerationManager.game(game_type)
            game = games[game_type]#LotteryGame Obj
            handler = game.handler

            # - get component
            if game_type == 7 or game_type == 4 or game_type == 3:
                record = {'drawTime':draw_time}
                component = handler.get_component(record)
                end_component = None
                if data["consecutive"]:
                    record_copy = record
                    record_copy["drawTime"] = data["enddrawtime"]
                    end_component = handler.get_component(record_copy)
                #baseWager, sum, sumWager
                if game_type == 3:
                    enums = {1: "SUM",8: "ANY",9: "COMBO",10: "EXT",11: "EXTANY",}
                elif game_type == 4:
                    enums = {1: "SUM",2: "STR",3: "BOX",4: "STRBOX",5: "FRONT",6: "MID",7: "BACK",9: "COMBO"}
                if game_type == 3:
                    for line in lines:
                        line['sum'] = line.pop('sumitUp')
                        line['sumWager'] = line.pop('sumAmount')
                        line['baseWager'] = line['amount']
                        line['lineType'] = enums[line['lineType']]
			line['totalWager'] = line['amount']

			if line["lineType"] == "COMBO":
                            numbers = line['numbers']
                            if line['sum'] != None:
                                numbers = [line['sum']]
                            line["baseWager"] = currency.format(float(line["amount"]) / len(set(itertools.permutations(numbers))))
                        elif line["lineType"] in ["STRBOX", "EXTANY"]:
                            line["baseWager"] = currency.format(float(line["amount"]) / 2)
                        else:
                            line["baseWager"] = currency.format(line["amount"])

		elif game_type == 4:

                    for line in lines:
                        line['sum'] = line.pop('sumitUp')
                        line['sumWager'] = line.pop('sumAmount')
                        line['baseWager'] = line['amount']
                        line['lineType'] = enums[line['lineType']]
                        line['totalWager'] = line['amount']

			if line["lineType"] == "FRONT":
                            line["numbers"] = line["numbers"][0:2]+[0,0]
                        elif line["lineType"] == "MID":
                            line["numbers"] = [0]+line["numbers"][1:3]+[0]
                        elif line["lineType"] == "BACK":
                            line["numbers"] = [0,0]+line["numbers"][2:4]

			if line["lineType"] == "COMBO":
                            numbers = line['numbers']
                            if line['sum'] != None:
                                numbers = [line['sum']]
                            line["baseWager"] = currency.format(float(line["amount"]) / len(set(itertools.permutations(numbers))))
                        elif line["lineType"] in ["STRBOX", "EXTANY"]:
                            line["baseWager"] = currency.format(float(line["amount"]) / 2)
                        else:
                            line["baseWager"] = currency.format(line["amount"])

                else:
                    for line in lines:
                        line['sum'] = line.pop('sumitUp')
                        line['sumWager'] = line.pop('sumAmount')
                        line['baseWager'] = line['amount']
			line['totalWager'] = line['amount']

			

            else:
                component = LotteryGameComponent.objects.get(identifier=components[game_type_id])
                for line in lines :
                    line.pop('sumitUp')
                    line.pop('sumAmount')
                    line.pop('lineType')
                    line.pop('amount')
		    line['multiplier'] = data['ismultiplier']


            # - get updated draw
            date = datetime.datetime.strptime(draw_date, "%Y-%m-%d").date()
            updated_draw, created = LotteryDraw.objects.get_or_create(component=component,division_id=common_state,date=date)


            # - get record
            
            # - perform validation
            handler.preprocess_ticket(data)
            for item in lines :
                handler.validate_play(item)

            # - if draw is diffrent
            if updated_draw.id != ticket_info.draw.id :
                # create new ticket
                new_ticket_info, created = LotteryTicket.objects.get_or_create(deleted=False,user=ticket_info.user,draw=updated_draw,division=LotteryCountryDivision.objects.get(remote_id=division))
                valid_draw = updated_draw.id
                valid_ticket = new_ticket_info.id
                tickets[valid_ticket] = new_ticket_info

                submission_record, created = LotteryTicketSubmission.objects.get_or_create(submission=submission, ticket_id=valid_ticket)
                submission_record.save()

                # create new play
                for line in lines:
                    serialized = dumps(line)
                    play_record = LotteryTicketPlay(play=serialized,ticket=new_ticket_info,division=LotteryCountryDivision.objects.get(remote_id=division))
                    play_record.submission_old = submission
                    play_record.submission = submission_record
            
                    play_record.update_winnings(save=True)

                    line['gameType'] = game_type

                    available_record = LotteryTicketAvailable(available = True, json= line, ticket_id= valid_ticket, play_id=play_record.id, device = availability.device, image_first = "static/ticket/"+str(play_id)+"_1.jpg", defected = defected_ticket)

                    available_record.save()

                date = datetime.datetime.strptime(draw_date, "%Y-%m-%d").date()
                updated_draw, created = LotteryDraw.objects.get_or_create(component=component,division_id=common_state,date=date)

            else:
                # - if draw is same
                valid_draw = ticket_info.draw.id
                valid_ticket = ticket_info.id
                tickets[valid_ticket] = ticket_info

                submission_record, created = LotteryTicketSubmission.objects.get_or_create(submission=submission, ticket_id=valid_ticket)
                submission_record.save()

                availability.defected = defected_ticket
                #update previous play
                previous_play = LotteryTicketPlay.objects.get(id=play_id)

                if previous_play.play == None :
                    serialized = dumps(lines[0])
                    previous_play.play = serialized
                    previous_play.ticket = ticket_info
                    previous_play.division = LotteryCountryDivision.objects.get(remote_id=division)
                    previous_play.submission_old = submission
                    previous_play.submission = submission_record
                    previous_play.update_winnings(save=True)
                    lines.pop(0)
                
		availability.available = True
                availability.save()
                # create new play
                for line in lines:
                    serialized = dumps(line)
                    
                    play_record = LotteryTicketPlay(play=serialized,ticket=ticket_info,division=LotteryCountryDivision.objects.get(remote_id=division))
                    play_record.submission_old = submission
                    play_record.submission = submission_record
                    play_record.update_winnings(save=True)

                    line['gameType'] = game_type

                    available_record = LotteryTicketAvailable(available = True, json= line, ticket_id= valid_ticket, play_id=play_record.id, device = availability.device, image_first = "static/ticket/"+str(play_id)+"_1.jpg", defected = defected_ticket)

                    available_record.save()
            # - send notification

            user_devices = ticket_info.user.devices.all()
            text = 'your ticket is available'

            if game_type_id == 11:
                    gameType = 1
            elif game_type_id == 13:
                    gameType = 2
            else:
                    gameType = game_type_id
	    try:
            	for device in user_devices:
                    if not device.device_token:
                        continue

                    if device.is_ios():
                        apn = APNSender(device.device_token, text=text,
                                        custom={"code": "data_entry", "gameType": gameType,
                                                "drawId":valid_draw, "state":state_codes[division]
                                                })
                        apn.send()

                    elif device.is_android():

                        gcm = GCMSender(to=[device.device_token], data={"text": text,
                                                                        "code": "data_entry", "gameType": gameType,
                                                                        "state":division,
                                                                        "drawId":valid_draw,
                                                                        "ticket_id":valid_ticket
                                                                        })

                        gcm.send()
	    except:
		pass
            # - return result

            
	    
            try:
                user_client_record, created = UserClientLogin.objects.get_or_create(device=availability.device)
            except:
                user_client_record = UserClientLogin.objects.filter(device=availability.device)[0]

            for ticket in tickets.values():
                    allocated[ticket.pk] = ticket.update(availability.device,user_client_record.client_login)

            result = map(lambda x: x.representation(allocated=allocated), tickets.values())
            for _result in result:
                    coins = allocated.get(_result["ticket_id"], None)
                    if coins < 1:
                        coins = None

                    _result["coins"] = coins

            multi_draws = []
            draws = self.get_draws(all_dates,component,common_state,game_type,data['state'],end_component,handler)
            for each_draw in draws:

                multi_ticket_info, created = LotteryTicket.objects.get_or_create(deleted=False,user=ticket_info.user,draw=each_draw,division=LotteryCountryDivision.objects.get(remote_id=division))
                valid_ticket = multi_ticket_info.id

                submission_record, created = LotteryTicketSubmission.objects.get_or_create(submission=submission, ticket_id=valid_ticket)
                submission_record.save()

                for line in lines:
                    serialized = dumps(line)
                    play_record = LotteryTicketPlay(play=serialized,ticket=multi_ticket_info,division=LotteryCountryDivision.objects.get(remote_id=division))
                    play_record.submission_old = submission
                    play_record.submission = submission_record
            
                    play_record.update_winnings(save=True)

                    line['gameType'] = game_type

                    available_record = LotteryTicketAvailable(available = True, json= line, ticket_id= valid_ticket, play_id=play_record.id, device = availability.device, image_first = "static/ticket/"+str(play_id)+"_1.jpg")

                    available_record.save()

                #tickets[valid_ticket] = new_ticket_info
            #return result
        
        else:
            # - if reject
            
            # - send notification
            reason = data['RejectReason']
            availability.rejected = True
            availability.reason = reason
            availability.save()

            text = 'Your Ticket is Rejected'
            send_reject_notification(ticket_info,text,reason,)
            

        return {"sucess":True}
Esempio n. 11
0
    def post(self, request):
        
        from base64 import b64decode
        from django.core.files.base import ContentFile
        common_games=[0,1]# 0/Megamillion(TX),1/Powerball(TX)
        user = request.yoo["user"]
        old_version = False
        # Short-Circuit for Authentication Errors caused by invalid Device IDs
        if not request.yoo["user"] and request.yoo["auth"].get("__internal__reject__", False):
            raise exceptions.WebServiceAuthorizationFailed()
        try:
            data = process_req_body(json.loads(request.body))
            if not isinstance(data, list):
                raise RuntimeError()
        except:
            raise exceptions.WebServiceException("Invalid Ticket Data Format")

        if data[0]['state'] == 'CA' and data[0]['gameType'] == 0:
                game_type = 13
        elif data[0]['state'] == 'CA' and data[0]['gameType'] == 1:
                game_type = 11
        else:
            game_type = data[0]['gameType']

        games = {}
        success = False
        ticket = None
        for ticket in data:
            try:
                games[game_type] = EnumerationManager.game(game_type)
            except ValueError as e:
                raise exceptions.WebServiceException(str(e))

        tickets = {}
        allocated = {}
        plays = []
        result = []
        submission = uuid.uuid4().hex[:16]
        
        try:
            client_login_record, created = UserClientLogin.objects.get_or_create(device=request.yoo['device'])
        except:
            client_login_record = UserClientLogin.objects.filter(device=request.yoo['device'])[0]
        if ( request.META["HTTP_YOO_APP_VERSION"] in ['3.0.2','4.2.2'] and data[0]['state'] == 'TX' ) or not request.yoo['new_version']:
            for record in data:
                game_type=record["gameType"]
                game = games[game_type]#LotteryGame Obj
                handler = game.handler
                component = handler.get_component(record)

                try:
                    if not component:
                        component = game.components.all()[0]
                except:
                    continue

                date = datetime.datetime.strptime(record["drawingDate"], "%Y-%m-%d").date()
            if game_type in common_games:
                    common_division = LotteryCountryDivision.objects.get(remote_id="TX")
                    local_division = LotteryCountryDivision.objects.get(remote_id=record['state'])#TX,NY,AZ...(44)

                    # Retrieve Draw 
                    common_draw, created = LotteryDraw.objects.get_or_create(component=component, date=date,division_id=common_division.id)

                    # Retrieve Ticket
                    ticket, created = LotteryTicket.objects.get_or_create(user=user,draw=common_draw,division_id=local_division.id)
                    submission_record = None


                    ticket_client, created = LotteryTicketClient.objects.get_or_create(device=str(request.yoo['device']).split(":")[1],draw=common_draw,email=client_login_record.client_login)

                    tickets[ticket.pk] = ticket


                    record = handler.preprocess_ticket(record)
                    invalid = []

                    for _play in record["lines"]:
                        # Sanitize Data
                        try:
                            handler.validate_play(_play)
                        except Exception as e:
                            invalid.append([_play, e])
                            continue

                        serialized = dumps(_play)

                        # Retrieve Play
                        play, created = LotteryTicketPlay.objects.get_or_create(ticket=ticket,
                            play=serialized,division_id=local_division.id)

                        _saved = False
                        if created:#new Play
                            if not submission_record:
                                submission_record, created = LotteryTicketSubmission.objects.get_or_create(
                                    submission=submission, ticket=ticket)
                                submission_record.save()

                            play.submission_old = submission
                            play.submission = submission_record

                        # Calculate Winnings (if applicable)
                        play.update_winnings(save=True)

                    if invalid:
                        raise LotteryPlayInvalidException(["%s: %s" % (x[0]["numbers"], x[1].args[0]) for x in invalid])
            else:
                    division = LotteryCountryDivision.objects.get(remote_id=record['state'])
            # Retrieve Draw 
                    draw, created = LotteryDraw.objects.get_or_create(component=component, date=date,division_id=division.id)

                    # Retrieve Ticket
                    ticket, created = LotteryTicket.objects.get_or_create(user=user, draw=draw,division_id=division.id)
                    submission_record = None

                    tickets[ticket.pk] = ticket


                    record = handler.preprocess_ticket(record)


                    invalid = []

                    for _play in record["lines"]:
                # Sanitize Data
                        try:
                            handler.validate_play(_play)
                        except Exception as e:
                            invalid.append([_play, e])
                            continue

                        serialized = dumps(_play)

                        # Retrieve Play
                        play, created = LotteryTicketPlay.objects.get_or_create(ticket=ticket,
                            play=serialized,division_id=division.id)

                        _saved = False
                        if created:
                            if not submission_record:
                                submission_record, created = LotteryTicketSubmission.objects.get_or_create(
                                    submission=submission, ticket=ticket)
                        play.submission_old = submission
                        play.submission = submission_record

                        # Calculate Winnings (if applicable)
                        play.update_winnings(save=True)

                    if invalid:
                        raise LotteryPlayInvalidException(["%s: %s" % (x[0]["numbers"], x[1].args[0]) for x in invalid])

            # Refresh Tickets
            for ticket in tickets.values():

                allocated[ticket.pk] = ticket.update(request.yoo["device"],client_login_record.client_login)
            # Return Tickets
            result = map(lambda x: x.representation(allocated=allocated), tickets.values())
            for _result in result:
                coins = allocated.get(_result["ticket_id"], None)
                if coins < 1:
                    coins = None

                _result["coins"] = coins

            return result





        else:
            try:
                image_data = bytearray(eval(data[0]['image']))
            except:
                from base64 import b64decode
                image_data = b64decode(data[0]['image'])
                old_version = True

            if data[0]['gameType'] == 3:
                data[0]['lines'] = [{"baseWager":"0.50","lineType":"ANY","numbers":[],"sum":None,"sumWager":None,"totalWager":"0.50"}]
            else:
                data[0]['lines'] = [{'amount': u'0.5', u'raceTime': u'', u'numbers': [], u'lineType': 0, u'multiplier': False}]
            for record in data:
                game = games[game_type]#LotteryGame Obj
                handler = game.handler
                component = handler.get_component(record)
                
                record.pop('image', 0)
                try:
                    if not component:
                        component = game.components.all()[0]
                except:
                    continue
                date = datetime.datetime.strptime(record["drawingDate"], "%Y-%m-%d").date()
                if game_type in common_games:
                    common_division = LotteryCountryDivision.objects.get(remote_id="TX")
                    local_division = LotteryCountryDivision.objects.get(remote_id=record['state'])#TX,NY,AZ...(44)
                    # Retrieve Draw
                    common_draw, created = LotteryDraw.objects.get_or_create(component=component, date=date,division_id=common_division.id)
                    # Retrieve Ticket
                    try:
                        ticket, created = LotteryTicket.objects.get_or_create(user=user,draw=common_draw,division_id=local_division.id,deleted=False)
                    except:
                        ticket = LotteryTicket.objects.filter(user=user,draw=common_draw,division_id=local_division.id,deleted=False)[0]

                    ticket_client, created = LotteryTicketClient.objects.get_or_create(device=request.yoo['device'],draw=common_draw,email=client_login_record.client_login)
                    play= LotteryTicketPlay.objects.create(ticket=ticket,division_id=local_division.id)
                    play.save()

                    available, created = LotteryTicketAvailable.objects.get_or_create(ticket=ticket,play=play,defaults={"json":record,"device":str(request.yoo['device'])})
                    available.image_first = ContentFile(image_data, str(play.id)+"_1.jpg")
                    available.save()
                else:
                    division = LotteryCountryDivision.objects.get(remote_id=record['state'])
                    # Retrieve Draw
                    draw, created = LotteryDraw.objects.get_or_create(component=component, date=date,division_id=division.id)
                    #Retrieve Ticket

                    ticket, created = LotteryTicket.objects.get_or_create(user=user, draw=draw,division_id=division.id,deleted=False)
                    ticket_client, created = LotteryTicketClient.objects.get_or_create(device=request.yoo['device'],draw=draw,email=client_login_record.client_login)
                    play= LotteryTicketPlay.objects.create(ticket=ticket,division_id=division.id)
                    play.save()

                    available, created = LotteryTicketAvailable.objects.get_or_create(ticket=ticket,play=play,defaults={"json":record,"device":str(request.yoo['device'])})
                    available.image_first = ContentFile(image_data, str(play.id)+"_1.jpg")
                    available.save()                 

            success = True
            thread.start_new_thread( send_data_to_det, (success,ticket,play,game_type,image_data,data[0]['state'],old_version,data) )
            return {"success":success}