def __populatePersonalMedals(self, pData):
        pData['dossierType'] = None
        pData['dossierCompDescr'] = None
        achievements = pData.get('dossierPopUps', [])
        pData['achievementsLeft'] = []
        pData['achievementsRight'] = []
        for achievementId, achieveValue in achievements:
            achieveName = DB_ID_TO_RECORD[achievementId][1]
            if achieveName in ('maxXP', 'maxFrags', 'maxDamage'):
                continue
            medalDict = getMedalDict(achieveName, rank=achieveValue)
            medalDict['unic'] = True
            type = medalDict['type']
            if type == 'markOfMastery':
                type = ''.join([type, str(medalDict.get('rank'))])
            medalDict['isEpic'] = type in ACHIEVEMENTS_WITH_RIBBON
            if medalDict['type'] in ACHIEVEMENTS:
                pData['achievementsRight'].append(medalDict)
            else:
                pData['achievementsLeft'].append(medalDict)

        pData['achievementsRight'].sort(key=lambda k: k['isEpic'], reverse=True)
        return
    def __populateTeamsData(self, pData, playersData, vehiclesData, battleType):
        squads = {1: {},
         2: {}}
        stat = {1: [],
         2: []}
        lastSquadId = 0
        squadManCount = 0
        playerSquadId = 0
        playerDBID = pData.get('accountDBID')
        for pId, pInfo in playersData.iteritems():
            row = None
            for vId, vInfo in vehiclesData.iteritems():
                if pId == vInfo.get('accountDBID'):
                    row = pInfo.copy()
                    row.update(vInfo)
                    row['vehicleId'] = vId
                    row['damageAssisted'] = row.get('damageAssistedTrack', 0) + row.get('damageAssistedRadio', 0)
                    row['statValues'] = self.__populateStatValues(row)
                    health = vInfo.get('health', 0)
                    percents = 0
                    if health > 0:
                        percents = math.ceil(health * 100 / float(health + vInfo.get('damageReceived', 0)))
                    row['healthPercents'] = percents
                    row['vehicleFullName'], row['vehicleName'], row['bigTankIcon'], row['tankIcon'], row['balanceWeight'] = self.__getVehicleData(vInfo.get('typeCompDescr', None))
                    row['realKills'] = vInfo.get('kills', 0) - vInfo.get('tkills', 0)
                    achievements = tuple(row.get('achievements', []))
                    row['medalsCount'] = len(achievements)
                    achievementsList = []
                    for achievementId in achievements:
                        medalDict = getMedalDict(DB_ID_TO_RECORD[achievementId][1], 0)
                        medalDict['unic'] = True
                        medalDict['isEpic'] = medalDict['type'] in ACHIEVEMENTS_WITH_RIBBON
                        achievementsList.append(medalDict)

                    achievementsList.sort(key=lambda k: k['isEpic'], reverse=True)
                    row['achievements'] = achievementsList
                    killerID = row.get('killerID', 0)
                    deathReason = row.get('deathReason', -1)
                    if deathReason > -1:
                        row['vehicleStateStr'] = i18n.makeString('#battle_results:common/vehicleState/dead{0}'.format(deathReason))
                        if killerID:
                            killerVehicle = vehiclesData.get(killerID, dict())
                            killerPlayerId = killerVehicle.get('accountDBID', None)
                            row['vehicleStateStr'] = '{0} ({1})'.format(row['vehicleStateStr'], self.__getPlayerName(killerPlayerId, playersData))
                    else:
                        row['vehicleStateStr'] = '#battle_results:common/vehicleState/alive'
                    break

            if row is None:
                row = pInfo.copy()
            row['playerId'] = pId
            row['userName'] = pInfo.get('name')
            row['playerClan'] = self.__getPlayerClan(pId, playersData)
            row['playerName'] = self.__getPlayerName(pId, playersData)
            row['isIGR'] = pInfo.get('igrType') != IGR_TYPE.NONE
            row['playerInfo'] = {}
            row['isSelf'] = playerDBID == pId
            if playerDBID == pId:
                playerSquadId = row.get('prebattleID', 0)
            team = row['team']
            prebattleID = row.get('prebattleID', 0)
            if battleType == ARENA_BONUS_TYPE.REGULAR and prebattleID:
                if not lastSquadId or lastSquadId != prebattleID:
                    squadManCount = 1
                    lastSquadId = prebattleID
                else:
                    squadManCount += 1
                if prebattleID not in squads[team].keys():
                    squads[team][prebattleID] = 1
                else:
                    squads[team][prebattleID] += 1
            stat[team].append(row)

        if battleType == ARENA_BONUS_TYPE.REGULAR:
            squadsSorted = IS_DEVELOPMENT and not squadManCount == len(playersData) and dict()
            squadsSorted[1] = sorted(squads[1].iteritems(), cmp=lambda x, y: cmp(x[0], y[0]))
            squadsSorted[2] = sorted(squads[2].iteritems(), cmp=lambda x, y: cmp(x[0], y[0]))
            squads[1] = [ id for id, num in squadsSorted[1] if 1 < num < 4 ]
            squads[2] = [ id for id, num in squadsSorted[2] if 1 < num < 4 ]
        for team in (1, 2):
            data = sorted(stat[team], cmp=self.__vehiclesComparator)
            sortIdx = len(data)
            for item in data:
                item['vehicleSort'] = sortIdx
                sortIdx -= 1
                if battleType == ARENA_BONUS_TYPE.REGULAR:
                    item['isOwnSquad'] = IS_DEVELOPMENT and not squadManCount == len(playersData) and (playerSquadId == item.get('prebattleID') if playerSquadId != 0 else False)
                    item['squadID'] = squads[team].index(item.get('prebattleID')) + 1 if item.get('prebattleID') in squads[team] else 0
                else:
                    item['squadID'] = 0
                    item['isOwnSquad'] = False

        return (stat[pData.get('team')], stat[pData.get('team') % 2 + 1])