コード例 #1
0
ファイル: views.py プロジェクト: battleshoe/battleshoe
def island_ranking(request):
    if request.session.__contains__('islandId') and request.session.__contains__('account'):
        islandId = int(request.session['islandId'])
        playerQuery = Player.gql("WHERE islandId = :1 ORDER BY networth DESC",islandId)
        
        players = playerQuery.fetch(10)
        results = []
        
        for player in players:
            _playerDict = player.__dict__['_entity']
            playerId = player.key().id()
            plantQuery = Plant.gql("WHERE playerId = :1",playerId)
            countPlant = plantQuery.count()
            _playerDict['numPlants'] = countPlant
            _playerDict['numShoes'] = 0
            _playerDict['numWorkers'] = 0
            plants = plantQuery.fetch(countPlant)
            for plant in plants:
                _playerDict['numWorkers'] += plant.numOfWorkers
                plantId = plant.key().id()
                shoeQuery = Shoe.gql("WHERE plantId = :1",plantId)
                shoes = shoeQuery.fetch(1000)
                for shoe in shoes:
                    _playerDict['numShoes'] += shoe.qty
            results.append(_playerDict)
        
        return HttpResponse(simplejson.dumps(results),mimetype="application/json")
        
    else:
        dd = {}
        dd['error'] = "Error: No island selected. Please join or resume your game."
        return HttpResponse(simplejson.dumps(dd),mimetype="application/json")
コード例 #2
0
ファイル: views.py プロジェクト: battleshoe/battleshoe
def load_player(request):
    session = request.session
    dd = {}
    
    #check necessary arguments
    if session.__contains__('islandId') == False:
        dd['error'] = "missing islandId"
        return HttpResponse(simplejson.dumps(dd),mimetype="application/json")
    
    if session.__contains__('account') == False:
        dd['error'] = "Error: Not logined."
        return HttpResponse(simplejson.dumps(dd),mimetype="application/json")
    
    email = session['account'].email
    islandId = session['islandId']
    island = Island.get_by_id(islandId)
    player_q = Player.gql("WHERE email = :1 and islandId = :2",email,islandId)
    player = player_q.get()
    player_dict = player.__dict__['_entity']
    player_dict['playerId'] = player.key().id()
    #get number of factories
    plantQuery = Plant.gql("WHERE playerId = :1 and islandId = :2",player.key().id(), islandId)
    player_dict['numPlants'] = plantQuery.count()
    player_dict['numWorkers'] = 0
    plants = plantQuery.fetch(1000)
    plantIds = []
    for p in plants:
        player_dict['numWorkers'] += p.numOfWorkers
        plantIds.append(p.key().id())
    player_dict['numShoes'] = 0
    shoeQuery = Shoe.gql("WHERE plantId in :1",plantIds)
    shoes = shoeQuery.fetch(1000)
    for shoe in shoes:
        player_dict['numShoes'] += shoe.qty
    player_dict['islandName'] = island.name
    jsonString = simplejson.dumps(player_dict)
    
    return HttpResponse(jsonString,mimetype="application/json")
コード例 #3
0
ファイル: views.py プロジェクト: battleshoe/battleshoe
def demand_supply(request):
    if(request.GET.__contains__('playerId')):
        results = {}
        demand = []
        supply = []
        args = request.GET
        playerId = int(args.__getitem__('playerId'))
        plantQuery = Plant.gql("WHERE playerId = :1",playerId)
        plants = plantQuery.fetch(1000)
        for plant in plants:
            plantId = plant.key().id()
            shoeQuery = Shoe.gql("WHERE plantId = :1", plantId)
            shoes = shoeQuery.fetch(1000)
            for shoe in shoes:
                shoeId = shoe.key().id()
                supplyQuery = SupplyTransaction.gql("WHERE shoeId = :1",shoeId)
                supplys = supplyQuery.fetch(20)
                for _supply in supplys:
                    _sDict = _supply.__dict__['_entity']
                    _sDict['trxnDate'] = str(_sDict['trxnDate'])
                    _sDict['totalCost'] = float("%.2f" % round(_sDict['totalCost'],2))
                    _sDict['costPerUnit'] = float("%.2f" % round(_sDict['costPerUnit'],2))
                    _sDict['salePrice'] = float("%.2f" % round(shoe.price,2))
                    supply.append(_sDict)
                demandQuery = DemandTransaction.gql("WHERE shoeId = :1",shoeId)
                demands = demandQuery.fetch(20)
                for _demand in demands:
                    _dDict = _demand.__dict__['_entity']
                    demand.append(_dDict)
        results['demand'] = demand
        results['supply'] = supply
        n = {"count": len(results)}
        return HttpResponse(simplejson.dumps(results),mimetype="application/json")
    else:
        dd = {}
        dd['error'] = "Error: No game selected."
        return HttpResponse(simplejson.dumps(dd),mimetype="application/json")
    
#old method
#def _retrieve_shoe_templates(request):
#    '''
#    Return a list of shoes templates of a particular player(a particular plant)
#    '''
#    ret = []
#    if request.session.__contains__('account'):
#        getQuery = request.GET
#        playerId = int(getQuery.__getitem__('playerId'))
#        
#        shoes = Shoe.all()
#        for i in shoes:
#            plant = Plant.get_by_id(i.plantId)
#            if plant.playerId == playerId:
#               d = i.__dict__['_entity']
#                d['shoeId'] = i.key().id()
#                ret.append(d)
#    else:
#        error = {}
#        error['error':"Unable to retreive shoe templates."]
#        return HttpResponse(simplejson.dumps(error),mimetype="application/json")
#    return HttpResponse(simplejson.dumps(ret),mimetype="application/json")

#old method        
#def _create_shoe(request):
#    session = request.session
#    try:
#        account = session['account']
#        if account != None:
#            q = request.GET
#            splantId = int(q.__getitem__('plantId'))
#            ssole = int(q.__getitem__('sole'))
#            sbody = int(q.__getitem__('body'))
#            scolor = int(q.__getitem__('color'))
#            sprice = float(q.__getitem__('price'))
#            _costPrice = shoeMatCost['sole'] * ssole + shoeMatCost['body'] * sbody + shoeMatCost['color'] * scolor
#            shoe = Shoe(plantId=splantId,sole=ssole,body = sbody,color = scolor,price = sprice,qty=0,costPrice=_costPrice)
#            shoe.put()
#    except KeyError:
#        return redirect("/")
#    return redirect("/app/main.html")

#old method
#def _manufacture_shoe(request):
#    if request.session.__contains__('account'):
#        args = request.GET
#        if args.__contains__('shoeId') and args.__contains__('playerId'):
#            try:
#                playerId = int(args.__getitem__('playerId'))
#                plantId = int(args.__getitem__('plantId'))
#                sshoeId = int(args.__getitem__('shoeId'))
#                
#                plant = Plant.get_by_id(plantId)
#                shoe = Shoe.get_by_id(sshoeId)
#                if plant != None and plant.playerId == playerId:
#                    player = Player.get_by_id(playerId)
#                    number = int(args.__getitem__('qty'))
#                    stotalCost = shoe.costPrice * number
#                    toBeCapacity = plant.currentCapacity + number
#                    
#                    if toBeCapacity <= plant.productionLimit and stotalCost <= player.money:
#                        supplyTransaction = SupplyTransaction(shoeId=sshoeId,costPerUnit = shoe.costPrice,qty = number,totalCost=stotalCost,trxnDate = datetime.datetime.now().date())
#                        supplyTransaction.put()
#                        shoe.qty = shoe.qty + number
#                        shoe.put()
#                        player.money = player.money - stotalCost
#                        player.money_spent = player.money_spent + stotalCost
#                        player.networth = player.money + player.money_spent
#                        player.put()
#                        plant.currentCapacity += number
#                        plant.put()
#                    else:
#                        return HttpResponse("not enough cap")
#                else:
#                    return HttpResponse("plant is none or plant does not belongs to playerId")
#            except ValueError:
#                return redirect("/error?error=ValueError")
#        else:
#            return HttpResponse("no values")
#    else:
#        #return redirect("/index")
#        return HttpResponse("error no account")
#    return redirect("/app/main.html")
#Converting Python Objects to JSON format
#use simplejson.dumps(obj.__dict__)
#the resulting JSON string for the Account class is as follows:
#{"_email": "test", "_money": 1000000.0, "_parent_key": null, "_parent": null, "_entity": {"money": 1000000.0, "email": "test", "networth": 0.0}, "_app": null, "_Model__namespace": "", "_networth": 0.0}
#in angular, use > response._entity to get the account JSON object
コード例 #4
0
ファイル: views.py プロジェクト: battleshoe/battleshoe
def system_buy_shoes(request):
    '''
    Check the logged in user
    
    '''
    user = users.get_current_user()
    marketing = 1
    
    dd = []
    if user:
        
        islandQuery = Island.all()
        islandCount = islandQuery.count()
        islands = islandQuery.fetch(islandCount)
        
        for island in islands:
            islandId = island.key().id()
            playerQuery = Player.gql("WHERE islandId = :1",islandId)
            numPlayers = playerQuery.count()
            
            plantQuery = Plant.gql("WHERE islandId = :1",islandId)
            plantCount = plantQuery.count()
            plants = plantQuery.fetch(plantCount)
            
            for plant in plants:
                plantId = plant.key().id()
                plantRegion = plant.region
                shoeQuery = Shoe.gql("WHERE plantId = :1",plantId)
                shoeCount = shoeQuery.count()
                shoes = shoeQuery.fetch(shoeCount)
                
                for shoe in shoes:
                    body = shoe.body
                    sole = shoe.sole
                    color = shoe.color
                    qty = shoe.qty
                    attractiveness = math.fabs((0.75*sole + body + 1.25 * color) / 3)
                    saleRegion = ""
                    
                    #randomly select sale-to-region
                    i = random.randint(1,4)
                    if i == 1:
                        saleRegion = "north"
                    elif i == 2:
                        saleRegion = "east"
                    elif i == 3:
                        saleRegion = "west"
                    elif i == 4:
                        saleRegion = "south"
                    
                    _shippingcost = shippingCost[plantRegion][saleRegion]
                    price = shoe.price + _shippingcost
                    
                    salesVolume = int(math.ceil(numPlayers * math.pow((attractiveness*marketing/price),2)))
                    
                    if salesVolume > qty:
                        salesVolume = qty
                    
                    shoe.qty = shoe.qty - salesVolume
                    shoe.put()
                    dd.append(shoe.key().id())
                    dd.append(salesVolume)
                    n = {'count':len(dd)}
                    totalShippingCost = salesVolume * _shippingcost
                    totalRevenue = salesVolume * shoe.price
                     
                    player = Player.get_by_id(plant.playerId)
                    player.money = player.money - totalShippingCost + totalRevenue
                    player.money_spent = player.money_spent + totalShippingCost
                    player.networth = player.money + player.money_spent
                    player.put()
                    
                    plant.currentCapacity = plant.currentCapacity - salesVolume
                    plant.put()
                    
                    demandTransaction = DemandTransaction(shoeId = shoe.key().id(),salePrice = shoe.price,shippingCost = _shippingcost,qty = salesVolume)
                    demandTransaction.put()
    else:
        return redirect(users.create_login_url("/system_buy_shoes"))
    return HttpResponse(simplejson.dumps(n),mimetype="application/json")