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')
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')
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')
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()
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)
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')
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')
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')
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()
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')
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')
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')
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')
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')
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')
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
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')
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')
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')
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')
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')
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
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')
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()
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')
class AllianceMember(models.Model): alliance = models.ForeignKey(Alliance) corporationID = models.IntegerField() startDate = custom.DateTimeField() endDate = models.DateField(null=True)
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)
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()
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')