Ejemplo n.º 1
0
class IndustryJobHistory(models.Model):
    status = models.IntegerField(null=True)
    startDate = custom.DateTimeField()
    endDate = custom.DateTimeField()
    probability = models.DecimalField(max_digits=4,
                                      decimal_places=2,
                                      null=True)
    blueprintTypeName = models.CharField(max_length=255, blank=True, null=True)
    runs = models.IntegerField(null=True)
    outputLocationID = models.BigIntegerField()
    activityID = models.IntegerField()
    cost = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    blueprintTypeID = models.IntegerField(null=True)
    timeInSeconds = models.IntegerField()
    productTypeID = models.IntegerField(null=True)
    completedDate = custom.DateTimeField(null=True)
    completedCharacterID = models.IntegerField(null=True)
    installerName = models.CharField(max_length=255)
    installerID = models.BigIntegerField()
    facilityID = models.BigIntegerField()
    pauseDate = custom.DateTimeField(null=True)
    solarSystemName = models.CharField(max_length=255)
    stationID = models.BigIntegerField(null=True)
    jobID = models.BigIntegerField()
    teamID = models.IntegerField(null=True)
    productTypeName = models.CharField(max_length=255, blank=True, null=True)
    blueprintLocationID = models.BigIntegerField(null=True)
    blueprintID = models.BigIntegerField(null=True)
    solarSystemID = models.IntegerField()
    licensedRuns = models.IntegerField(null=True)

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('owner', 'jobID')
Ejemplo n.º 2
0
class MarketOrder(models.Model):
    orderID = models.BigIntegerField()
    typeID = models.IntegerField()
    typeName = models.CharField(max_length=255, null=True)
    volEntered = models.BigIntegerField()
    minVolume = models.BigIntegerField()
    charID = models.BigIntegerField()
    accountKey = models.IntegerField(default=1000)
    issued = custom.DateTimeField()
    bid = models.BooleanField(default=False)
    range = models.IntegerField()
    escrow = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    stationID = models.BigIntegerField()
    orderState = models.IntegerField()
    volRemaining = models.BigIntegerField()
    duration = models.IntegerField()
    price = models.DecimalField(max_digits=30, decimal_places=2)

    owner = models.ForeignKey('CharacterSheet')

    def update_from_api(self, sheet, handler):
        try:
            self.typeName = InvType.objects.get(pk=self.typeID).typeName
        except InvType.DoesNotExist:
            log.warning('TypeID {0} does not exist.'.format(self.typeID))
            self.typeName = self.typeID
        self.save()

    class Meta(object):
        unique_together = ('owner', 'orderID')
Ejemplo n.º 3
0
class MemberSecurityLog(models.Model):
    changeTime = custom.DateTimeField()
    issuerID = models.IntegerField()
    issuerName = models.CharField(max_length=255)
    characterID = models.IntegerField()
    characterName = models.CharField(max_length=255)
    roleLocationType = models.CharField(max_length=255)
    oldRoles = JSONField(default=[])
    newRoles = JSONField(default=[])

    owner = models.ForeignKey(CorporationSheet)

    def update_from_api(self, item, *args, **kwargs):
        old_roles = []
        new_roles = []
        for role in item.oldRoles:
            old_roles.append({
                'roleID': role.roleID,
                'roleName': role.roleName
            })
        for role in item.newRoles:
            new_roles.append({
                'roleID': role.roleID,
                'roleName': role.roleName
            })
        self.oldRoles = old_roles
        self.newRoles = new_roles

    class Meta(object):
        unique_together = ('owner', 'changeTime', 'characterID',
                           'roleLocationType')
Ejemplo n.º 4
0
class Notification(models.Model):
    typeID = models.IntegerField()
    notificationID = models.IntegerField(db_index=True)
    sentDate = custom.DateTimeField()
    read = models.BooleanField(default=False)
    senderName = models.CharField(max_length=255)
    senderID = models.IntegerField()
    raw_message = models.TextField(null=True)
    parsed_message = models.TextField(null=True)
    broken = models.BooleanField(default=False)

    owner = models.ForeignKey('CharacterSheet')

    def __unicode__(self):
        if self.typeID in api_parser.NOTIFICATION_CODES:
            return u'{0} -> {1}'.format(
                self.senderName, api_parser.NOTIFICATION_CODES[self.typeID])
        else:
            return u'{0} -> {1}'.format(self.senderName, self.typeID)

    class Meta(object):
        unique_together = ('owner', 'notificationID')

    def update_from_api(self, notification, handler):
        self.reparse()

    def reparse(self):
        self.parsed_message = api_parser.parse_notification(
            self.typeID, self.raw_message, self.notificationID)
        self.save()
Ejemplo n.º 5
0
class AssetList(models.Model):
    items = JSONField()
    retrieved = custom.DateTimeField()
    owner = models.ForeignKey('CharacterSheet')

    def __unicode__(self):
        return "{0}'s assets ({1})".format(self.owner, self.retrieved)
Ejemplo n.º 6
0
class MemberTracking(models.Model):
    characterID = models.IntegerField()
    name = models.CharField(max_length=255)
    title = models.CharField(max_length=255, blank=True, default='')
    startDateTime = custom.DateTimeField()
    logonDateTime = custom.DateTimeField(null=True)
    logoffDateTime = custom.DateTimeField()
    locationID = models.IntegerField()
    location = models.CharField(max_length=255)
    shipTypeID = models.IntegerField()
    shipType = models.CharField(max_length=255, blank=True, default='')
    roles = models.BigIntegerField(default=0)
    grantableRoles = models.BigIntegerField(default=0)

    owner = models.ForeignKey(CorporationSheet)

    class Meta(object):
        unique_together = ('owner', 'characterID')
Ejemplo n.º 7
0
class Research(models.Model):
    pointsPerDay = models.DecimalField(max_digits=10, decimal_places=2)
    researchStartDate = custom.DateTimeField()
    skillTypeID = models.IntegerField()
    agentID = models.IntegerField()
    remainderPoints = models.DecimalField(max_digits=20, decimal_places=10)

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('owner', 'agentID')
Ejemplo n.º 8
0
class Medal(models.Model):
    medalID = models.BigIntegerField()
    title = models.CharField(max_length=255, null=True)
    description = models.TextField(blank=True, default='')
    created = custom.DateTimeField()
    creatorID = models.IntegerField()

    owner = models.ForeignKey(CorporationSheet)

    class Meta(object):
        unique_together = ('medalID', 'owner')
Ejemplo n.º 9
0
class UniverseUpdate(models.Model):
    apicall = models.CharField(max_length=50)
    last_update = models.DateTimeField(null=True)
    cached_until = custom.DateTimeField(null=True)

    def updated(self, api):
        self.last_update = datetime.fromtimestamp(api._meta.currentTime,
                                                  tz=UTC)
        self.cached_until = datetime.fromtimestamp(api._meta.cachedUntil,
                                                   tz=UTC)
        self.save()
Ejemplo n.º 10
0
class ContractBid(models.Model):
    bidID = models.BigIntegerField()
    contractID = models.BigIntegerField()
    bidderID = models.BigIntegerField()
    dateBid = custom.DateTimeField()
    amount = models.DecimalField(max_digits=30, decimal_places=2, null=True)

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('bidID', 'contractID', 'owner')
Ejemplo n.º 11
0
class ContactNotification(models.Model):
    notificationID = models.BigIntegerField()
    senderID = models.IntegerField()
    senderName = models.CharField(max_length=255)
    messageData = models.TextField(blank='', default='')
    sentDate = custom.DateTimeField()

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('owner', 'notificationID')
Ejemplo n.º 12
0
class MemberMedal(models.Model):
    medalID = models.BigIntegerField()
    characterID = models.BigIntegerField()
    reason = models.TextField(blank=True, default='')
    status = models.CharField(max_length=10)
    issuerID = models.BigIntegerField()
    issued = custom.DateTimeField()

    owner = models.ForeignKey(CorporationSheet)

    class Meta(object):
        unique_together = ('owner', 'medalID', 'characterID')
Ejemplo n.º 13
0
class SkillQueue(models.Model):
    typeID = models.IntegerField()
    endTime = custom.DateTimeField(null=True)
    startTime = custom.DateTimeField(null=True)
    level = models.IntegerField()
    queuePosition = models.IntegerField()
    startSP = models.IntegerField()
    endSP = models.IntegerField()
    typeName = models.CharField(max_length=255, null=True)

    owner = models.ForeignKey('CharacterSheet', related_name='skillQueue')

    def update_from_api(self, sheet, handler):
        try:
            self.typeName = InvType.objects.get(pk=self.typeID).typeName
        except InvType.DoesNotExist:
            self.typeName = self.typeID
        self.save()

    class Meta(object):
        unique_together = ('owner', 'typeID', 'level')
Ejemplo n.º 14
0
class Contract(models.Model):
    status = models.CharField(max_length=50)
    startStationID = models.IntegerField(null=True)
    dateCompleted = custom.DateTimeField(null=True)
    collateral = models.DecimalField(max_digits=30,
                                     decimal_places=2,
                                     null=True)
    assigneeID = models.IntegerField(null=True)
    issuerID = models.IntegerField()
    price = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    endStationID = models.IntegerField(null=True)
    buyout = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    dateExpired = custom.DateTimeField()
    availability = models.CharField(max_length=10)
    numDays = models.IntegerField(null=True)
    volume = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    title = models.CharField(max_length=255)
    acceptorID = models.IntegerField(null=True)
    forCorp = models.BooleanField(default=False)
    dateAccepted = custom.DateTimeField(null=True)
    dateIssued = custom.DateTimeField(null=True)
    reward = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    type = models.CharField(max_length=15)
    issuerCorpID = models.IntegerField()
    contractID = models.BigIntegerField()

    owner = models.ForeignKey('CharacterSheet')

    def get_items(self):
        return ContractItem.objects.filter(contract=self, owner=self.owner)

    def get_included_items(self):
        return self.get_items().filter(included=True)

    def get_wanted_items(self):
        return self.get_items().filter(included=False)

    class Meta(object):
        unique_together = ('owner', 'contractID')
Ejemplo n.º 15
0
class Medal(models.Model):
    medalID = models.BigIntegerField()
    status = models.CharField(max_length=10)
    issued = custom.DateTimeField()
    issuerID = models.IntegerField()
    reason = models.TextField(blank=True, default='')
    title = models.CharField(max_length=255, null=True)
    corporationID = models.IntegerField(null=True)
    description = models.TextField(blank=True, default='')

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('owner', 'medalID')
Ejemplo n.º 16
0
class SkillInTraining(models.Model):
    trainingStartSP = models.IntegerField(null=True)
    trainingTypeID = models.IntegerField(null=True)
    trainingDestinationSP = models.IntegerField(null=True)
    currentTQTime = custom.DateTimeField(null=True)
    trainingEndTime = custom.DateTimeField(null=True)
    skillInTraining = models.BooleanField(default=True)
    trainingStartTime = custom.DateTimeField(null=True)
    trainingToLevel = models.IntegerField(null=True)
    typeName = models.CharField(max_length=255, null=True)

    owner = models.ForeignKey('CharacterSheet', related_name='skillInTraining')

    def typeID(self):
        return self.trainingTypeID

    def update_from_api(self, sheet, handler):
        try:
            self.typeName = InvType.objects.get(
                pk=self.trainingTypeID).typeName
            self.save()
        except:
            pass
Ejemplo n.º 17
0
class UpcomingCalendarEvent(models.Model):
    eventID = models.IntegerField()
    eventTitle = models.CharField(max_length=255, blank=True, null=True)
    importance = models.BooleanField(default=False)
    response = models.CharField(max_length=20)
    ownerName = models.CharField(max_length=255, blank=True)
    duration = models.IntegerField()
    ownerID = models.IntegerField()
    eventDate = custom.DateTimeField()
    eventText = models.TextField(blank=True, default='')
    ownerTypeID = models.IntegerField()
    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('owner', 'eventID')
Ejemplo n.º 18
0
class WalletTransaction(models.Model):
    TRANSACTION_TYPES = (('b', 'Buy'), ('s', 'Sell'))
    TRANSACTION_ISSUER = (('p', 'Personal'), ('c', 'Corporation'))

    typeID = models.IntegerField(null=True)
    clientTypeID = models.IntegerField(null=True)
    transactionFor = models.CharField(max_length=1,
                                      choices=TRANSACTION_ISSUER,
                                      blank=True,
                                      null=True)
    price = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    clientID = models.BigIntegerField(null=True)
    journalTransactionID = models.BigIntegerField(null=True)
    typeName = models.CharField(max_length=255, blank=True, null=True)
    stationID = models.IntegerField(null=True)
    stationName = models.CharField(max_length=255, blank=True, null=True)
    transactionID = models.BigIntegerField(null=True)
    quantity = models.IntegerField(null=True)
    transactionDateTime = custom.DateTimeField(null=True)
    clientName = models.CharField(max_length=255, blank=True, null=True)
    transactionType = models.CharField(max_length=1,
                                       choices=TRANSACTION_TYPES,
                                       blank=True,
                                       null=True)

    owner = models.ForeignKey('CharacterSheet')

    def client_type(self):
        if self.clientTypeID == 2:
            return 'corp'
        else:
            return 'char'

    def update_from_api(self, transaction, handler):
        if transaction.transactionType == 'buy':
            self.transactionType = 'b'
        else:
            self.transactionType = 's'
        if transaction.transactionFor == 'personal':
            self.transactionFor = 'p'
        else:
            self.transactionFor = 'c'
        self.save()

    class Meta(object):
        unique_together = ('owner', 'transactionID')
Ejemplo n.º 19
0
class PlanetaryColony(models.Model):
    lastUpdate = custom.DateTimeField()
    solarSystemName = models.CharField(max_length=100)
    planetName = models.CharField(max_length=255)
    upgradeLevel = models.IntegerField()
    numberOfPins = models.IntegerField()
    planetID = models.IntegerField()
    ownerName = models.CharField(max_length=255)
    ownerID = models.IntegerField()
    planetRypeID = models.IntegerField()
    solarSystemID = models.IntegerField()
    planetTypeName = models.CharField(max_length=50)

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        verbose_name_plural = "PlanetaryColonies"
        unique_together = ('owner', 'planetID')
Ejemplo n.º 20
0
class APIUpdate(models.Model):
    apicall = models.ForeignKey(APICall)
    apikey = models.ForeignKey(APIKey)
    owner = models.IntegerField()
    last_update = models.DateTimeField(null=True)
    cached_until = custom.DateTimeField(null=True)

    def updated(self, api):
        self.last_update = datetime.fromtimestamp(api._meta.currentTime, tz=UTC)
        self.cached_until = datetime.fromtimestamp(api._meta.cachedUntil, tz=UTC)
        self.save()

    def __unicode__(self):
        return u'{0} {1} {2}'.format(self.apicall,
                                     self.apikey,
                                     self.owner)

    class Meta(object):
        unique_together = ('apicall', 'apikey', 'owner')
Ejemplo n.º 21
0
class WalletTransaction(models.Model):
    typeID = models.IntegerField()
    clientTypeID = models.IntegerField()
    transactionFor = models.CharField(max_length=11)
    price = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    clientID = models.BigIntegerField()
    journalTransactionID = models.BigIntegerField()
    typeName = models.CharField(max_length=255, blank=True, default='')
    stationID = models.BigIntegerField()
    stationName = models.CharField(max_length=255, blank=True, default='')
    transactionID = models.BigIntegerField(null=True)
    quantity = models.IntegerField()
    transactionDateTime = custom.DateTimeField()
    clientName = models.CharField(max_length=255, blank=True, default='')
    transactionType = models.CharField(max_length=4)

    owner = models.ForeignKey(CorporationSheet)

    class Meta(object):
        unique_together = ('owner', 'transactionID')
Ejemplo n.º 22
0
class Mail(models.Model):
    messageID = models.BigIntegerField(primary_key=True)
    title = models.CharField(max_length=255, blank=True, null=True)
    senderName = models.CharField(max_length=255, blank=True, null=True)
    senderID = models.IntegerField()
    sentDate = custom.DateTimeField()
    parsed_message = models.TextField(null=True)
    read = models.BooleanField(default=False)
    owner = models.ForeignKey(Capsuler)
    receivers = JSONField(default=[], null=True)
    relevancy = models.FloatField(default=1.0)

    objects = MailManager()

    def __unicode__(self):
        return self.title


    class Meta(object):
        managed = False
Ejemplo n.º 23
0
class ContainerLog(models.Model):
    itemID = models.BigIntegerField()
    typeID = models.IntegerField(null=True)
    itemTypeID = models.IntegerField()
    actorName = models.CharField(max_length=255)
    flag = models.IntegerField()
    locationID = models.BigIntegerField()
    logTime = custom.DateTimeField()
    passwordType = models.CharField(max_length=9, default='', blank=True)
    action = models.CharField(max_length=50)
    actorID = models.BigIntegerField()
    quantity = models.BigIntegerField(null=True)

    owner = models.ForeignKey(CorporationSheet)

    def update_from_api(self, item, handler):
        if not item.typeID:
            self.typeID = None

    class Meta(object):
        unique_together = ('logTime', 'itemID', 'owner')
Ejemplo n.º 24
0
class Alliance(models.Model):
    closed = models.BooleanField(default=False)
    updated = models.DateTimeField(auto_now=True)
    name = models.CharField(max_length=255)
    shortName = models.CharField(max_length=10)
    allianceID = models.IntegerField(primary_key=True)
    executorCorpID = models.IntegerField(null=True)
    memberCount = models.IntegerField(null=True)
    startDate = custom.DateTimeField(null=True)
    endDate = models.DateField(null=True)

    def __unicode__(self):
        return self.name

    def update_from_api(self, result, handler):
        EveName.objects.register(result.allianceID, result.name)
        self.closed = False
        self.save()
        current_members = []
        if hasattr(result, 'memberCorporations'):
            for memberData in result.memberCorporations:
                member, created = AllianceMember.objects.get_or_create(
                    alliance=self,
                    corporationID=memberData.corporationID,
                    startDate=memberData.startDate)
                if created:
                    member.save()
                current_members.append(memberData.corporationID)
            previous_members = AllianceMember.objects.filter(alliance=self) \
                .exclude(corporationID__in=current_members)
            for exmember in previous_members:
                exmember.endDate = datetime.now(tz=UTC)
                exmember.save()
        else:
            exmembers = AllianceMember.objects.filter(alliance=self,
                                                      endDate=None)
            for exmember in exmembers:
                exmember.endDate = datetime.now(tz=UTC)
                exmember.save()
Ejemplo n.º 25
0
class WalletJournal(models.Model):
    taxReceiverID = models.CharField(max_length=255, blank=True, null=True)
    argName1 = models.CharField(max_length=255, blank=True, null=True)
    reason = models.CharField(max_length=255, blank=True, null=True)
    date = custom.DateTimeField()
    refTypeID = models.IntegerField(db_index=True)
    refID = models.BigIntegerField()
    ownerID2 = models.IntegerField(null=True)
    taxAmount = models.CharField(max_length=255, blank=True, null=True)
    ownerID1 = models.IntegerField(null=True)
    argID1 = models.IntegerField(null=True)
    owner1TypeID = models.IntegerField(null=True)
    ownerName2 = models.CharField(max_length=255, blank=True, null=True)
    owner2TypeID = models.IntegerField(null=True)
    ownerName1 = models.CharField(max_length=255, blank=True, null=True)
    amount = models.DecimalField(max_digits=30, decimal_places=2, null=True)
    balance = models.DecimalField(max_digits=30, decimal_places=2, null=True)

    owner = models.ForeignKey('CharacterSheet')

    class Meta(object):
        unique_together = ('refID', 'owner')
Ejemplo n.º 26
0
class AllianceMember(models.Model):
    alliance = models.ForeignKey(Alliance)
    corporationID = models.IntegerField()
    startDate = custom.DateTimeField()
    endDate = models.DateField(null=True)
Ejemplo n.º 27
0
class MailMessage(models.Model):
    messageID = models.BigIntegerField(primary_key=True)
    title = models.CharField(max_length=255, blank=True, null=True)
    senderName = models.CharField(max_length=255, blank=True, null=True)
    senderID = models.IntegerField()
    sentDate = custom.DateTimeField()
    raw_message = models.TextField(null=True)
    parsed_message = models.TextField(null=True)
    broken = models.BooleanField(default=False)
    receivers = JSONField(default=[], null=True)

    owners = models.ManyToManyField(CharacterSheet)

    def __unicode__(self):
        return self.title

    def populate_receivers(self):
        new_receivers = []
        if not self.receivers:
            self.receivers = []
        for entity in self.receivers:
            if not entity['type'] == 2:
                name = EveName.objects.get_name(entity['id'])
            else:
                try:
                    mailing_list = MailingList.objects.get(pk=entity['id'])
                    name = mailing_list.displayName
                except:
                    name = 'Mailing list {0}'.format(entity['id'])
            new_receivers.append({
                'name': name,
                'id': entity['id'],
                'type': entity['type']
            })
        self.receivers = new_receivers

    def update_from_api(self, msg, handler):
        def purge(l):
            o = []
            for i in l:
                if i == u'' or not i:
                    continue
                o.append(i)
            return o

        lists = unicode(msg.toListID).split(',')
        characters = unicode(msg.toCharacterIDs).split(',')
        corpalls = unicode(msg.toCorpOrAllianceID).split(',')

        api_receivers = (
            (2, purge(lists)),
            (0, purge(characters)),
            (1, purge(corpalls)),
        )
        recipients = []

        for receiver_type, receiverIDs in api_receivers:
            for receiverID in receiverIDs:
                if not receiver_type == 2:
                    EveName.objects.get_or_create(pk=receiverID)
                recipients.append({
                    'name': receiverID,
                    'id': receiverID,
                    'type': receiver_type
                })
        self.receivers = recipients

        if self.raw_message and not self.parsed_message:
            self.parse_message()

        self.save()

    def parse_message(self):
        self.parsed_message = parse_evemail(self.raw_message)
Ejemplo n.º 28
0
class CharacterSheet(models.Model):
    GENDER = (('Male', 'Male'), ('Female', 'Female'))

    owner_key = models.ForeignKey(APIKey, null=True)
    owner = models.ForeignKey(Capsuler)
    enabled = models.BooleanField(default=False)

    # From the api
    characterID = models.IntegerField(primary_key=True)  # auto
    name = models.CharField(max_length=255)  # auto
    corporationID = models.IntegerField()  # auto
    corporationName = models.CharField(max_length=255)  # auto
    bloodLine = models.CharField(max_length=50)  # auto
    factionID = models.IntegerField(null=True, default=None)  # auto
    factionName = models.CharField(max_length=100, null=True,
                                   default=None)  # auto
    allianceName = models.CharField(max_length=255,
                                    blank=True,
                                    null=True,
                                    default=None)  # auto
    ancestry = models.CharField(max_length=100)  # auto
    balance = models.DecimalField(max_digits=30, decimal_places=2,
                                  null=True)  # auto
    DoB = custom.DateTimeField()  # auto
    gender = models.CharField(max_length=6, choices=GENDER)  # auto
    race = models.CharField(max_length=20)  # auto
    allianceID = models.IntegerField(null=True)  # auto
    cloneJumpDate = custom.DateTimeField(null=True)
    freeRespecs = models.IntegerField(default=0)
    lastRespecDate = custom.DateTimeField(null=True)
    lastTimedRespec = custom.DateTimeField(null=True)
    freeSkillPoints = models.IntegerField(default=0)
    homeStationID = models.IntegerField(default=0)
    jumpActivation = custom.DateTimeField(null=True)
    jumpFatigue = custom.DateTimeField(null=True)
    jumpLastUpdate = custom.DateTimeField(null=True)
    remoteStationDate = custom.DateTimeField(null=True)

    # Computed
    skillPoints = models.IntegerField(default=0)

    # Base attributes
    charisma = models.IntegerField()
    perception = models.IntegerField()
    intelligence = models.IntegerField()
    memory = models.IntegerField()
    willpower = models.IntegerField()

    objects = CharacterSheetManager()

    def homeStation(self):
        return get_location_name(self.homeStationID)

    def __unicode__(self):
        return self.name

    def update_from_api(self, sheet, handler):
        handler.autoparse(sheet,
                          self,
                          exclude=('skills', 'jumpClones', 'jumpCloneImplants',
                                   'implants'))
        handler.autoparse(sheet.attributes, self)
        EveName.objects.register(self.pk, self.name)

        self.enabled = True
        self.save()

        implants = handler.autoparse_list(sheet.implants,
                                          CharacterImplant,
                                          unique_together=('typeID', ),
                                          extra_selectors={'owner': self},
                                          owner=self,
                                          pre_save=True)
        CharacterImplant.objects.filter(owner=self).exclude(
            pk__in=implants).delete()

        handler.autoparse_list(sheet.skills,
                               Skill,
                               unique_together=('typeID', ),
                               extra_selectors={'owner': self},
                               owner=self,
                               pre_save=True)

        self.recalculate_skillpoints()

        clones = handler.autoparse_list(sheet.jumpClones,
                                        JumpClone,
                                        unique_together=('jumpCloneID', ),
                                        extra_selectors={'owner': self},
                                        owner=self,
                                        pre_save=True)
        JumpClone.objects.filter(owner=self).exclude(pk__in=clones).delete()

        clone_implants = handler.autoparse_list(
            sheet.jumpCloneImplants,
            JumpCloneImplant,
            unique_together=('jumpCloneID', 'typeID'),
            extra_selectors={'owner': self},
            owner=self,
            pre_save=False)
        JumpCloneImplant.objects.filter(owner=self).exclude(
            pk__in=clone_implants).delete()

        roles = handler.autoparse_list(sheet.corporationRoles,
                                       CorporationRole,
                                       unique_together=('roleID', 'roleName'),
                                       extra_selectors={
                                           'owner': self,
                                           'location': 'Global'
                                       },
                                       pre_save=True)

        roles += handler.autoparse_list(sheet.corporationRolesAtBase,
                                        CorporationRole,
                                        unique_together=('roleID', 'roleName'),
                                        extra_selectors={
                                            'owner': self,
                                            'location': 'Base'
                                        },
                                        pre_save=True)

        roles += handler.autoparse_list(sheet.corporationRolesAtOther,
                                        CorporationRole,
                                        unique_together=('roleID', 'roleName'),
                                        extra_selectors={
                                            'owner': self,
                                            'location': 'Other'
                                        },
                                        pre_save=True)

        roles += handler.autoparse_list(sheet.corporationRolesAtHQ,
                                        CorporationRole,
                                        unique_together=('roleID', 'roleName'),
                                        extra_selectors={
                                            'owner': self,
                                            'location': 'HQ'
                                        },
                                        pre_save=True)

        CorporationRole.objects.filter(owner=self).exclude(
            pk__in=roles).delete()

        titles = handler.autoparse_list(sheet.corporationTitles,
                                        CorporationTitle,
                                        unique_together=('titleID',
                                                         'titleName'),
                                        extra_selectors={'owner': self},
                                        pre_save=True)
        CorporationTitle.objects.filter(owner=self).exclude(
            pk__in=titles).delete()

        certificates = handler.autoparse_list(sheet.certificates,
                                              Certificate,
                                              unique_together=('titleID',
                                                               'titleName'),
                                              extra_selectors={'owner': self},
                                              pre_save=True)
        Certificate.objects.filter(owner=self).exclude(
            pk__in=certificates).delete()

    def recalculate_skillpoints(self):
        self.skillPoints = Skill.objects.filter(owner=self).aggregate(
            Sum('skillpoints'))['skillpoints__sum']
        self.save()
Ejemplo n.º 29
0
class Starbase(models.Model):
    STATES = {
        0: 'Unanchored',  # Also unanchoring? Has valid stateTimestamp.
        # Note that moonID is zero for unanchored Towers, but
        # locationID will still yield the solar system ID.
        1: 'Anchored/Offline',  # No time information stored.
        2: 'Onlining',  # Will be online at time = onlineTimestamp.
        3: 'Reinforced',  # Until time = stateTimestamp.
        4: 'Online'  # Continuously since time = onlineTimestamp.
    }

    itemID = models.BigIntegerField()
    typeID = models.IntegerField()
    standingOwnerID = models.IntegerField()
    stateTimestamp = custom.DateTimeField()
    state = models.IntegerField()
    onlineTimestamp = custom.DateTimeField()
    locationID = models.IntegerField(null=True)
    moonID = models.IntegerField(null=True)

    # General settings
    # They store access restrictions to the POS facilities on 2 bits:
    #     0: 'Starbase Config',
    #     1: 'Starbase Fuel Tech',
    #     2: 'Corporation Members',
    #     3: 'Alliance Members',
    # usageFlags
    #     access restrictions to the POS fuel bay are encoded in this 4 bit field.
    #     example: if usageFlags == 9 == 0b1001   -->   10    01
    #                                                  view  take
    #         0b10 == 2 --> 'Corporation Members' can view
    #         0b01 == 1 --> 'Starbase Fuel Tech' can take
    # deployFlags
    #     access restrictions to who is able to operate this POS are encoded in this 8 bit field.
    #     example: if usageFlags == 68 == 0b01000100  -->   01       00       01      00
    #                                                     anchor  unanchor  online  offline
    #         0b01 == 1 --> 'Starbase Fuel Tech' can anchor
    #         0b00 == 0 --> 'Starbase Config' can unanchor
    #         0b01 == 1 --> 'Starbase Fuel Tech' can online
    #         0b00 == 0 --> 'Starbase Config' can offline
    general_settings = JSONField(default={}, blank=True)

    # Combat settings
    combat_settings = JSONField(default={}, blank=True)

    owner = models.ForeignKey(CorporationSheet)

    def parse_general_settings(self, starbase_details):
        self.general_settings = {
            'usageFlags':
            getattr(starbase_details.generalSettings, 'usageFlags', 0),
            'deployFlags':
            getattr(starbase_details.generalSettings, 'deployFlags', 0),
            'allowCorporationMembers':
            getattr(starbase_details.generalSettings,
                    'allowCorporationMembers', 0),
            'allowAllianceMembers':
            getattr(starbase_details.generalSettings, 'allowAllianceMembers',
                    0),
        }

    def parse_combat_settings(self, starbase_details):
        self.combat_settings = {
            'useStandingsFrom': {
                'ownerID':
                starbase_details.combatSettings.useStandingsFrom.ownerID
            },
            'onStandingDrop': {
                'standing':
                starbase_details.combatSettings.onStandingDrop.standing
            },
            'onStatusDrop': {
                'enabled':
                starbase_details.combatSettings.onStatusDrop.enabled,
                'standing':
                starbase_details.combatSettings.onStatusDrop.enabled
            },
            'onAggression': {
                'enabled': starbase_details.combatSettings.onAggression.enabled
            },
            'onCorporationWar': {
                'enabled':
                starbase_details.combatSettings.onCorporationWar.enabled
            }
        }

    def get_state(self):
        return self.STATES[self.state]

    def get_fuel(self):
        return StarbaseFuel.objects.filter(starbase=self)

    class Meta(object):
        unique_together = ('itemID', 'owner')